From c1a71d4fdb4738f9c8b732946098be87a40ff5b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <h.tomwoerden@indiscale.com> Date: Sun, 26 Mar 2023 10:49:28 +0200 Subject: [PATCH] MAINT: do not treat 'has' as 'which has' --- src/main/java/org/caosdb/server/query/CQLParser.g4 | 5 ++--- src/test/java/org/caosdb/server/query/TestCQL.java | 13 +++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/caosdb/server/query/CQLParser.g4 b/src/main/java/org/caosdb/server/query/CQLParser.g4 index d5e37510..9bad9730 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 6c289ada..c46b9dae 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); -- GitLab