You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Benjamin Lerer (Jira)" <ji...@apache.org> on 2021/07/05 12:37:00 UTC

[jira] [Commented] (CASSANDRA-16510) Make ReadCommand::toCQLString return valid CQL

    [ https://issues.apache.org/jira/browse/CASSANDRA-16510?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17374797#comment-17374797 ] 

Benjamin Lerer commented on CASSANDRA-16510:
--------------------------------------------

+1. Thanks for the extensive tests :-)

> Make ReadCommand::toCQLString return valid CQL
> ----------------------------------------------
>
>                 Key: CASSANDRA-16510
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-16510
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: CQL/Syntax, Observability/Logging
>            Reporter: Andres de la Peña
>            Assignee: Andres de la Peña
>            Priority: Normal
>             Fix For: 4.1
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> The method {{ReadCommand::toCQLString}} doesn't always return queries that are valid CQL. For example, queries for a table without clustering columns always add the {{WHERE}} keyword even if there isn't a restriction following it:
> {code:java}
> CREATE TABLE t (k int PRIMARY KEY, v int);
> SELECT * FROM t; 
> -- toCQLString 3.0:        SELECT * FROM k.t WHERE () = () LIMIT 100
> -- toCQLString 3.11/trunk: SELECT * FROM k.t WHERE  LIMIT 100
> {code}
> Also, case sensitive names and text values are not properly quoted:
> {code:java}
> CREATE TABLE "T" ("K" text, "C" text, "V" text, PRIMARY KEY("K", "C"));
> SELECT * FROM "T" WHERE "K" = 'a' AND "C" = 'b' AND "V" = 'c' ALLOW FILTERING;
> -- toCQLString 3.0/3.11/trunk: SELECT * FROM k.T WHERE K = a AND V = c AND (C) = (b) LIMIT 100
> {code}
> Similar problems can be found on selections of collection items:
> {code:java}
> CREATE TABLE k.t (k int, c int, s set<text>,  m map<text, text>, PRIMARY KEY(k, c));
> SELECT s['a'] FROM t;
> -- toCQLString trunk: SELECT s[a] FROM k.t LIMIT 100
> SELECT * FROM t WHERE m['a'] = 'b' ALLOW FILTERING;
> -- toCQLString 3.0/3.11/trunk: SELECT * FROM k.t WHERE m[a] = b LIMIT 100
> {code}
> Some similar problems with more impact than the described above are already being addressed in CASSANDRA-16483 and CASSANDRA-16479.
> I think we should add more exhaustive JUnit tests for {{ReadCommand::toCQLString}}, making sure that its output is parseable and equivalent to the original command. Also, we probably should make sure that we have {{toCQLString}} methods in all the query components that are used by {{ReadCommand::toCQLString}} (selection, filters, etc.). This way we can use them instead of generic {{toString}} methods, making it clear that they are supposed to return valid CQL.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org