You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2013/02/10 09:24:29 UTC

svn commit: r1444504 [2/2] - in /chemistry/opencmis/trunk: chemistry-opencmis-samples/chemistry-opencmis-queryparser/ chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/ chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/ che...

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/AbstractQueryConditionProcessor.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/AbstractQueryConditionProcessor.java?rev=1444504&r1=1444503&r2=1444504&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/AbstractQueryConditionProcessor.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/AbstractQueryConditionProcessor.java Sun Feb 10 08:24:28 2013
@@ -18,118 +18,161 @@
  */
 package org.apache.chemistry.opencmis.inmemory.query;
 
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.GregorianCalendar;
 import java.util.List;
 
-import org.antlr.runtime.ANTLRInputStream;
-import org.antlr.runtime.CharStream;
-import org.antlr.runtime.CommonTokenStream;
-import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.TokenSource;
-import org.antlr.runtime.TokenStream;
-import org.antlr.runtime.tree.CommonTree;
-import org.antlr.runtime.tree.CommonTreeNodeStream;
 import org.antlr.runtime.tree.Tree;
 import org.apache.chemistry.opencmis.server.support.query.CalendarHelper;
 import org.apache.chemistry.opencmis.server.support.query.CmisQlStrictLexer;
-import org.apache.chemistry.opencmis.server.support.query.CmisQlStrictParser;
-import org.apache.chemistry.opencmis.server.support.query.CmisQlStrictParser_CmisBaseGrammar.query_return;
-import org.apache.chemistry.opencmis.server.support.query.CmisQueryWalker;
+import org.apache.chemistry.opencmis.server.support.query.PredicateWalkerBase;
 import org.apache.chemistry.opencmis.server.support.query.StringUtil;
 import org.apache.chemistry.opencmis.server.support.query.TextSearchLexer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public abstract class AbstractQueryConditionProcessor implements QueryConditionProcessor {
+public abstract class AbstractQueryConditionProcessor implements PredicateWalkerBase {
 
     private static final Logger LOG = LoggerFactory.getLogger(ProcessQueryTest.class);
     
-    public abstract void onStartProcessing(Tree whereNode);
-    public abstract void onStopProcessing();
+    protected abstract void onStartProcessing(Tree whereNode);
+    protected abstract void onStopProcessing();
 
     // Compare operators
-    public abstract void onEquals(Tree eqNode, Tree leftNode, Tree rightNode);
-    public abstract void onNotEquals(Tree neNode, Tree leftNode, Tree rightNode);
-    public abstract void onGreaterThan(Tree gtNode, Tree leftNode, Tree rightNode);
-    public abstract void onGreaterOrEquals(Tree geNode, Tree leftNode, Tree rightNode);
-    public abstract void onLessThan(Tree ltNode, Tree leftNode, Tree rightNode);
-    public abstract void onLessOrEquals(Tree leqNode, Tree leftNode, Tree rightNode);
+    protected void onPreEquals(Tree eqNode, Tree leftNode, Tree rightNode) {        
+    }
+    protected abstract void onEquals(Tree eqNode, Tree leftNode, Tree rightNode);
+    protected void onPostEquals(Tree eqNode, Tree leftNode, Tree rightNode) {        
+    }
 
-    // Boolean operators
-    public void onPreNot(Tree opNode, Tree leftNode) {
+    protected void onPreNotEquals(Tree neNode, Tree leftNode, Tree rightNode) {        
+    }
+    protected abstract void onNotEquals(Tree neNode, Tree leftNode, Tree rightNode);
+    protected void onPostNotEquals(Tree neNode, Tree leftNode, Tree rightNode) {        
+    }
+ 
+    protected void onPreGreaterThan(Tree gtNode, Tree leftNode, Tree rightNode) {        
+    }
+    protected abstract void onGreaterThan(Tree gtNode, Tree leftNode, Tree rightNode);
+    protected void onPostGreaterThan(Tree gtNode, Tree leftNode, Tree rightNode) {        
+    }
+
+    protected void onPreGreaterOrEquals(Tree geNode, Tree leftNode, Tree rightNode) {        
+    }
+    protected abstract void onGreaterOrEquals(Tree geNode, Tree leftNode, Tree rightNode);
+    protected void onPostGreaterOrEquals(Tree geNode, Tree leftNode, Tree rightNode) {        
+    }
+
+    protected void onPreLessThan(Tree ltNode, Tree leftNode, Tree rightNode)  {        
+    }
+    protected abstract void onLessThan(Tree ltNode, Tree leftNode, Tree rightNode);
+    protected void onPostLessThan(Tree ltNode, Tree leftNode, Tree rightNode) {        
+    }
+
+    protected void onPreLessOrEquals(Tree leqNode, Tree leftNode, Tree rightNode) {        
+    }
+    protected abstract void onLessOrEquals(Tree leqNode, Tree leftNode, Tree rightNode);
+    protected void onPostLessOrEquals(Tree leqNode, Tree leftNode, Tree rightNode) {        
     }
-    public abstract void onNot(Tree opNode, Tree leftNode);
-    public void onPostNot(Tree opNode, Tree leftNode) {
+
+    // Boolean operators
+    protected abstract void onNot(Tree opNode, Tree leftNode);
+    protected void onPostNot(Tree opNode, Tree leftNode) {
     }
-    public void onPreAnd(Tree opNode, Tree leftNode, Tree rightNode) {
+    protected void onPreAnd(Tree opNode, Tree leftNode, Tree rightNode) {
     }
-    public abstract void onAnd(Tree opNode, Tree leftNode, Tree rightNode);
-    public void onPostAnd(Tree opNode, Tree leftNode, Tree rightNode) {
+    protected abstract void onAnd(Tree opNode, Tree leftNode, Tree rightNode);
+    protected void onPostAnd(Tree opNode, Tree leftNode, Tree rightNode) {
     }
-    public void onPreOr(Tree opNode, Tree leftNode, Tree rightNode) {
+    protected void onPreOr(Tree opNode, Tree leftNode, Tree rightNode) {
     }
-    public abstract void onOr(Tree opNode, Tree leftNode, Tree rightNode);
-    public void onPostOr(Tree opNode, Tree leftNode, Tree rightNode) {
+    protected abstract void onOr(Tree opNode, Tree leftNode, Tree rightNode);
+    protected void onPostOr(Tree opNode, Tree leftNode, Tree rightNode) {
     }
 
     // Multi-value:
-    public abstract void onIn(Tree node, Tree colNode, Tree listNode);
-    public abstract void onNotIn(Tree node, Tree colNode, Tree listNode);
-    public abstract void onInAny(Tree node, Tree colNode, Tree listNode);
-    public abstract void onNotInAny(Tree node, Tree colNode, Tree listNode);
-    public abstract void onEqAny(Tree node, Tree literalNode, Tree colNode);
+    protected void onPreIn(Tree node, Tree colNode, Tree listNode) {        
+    }
+    protected abstract void onIn(Tree node, Tree colNode, Tree listNode);
+    protected void onPostIn(Tree node, Tree colNode, Tree listNode) {        
+    }
+
+    protected void onPreNotIn(Tree node, Tree colNode, Tree listNode) {        
+    }
+    protected abstract void onNotIn(Tree node, Tree colNode, Tree listNode);
+    protected void onPostNotIn(Tree node, Tree colNode, Tree listNode) {        
+    }
+
+    protected void onPreInAny(Tree node, Tree colNode, Tree listNode) {        
+    }
+    protected abstract void onInAny(Tree node, Tree colNode, Tree listNode);
+    protected void onPostInAny(Tree node, Tree colNode, Tree listNode) {        
+    }
+
+    protected void onPreNotInAny(Tree node, Tree colNode, Tree listNode) {        
+    }
+    protected abstract void onNotInAny(Tree node, Tree literalNode, Tree colNode);
+    protected void onPostNotInAny(Tree node, Tree colNode, Tree listNode) {        
+    }
+    
+    protected void onPreEqAny(Tree node, Tree literalNode, Tree colNode) {
+    }
+    protected abstract void onEqAny(Tree node, Tree literalNode, Tree colNode);
+    protected void onPostEqAny(Tree node, Tree literalNode, Tree colNode) {        
+    }
 
     // Null comparisons:
-    public abstract void onIsNull(Tree nullNode, Tree colNode);
-    public abstract void onIsNotNull(Tree notNullNode, Tree colNode);
+    protected abstract void onIsNull(Tree nullNode, Tree colNode);
+    protected void onPostIsNull(Tree nullNode, Tree colNode) {
+    }
 
+    protected abstract void onIsNotNull(Tree notNullNode, Tree colNode);
+    protected void onPostIsNotNull(Tree notNullNode, Tree colNode) {
+    }
+    
     // String matching:
-    public abstract void onIsLike(Tree node, Tree colNode, Tree stringNode);
-    public abstract void onIsNotLike(Tree node, Tree colNode, Tree stringNode);
+    protected void onPreIsLike(Tree node, Tree colNode, Tree stringNode) {
+    }
+    protected abstract void onIsLike(Tree node, Tree colNode, Tree stringNode);
+    protected void onPostIsLike(Tree node, Tree colNode, Tree stringNode) {
+    }
 
-    // Functions:
-    public abstract void onInFolder(Tree node, Tree colNode, Tree paramNode);
-    public abstract void onInTree(Tree node, Tree colNode, Tree paramNode);
-    public abstract void onScore(Tree node);
-    
-    public void onPreTextAnd(Tree node, List<Tree> conjunctionNodes) {
+    protected void onPreIsNotLike(Tree node, Tree colNode, Tree stringNode) {
     }
-    public abstract void onTextAnd(Tree node, List<Tree> conjunctionNodes);
-    public void onPostTextAnd(Tree node, List<Tree> conjunctionNodes) {
+    protected abstract void onIsNotLike(Tree node, Tree colNode, Tree stringNode);
+    protected void onPostIsNotLike(Tree node, Tree colNode, Tree stringNode) {
     }
-    public void onPreTextOr(Tree node, List<Tree> termNodes) {
+
+    protected abstract void onInFolder(Tree node, Tree colNode, Tree paramNode);
+    protected void onBetweenInFolder(Tree node, Tree colNode, Tree paramNode) {
     }
-    public abstract void onTextOr(Tree node, List<Tree> termNodes);
-    public void onPostTextOr(Tree node, List<Tree> termNodes) {
-    }
-    public abstract void onTextMinus(Tree node, Tree notNode);
-    public abstract void onTextWord(String word);
-    public abstract void onTextPhrase(String phrase);
-
-    // convenience method because everybody needs this piece of code
-    public static CmisQueryWalker getWalker(String statement) throws UnsupportedEncodingException, IOException, RecognitionException {
-        CharStream input = new ANTLRInputStream(new ByteArrayInputStream(statement.getBytes("UTF-8")));
-        TokenSource lexer = new CmisQlStrictLexer(input);
-        TokenStream tokens = new CommonTokenStream(lexer);
-        CmisQlStrictParser parser = new CmisQlStrictParser(tokens);
-        CommonTree parserTree; // the ANTLR tree after parsing phase
-
-        query_return parsedStatement = parser.query();
-//        if (parser.errorMessage != null) {
-//            throw new RuntimeException("Cannot parse query: " + statement + " (" + parser.errorMessage + ")");
-//        }
-        parserTree = (CommonTree) parsedStatement.getTree();
-
-        CommonTreeNodeStream nodes = new CommonTreeNodeStream(parserTree);
-        nodes.setTokenStream(tokens);
-        CmisQueryWalker walker = new CmisQueryWalker(nodes);
-        return walker;
+    protected void onPostInFolder(Tree node, Tree colNode, Tree paramNode) {
     }
 
+    protected abstract void onInTree(Tree node, Tree colNode, Tree paramNode);
+    protected void onBetweenInTree(Tree node, Tree colNode, Tree paramNode) {
+    }
+    protected void onPostInTree(Tree node, Tree colNode, Tree paramNode) {
+    }
+    
+    protected abstract void onScore(Tree node);
+    protected abstract void onColNode(Tree node);
+    
+    protected void onPreTextAnd(Tree node, List<Tree> conjunctionNodes) {
+    }
+    protected abstract void onTextAnd(Tree node, List<Tree> conjunctionNodes, int index);
+    protected void onPostTextAnd(Tree node, List<Tree> conjunctionNodes) {
+    }
+    protected void onPreTextOr(Tree node, List<Tree> termNodes) {
+    }
+    protected abstract void onTextOr(Tree node, List<Tree> termNodes, int index);
+    protected void onPostTextOr(Tree node, List<Tree> termNodes) {
+    }
+    protected abstract void onTextMinus(Tree node, Tree notNode);
+    protected void onPostTextMinus(Tree node, Tree notNode) {        
+    }
+    protected abstract void onTextWord(String word);
+    protected abstract void onTextPhrase(String phrase);
 
     // Base interface called from query parser
     public Boolean walkPredicate(Tree whereNode) {
@@ -144,12 +187,6 @@ public abstract class AbstractQueryCondi
     // ///////////////////////////////////////////////////////
     // Processing the WHERE clause
 
-    // default implementation for ^ains
-    public void onContains(Tree node, Tree typeNode, Tree searchExprNode) {
-        LOG.debug("evaluating text search node: " + searchExprNode);
-        evalTextSearchNode(searchExprNode);        
-    }
-
     protected void evalWhereNode(Tree node) {
         // Ensure that we receive only valid tokens and nodes in the where
         // clause:
@@ -158,38 +195,49 @@ public abstract class AbstractQueryCondi
         case CmisQlStrictLexer.WHERE:
             break; // ignore
         case CmisQlStrictLexer.EQ:
+            onPreEquals(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(0));
             onEquals(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(1));
+            onPostEquals(node, node.getChild(0), node.getChild(1));
             break;
         case CmisQlStrictLexer.NEQ:
+            onPreNotEquals(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(0));
             onNotEquals(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(1));
+            onPostNotEquals(node, node.getChild(0), node.getChild(1));
             break;
         case CmisQlStrictLexer.GT:
+            onPreGreaterThan(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(0));
             onGreaterThan(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(1));
+            onPostGreaterThan(node, node.getChild(0), node.getChild(1));
             break;
         case CmisQlStrictLexer.GTEQ:
+            onPreGreaterOrEquals(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(0));
             onGreaterOrEquals(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(1));
+            onPostGreaterOrEquals(node, node.getChild(0), node.getChild(1));
             break;
         case CmisQlStrictLexer.LT:
+            onPreLessThan(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(0));
             onLessThan(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(1));
+            onPostLessThan(node, node.getChild(0), node.getChild(1));
             break;
         case CmisQlStrictLexer.LTEQ:
+            onPreLessOrEquals(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(0));
             onLessOrEquals(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(1));
+            onPostLessOrEquals(node, node.getChild(0), node.getChild(1));
             break;
 
         case CmisQlStrictLexer.NOT:
-            onPreNot(node, node.getChild(0));
             onNot(node, node.getChild(0));
             evalWhereNode(node.getChild(0));
             onPostNot(node, node.getChild(0));
@@ -211,87 +259,141 @@ public abstract class AbstractQueryCondi
 
         // Multi-value:
         case CmisQlStrictLexer.IN:
+            onPreIn(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(0));
             onIn(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(1));
+            onPostIn(node, node.getChild(0), node.getChild(1));
             break;
         case CmisQlStrictLexer.NOT_IN:
+            onPreNotIn(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(0));
             onNotIn(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(1));
+            onPostNotIn(node, node.getChild(0), node.getChild(1));
             break;
         case CmisQlStrictLexer.IN_ANY:
+            onPreInAny(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(0));
             onInAny(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(1));
+            onPostInAny(node, node.getChild(0), node.getChild(1));
             break;
         case CmisQlStrictLexer.NOT_IN_ANY:
+            onPreNotInAny(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(0));
             onNotInAny(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(1));
+            onPostNotInAny(node, node.getChild(0), node.getChild(1));
             break;
         case CmisQlStrictLexer.EQ_ANY:
+            onPreEqAny(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(0));
             onEqAny(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(1));
+            onPostEqAny(node, node.getChild(0), node.getChild(1));
             break;
 
         // Null comparisons:
         case CmisQlStrictLexer.IS_NULL:
             onIsNull(node, node.getChild(0));
             evalWhereNode(node.getChild(0));
+            onPostIsNull(node, node.getChild(0));
             break;
         case CmisQlStrictLexer.IS_NOT_NULL:
             onIsNotNull(node, node.getChild(0));
             evalWhereNode(node.getChild(0));
+            onPostIsNotNull(node, node.getChild(0));
             break;
 
         // String matching
         case CmisQlStrictLexer.LIKE:
+            onPreIsLike(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(0));
             onIsLike(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(1));
+            onPostIsLike(node, node.getChild(0), node.getChild(1));
             break;
         case CmisQlStrictLexer.NOT_LIKE:
+            onPreIsNotLike(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(0));
             onIsNotLike(node, node.getChild(0), node.getChild(1));
             evalWhereNode(node.getChild(1));
+            onPostIsNotLike(node, node.getChild(0), node.getChild(1));
             break;
 
         // Functions
         case CmisQlStrictLexer.CONTAINS:
-            onContains(node, null, node.getChild(0));
+            Tree typeNode = node.getChildCount() == 1 ? null : node.getChild(0);
+            Tree textSearchNode = node.getChildCount() == 1 ? node.getChild(0) : node.getChild(1);
+
+            onPreContains(node, typeNode, textSearchNode);
+            if (node.getChildCount() > 1) {
+                evalWhereNode(typeNode);
+                onBetweenContains(node, typeNode, textSearchNode);
+            }
+            onContains(node, typeNode, textSearchNode);                
             break;
         case CmisQlStrictLexer.IN_FOLDER:
             if (node.getChildCount() == 1) {
                 onInFolder(node, null, node.getChild(0));
                 evalWhereNode(node.getChild(0));
+                onPostInFolder(node, null, node.getChild(0));
             } else {
-                evalWhereNode(node.getChild(0));
                 onInFolder(node, node.getChild(0), node.getChild(1));
+                evalWhereNode(node.getChild(0));
+                onBetweenInFolder(node, node.getChild(0), node.getChild(1));
                 evalWhereNode(node.getChild(1));
+                onPostInFolder(node, node.getChild(0), node.getChild(1));
             }
             break;
         case CmisQlStrictLexer.IN_TREE:
             if (node.getChildCount() == 1) {
                 onInTree(node, null, node.getChild(0));
                 evalWhereNode(node.getChild(0));
+                onPostInTree(node, null, node.getChild(0));
             } else {
-                evalWhereNode(node.getChild(0));
                 onInTree(node, node.getChild(0), node.getChild(1));
+                evalWhereNode(node.getChild(0));
+                onBetweenInTree(node, node.getChild(0), node.getChild(1));
                 evalWhereNode(node.getChild(1));
+                onPostInTree(node, node.getChild(0), node.getChild(1));
             }
             break;
         case CmisQlStrictLexer.SCORE:
             onScore(node);
             break;
-
+        case CmisQlStrictLexer.COL:
+            onColNode(node);
+            break;
+        case CmisQlStrictLexer.BOOL_LIT:
+        case CmisQlStrictLexer.NUM_LIT:
+        case CmisQlStrictLexer.STRING_LIT:
+        case CmisQlStrictLexer.TIME_LIT:
+            onLiteral(node);
+            break;
+        case CmisQlStrictLexer.IN_LIST:
+            onLiteralList(node);
+            break;
+        case CmisQlStrictLexer.ID:
+            onId(node);
+            break;
         default:
             // do nothing;
         }
     }
 
-    protected void evalTextSearchNode(Tree node) {
+    protected void onPreContains(Tree node, Tree typeNode, Tree searchExprNode) {        
+    }
+    
+    protected void onContains(Tree node, Tree typeNode, Tree searchExprNode) {
+        evalTextSearchNode(typeNode, searchExprNode);        
+    }
+    
+    protected void onBetweenContains(Tree node, Tree typeNode, Tree searchExprNode) {        
+    }
+
+    protected void evalTextSearchNode(Tree typeNode, Tree node) {
         // Ensure that we receive only valid tokens and nodes in the where
         // clause:
         LOG.debug("evaluating node: " + node.toString());
@@ -299,21 +401,27 @@ public abstract class AbstractQueryCondi
         case TextSearchLexer.TEXT_AND:
             List<Tree> children = getChildrenAsList(node);
             onPreTextAnd(node, children);
-            for (Tree child : children)
-                evalTextSearchNode(child);
-            onTextAnd(node, children);
+            int i=0;
+            for (Tree child : children) {
+                evalTextSearchNode(typeNode, child);
+                onTextAnd(node, children, i++);
+            }
             onPostTextAnd(node, children);
             break;
         case TextSearchLexer.TEXT_OR:
             children = getChildrenAsList(node);
             onPreTextOr(node, children);
-            for (Tree child : children)
-                evalTextSearchNode(child);
-            onTextOr(node, children);
+            int j=0;
+            for (Tree child : children) {
+                evalTextSearchNode(typeNode, child);
+                onTextOr(node, children, j++);
+            }
             onPostTextOr(node, children);
             break;
         case TextSearchLexer.TEXT_MINUS:
             onTextMinus(node, node.getChild(0));
+            evalTextSearchNode(typeNode, node.getChild(0));
+            onPostTextMinus(node, node.getChild(0));
             break;
         case TextSearchLexer.TEXT_SEARCH_PHRASE_STRING_LIT:
             onTextPhrase(onTextLiteral(node));
@@ -326,7 +434,7 @@ public abstract class AbstractQueryCondi
         
     // helper functions that are needed by most query tree walkers
 
-    protected Object onLiteral(Tree node) {
+    protected Object getLiteral(Tree node) {
         int type = node.getType();
         String text = node.getText();
         switch (type) {
@@ -347,6 +455,14 @@ public abstract class AbstractQueryCondi
             throw new RuntimeException("Unknown literal. " + node);
         }
     }
+
+    protected Object onLiteral(Tree node) {
+        return getLiteral(node);
+    }
+    
+    protected String onId(Tree node) {
+        return node.getText();
+    }
     
     protected String onTextLiteral(Tree node) {
         int type = node.getType();
@@ -359,14 +475,13 @@ public abstract class AbstractQueryCondi
         default:
             throw new RuntimeException("Unknown text literal. " + node);
         }
-
     }
 
     protected List<Object> onLiteralList(Tree node) {
         List<Object> res = new ArrayList<Object>(node.getChildCount());
         for (int i=0; i<node.getChildCount(); i++) {
             Tree literal =  node.getChild(i);
-            res.add(onLiteral(literal));
+            res.add(getLiteral(literal));
         }
         return res;
     }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/ProcessQueryTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/ProcessQueryTest.java?rev=1444504&r1=1444503&r2=1444504&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/ProcessQueryTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/ProcessQueryTest.java Sun Feb 10 08:24:28 2013
@@ -331,14 +331,14 @@ public class ProcessQueryTest extends Ab
        }
 
        @Override
-       public void onTextAnd(Tree node, List<Tree> conjunctionNodes) {
+       public void onTextAnd(Tree node, List<Tree> conjunctionNodes, int index) {
            assertEquals(TextSearchLexer.TEXT_AND, node.getType());
            assertTrue(conjunctionNodes.size() >= 2);
            rulesTrackerMap.put(ON_TEXT_AND, counter++);
        }
 
        @Override
-       public void onTextOr(Tree node, List<Tree> termNodes) {
+       public void onTextOr(Tree node, List<Tree> termNodes, int index) {
            assertEquals(TextSearchLexer.TEXT_OR, node.getType());
            assertTrue(termNodes.size() >= 2);
            rulesTrackerMap.put(ON_TEXT_OR, counter++);
@@ -402,6 +402,10 @@ public class ProcessQueryTest extends Ab
            }
        }
 
+        @Override
+        public void onColNode(Tree node) {
+        }
+
     }
 
     private TypeManagerImpl tm;

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/AbstractPredicateWalker.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/AbstractPredicateWalker.java?rev=1444504&r1=1444503&r2=1444504&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/AbstractPredicateWalker.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/AbstractPredicateWalker.java Sun Feb 10 08:24:28 2013
@@ -90,11 +90,35 @@ public abstract class AbstractPredicateW
             } else {
                 return walkInTree(node, node.getChild(0), node.getChild(1));
             }
+        case CmisQlStrictLexer.BOOL_LIT:
+            walkBoolean(node);
+            return false;
+        case CmisQlStrictLexer.NUM_LIT:
+            walkNumber(node);
+            return false;
+        case CmisQlStrictLexer.STRING_LIT:
+            walkString(node);
+            return false;
+        case CmisQlStrictLexer.TIME_LIT:
+            walkTimestamp(node);
+            return false;
+        case CmisQlStrictLexer.IN_LIST:
+            walkList(node);
+            return false;
+        case CmisQlStrictLexer.COL:
+            walkCol(node);
+            return false;
+        case CmisQlStrictLexer.ID:
+            walkId(node);
+            return false;
+        case CmisQlStrictLexer.SCORE:
+            return walkScore(node);
         default:
             return walkOtherPredicate(node);
         }
     }
 
+
     /** For extensibility. */
     protected Boolean walkOtherPredicate(Tree node) {
         throw new CmisRuntimeException("Unknown node type: " + node.getType() + " (" + node.getText() + ")");
@@ -335,4 +359,9 @@ public abstract class AbstractPredicateW
     protected Boolean walkTextPhrase(Tree node) {
         return null;
     }
+    
+    protected Boolean walkScore(Tree node) {
+       return false;        
+    }
+
 }