cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From slebre...@apache.org
Subject [1/2] cassandra git commit: Check for primary key columns in decodeCellName
Date Wed, 04 Nov 2015 10:41:04 GMT
Repository: cassandra
Updated Branches:
  refs/heads/trunk 724ba07a7 -> 5a1d6553e


Check for primary key columns in decodeCellName

patch by mike_tr_adamson; reviewed by slebresne for CASSANDRA-10608


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

Branch: refs/heads/trunk
Commit: 2c9976150fa2f033f8e10c906d699d966b1c437a
Parents: 8a8427d
Author: Mike Adamson <madamson@datastax.com>
Authored: Wed Oct 28 14:39:14 2015 +0000
Committer: Sylvain Lebresne <sylvain@datastax.com>
Committed: Wed Nov 4 11:39:02 2015 +0100

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../org/apache/cassandra/db/LegacyLayout.java   |  7 +-
 .../apache/cassandra/db/LegacyCellNameTest.java | 81 ++++++++++++++++++++
 3 files changed, 87 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/2c997615/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 9266386..e9f92c6 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 3.0
+ * Fix bug when adding a column to thrift with the same name than a primary key (CASSANDRA-10608)
  * Add client address argument to IAuthenticator::newSaslNegotiator (CASSANDRA-8068)
  * Fix implementation of LegacyLayout.LegacyBoundComparator (CASSANDRA-10602)
  * Don't use 'names query' read path for counters (CASSANDRA-10572)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/2c997615/src/java/org/apache/cassandra/db/LegacyLayout.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/LegacyLayout.java b/src/java/org/apache/cassandra/db/LegacyLayout.java
index 3c64443..91b7755 100644
--- a/src/java/org/apache/cassandra/db/LegacyLayout.java
+++ b/src/java/org/apache/cassandra/db/LegacyLayout.java
@@ -157,13 +157,16 @@ public abstract class LegacyLayout
             return new LegacyCellName(clustering, null, null);
 
         ColumnDefinition def = metadata.getColumnDefinition(column);
-        if (def == null)
+        if ((def == null) || def.isPrimaryKeyColumn())
         {
             // If it's a compact table, it means the column is in fact a "dynamic" one
             if (metadata.isCompactTable())
                 return new LegacyCellName(new Clustering(column), metadata.compactValueColumn(),
null);
 
-            throw new UnknownColumnException(metadata, column);
+            if (def == null)
+                throw new UnknownColumnException(metadata, column);
+            else
+                throw new IllegalArgumentException("Cannot add primary key column to partition
update");
         }
 
         ByteBuffer collectionElement = metadata.isCompound() ? CompositeType.extractComponent(cellname,
metadata.comparator.size() + 1) : null;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/2c997615/test/unit/org/apache/cassandra/db/LegacyCellNameTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/LegacyCellNameTest.java b/test/unit/org/apache/cassandra/db/LegacyCellNameTest.java
new file mode 100644
index 0000000..fa29b1e
--- /dev/null
+++ b/test/unit/org/apache/cassandra/db/LegacyCellNameTest.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cassandra.db;
+
+import org.junit.Test;
+
+import org.apache.cassandra.config.CFMetaData;
+
+import static junit.framework.Assert.assertTrue;
+
+public class LegacyCellNameTest
+{
+    @Test
+    public void testColumnSameNameAsPartitionKeyCompactStorage() throws Exception
+    {
+        CFMetaData cfm = CFMetaData.compile("CREATE TABLE cs (" +
+                                            "k int PRIMARY KEY, v int)" +
+                                            " WITH COMPACT STORAGE", "ks");
+
+        LegacyLayout.LegacyCellName cellName 
+            = LegacyLayout.decodeCellName(cfm, 
+                                          LegacyLayout.makeLegacyComparator(cfm)
+                                                      .fromString("k"));
+
+        assertTrue(cellName.column.isRegular());
+    }
+
+    @Test
+    public void testColumnSameNameAsClusteringKeyCompactStorage() throws Exception
+    {
+        CFMetaData cfm = CFMetaData.compile("CREATE TABLE cs (" +
+                                            "k int PRIMARY KEY, v int)" +
+                                            " WITH COMPACT STORAGE", "ks");
+
+        LegacyLayout.LegacyCellName cellName 
+            = LegacyLayout.decodeCellName(cfm, 
+                                          LegacyLayout.makeLegacyComparator(cfm)
+                                                      .fromString("column1"));
+
+        assertTrue(cellName.column.isRegular());
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testColumnSameNameAsPartitionKeyCql3() throws Exception
+    {
+        CFMetaData cfm = CFMetaData.compile("CREATE TABLE cs (" +
+                                            "k int PRIMARY KEY, v int)", "ks");
+
+        LegacyLayout.LegacyCellName cellName 
+            = LegacyLayout.decodeCellName(cfm, 
+                                          LegacyLayout.makeLegacyComparator(cfm)
+                                                      .fromString("k"));
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testColumnSameNameAsClusteringKeyCql3() throws Exception
+    {
+        CFMetaData cfm = CFMetaData.compile("CREATE TABLE cs (" +
+                                            "k int, c text, v int, PRIMARY KEY(k, c))", "ks");
+
+        LegacyLayout.LegacyCellName cellName 
+            = LegacyLayout.decodeCellName(cfm, 
+                                          LegacyLayout.makeLegacyComparator(cfm)
+                                                      .fromString("c"));
+    }
+}


Mime
View raw message