From 053e30b5e0b1ac62ee2a8568f14acbec6fb09c72 Mon Sep 17 00:00:00 2001
From: Daniel <d.hornung@indiscale.com>
Date: Tue, 28 Feb 2023 12:11:46 +0100
Subject: [PATCH] FIX: CQL now treats 'WITH` and `WITH A` equivalently. For
 #192.

---
 CHANGELOG.md                                       | 2 ++
 src/main/java/org/caosdb/server/query/CQLLexer.g4  | 8 ++++----
 src/main/java/org/caosdb/server/query/CQLParser.g4 | 4 ++--
 3 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8942e49f..cc5e5b64 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/src/main/java/org/caosdb/server/query/CQLLexer.g4 b/src/main/java/org/caosdb/server/query/CQLLexer.g4
index 99c9879d..eba7f773 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 d44674b2..cf16baef 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))+
-- 
GitLab