diff --git a/src/main/java/org/caosdb/server/query/CQLParser.g4 b/src/main/java/org/caosdb/server/query/CQLParser.g4 index d5e375102d79d395b1f06c62c5aef9537092b0fc..9bad973033500e55197a38d6150406acea606cc0 100644 --- a/src/main/java/org/caosdb/server/query/CQLParser.g4 +++ b/src/main/java/org/caosdb/server/query/CQLParser.g4 @@ -153,7 +153,6 @@ entity_filter returns [EntityFilterInterface filter] */ which_exp: WHICH (HAS_A (PROPERTY)?)? - | HAS_A (PROPERTY)? | WITH_A (PROPERTY)? | WHERE | DOT WHITE_SPACE? @@ -446,7 +445,7 @@ conjunction returns [Conjunction c] WHITE_SPACE? AND ( - ( which_exp | A (PROPERTY)?? ) + ( which_exp | HAS_A | A (PROPERTY)? ) )? ( f2 = filter_expression {$c.add($f2.efi);} @@ -486,7 +485,7 @@ disjunction returns [Disjunction d] ( OR ( - ( which_exp | A (PROPERTY)? ) + ( which_exp | HAS_A | A (PROPERTY)? ) )? ( f2 = filter_expression {$d.add($f2.efi);} diff --git a/src/test/java/org/caosdb/server/query/TestCQL.java b/src/test/java/org/caosdb/server/query/TestCQL.java index 6c289adaef49f356aeaa7b5c7c744d4c4b1a6ce3..c46b9dae2b0053bb71aa1e7d91b060c07b1667f1 100644 --- a/src/test/java/org/caosdb/server/query/TestCQL.java +++ b/src/test/java/org/caosdb/server/query/TestCQL.java @@ -65,7 +65,7 @@ public class TestCQL { String query2 = "FIND ename.pname1=val1 OR pname2=val2"; String query3 = "FIND ename.pname1=val1 AND pname2=val2 AND pname3=val3"; String query4 = - "FIND ename WHICH HAS A PROPERTY pname1=val1 AND pname1 HAS A PROPERTY pname2=val2"; + "FIND ename WHICH HAS A PROPERTY pname1=val1 AND pname1 WHICH HAS A PROPERTY pname2=val2"; String query5 = "FIND ename WHICH HAS A PROPERTY pname1=val1 AND (pname2=val2 OR pname3=val3)"; String query6 = "FIND ename1 WHICH HAS A pname REFERENCE TO ename2"; String query6a = "FIND ename1 WHICH REFERENCES ename2 AS A pname"; @@ -748,7 +748,7 @@ public class TestCQL { assertEquals("ename", sfq.getChild(1).getText()); // entity_filter assertEquals( - "WHICH HAS A PROPERTY pname1=val1 AND pname1 HAS A PROPERTY pname2=val2", + "WHICH HAS A PROPERTY pname1=val1 AND pname1 WHICH HAS A PROPERTY pname2=val2", sfq.getChild(3).getText()); final ParseTree entity_filter1 = sfq.getChild(3); @@ -758,14 +758,15 @@ public class TestCQL { // conjunction assertEquals( - "pname1=val1 AND pname1 HAS A PROPERTY pname2=val2", entity_filter1.getChild(1).getText()); + "pname1=val1 AND pname1 WHICH HAS A PROPERTY pname2=val2", + entity_filter1.getChild(1).getText()); final ParseTree conjunction = entity_filter1.getChild(1); // 3 children: pov, AND, pov assertEquals(3, conjunction.getChildCount()); assertEquals("pname1=val1 ", conjunction.getChild(0).getText()); assertEquals("AND ", conjunction.getChild(1).getText()); - assertEquals("pname1 HAS A PROPERTY pname2=val2", conjunction.getChild(2).getText()); + assertEquals("pname1 WHICH HAS A PROPERTY pname2=val2", conjunction.getChild(2).getText()); // subproperty final ParseTree subproperty = conjunction.getChild(2); @@ -773,14 +774,14 @@ public class TestCQL { // 3 children: property, entity_filter assertEquals(2, subproperty.getChildCount()); assertEquals("pname1 ", subproperty.getChild(0).getText()); - assertEquals("HAS A PROPERTY pname2=val2", subproperty.getChild(1).getText()); + assertEquals("WHICH HAS A PROPERTY pname2=val2", subproperty.getChild(1).getText()); // entity_filter final ParseTree entity_filter2 = subproperty.getChild(1).getChild(0); // 3 children: WHICH_EXP pov assertEquals(2, entity_filter2.getChildCount()); - assertEquals("HAS A PROPERTY ", entity_filter2.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY ", entity_filter2.getChild(0).getText()); assertEquals("pname2=val2", entity_filter2.getChild(1).getText()); final ParseTree pov2 = entity_filter2.getChild(1).getChild(0);