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 2012/05/03 09:30:04 UTC

[2/5] git commit: Fix CQL3 prepared statements in BATCH

Fix CQL3 prepared statements in BATCH

patch by slebresne; reviewed by xedin for CASSANDRA-4202


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/6d388814
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/6d388814
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/6d388814

Branch: refs/heads/trunk
Commit: 6d38881430c9010b2249a91953fe1bae038b0364
Parents: 5f1c5ad
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Thu May 3 09:26:18 2012 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Thu May 3 09:26:18 2012 +0200

----------------------------------------------------------------------
 CHANGES.txt                                        |    1 +
 .../cassandra/cql3/statements/BatchStatement.java  |   16 ++++++++-----
 .../cassandra/cql3/statements/DeleteStatement.java |   13 ++++++++---
 .../cql3/statements/ModificationStatement.java     |    3 ++
 .../cassandra/cql3/statements/UpdateStatement.java |   17 +++++++++-----
 5 files changed, 34 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d388814/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 9a0569f..a655645 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -27,6 +27,7 @@
  * (cql3) Add ReversedType support (CASSANDRA-4004)
  * (cql3) Add timeuuid type (CASSANDRA-4194)
  * (cql3) Minor fixes (CASSANDRA-4185)
+ * (cql3) Fix prepared statement in BATCH (CASSANDRA-4202)
 Merged from 1.0:
  * Fix super columns bug where cache is not updated (CASSANDRA-4190)
  * fix maxTimestamp to include row tombstones (CASSANDRA-4116)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d388814/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 8fc5f07..0f06a66 100644
--- a/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java
@@ -147,16 +147,20 @@ public class BatchStatement extends ModificationStatement
         return batch;
     }
 
-    public ParsedStatement.Prepared prepare() throws InvalidRequestException
+    public ParsedStatement.Prepared prepare(AbstractType[] boundTypes) throws InvalidRequestException
     {
-        List<AbstractType<?>> boundTypes = new ArrayList<AbstractType<?>>(statements.size());
-        // XXX: we use our knowledge that Modification don't create new
-        // statement upon call to prepare()
+        // XXX: we use our knowledge that Modification don't create new statement upon call to prepare()
         for (ModificationStatement statement : statements)
         {
-            boundTypes.addAll(statement.prepare().boundTypes);
+            statement.prepare(boundTypes);
         }
-        return new ParsedStatement.Prepared(this, boundTypes);
+        return new ParsedStatement.Prepared(this, Arrays.<AbstractType<?>>asList(boundTypes));
+    }
+
+    public ParsedStatement.Prepared prepare() throws InvalidRequestException
+    {
+        AbstractType[] boundTypes = new AbstractType[getBoundsTerms()];
+        return prepare(boundTypes);
     }
 
     public String toString()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d388814/src/java/org/apache/cassandra/cql3/statements/DeleteStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/DeleteStatement.java b/src/java/org/apache/cassandra/cql3/statements/DeleteStatement.java
index b82e066..f9f6c4f 100644
--- a/src/java/org/apache/cassandra/cql3/statements/DeleteStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/DeleteStatement.java
@@ -145,13 +145,18 @@ public class DeleteStatement extends ModificationStatement
         return rm;
     }
 
-    public ParsedStatement.Prepared prepare() throws InvalidRequestException
+    public ParsedStatement.Prepared prepare(AbstractType[] boundTypes) throws InvalidRequestException
     {
         CFMetaData metadata = ThriftValidation.validateColumnFamily(keyspace(), columnFamily());
         cfDef = metadata.getCfDef();
-        AbstractType[] types = new AbstractType[getBoundsTerms()];
-        UpdateStatement.processKeys(cfDef, whereClause, processedKeys, types);
-        return new ParsedStatement.Prepared(this, Arrays.<AbstractType<?>>asList(types));
+        UpdateStatement.processKeys(cfDef, whereClause, processedKeys, boundTypes);
+        return new ParsedStatement.Prepared(this, Arrays.<AbstractType<?>>asList(boundTypes));
+    }
+
+    public ParsedStatement.Prepared prepare() throws InvalidRequestException
+    {
+        AbstractType[] boundTypes = new AbstractType[getBoundsTerms()];
+        return prepare(boundTypes);
     }
 
     public String toString()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d388814/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 8841570..e5a9ffd 100644
--- a/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
@@ -25,6 +25,7 @@ import java.util.concurrent.TimeoutException;
 import org.apache.cassandra.auth.Permission;
 import org.apache.cassandra.cql3.*;
 import org.apache.cassandra.db.IMutation;
+import org.apache.cassandra.db.marshal.AbstractType;
 import org.apache.cassandra.service.ClientState;
 import org.apache.cassandra.service.StorageProxy;
 import org.apache.cassandra.thrift.ConsistencyLevel;
@@ -125,4 +126,6 @@ public abstract class ModificationStatement extends CFStatement implements CQLSt
      * @throws InvalidRequestException on invalid requests
      */
     public abstract List<IMutation> getMutations(ClientState clientState, List<ByteBuffer> variables) throws InvalidRequestException;
+
+    public abstract ParsedStatement.Prepared prepare(AbstractType[] boundTypes) throws InvalidRequestException;
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d388814/src/java/org/apache/cassandra/cql3/statements/UpdateStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/UpdateStatement.java b/src/java/org/apache/cassandra/cql3/statements/UpdateStatement.java
index 186ee80..e05a823 100644
--- a/src/java/org/apache/cassandra/cql3/statements/UpdateStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/UpdateStatement.java
@@ -234,10 +234,9 @@ public class UpdateStatement extends ModificationStatement
         }
     }
 
-    public ParsedStatement.Prepared prepare() throws InvalidRequestException
+    public ParsedStatement.Prepared prepare(AbstractType[] boundTypes) throws InvalidRequestException
     {
         boolean hasCommutativeOperation = false;
-        AbstractType[] types = new AbstractType[getBoundsTerms()];
 
         if (columns != null)
         {
@@ -275,7 +274,7 @@ public class UpdateStatement extends ModificationStatement
 
                 Term value = columnValues.get(i);
                 if (value.isBindMarker())
-                    types[value.bindIndex] = name.type;
+                    boundTypes[value.bindIndex] = name.type;
 
                 switch (name.kind)
                 {
@@ -314,15 +313,21 @@ public class UpdateStatement extends ModificationStatement
                             throw new InvalidRequestException(String.format("Multiple definition found for column %s", name));
                         Operation op = entry.getValue();
                         if (op.value.isBindMarker())
-                            types[op.value.bindIndex] = name.type;
+                            boundTypes[op.value.bindIndex] = name.type;
                         processedColumns.put(name.name, op);
                         break;
                 }
             }
-            processKeys(cfDef, whereClause, processedKeys, types);
+            processKeys(cfDef, whereClause, processedKeys, boundTypes);
         }
 
-        return new ParsedStatement.Prepared(this, Arrays.<AbstractType<?>>asList(types));
+        return new ParsedStatement.Prepared(this, Arrays.<AbstractType<?>>asList(boundTypes));
+    }
+
+    public ParsedStatement.Prepared prepare() throws InvalidRequestException
+    {
+        AbstractType[] types = new AbstractType[getBoundsTerms()];
+        return prepare(types);
     }
 
     // Reused by DeleteStatement