You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2014/08/18 10:03:03 UTC
git commit: Properly reject operations on list index
Repository: cassandra
Updated Branches:
refs/heads/cassandra-2.0 b87741c07 -> 700e81634
Properly reject operations on list index
patch by slebresne; reviewed by thobbs for CASSANDRA-7499
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/700e8163
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/700e8163
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/700e8163
Branch: refs/heads/cassandra-2.0
Commit: 700e81634de3dde2d9c43bdb78716a7bb994c2ae
Parents: b87741c
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Mon Aug 18 10:01:58 2014 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Mon Aug 18 10:01:58 2014 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/cql3/statements/BatchStatement.java | 3 +++
.../cql3/statements/ModificationStatement.java | 18 ++++++++++++++++--
3 files changed, 20 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/700e8163/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 94169c1..f489702 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
2.0.10
+ * Properly reject operations on list index with conditions (CASSANDRA-7499)
* (Hadoop) allow ACFRW to limit nodes to local DC (CASSANDRA-7252)
* (cqlsh) Wait up to 10 sec for a tracing session (CASSANDRA-7222)
* Fix NPE in FileCacheService.sizeInBytes (CASSANDRA-7756)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/700e8163/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java b/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java
index 8fc1ecc..cbe3016 100644
--- a/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java
@@ -125,6 +125,9 @@ public class BatchStatement implements CQLStatement, MeasurableForPreparedCache
throw new InvalidRequestException("Timestamp must be set either on BATCH or individual statements");
statement.validate(state);
+
+ if (hasConditions && statement.requiresRead())
+ throw new InvalidRequestException("Operations using list indexes are not allowed with IF conditions");
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/700e8163/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java b/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
index 11aa0b1..99dd9d9 100644
--- a/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
@@ -151,8 +151,14 @@ public abstract class ModificationStatement implements CQLStatement, MeasurableF
public void validate(ClientState state) throws InvalidRequestException
{
- if (hasConditions() && attrs.isTimestampSet())
- throw new InvalidRequestException("Cannot provide custom timestamp for conditional update");
+ if (hasConditions())
+ {
+ if (attrs.isTimestampSet())
+ throw new InvalidRequestException("Cannot provide custom timestamp for conditional update");
+
+ if (requiresRead())
+ throw new InvalidRequestException("Operations using list indexes are not allowed with IF conditions");
+ }
if (isCounter())
{
@@ -439,6 +445,14 @@ public abstract class ModificationStatement implements CQLStatement, MeasurableF
return null;
}
+ public boolean requiresRead()
+ {
+ for (Operation op : columnOperations)
+ if (op.requiresRead())
+ return true;
+ return false;
+ }
+
protected Map<ByteBuffer, ColumnGroupMap> readRequiredRows(Collection<ByteBuffer> partitionKeys, ColumnNameBuilder clusteringPrefix, boolean local, ConsistencyLevel cl)
throws RequestExecutionException, RequestValidationException
{