You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fg...@apache.org on 2010/01/20 19:51:16 UTC

svn commit: r901328 - in /incubator/chemistry/trunk/chemistry: chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g chemistry-tests/src/main/java/org/apache/chemistry/test/BasicTestCase.java

Author: fguillaume
Date: Wed Jan 20 18:51:16 2010
New Revision: 901328

URL: http://svn.apache.org/viewvc?rev=901328&view=rev
Log:
Allow parsing of SCORE() in queries

Modified:
    incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g
    incubator/chemistry/trunk/chemistry/chemistry-tests/src/main/java/org/apache/chemistry/test/BasicTestCase.java

Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g?rev=901328&r1=901327&r2=901328&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g Wed Jan 20 18:51:16 2010
@@ -96,8 +96,19 @@
         {
             $value = $column_reference.value;
         }
-//    | string_value_function
-//    | numeric_value_function
+    | ^(FUNC func_name arg*)
+        {
+            int func = $func_name.start.getType();
+            switch (func) {
+                case SCORE:
+                    $value = Double.valueOf(1);
+                    break;
+                // case ID:
+                // TODO provide extension points for other functions
+                default:
+                    throw new UnwantedTokenException(Token.INVALID_TOKEN_TYPE, input);
+            }
+        }
     ;
 
 column_reference returns [Object value]:
@@ -109,6 +120,9 @@
       }
     ;
 
+// multi_valued_column_reference returns [Object value]:
+//    ^(COL qualifier? column_name)
+
 qualifier:
       table_name
 //    | correlation_name
@@ -180,11 +194,11 @@
 
 predicate returns [boolean matches]
 @init {
-    List<Object> literals = new ArrayList<Object>();
+    List<Object> literals;
 }:
-      ^(UN_OP IS_NULL un_arg) { $matches = $un_arg.value == null; }
-    | ^(UN_OP IS_NOT_NULL un_arg) { $matches = $un_arg.value != null; }
-    | ^(BIN_OP bin_op arg1=bin_arg arg2=bin_arg)
+      ^(UN_OP IS_NULL arg) { $matches = $arg.value == null; }
+    | ^(UN_OP IS_NOT_NULL arg) { $matches = $arg.value != null; }
+    | ^(BIN_OP bin_op arg1=arg arg2=arg)
         {
             int token = $bin_op.start.getType();
             Object value1 = $arg1.value;
@@ -196,13 +210,21 @@
                 case NEQ:
                     $matches = value1 != null && value2 != null && ! value1.equals(value2);
                     break;
+                case LT:
+                case LTEQ:
+                case GT:
+                case GTEQ:
+                case LIKE:
+                case NOT_LIKE:
                 default:
                     throw new UnwantedTokenException(token, input);
             }
         }
-    | ^(FUNC func_name (literal { literals.add($literal.value); })*)
+    // | ^(BIN_OP_ANY bin_op_any arg mvc=multi_valued_column_reference)
+    | ^(FUNC bool_func_name { literals = new ArrayList<Object>(); }
+         (literal { literals.add($literal.value); })*)
         {
-            int func = $func_name.start.getType();
+            int func = $bool_func_name.start.getType();
             switch (func) {
                 case IN_FOLDER:
                     $matches = connection.isInFolder(data, literals.get(0));
@@ -220,37 +242,26 @@
         }
     ;
 
-un_arg returns [Object value]:
-    column_reference
-      {
-          $value = $column_reference.value;
-      }
-    ;
-
 bin_op:
     EQ | NEQ | LT | GT | LTEQ | GTEQ | LIKE | NOT_LIKE;
 
-bin_arg returns [Object value]
+func_name:
+    SCORE | ID;
+
+bool_func_name:
+    IN_FOLDER | IN_TREE | CONTAINS | ID;
+
+arg returns [Object value]
 @init {
-    List<Object> literals = new ArrayList<Object>();
+    List<Object> literals;
 }:
-      value_expression
-        {
-            $value = $value_expression.value;
-        }
-    | literal
-        {
-            $value = $literal.value;
-        }
-    | ^(LIST (literal { literals.add($literal.value); })+)
-        {
-            $value = literals;
-        }
+      v=value_expression { $value = $v.value; }
+    | l=literal { $value = $l.value; }
+    | ^(LIST { literals = new ArrayList<Object>(); }
+         (l=literal { literals.add($l.value); } )+)
+            { $value = literals; }
     ;
 
-func_name:
-    IN_FOLDER | IN_TREE | CONTAINS | ID;
-
 literal returns [Object value]:
       NUM_LIT
         {
@@ -279,6 +290,3 @@
 
 column_name:
     ID;
-
-multi_valued_column_name:
-    ID;

Modified: incubator/chemistry/trunk/chemistry/chemistry-tests/src/main/java/org/apache/chemistry/test/BasicTestCase.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-tests/src/main/java/org/apache/chemistry/test/BasicTestCase.java?rev=901328&r1=901327&r2=901328&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-tests/src/main/java/org/apache/chemistry/test/BasicTestCase.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-tests/src/main/java/org/apache/chemistry/test/BasicTestCase.java Wed Jan 20 18:51:16 2010
@@ -311,6 +311,11 @@
         res = conn.query("SELECT * FROM cmis:document WHERE CONTAINS('small')",
                 false);
         assertEquals(1, res.size());
+
+        // SCORE
+        res = conn.query("SELECT cmis:name, SCORE() FROM cmis:document WHERE CONTAINS('small')",
+                false);
+        assertEquals(1, res.size());
     }
 
     public void testGetObjectByPath() {