Implemented FCS Group queries and added tests.
Change-Id: Id98662146a13fa3ee2b2dc019e273c501454027c
diff --git a/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/ExpressionParser.java b/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/ExpressionParser.java
index 5d767a9..1dc4a4b 100644
--- a/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/ExpressionParser.java
+++ b/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/ExpressionParser.java
@@ -64,7 +64,8 @@
//
// }
else if (queryNode instanceof ExpressionNot) {
- return parseExpression(queryNode.getChild(0), true, true);
+ boolean negation = isNot ? false : true;
+ return parseExpression(queryNode.getChild(0), negation, isToken);
}
else if (queryNode instanceof ExpressionOr) {
List<QueryNode> operands = queryNode.getChildren();
diff --git a/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/FCSSRUQueryParser.java b/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/FCSSRUQueryParser.java
index a98cc6e..ba440a3 100644
--- a/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/FCSSRUQueryParser.java
+++ b/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/FCSSRUQueryParser.java
@@ -8,6 +8,7 @@
import de.ids_mannheim.korap.query.serialize.FCSQLQueryProcessor;
import de.ids_mannheim.korap.query.serialize.util.StatusCodes;
import eu.clarin.sru.server.fcs.parser.QueryDisjunction;
+import eu.clarin.sru.server.fcs.parser.QueryGroup;
import eu.clarin.sru.server.fcs.parser.QueryNode;
import eu.clarin.sru.server.fcs.parser.QuerySegment;
import eu.clarin.sru.server.fcs.parser.QuerySequence;
@@ -26,8 +27,9 @@
if (queryNode instanceof QuerySegment) {
return parseQuerySegment((QuerySegment) queryNode);
- // } else if (queryNode instanceof QueryGroup) {
- //
+ }
+ else if (queryNode instanceof QueryGroup) {
+ return parseQueryNode(queryNode.getChild(0));
}
else if (queryNode instanceof QuerySequence) {
return parseGroupQuery(queryNode.getChildren(),
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/FCSQLQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/FCSQLQueryProcessor.java
index 3862664..1e973d8 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/FCSQLQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/FCSQLQueryProcessor.java
@@ -56,8 +56,10 @@
public void process(String query) {
if (isVersionValid()) {
FCSSRUQuery fcsSruQuery = parseQueryStringtoFCSQuery(query);
- QueryNode fcsQueryNode = fcsSruQuery.getParsedQuery();
- parseFCSQueryToKoralQuery(fcsQueryNode);
+ if (fcsSruQuery != null) {
+ QueryNode fcsQueryNode = fcsSruQuery.getParsedQuery();
+ parseFCSQueryToKoralQuery(fcsQueryNode);
+ }
}
}
@@ -83,13 +85,19 @@
try {
QueryNode parsedQuery = fcsParser.parse(query);
fcsQuery = new FCSSRUQuery(query, parsedQuery);
+ if (fcsQuery == null) {
+ addError(StatusCodes.UNKNOWN_QUERY_ERROR,
+ "FCS diagnostic 10: Unexpected error while parsing query.");
+ }
}
catch (QueryParserException e) {
- addError(StatusCodes.UNKNOWN_QUERY_ERROR, "FCS diagnostic 10: +"
- + e.getMessage());
+ addError(
+ StatusCodes.UNKNOWN_QUERY_ERROR,
+ "FCS diagnostic 10: Query cannot be parsed, "
+ + e.getMessage());
}
catch (Exception e) {
- addError(StatusCodes.UNKNOWN_QUERY_ERROR, "FCS diagnostic 10: +"
+ addError(StatusCodes.UNKNOWN_QUERY_ERROR, "FCS diagnostic 10: "
+ "Unexpected error while parsing query.");
}
return fcsQuery;