Author: jens
Date: Fri Apr 10 20:05:05 2015
New Revision: 1672743

URL: http://svn.apache.org/r1672743
Log:
Improve error messages of syntax errors in query text search expressions.

Modified:
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseWalker.g
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/TextSearch.g
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtilBase.java
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserTextSearch.java

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.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/EvalQueryTest.java?rev=1672743&r1=1672742&r2=1672743&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java
 Fri Apr 10 20:05:05 2015
@@ -34,6 +34,7 @@ import static org.junit.Assert.fail;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
+import org.antlr.runtime.RecognitionException;
 import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.commons.data.ObjectData;
 import org.apache.chemistry.opencmis.commons.data.ObjectList;
@@ -1011,6 +1012,20 @@ public class EvalQueryTest extends Abstr
     }
 
     @Test
+    public void testContainsSyntaxError() {
+        log.debug("Start testContainsSyntaxError...");
+        String statement = "SELECT cmis:objectId FROM " + COMPLEX_TYPE + " 
WHERE CONTAINS('')";
+        try {
+               doQuery(statement);
+        } catch (Exception e) {
+            assertTrue(e.getMessage().contains("line 1:0 no viable alternative 
at input '<EOF>'"));
+            assertTrue(e instanceof CmisInvalidArgumentException);             
        
+            assertTrue(e.getCause() instanceof RuntimeException);              
        
+            assertTrue(e.getCause().getCause() instanceof 
RecognitionException);                       
+        }
+        log.debug("...Stop testContainsSyntaxError.");
+    }
+    @Test
     public void testNotSetProperties() {
         log.debug("Start testNotSetProperties...");
         // PROP_ID_ID is not set property

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseWalker.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/CmisBaseWalker.g?rev=1672743&r1=1672742&r2=1672743&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseWalker.g
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseWalker.g
 Fri Apr 10 20:05:05 2015
@@ -73,8 +73,15 @@ options {
         TokenStream tokens = new CommonTokenStream(lexer);
         TextSearchParser parser = new TextSearchParser(tokens);
 
-        TextSearchParser.text_search_expression_return parsedStatement = 
parser.text_search_expression();
-        return (CommonTree) parsedStatement.getTree();
+        try {
+            TextSearchParser.text_search_expression_return parsedStatement = 
parser.text_search_expression();
+            return (CommonTree) parsedStatement.getTree();
+        } catch (RecognitionException e) {
+            String[] tokenNames = parser.getTokenNames();
+            String hdr = "Error in text search expression, line " + e.line + 
":" + e.charPositionInLine;
+            String msg = parser.getErrorMessage(e, tokenNames);
+            throw new RuntimeException(hdr + " " + msg, e);
+        }
     }
 
 }

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/TextSearch.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/TextSearch.g?rev=1672743&r1=1672742&r2=1672743&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/TextSearch.g
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/TextSearch.g
 Fri Apr 10 20:05:05 2015
@@ -92,13 +92,41 @@ package org.apache.chemistry.opencmis.se
 package org.apache.chemistry.opencmis.server.support.query;
 }
 
+@members {
+    private List<String> errorMessages = new ArrayList<String>();
+    
+    public boolean hasErrors() {
+       return errorMessages.size() > 0;
+    }
+
+       public String getErrorMessages() {
+               StringBuffer allMessages = new StringBuffer();
+               
+               for (String msg : errorMessages)
+                       allMessages.append(msg).append('\n');
+                       
+               return allMessages.toString();
+       }
+    @Override
+    // Instead of sending all errors to System.err collect them in a list
+       public void emitErrorMessage(String msg) {
+               errorMessages.add(msg);
+       }
+}
+
 @lexer::members {
        public void reportError(RecognitionException e) {
           super.reportError(e);
-          throw new RuntimeException(e);
+               throw new RuntimeException(e);
        }
 }
 
+@rulecatch {
+    catch (RecognitionException e) {
+        throw e;
+    }
+}
+
 //////////////////////////////////////////////////////////////////////////7
 // Lexer Part
 

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtilBase.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/QueryUtilBase.java?rev=1672743&r1=1672742&r2=1672743&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtilBase.java
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtilBase.java
 Fri Apr 10 20:05:05 2015
@@ -109,13 +109,13 @@ public abstract class QueryUtilBase<T ex
         try {
             processStatement();
         } catch (RecognitionException e) {
-            String errorMsg = queryObj.getErrorMessage();
-            throw new CmisInvalidArgumentException("Walking of statement 
failed with RecognitionException error: \n   "
+            String errorMsg = getErrorMessage(e);
+            throw new CmisInvalidArgumentException("Processing of query 
statement failed with RecognitionException error: \n   "
                     + errorMsg, e);
         } catch (CmisBaseException e) {
             throw e;
         } catch (Exception e) {
-            throw new CmisInvalidArgumentException("Walking of statement 
failed with exception: \n   ", e);
+            throw new CmisInvalidArgumentException("Processing of query 
statement failed with exception: " + e.getMessage(), e);
         }
     }
 

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserTextSearch.java
URL: 
http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserTextSearch.java?rev=1672743&r1=1672742&r2=1672743&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserTextSearch.java
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/TestParserTextSearch.java
 Fri Apr 10 20:05:05 2015
@@ -19,6 +19,8 @@
 package org.apache.chemistry.opencmis.server.support.query;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import org.junit.After;
 import org.junit.Before;
@@ -514,4 +516,8 @@ public class TestParserTextSearch extend
       testParserFail("text_search_expression", "c:\\My Documents");
     }
     
+    @Test
+    public void testTextSearchException() {
+       testParserFail("text_search_expression", "AND OR");
+    }
 }


Reply via email to