[ 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 10:45 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; // examples here don’t include NOT IN checks so let’s add a quick check for that too SELECT * from foo.bar where a NOT IN (1,2,3); // fails, requires allow filtering SELECT * from foo.bar where a NOT IN (1,2,3) ALLOW FILTERING; // should be empty SELECT * from foo.bar where a NOT IN (2,3,4) ALLOW FILTERING; SELECT * from foo.bar where a NOT IN (4,5,6) 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]: {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} > 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-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org