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 2010/11/26 08:43:18 UTC
svn commit: r1039259 - in
/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src:
main/antlr3/org/apache/chemistry/opencmis/server/support/query/
main/java/org/apache/chemistry/opencmis/server/support/query/...
Author: jens
Date: Fri Nov 26 07:43:17 2010
New Revision: 1039259
URL: http://svn.apache.org/viewvc?rev=1039259&view=rev
Log:
cleanup of Query exception handling
Added:
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/CmisQueryException.java
Modified:
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CMISQLParser.g
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseGrammar.g
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlExtParser.g
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlStrictParser.g
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryObject.java
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtil.java
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/AbstractParserTst.java
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CMISQLParser.g
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CMISQLParser.g?rev=1039259&r1=1039258&r2=1039259&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CMISQLParser.g (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CMISQLParser.g Fri Nov 26 07:43:17 2010
@@ -60,20 +60,6 @@ options {
package org.apache.chemistry.opencmis.server.support.query;
}
-@members {
- public String errorMessage;
-
- @Override
- public void displayRecognitionError(String[] tokenNames,
- RecognitionException e) {
- if (errorMessage == null) {
- String hdr = getErrorHeader(e);
- String msg = getErrorMessage(e, tokenNames);
- errorMessage = hdr + " " + msg;
- }
- }
-}
-
query: SELECT^ DISTINCT? select_list from_clause where_clause? order_by_clause?;
select_list
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseGrammar.g
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseGrammar.g?rev=1039259&r1=1039258&r2=1039259&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseGrammar.g (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisBaseGrammar.g Fri Nov 26 07:43:17 2010
@@ -35,10 +35,28 @@ options {
output = AST;
}
-@rulecatch {
- catch (RecognitionException e) {
- throw e;
+@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);
+ }
+
}
query:
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlExtParser.g
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlExtParser.g?rev=1039259&r1=1039258&r2=1039259&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlExtParser.g (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlExtParser.g Fri Nov 26 07:43:17 2010
@@ -67,6 +67,15 @@ tokens {
package org.apache.chemistry.opencmis.server.support.query;
}
+@members {
+ public boolean hasErrors() {
+ return gCmisBaseGrammar.hasErrors();
+ }
+
+ public String getErrorMessages() {
+ return gCmisBaseGrammar.getErrorMessages();
+ }
+}
query: SELECT^ DISTINCT? select_list from_clause where_clause? order_by_clause?;
Modified: incubator/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/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlStrictParser.g?rev=1039259&r1=1039258&r2=1039259&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlStrictParser.g (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/antlr3/org/apache/chemistry/opencmis/server/support/query/CmisQlStrictParser.g Fri Nov 26 07:43:17 2010
@@ -64,22 +64,12 @@ package org.apache.chemistry.opencmis.se
}
@members {
- protected void mismatch(IntStream input, int ttype, BitSet follow)
- throws RecognitionException
- {
- throw new MismatchedTokenException(ttype, input);
- }
-
- public void recoverFromMismatchedSet(IntStream input, RecognitionException e, antlr.collections.impl.BitSet follow)
- throws RecognitionException
- {
- throw e;
- }
-}
+ public boolean hasErrors() {
+ return gCmisBaseGrammar.hasErrors();
+ }
-@rulecatch {
- catch (RecognitionException e) {
- throw e;
+ public String getErrorMessages() {
+ return gCmisBaseGrammar.getErrorMessages();
}
}
Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/CmisQueryException.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/CmisQueryException.java?rev=1039259&view=auto
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/CmisQueryException.java (added)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/CmisQueryException.java Fri Nov 26 07:43:17 2010
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.server.support.query;
+
+
+public class CmisQueryException extends RuntimeException {
+
+ private static final long serialVersionUID = 1L;
+
+ public CmisQueryException() {
+ super();
+ }
+
+ public CmisQueryException(String message) {
+ super(message);
+ }
+
+ public CmisQueryException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public CmisQueryException(Throwable cause) {
+ super(cause);
+ }
+}
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryObject.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryObject.java?rev=1039259&r1=1039258&r2=1039259&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryObject.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryObject.java Fri Nov 26 07:43:17 2010
@@ -69,6 +69,8 @@ public class QueryObject {
// order by part
protected List<SortSpec> sortSpecs = new ArrayList<SortSpec>();
+
+ private String errorMessage;
public static class JoinSpec {
@@ -132,6 +134,10 @@ public class QueryObject {
public CmisSelector getColumnReference(Integer token) {
return columnReferences.get(token);
}
+
+ public String getErrorMessage() {
+ return errorMessage;
+ }
// ///////////////////////////////////////////////////////
// SELECT part
@@ -149,7 +155,7 @@ public class QueryObject {
public void addAlias(String aliasName, CmisSelector aliasRef) {
LOG.debug("add alias: " + aliasName + " for: " + aliasRef);
if (colOrFuncAlias.containsKey(aliasName)) {
- throw new CmisInvalidArgumentException("You cannot use name " + aliasName
+ throw new CmisQueryException("You cannot use name " + aliasName
+ " more than once as alias in a select.");
} else {
aliasRef.setAliasName(aliasName);
@@ -165,19 +171,24 @@ public class QueryObject {
// FROM part
public String addType(String aliasName, String typeQueryName) {
- LOG.debug("add alias: " + aliasName + " for: " + typeQueryName);
- if (froms.containsKey(aliasName)) {
- throw new CmisInvalidArgumentException("You cannot use name " + aliasName
- + " more than once as alias in a from part.");
- }
- if (aliasName == null) {
- aliasName = typeQueryName;
- }
- froms.put(aliasName, typeQueryName);
- if (from == null) {
- from = aliasName;
+ try {
+ LOG.debug("add alias: " + aliasName + " for: " + typeQueryName);
+ if (froms.containsKey(aliasName)) {
+ throw new CmisQueryException("You cannot use name " + aliasName
+ + " more than once as alias in a from part.");
+ }
+ if (aliasName == null) {
+ aliasName = typeQueryName;
+ }
+ froms.put(aliasName, typeQueryName);
+ if (from == null) {
+ from = aliasName;
+ }
+ return aliasName;
+ } catch (CmisQueryException cqe) {
+ errorMessage = cqe.getMessage(); // preserve message
+ return null; // indicate an error to ANTLR so that it generates FailedPredicateException
}
- return aliasName;
}
public String getMainTypeAlias() {
@@ -317,66 +328,73 @@ public class QueryObject {
// ///////////////////////////////////////////////////////
// resolve types after first pass traversing the AST is complete
- public void resolveTypes() {
- LOG.debug("First pass of query traversal is complete, resolving types");
- if (null == typeMgr)
- return;
-
- // First resolve all alias names defined in SELECT:
- for (CmisSelector alias : colOrFuncAlias.values()) {
- if (alias instanceof ColumnReference) {
- ColumnReference colRef = ((ColumnReference) alias);
- resolveTypeForAlias(colRef);
+ public boolean resolveTypes() {
+ try {
+ LOG.debug("First pass of query traversal is complete, resolving types");
+ if (null == typeMgr)
+ return true;
+
+ // First resolve all alias names defined in SELECT:
+ for (CmisSelector alias : colOrFuncAlias.values()) {
+ if (alias instanceof ColumnReference) {
+ ColumnReference colRef = ((ColumnReference) alias);
+ resolveTypeForAlias(colRef);
+ }
}
- }
- // Then replace all aliases used somewhere by their resolved column
- // reference:
- for (Integer obj : columnReferences.keySet()) {
- CmisSelector selector = columnReferences.get(obj);
- String key = selector.getName();
- if (colOrFuncAlias.containsKey(key)) { // it is an alias
- CmisSelector resolvedReference = colOrFuncAlias.get(key);
- columnReferences.put(obj, resolvedReference);
- // Note: ^ This may replace the value in the map with the same
- // value, but this does not harm.
- // Otherwise we need to check if it is resolved or not which
- // causes two more ifs:
- // if (selector instanceof ColumnReference) {
- // ColumnReference colRef = ((ColumnReference) selector);
- // if (colRef.getTypeDefinition() == null) // it is not yet
- // resolved
- // // replace unresolved column reference by resolved on from
- // alias map
- // columnReferences.put(obj,
- // colOrFuncAlias.get(selector.getAliasName()));
- // } else
- // columnReferences.put(obj,
- // colOrFuncAlias.get(selector.getAliasName()));
- if (whereReferences.remove(selector))
- // replace unresolved by resolved reference
- whereReferences.add(resolvedReference);
- if (joinReferences.remove(selector))
- // replace unresolved by resolved reference
- joinReferences.add(resolvedReference);
+ // Then replace all aliases used somewhere by their resolved column
+ // reference:
+ for (Integer obj : columnReferences.keySet()) {
+ CmisSelector selector = columnReferences.get(obj);
+ String key = selector.getName();
+ if (colOrFuncAlias.containsKey(key)) { // it is an alias
+ CmisSelector resolvedReference = colOrFuncAlias.get(key);
+ columnReferences.put(obj, resolvedReference);
+ // Note: ^ This may replace the value in the map with the same
+ // value, but this does not harm.
+ // Otherwise we need to check if it is resolved or not which
+ // causes two more ifs:
+ // if (selector instanceof ColumnReference) {
+ // ColumnReference colRef = ((ColumnReference) selector);
+ // if (colRef.getTypeDefinition() == null) // it is not yet
+ // resolved
+ // // replace unresolved column reference by resolved on from
+ // alias map
+ // columnReferences.put(obj,
+ // colOrFuncAlias.get(selector.getAliasName()));
+ // } else
+ // columnReferences.put(obj,
+ // colOrFuncAlias.get(selector.getAliasName()));
+ if (whereReferences.remove(selector))
+ // replace unresolved by resolved reference
+ whereReferences.add(resolvedReference);
+ if (joinReferences.remove(selector))
+ // replace unresolved by resolved reference
+ joinReferences.add(resolvedReference);
+ }
}
- }
- // The replace all remaining column references not using an alias
- for (CmisSelector select : columnReferences.values()) {
- // ignore functions here
- if (select instanceof ColumnReference) {
- ColumnReference colRef = ((ColumnReference) select);
- if (colRef.getTypeDefinition() == null) { // not yet resolved
- if (colRef.getTypeQueryName() == null) {
- // unqualified select: SELECT p FROM
- resolveTypeForColumnReference(colRef);
- } else {
- // qualified select: SELECT t.p FROM
- validateColumnReferenceAndResolveType(colRef);
+ // The replace all remaining column references not using an alias
+ for (CmisSelector select : columnReferences.values()) {
+ // ignore functions here
+ if (select instanceof ColumnReference) {
+ ColumnReference colRef = ((ColumnReference) select);
+ if (colRef.getTypeDefinition() == null) { // not yet resolved
+ if (colRef.getTypeQueryName() == null) {
+ // unqualified select: SELECT p FROM
+ resolveTypeForColumnReference(colRef);
+ } else {
+ // qualified select: SELECT t.p FROM
+ validateColumnReferenceAndResolveType(colRef);
+ }
}
}
}
+
+ return true;
+ } catch (CmisQueryException cqe) {
+ errorMessage = cqe.getMessage(); // preserve message
+ return false; // indicate an error to ANTLR so that it generates FailedPredicateException
}
}
@@ -410,7 +428,7 @@ public class QueryObject {
for (String typeQueryName : froms.values()) {
TypeDefinition td = typeMgr.getTypeByQueryName(typeQueryName);
if (null == td)
- throw new CmisInvalidArgumentException(typeQueryName + " is neither a type query name nor an alias.");
+ throw new CmisQueryException(typeQueryName + " is neither a type query name nor an alias.");
else if (isStar) {
++noFound;
tdFound = null;
@@ -420,10 +438,10 @@ public class QueryObject {
}
}
if (noFound == 0)
- throw new CmisInvalidArgumentException(propName
+ throw new CmisQueryException(propName
+ " is not a property query name in any of the types in from ...");
else if (noFound > 1 && !isStar)
- throw new CmisInvalidArgumentException(propName
+ throw new CmisQueryException(propName
+ " is not a unique property query name within the types in from ...");
else {
if (null != tdFound) // can be null in select * from t1 JOIN t2....
@@ -438,7 +456,7 @@ public class QueryObject {
String typeQueryName = getReferencedTypeQueryName(colRef.getTypeQueryName());
TypeDefinition td = typeMgr.getTypeByQueryName(typeQueryName);
if (null == td)
- throw new CmisInvalidArgumentException(colRef.getTypeQueryName()
+ throw new CmisQueryException(colRef.getTypeQueryName()
+ " is neither a type query name nor an alias.");
validateColumnReferenceAndResolveType(td, colRef);
@@ -453,7 +471,7 @@ public class QueryObject {
else
hasProp = TypeValidator.typeContainsPropertyWithQueryName(td, colRef.getPropertyQueryName());
if (!hasProp)
- throw new CmisInvalidArgumentException(colRef.getPropertyQueryName()
+ throw new CmisQueryException(colRef.getPropertyQueryName()
+ " is not a valid property query name in type " + td.getId() + ".");
colRef.setTypeDefinition(typeMgr.getPropertyIdForQueryName(td, colRef.getPropertyQueryName()), td);
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtil.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtil.java?rev=1039259&r1=1039258&r2=1039259&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtil.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/query/QueryUtil.java Fri Nov 26 07:43:17 2010
@@ -23,6 +23,7 @@ import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.antlr.runtime.ANTLRInputStream;
+import org.antlr.runtime.BaseRecognizer;
import org.antlr.runtime.CharStream;
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.RecognitionException;
@@ -30,6 +31,8 @@ import org.antlr.runtime.TokenSource;
import org.antlr.runtime.TokenStream;
import org.antlr.runtime.tree.CommonTree;
import org.antlr.runtime.tree.CommonTreeNodeStream;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
import org.apache.chemistry.opencmis.server.support.query.CmisQlStrictParser_CmisBaseGrammar.query_return;
/**
@@ -39,8 +42,11 @@ import org.apache.chemistry.opencmis.ser
*/
public class QueryUtil extends QueryObject {
+ private CmisQueryWalker walker;
+
// convenience method because everybody needs this piece of code
- static public CmisQueryWalker getWalker(String statement) throws UnsupportedEncodingException, IOException, RecognitionException {
+ public 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);
@@ -48,6 +54,9 @@ public class QueryUtil extends QueryObje
CommonTree parserTree; // the ANTLR tree after parsing phase
query_return parsedStatement = parser.query();
+ if (parser.hasErrors()) {
+ throw new CmisInvalidArgumentException(parser.getErrorMessages());
+ }
parserTree = (CommonTree) parsedStatement.getTree();
CommonTreeNodeStream nodes = new CommonTreeNodeStream(parserTree);
@@ -55,4 +64,41 @@ public class QueryUtil extends QueryObje
CmisQueryWalker walker = new CmisQueryWalker(nodes);
return walker;
}
+
+ public CmisQueryWalker traverseStatement(String statement, QueryObject queryObj, PredicateWalkerBase pw) throws UnsupportedEncodingException, IOException, RecognitionException {
+ walker = getWalker(statement);
+ walker.query(queryObj, pw);
+ walker.getWherePredicateTree();
+ return walker;
+ }
+
+ public CmisQueryWalker traverseStatementAndCatchExc(String statement, QueryObject queryObj, PredicateWalkerBase pw) {
+ QueryUtil queryUtil = new QueryUtil();
+ try {
+ return traverseStatement(statement, queryObj, pw);
+ } catch (RecognitionException e) {
+ String errorMsg = queryUtil.getErrorMessage();
+ throw new CmisInvalidArgumentException("Walking of statement failed with RecognitionException error: \n " + errorMsg);
+ } catch (CmisBaseException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new CmisInvalidArgumentException("Walking of statement failed with exception: \n " + e);
+ }
+ }
+
+ public String getErrorMessage(RecognitionException e) {
+ if (null == walker)
+ return e.toString();
+ else
+ return getErrorMessage(walker, e);
+ }
+
+ private String getErrorMessage(BaseRecognizer recognizer, RecognitionException e) {
+ String[] tokenNames = recognizer.getTokenNames();
+ // String hdr = walker.getErrorHeader(e);
+ String hdr = "Line "+e.line+":"+e.charPositionInLine;
+ String msg = recognizer.getErrorMessage(e, tokenNames);
+ return hdr + " " + msg;
+ }
+
}
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/AbstractParserTst.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/AbstractParserTst.java?rev=1039259&r1=1039258&r2=1039259&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/AbstractParserTst.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/query/AbstractParserTst.java Fri Nov 26 07:43:17 2010
@@ -24,6 +24,7 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.antlr.runtime.ANTLRStringStream;
+import org.antlr.runtime.BaseRecognizer;
import org.antlr.runtime.CharStream;
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.Lexer;
@@ -189,7 +190,10 @@ public class AbstractParserTst{
if ( tokens.index()!=tokens.size() ) {
throw new RuntimeException("Invalid input.");
}
-
+
+ /** Check for syntax errors */
+ if (((BaseRecognizer)parObj).getNumberOfSyntaxErrors() > 0)
+ throw new RuntimeException("Syntax error occured");
return result;
}