Author: jens
Date: Tue Jan 20 17:46:44 2015
New Revision: 1653312

URL: http://svn.apache.org/r1653312
Log:
Correct parsing of EOF for strict query parser, fix bug [CMIS-850]

Modified:
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryParseTest.java
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlStrictParser.g
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtilStrict.java

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryParseTest.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/QueryParseTest.java?rev=1653312&r1=1653311&r2=1653312&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryParseTest.java
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryParseTest.java
 Tue Jan 20 17:46:44 2015
@@ -494,10 +494,11 @@ public class QueryParseTest extends Abst
         String statement = "SELECT p1 FROM MyType WHERE p1 LIKE 'abc*' 
IN_FOLDER('def')";
         try {
             checkTreeWhere(statement);
+            fail("Parsing query with tokens after end of statement should 
fail.");
         } catch (Exception e) {
             LOG.debug("Exception is: ", e);
             assertTrue(e instanceof CmisInvalidArgumentException);
-            assertTrue(e.getMessage().contains("illegal tokens after end"));
+            assertTrue(e.getMessage().contains("missing EOF at "));
         }
     }
 

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlStrictParser.g
URL: 
http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlStrictParser.g?rev=1653312&r1=1653311&r2=1653312&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlStrictParser.g
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlStrictParser.g
 Tue Jan 20 17:46:44 2015
@@ -64,13 +64,35 @@ package org.apache.chemistry.opencmis.se
 }
 
 @members {
+    private List<String> errorMessages = new ArrayList<String>();
+
     public boolean hasErrors() {
-       return gCmisBaseGrammar.hasErrors();
+       return errorMessages.size() > 0 ||  gCmisBaseGrammar.hasErrors();
     }
 
+       public String getStrictParserErrorMessages() {
+               StringBuffer allMessages = new StringBuffer();
+               
+               for (String msg : errorMessages)
+                       allMessages.append(msg).append('\n');
+                       
+               return allMessages.toString();
+       }
+       
        public String getErrorMessages() {
-       return gCmisBaseGrammar.getErrorMessages();
+           if (errorMessages.size() > 0) {
+               return getStrictParserErrorMessages();
+           } else {
+           return gCmisBaseGrammar.getErrorMessages();
+       }
+       }
+       
+       @Override
+    // Instead of sending all errors to System.err collect them in a list
+       public void emitErrorMessage(String msg) {
+               errorMessages.add(msg);
        }
+       
 }
 
   // Rules can't be empty so we have one dummy rule here

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtilStrict.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/QueryUtilStrict.java?rev=1653312&r1=1653311&r2=1653312&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtilStrict.java
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtilStrict.java
 Tue Jan 20 17:46:44 2015
@@ -27,7 +27,7 @@ import org.antlr.runtime.tree.CommonTree
 import org.antlr.runtime.tree.CommonTreeNodeStream;
 import 
org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
 import org.apache.chemistry.opencmis.server.support.TypeManager;
-import 
org.apache.chemistry.opencmis.server.support.query.CmisQlStrictParser_CmisBaseGrammar.query_return;
+import 
org.apache.chemistry.opencmis.server.support.query.CmisQlStrictParser.root_return;
 
 public class QueryUtilStrict extends QueryUtilBase<CmisQueryWalker> {
 
@@ -53,7 +53,7 @@ public class QueryUtilStrict extends Que
         tokens = new CommonTokenStream(lexer);
         CmisQlStrictParser parser = new CmisQlStrictParser(tokens);
 
-        query_return parsedStatement = parser.query();
+        root_return parsedStatement = parser.root();
         if (lexer.hasErrors()) {
             throw new CmisInvalidArgumentException(lexer.getErrorMessages());
         } else if (parser.hasErrors()) {


Reply via email to