David Capwell created CASSANDRA-17919:
-----------------------------------------

             Summary: Capital P gets confused in the parser for a Duration in 
places where IDENT are needed
                 Key: CASSANDRA-17919
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-17919
             Project: Cassandra
          Issue Type: Bug
          Components: CQL/Syntax
            Reporter: David Capwell


This was found while adding Accord Transaction syntax into CQL and fuzz testing 
to validate all possible cases… in doing this the following was found

{code}
String query = "BEGIN TRANSACTION\n" +
                           "  LET P = (SELECT v FROM " + keyspace + ".tbl WHERE 
k=? AND c=?);\n" +
                           "  LET row2 = (SELECT v FROM " + keyspace + ".tbl 
WHERE k=? AND c=?);\n" +
                           "  SELECT v FROM " + keyspace + ".tbl WHERE k=? AND 
c=?;\n" +
                           "  IF P IS NULL AND row2.v = ? THEN\n" +
                           "    INSERT INTO " + keyspace + ".tbl (k, c, v) 
VALUES (?, ?, ?);\n" +
                           "  END IF\n" +
                           "COMMIT TRANSACTION";
{code}

Fails with

{code}
SyntaxException: line 2:6 mismatched input 'P' expecting IDENT (BEGIN 
TRANSACTION  LET [P]...)
{code}

The new LET syntax found this, but was able to reproduce in other cases

{code}
cqlsh:ks> CREATE TABLE P (k INT PRIMARY KEY);
SyntaxException: line 1:13 no viable alternative at input 'P' (CREATE TABLE 
[P]...)
cqlsh:ks>
cqlsh:ks> CREATE TABLE p (k INT PRIMARY KEY);
cqlsh:ks>
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to