Prohibit reversed counter type as part of the primary key. Check the actual CQL3Type to get the base type from the abstract type when comparing against CounterColumnType.
Patch by Brett Snyder; reviewed by tjake for CASSANDRA-9395 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/411c5601 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/411c5601 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/411c5601 Branch: refs/heads/trunk Commit: 411c56014d3eb8fdd001c2381c376c968cdef499 Parents: 08b1efe Author: T Jake Luciani <j...@apache.org> Authored: Fri May 6 11:36:04 2016 -0400 Committer: T Jake Luciani <j...@apache.org> Committed: Fri May 6 14:19:57 2016 -0400 ---------------------------------------------------------------------- CHANGES.txt | 4 +++- .../cassandra/cql3/statements/CreateTableStatement.java | 4 ++-- .../cassandra/cql3/validation/entities/CountersTest.java | 10 ++++++++++ 3 files changed, 15 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/411c5601/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 2e2b6af..af8be97 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,9 @@ 3.0.7 * Refactor Materialized View code (CASSANDRA-11475) * Update Java Driver (CASSANDRA-11615) - +Merged from 2.2: + * Prohibit Reversed Counter type as part of the PK (CASSANDRA-9395) + 3.0.6 * Disallow creating view with a static column (CASSANDRA-11602) * Reduce the amount of object allocations caused by the getFunctions methods (CASSANDRA-11593) http://git-wip-us.apache.org/repos/asf/cassandra/blob/411c5601/src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java b/src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java index c19f970..04f76d3 100644 --- a/src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java @@ -241,7 +241,7 @@ public class CreateTableStatement extends SchemaAlteringStatement { stmt.keyAliases.add(alias); AbstractType<?> t = getTypeAndRemove(stmt.columns, alias); - if (t instanceof CounterColumnType) + if (t.asCQL3Type().getType() instanceof CounterColumnType) throw new InvalidRequestException(String.format("counter type is not supported for PRIMARY KEY part %s", alias)); if (staticColumns.contains(alias)) throw new InvalidRequestException(String.format("Static column %s cannot be part of the PRIMARY KEY", alias)); @@ -255,7 +255,7 @@ public class CreateTableStatement extends SchemaAlteringStatement stmt.columnAliases.add(t); AbstractType<?> type = getTypeAndRemove(stmt.columns, t); - if (type instanceof CounterColumnType) + if (type.asCQL3Type().getType() instanceof CounterColumnType) throw new InvalidRequestException(String.format("counter type is not supported for PRIMARY KEY part %s", t)); if (staticColumns.contains(t)) throw new InvalidRequestException(String.format("Static column %s cannot be part of the PRIMARY KEY", t)); http://git-wip-us.apache.org/repos/asf/cassandra/blob/411c5601/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java index 89fd767..c9939c8 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/CountersTest.java @@ -186,4 +186,14 @@ public class CountersTest extends CQLTester "SELECT * FROM %s WHERE b = null ALLOW FILTERING"); } } + + /** + * Test for the validation bug of #9395. + */ + @Test + public void testProhibitReversedCounterAsPartOfPrimaryKey() throws Throwable + { + assertInvalidThrowMessage("counter type is not supported for PRIMARY KEY part a", + InvalidRequestException.class, String.format("CREATE TABLE %s.%s (a counter, b int, PRIMARY KEY (b, a)) WITH CLUSTERING ORDER BY (a desc);", KEYSPACE, createTableName())); + } }