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");
+ }
}