You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by xe...@apache.org on 2012/08/15 12:12:30 UTC

git commit: (cql3) fix defining more than one PK to be invalid patch by Sylvain Lebresne; reviewed by Pavel Yaskevich for CASSANDRA-4477

Updated Branches:
  refs/heads/trunk afbbe1abc -> fe784f58e


(cql3) fix defining more than one PK to be invalid
patch by Sylvain Lebresne; reviewed by Pavel Yaskevich for CASSANDRA-4477


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

Branch: refs/heads/trunk
Commit: fe784f58e6520c6180e5c02e2b919f3d0edc49d1
Parents: afbbe1a
Author: Pavel Yaskevich <xe...@apache.org>
Authored: Wed Aug 15 12:57:20 2012 +0300
Committer: Pavel Yaskevich <xe...@apache.org>
Committed: Wed Aug 15 12:57:20 2012 +0300

----------------------------------------------------------------------
 CHANGES.txt                                        |    1 +
 src/java/org/apache/cassandra/cql3/Cql.g           |    6 ++--
 .../statements/CreateColumnFamilyStatement.java    |   17 ++++++++-------
 3 files changed, 13 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/fe784f58/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 5d878bc..5a2848d 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -35,6 +35,7 @@
  * (cql3) Add support for row key composites (CASSANDRA-4179)
  * improve DynamicEndpointSnitch by using reservoir sampling (CASSANDRA-4038)
  * (cql3) Add support for 2ndary indexes (CASSANDRA-3680)
+ * (cql3) fix defining more than one PK to be invalid (CASSANDRA-4477)
 
 
 1.1.4

http://git-wip-us.apache.org/repos/asf/cassandra/blob/fe784f58/src/java/org/apache/cassandra/cql3/Cql.g
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/Cql.g b/src/java/org/apache/cassandra/cql3/Cql.g
index cb5a265..5a67820 100644
--- a/src/java/org/apache/cassandra/cql3/Cql.g
+++ b/src/java/org/apache/cassandra/cql3/Cql.g
@@ -370,13 +370,13 @@ cfamDefinition[CreateColumnFamilyStatement.RawStatement expr]
     ;
 
 cfamColumns[CreateColumnFamilyStatement.RawStatement expr]
-    : k=cident v=comparatorType { $expr.addDefinition(k, v); } (K_PRIMARY K_KEY { $expr.addKeyAlias(k); })?
+    : k=cident v=comparatorType { $expr.addDefinition(k, v); } (K_PRIMARY K_KEY { $expr.addKeyAliases(Collections.singletonList(k)); })?
     | K_PRIMARY K_KEY '(' pkDef[expr] (',' c=cident { $expr.addColumnAlias(c); } )* ')'
     ;
 
 pkDef[CreateColumnFamilyStatement.RawStatement expr]
-    : k=cident { $expr.addKeyAlias(k); }
-    | '(' k1=cident { $expr.addKeyAlias(k1); } ( ',' kn=cident { $expr.addKeyAlias(kn); } )* ')'
+    : k=cident { $expr.addKeyAliases(Collections.singletonList(k)); }
+    | '(' { List<ColumnIdentifier> l = new ArrayList<ColumnIdentifier>(); } k1=cident { l.add(k1); } ( ',' kn=cident { l.add(kn); } )* ')' { $expr.addKeyAliases(l); }
     ;
 
 cfamProperty[CreateColumnFamilyStatement.RawStatement expr]

http://git-wip-us.apache.org/repos/asf/cassandra/blob/fe784f58/src/java/org/apache/cassandra/cql3/statements/CreateColumnFamilyStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/CreateColumnFamilyStatement.java b/src/java/org/apache/cassandra/cql3/statements/CreateColumnFamilyStatement.java
index 0f14ba1..b8618b0 100644
--- a/src/java/org/apache/cassandra/cql3/statements/CreateColumnFamilyStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/CreateColumnFamilyStatement.java
@@ -133,7 +133,7 @@ public class CreateColumnFamilyStatement extends SchemaAlteringStatement
         private final Map<ColumnIdentifier, ParsedType> definitions = new HashMap<ColumnIdentifier, ParsedType>();
         private final CFPropDefs properties = new CFPropDefs();
 
-        private final List<ColumnIdentifier> keyAliases = new ArrayList<ColumnIdentifier>();
+        private final List<List<ColumnIdentifier>> keyAliases = new ArrayList<List<ColumnIdentifier>>();
         private final List<ColumnIdentifier> columnAliases = new ArrayList<ColumnIdentifier>();
         private final Map<ColumnIdentifier, Boolean> definedOrdering = new HashMap<ColumnIdentifier, Boolean>();
 
@@ -181,12 +181,13 @@ public class CreateColumnFamilyStatement extends SchemaAlteringStatement
                     stmt.columns.put(id, pt.getType()); // we'll remove what is not a column below
                 }
 
-                // Ensure that at least one key has been specified.
-                if (keyAliases.size() == 0)
-                    throw new InvalidRequestException("You must specify a PRIMARY KEY");
+                if (keyAliases.size() != 1)
+                    throw new InvalidRequestException("You must specify one and only one PRIMARY KEY");
 
-                List<AbstractType<?>> keyTypes = new ArrayList<AbstractType<?>>(keyAliases.size());
-                for (ColumnIdentifier alias : keyAliases)
+                List<ColumnIdentifier> kAliases = keyAliases.get(0);
+
+                List<AbstractType<?>> keyTypes = new ArrayList<AbstractType<?>>(kAliases.size());
+                for (ColumnIdentifier alias : kAliases)
                 {
                     stmt.keyAliases.add(alias.key);
                     AbstractType<?> t = getTypeAndRemove(stmt.columns, alias);
@@ -323,9 +324,9 @@ public class CreateColumnFamilyStatement extends SchemaAlteringStatement
             definitions.put(def, type);
         }
 
-        public void addKeyAlias(ColumnIdentifier alias)
+        public void addKeyAliases(List<ColumnIdentifier> aliases)
         {
-            keyAliases.add(alias);
+            keyAliases.add(aliases);
         }
 
         public void addColumnAlias(ColumnIdentifier alias)