diff --git a/CHANGELOG.md b/CHANGELOG.md index 8942e49f07388e22cf4c729b580b930a8748c689..cc5e5b646d987ef05549aea0f9528bc7a2056aaa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed ### +- CQL now treats `WITH` and `WITH A` equivalently. This is for [#192](https://gitlab.com/caosdb/caosdb-server/-/issues/192). + ### Deprecated ### ### Removed ### diff --git a/doc/Query.md b/doc/Query.md index 1d7748438cd7f1a4a84f0ab66215564cbc5ad36d..1a875bf3008be0ef2b078ccae2b713d533acfaf4 100644 --- a/doc/Query.md +++ b/doc/Query.md @@ -219,6 +219,12 @@ The following query returns entities which have a _pname1_ property with any val `FIND ename WITH pname1` +`FIND ename WITH A pname1` + +`FIND ename WITH A PROPERTY pname1` + +`FIND ename WITH PROPERTY pname1` + `FIND ename . pname1` `FIND ename.pname1` @@ -338,7 +344,7 @@ Any result set can be filtered by logically combining POV filters or back refere * NOT:: The logical negation. Equivalent expressions: `NOT, DOESN'T HAVE A PROPERTY, DOES NOT HAVE A PROPERTY, DOESN'T HAVE A, DOES NOT HAVE A, DOES NOT, DOESN'T, IS NOT, ISN'T, !` * OR:: The logical _or_. Equivalent expressions: `OR, |` * RECORD,RECORDTYPE,FILE,PROPERTY:: Role expression for restricting the result set to a specific role. -* WHICH:: The marker for the beginning of the filters. Equivalent expressions: `WHICH, WHICH HAS A, WHICH HAS A PROPERTY, WHERE, WITH, .` +* WHICH:: The marker for the beginning of the filters. Equivalent expressions: `WHICH, WHICH HAS A, WHICH HAS A PROPERTY, WHERE, WITH (A), .` * REFERENCE:: This one is tricky: `REFERENCE TO` expresses a the state of _having_ a reference property. `REFERENCED BY` expresses the state of _being_ referenced by another entity. * COUNT:: `COUNT` works like `FIND` but doesn't return the entities. diff --git a/src/main/java/org/caosdb/server/query/CQLLexer.g4 b/src/main/java/org/caosdb/server/query/CQLLexer.g4 index 99c9879de7a772c6032decc51486fe7485d869e5..eba7f773a7e83360671d80f0bc3dde54e72ff625 100644 --- a/src/main/java/org/caosdb/server/query/CQLLexer.g4 +++ b/src/main/java/org/caosdb/server/query/CQLLexer.g4 @@ -277,10 +277,6 @@ NEGATION: ) WHITE_SPACE_f? ; -WITH: - [Ww][Ii][Tt][Hh] WHITE_SPACE_f? -; - THE: [Tt][Hh][Ee] WHITE_SPACE_f? ; @@ -309,6 +305,10 @@ ELSE: [Ee][Ll][Ss][Ee] WHITE_SPACE_f? ; +WITH_A: + [Ww][Ii][Tt][Hh] (WHITE_SPACE_f? A)? WHITE_SPACE_f? +; + WHERE: [Ww][Hh][Ee][Rr][Ee] WHITE_SPACE_f? ; diff --git a/src/main/java/org/caosdb/server/query/CQLParser.g4 b/src/main/java/org/caosdb/server/query/CQLParser.g4 index d44674b29d5c35fab2db9f4a8395e064219b79c9..cf16baef48b5be4af25522fcf9075710a0a835a3 100644 --- a/src/main/java/org/caosdb/server/query/CQLParser.g4 +++ b/src/main/java/org/caosdb/server/query/CQLParser.g4 @@ -129,7 +129,7 @@ entity_filter returns [EntityFilterInterface filter] which_exp: WHICH (HAS_A (PROPERTY)?)? | HAS_A (PROPERTY)? - | WITH (A (PROPERTY)?)? + | WITH_A (PROPERTY)? | WHERE | DOT WHITE_SPACE? ; @@ -527,7 +527,7 @@ number_with_unit unit : - (~(WHITE_SPACE | WHICH | HAS_A | WITH | WHERE | DOT | AND | OR | RPAREN )) + (~(WHITE_SPACE | WHICH | HAS_A | WITH_A | WHERE | DOT | AND | OR | RPAREN )) (~(WHITE_SPACE))* | NUM SLASH (~(WHITE_SPACE))+