[ 
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

Reply via email to