From 2e3727e3ff682dbab734aaccf641360bc62a8561 Mon Sep 17 00:00:00 2001 From: blerer Date: Fri, 4 Sep 2015 21:10:29 +0200 Subject: [PATCH] Allow range deletions in CQL patch by Benjamin Lerer; reviewed by Joshua McKenzie for CASSANDRA-6237 --- NEWS.txt | 6 +- doc/cql3/CQL.textile | 13 +- .../cassandra/config/ColumnDefinition.java | 6 +- .../cassandra/cql3/AbstractConditions.java | 65 ++ .../cassandra/cql3/ColumnConditions.java | 167 ++++ .../cassandra/cql3/ColumnIdentifier.java | 56 +- .../org/apache/cassandra/cql3/Conditions.java | 100 +++ src/java/org/apache/cassandra/cql3/Cql.g | 6 +- .../cassandra/cql3/IfExistsCondition.java | 36 + .../cassandra/cql3/IfNotExistsCondition.java | 36 + src/java/org/apache/cassandra/cql3/Json.java | 36 +- .../org/apache/cassandra/cql3/Operations.java | 135 +++ .../cassandra/cql3/SingleColumnRelation.java | 1 + .../cassandra/cql3/UpdateParameters.java | 9 +- .../restrictions/StatementRestrictions.java | 244 ++++-- .../cql3/statements/BatchStatement.java | 91 +- .../cql3/statements/CQL3CasRequest.java | 14 +- .../cql3/statements/DeleteStatement.java | 99 ++- .../statements/ModificationStatement.java | 795 ++++++++---------- .../cql3/statements/SelectStatement.java | 9 +- .../cql3/statements/StatementType.java | 138 +++ .../cql3/statements/UpdateStatement.java | 198 +++-- .../cql3/statements/UpdatesCollector.java | 130 +++ .../org/apache/cassandra/db/CBuilder.java | 9 +- .../apache/cassandra/db/RangeTombstone.java | 4 +- src/java/org/apache/cassandra/db/Slices.java | 9 + .../io/sstable/CQLSSTableWriter.java | 7 +- .../cassandra/cql3/MaterializedViewTest.java | 33 + .../cql3/validation/entities/UFAuthTest.java | 8 +- .../entities/UFIdentificationTest.java | 44 +- .../cql3/validation/operations/BatchTest.java | 79 +- .../validation/operations/DeleteTest.java | 681 ++++++++++++++- .../validation/operations/InsertTest.java | 233 +++++ .../InsertUpdateIfConditionTest.java | 28 +- .../validation/operations/UpdateTest.java | 447 ++++++++++ .../cassandra/db/RangeTombstoneListTest.java | 222 ++++- 36 files changed, 3398 insertions(+), 796 deletions(-) create mode 100644 src/java/org/apache/cassandra/cql3/AbstractConditions.java create mode 100644 src/java/org/apache/cassandra/cql3/ColumnConditions.java create mode 100644 src/java/org/apache/cassandra/cql3/Conditions.java create mode 100644 src/java/org/apache/cassandra/cql3/IfExistsCondition.java create mode 100644 src/java/org/apache/cassandra/cql3/IfNotExistsCondition.java create mode 100644 src/java/org/apache/cassandra/cql3/Operations.java create mode 100644 src/java/org/apache/cassandra/cql3/statements/StatementType.java create mode 100644 src/java/org/apache/cassandra/cql3/statements/UpdatesCollector.java diff --git a/NEWS.txt b/NEWS.txt index c7976b9ae1..af2f64cb5e 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -18,6 +18,11 @@ using the provided 'sstableupgrade' tool. New features ------------ + - Support for IN restrictions on any partition key component or clustering key + as well as support for EQ and IN multicolumn restrictions has been added to + UPDATE and DELETE statement. + - Support for single-column and multi-colum slice restrictions (>, >=, <= and <) + has been added to DELETE statements - nodetool rebuild_index accepts the index argument without the redundant table name - Materialized Views, which allow for server-side denormalization, is now @@ -35,7 +40,6 @@ New features you do not run repair for a long time, you will keep all tombstones around which can cause other problems. - Upgrading --------- - Max mutation size is now configurable via max_mutation_size_in_kb setting in diff --git a/doc/cql3/CQL.textile b/doc/cql3/CQL.textile index 74ed64e9e4..0e045289a9 100644 --- a/doc/cql3/CQL.textile +++ b/doc/cql3/CQL.textile @@ -863,8 +863,11 @@ bc(syntax).. ::= ( AND )* ::= '=' - | IN '(' ( ( ',' )* )? ')' + | '(' (',' )* ')' '=' + | IN '(' ( ( ',' )* )? ')' | IN '?' + | '(' (',' )* ')' IN '(' ( ( ',' )* )? ')' + | '(' (',' )* ')' IN '?'