You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by bl...@apache.org on 2015/09/09 22:12:57 UTC

[2/3] cassandra git commit: Fix update/delete behavior for static lists

Fix update/delete behavior for static lists

patch by Brett Snyder; reviewed by Benjamin Lerer for CASSANDRA-9838


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

Branch: refs/heads/cassandra-2.2
Commit: 21065423c6ce5a92194994bfa9e441d1d2b86b0a
Parents: 04e789b
Author: Brett Snyder <bs...@gmail.com>
Authored: Wed Sep 9 21:49:14 2015 +0200
Committer: blerer <be...@datastax.com>
Committed: Wed Sep 9 21:49:14 2015 +0200

----------------------------------------------------------------------
 .../cql3/statements/ModificationStatement.java  |  6 ++++-
 .../validation/entities/CollectionsTest.java    | 23 ++++++++++++++++++++
 2 files changed, 28 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/21065423/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 876c5e4..37b46ae 100644
--- a/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
@@ -29,6 +29,7 @@ import org.apache.cassandra.config.ColumnDefinition;
 import org.apache.cassandra.config.Schema;
 import org.apache.cassandra.cql3.*;
 import org.apache.cassandra.db.*;
+import org.apache.cassandra.db.composites.AbstractCellNameType;
 import org.apache.cassandra.db.composites.CBuilder;
 import org.apache.cassandra.db.composites.Composite;
 import org.apache.cassandra.db.filter.ColumnSlice;
@@ -446,7 +447,10 @@ public abstract class ModificationStatement implements CQLStatement
             if (row.cf == null || row.cf.isEmpty())
                 continue;
 
-            Iterator<CQL3Row> iter = cfm.comparator.CQL3RowBuilder(cfm, now).group(row.cf.getSortedColumns().iterator());
+            CQL3Row.RowIterator iter = cfm.comparator.CQL3RowBuilder(cfm, now).group(row.cf.getSortedColumns().iterator());
+            if(iter.getStaticRow() != null) {
+                map.put(row.key.getKey(), iter.getStaticRow());
+            }
             if (iter.hasNext())
             {
                 map.put(row.key.getKey(), iter.next());

http://git-wip-us.apache.org/repos/asf/cassandra/blob/21065423/test/unit/org/apache/cassandra/cql3/validation/entities/CollectionsTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/CollectionsTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/CollectionsTest.java
index 0241d4f..31dd5a6 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/entities/CollectionsTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/entities/CollectionsTest.java
@@ -485,4 +485,27 @@ public class CollectionsTest extends CQLTester
         assertInvalid("alter table %s add v set<int>");
     }
 
+
+    /**
+     * Test for 9838.
+     */
+    @Test
+    public void testUpdateStaticList() throws Throwable
+    {
+        createTable("CREATE TABLE %s (k1 text, k2 text, s_list list<int> static, PRIMARY KEY (k1, k2))");
+
+        execute("insert into %s (k1, k2) VALUES ('a','b')");
+        execute("update %s set s_list = s_list + [0] where k1='a'");
+        assertRows(execute("select s_list from %s where k1='a'"), row(list(0)));
+
+        execute("update %s set s_list[0] = 100 where k1='a'");
+        assertRows(execute("select s_list from %s where k1='a'"), row(list(100)));
+
+        execute("update %s set s_list = s_list + [0] where k1='a'");
+        assertRows(execute("select s_list from %s where k1='a'"), row(list(100, 0)));
+
+        execute("delete s_list[0] from %s where k1='a'");
+        assertRows(execute("select s_list from %s where k1='a'"), row(list(0)));
+    }
+
 }