You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Bret McGuire (Jira)" <ji...@apache.org> on 2024/10/02 21:27:00 UTC
[jira] [Comment Edited] (CASSANDRA-19930) Query builder support for NOT CQL syntax
[ https://issues.apache.org/jira/browse/CASSANDRA-19930?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17886511#comment-17886511 ]
Bret McGuire edited comment on CASSANDRA-19930 at 10/2/24 9:26 PM:
-------------------------------------------------------------------
Samples adapted from [SelectTest.testFilteringWithoutIndicesWithCollections()|https://github.com/apache/cassandra/blob/trunk/test/unit/org/apache/cassandra/cql3/validation/operations/SelectTest.java#L1367]:
{noformat}
CREATE KEYSPACE foo WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
CREATE TABLE foo.bar (a int, b int, c list<int>, d set<int>, e map<int, int>, PRIMARY KEY (a, b));
INSERT INTO foo.bar (a, b, c, d, e) VALUES (1, 2, [1, 6], {2, 12}, {1: 6});
INSERT INTO foo.bar (a, b, c, d, e) VALUES (1, 3, [3, 2], {6, 4}, {3: 2});
INSERT INTO foo.bar (a, b, c, d, e) VALUES (1, 4, [1, 2], {2, 4}, {1: 2});
INSERT INTO foo.bar (a, b, c, d, e) VALUES (2, 3, [3, 6], {6, 12}, {3: 6});
// And then adding the new tests
// lists
SELECT * FROM foo.bar WHERE c NOT CONTAINS 2; // fails, requires allow filtering
SELECT * FROM foo.bar WHERE c NOT CONTAINS 2 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE c NOT CONTAINS 2 AND c NOT CONTAINS 3 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE c CONTAINS 2 AND c NOT CONTAINS 3 ALLOW FILTERING;
// sets
SELECT * FROM foo.bar WHERE d NOT CONTAINS 4; // fails, requires allow filtering
SELECT * FROM foo.bar WHERE d NOT CONTAINS 4 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE d NOT CONTAINS 4 AND d NOT CONTAINS 6 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE d CONTAINS 4 AND d NOT CONTAINS 6 ALLOW FILTERING;
// maps
SELECT * FROM foo.bar WHERE e NOT CONTAINS 2; // fails, requires allow filtering
SELECT * FROM foo.bar WHERE e NOT CONTAINS 2 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE e NOT CONTAINS KEY 1 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE e CONTAINS 2 AND e NOT CONTAINS KEY 1 ALLOW FILTERING;
// = & != enhancements
INSERT INTO foo.bar (a, b, c, d, e) VALUES (1, 2, [1, 6], {2, 12}, {1: 6});
INSERT INTO foo.bar (a, b, c, d, e) VALUES (1, 3, [3, 2], {6, 4}, {3: 2});
INSERT INTO foo.bar (a, b, c, d, e) VALUES (1, 4, [1, 2], {2, 4}, {1: 2});
INSERT INTO foo.bar (a, b, c, d, e) VALUES (2, 3, [3, 6], {6, 12}, {3: 6});
SELECT * FROM foo.bar WHERE e[1] != 6 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE e[1] != 6 AND e[3] != 2 ALLOW FILTERING; // should be empty
SELECT * FROM foo.bar WHERE e[1] = 6 AND e[3] = 2 ALLOW FILTERING; // should be empty
SELECT * FROM foo.bar WHERE e CONTAINS KEY 1 AND e[1] != 6 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE e CONTAINS KEY 1 AND e NOT CONTAINS 2 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE c CONTAINS 2 AND d CONTAINS 4 AND e NOT CONTAINS KEY 1 ALLOW FILTERING;
{noformat}
was (Author: JIRAUSER304104):
Samples adapted from [SelectTest.testFilteringWithoutIndicesWithCollections()|https://github.com/apache/cassandra/blob/trunk/test/unit/org/apache/cassandra/cql3/validation/operations/SelectTest.java#L1367]:
```
CREATE KEYSPACE foo WITH REPLICATION = \{ 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
CREATE TABLE foo.bar (a int, b int, c list<int>, d set<int>, e map<int, int>, PRIMARY KEY (a, b));
INSERT INTO foo.bar (a, b, c, d, e) VALUES (1, 2, [1, 6], \{2, 12}, \{1: 6});
INSERT INTO foo.bar (a, b, c, d, e) VALUES (1, 3, [3, 2], \{6, 4}, \{3: 2});
INSERT INTO foo.bar (a, b, c, d, e) VALUES (1, 4, [1, 2], \{2, 4}, \{1: 2});
INSERT INTO foo.bar (a, b, c, d, e) VALUES (2, 3, [3, 6], \{6, 12}, \{3: 6});
// And then adding the new tests
// lists
SELECT * FROM foo.bar WHERE c NOT CONTAINS 2; // fails, requires allow filtering
SELECT * FROM foo.bar WHERE c NOT CONTAINS 2 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE c NOT CONTAINS 2 AND c NOT CONTAINS 3 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE c CONTAINS 2 AND c NOT CONTAINS 3 ALLOW FILTERING;
// sets
SELECT * FROM foo.bar WHERE d NOT CONTAINS 4; // fails, requires allow filtering
SELECT * FROM foo.bar WHERE d NOT CONTAINS 4 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE d NOT CONTAINS 4 AND d NOT CONTAINS 6 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE d CONTAINS 4 AND d NOT CONTAINS 6 ALLOW FILTERING;
// maps
SELECT * FROM foo.bar WHERE e NOT CONTAINS 2; // fails, requires allow filtering
SELECT * FROM foo.bar WHERE e NOT CONTAINS 2 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE e NOT CONTAINS KEY 1 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE e CONTAINS 2 AND e NOT CONTAINS KEY 1 ALLOW FILTERING;
// = & != enhancements
INSERT INTO foo.bar (a, b, c, d, e) VALUES (1, 2, [1, 6], \{2, 12}, \{1: 6});
INSERT INTO foo.bar (a, b, c, d, e) VALUES (1, 3, [3, 2], \{6, 4}, \{3: 2});
INSERT INTO foo.bar (a, b, c, d, e) VALUES (1, 4, [1, 2], \{2, 4}, \{1: 2});
INSERT INTO foo.bar (a, b, c, d, e) VALUES (2, 3, [3, 6], \{6, 12}, \{3: 6});
SELECT * FROM foo.bar WHERE e[1] != 6 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE e[1] != 6 AND e[3] != 2 ALLOW FILTERING; // should be empty
SELECT * FROM foo.bar WHERE e[1] = 6 AND e[3] = 2 ALLOW FILTERING; // should be empty
SELECT * FROM foo.bar WHERE e CONTAINS KEY 1 AND e[1] != 6 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE e CONTAINS KEY 1 AND e NOT CONTAINS 2 ALLOW FILTERING;
SELECT * FROM foo.bar WHERE c CONTAINS 2 AND d CONTAINS 4 AND e NOT CONTAINS KEY 1 ALLOW FILTERING;
```
> Query builder support for NOT CQL syntax
> ----------------------------------------
>
> Key: CASSANDRA-19930
> URL: https://issues.apache.org/jira/browse/CASSANDRA-19930
> Project: Cassandra
> Issue Type: Bug
> Components: Client/java-driver
> Reporter: Bret McGuire
> Assignee: Bret McGuire
> Priority: Normal
>
> CEP-29 describes a CQL syntax enhancement to support the NOT keyword as a negation operation for relations. This change looks to be coming for 5.1 based on [CASSANDRA-18584|https://issues.apache.org/jira/browse/CASSANDRA-18584] and [this commit|https://github.com/apache/cassandra/commit/e0074a31ef26adaebff6ac0657e4471fc805f93f].
>
> We should add support for this construction to the query builder.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org