diff --git a/src/main/java/org/caosdb/server/query/CQLLexer.g4 b/src/main/java/org/caosdb/server/query/CQLLexer.g4 index 8f58cb2c1d01c962b35301911e5889ebd040b0d8..99c9879de7a772c6032decc51486fe7485d869e5 100644 --- a/src/main/java/org/caosdb/server/query/CQLLexer.g4 +++ b/src/main/java/org/caosdb/server/query/CQLLexer.g4 @@ -506,7 +506,7 @@ mode SELECT_DOUBLE_QUOTED; ; SELECT_DOUBLE_QUOTE_END: - '"' {setText("");} -> mode(SELECT_MODE) + '"' WHITE_SPACE_f? {setText("");} -> mode(SELECT_MODE) ; SELECT_DOUBLE_QUOTE_TXT: @@ -521,7 +521,7 @@ mode SELECT_SINGLE_QUOTED; ; SELECT_SINGLE_QUOTE_END: - '\'' {setText("");} -> mode(SELECT_MODE) + '\'' WHITE_SPACE_f? {setText("");} -> mode(SELECT_MODE) ; SELECT_SINGLE_QUOTE_TXT: diff --git a/src/test/java/org/caosdb/server/query/TestCQL.java b/src/test/java/org/caosdb/server/query/TestCQL.java index 58de2f311ae7636531cf66658fb5f31a92fb9de2..3217d4228068027628b1846eb6073da1bc18052e 100644 --- a/src/test/java/org/caosdb/server/query/TestCQL.java +++ b/src/test/java/org/caosdb/server/query/TestCQL.java @@ -274,8 +274,9 @@ public class TestCQL { String issue131f = "FIND ename WITH (pname1.pname2 > 30) AND pname1.pname2 < 40"; // https://gitlab.com/caosdb/caosdb-server/-/issues/130 - String issue130 = + String issue130a = "SELECT 'name with spaces.and dot', 'name with spaces'.name, name with spaces.name, name with\\,comma and\\.dot and \\'single_quote.sub FROM ENTITY"; + String issue130b = "SELECT 'Wrapper' FROM RECORD TestRT"; @Test public void testQuery1() @@ -6940,16 +6941,11 @@ public class TestCQL { assertEquals(1e10, pov.getVDouble().doubleValue(), 0.0); } - /** - * Spaces and escaped dots in selects - * - * <p>String issue130 = "SELECT 'name with spaces.and dot', 'name with spaces'.name, name with - * spaces.name FROM ENTITY"; - */ + /** Spaces and escaped dots in selects */ @Test - public void testIssue130() { + public void testIssue130a() { CQLLexer lexer; - lexer = new CQLLexer(CharStreams.fromString(this.issue130)); + lexer = new CQLLexer(CharStreams.fromString(this.issue130a)); final CommonTokenStream tokens = new CommonTokenStream(lexer); final CQLParser parser = new CQLParser(tokens); @@ -6973,4 +6969,24 @@ public class TestCQL { assertEquals("name with,comma and.dot and 'single_quote", sfq.s.get(3).getSelector()); assertEquals("sub", sfq.s.get(3).getSubselection().toString()); } + + /** Single quotes around the selector */ + @Test + public void testIssue130b() { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(this.issue130b)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println(sfq.toStringTree(parser)); + + assertNotNull(sfq.s); + assertFalse(sfq.s.isEmpty()); + assertEquals(1, sfq.s.size()); + assertEquals("Wrapper", sfq.s.get(0).toString()); + assertEquals("Wrapper", sfq.s.get(0).getSelector()); + assertNull(sfq.s.get(0).getSubselection()); + } }