Repository: cassandra Updated Branches: refs/heads/cassandra-2.2 99b82dbb4 -> a68f8bd70
Forbid compact clustering column type changes in ALTER TABLE patch by Aleksey Yeschenko; reviewed by Sylvain Lebresne for CASSANDRA-8879 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5414950d Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5414950d Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5414950d Branch: refs/heads/cassandra-2.2 Commit: 5414950d6a42a2f7d41dec6427cbf210dd7d99af Parents: a8e8a67 Author: Aleksey Yeschenko <alek...@apache.org> Authored: Wed Nov 11 18:45:50 2015 +0000 Committer: Aleksey Yeschenko <alek...@apache.org> Committed: Tue Nov 17 16:44:37 2015 +0000 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../cassandra/cql3/statements/AlterTableStatement.java | 3 +++ .../cassandra/cql3/validation/operations/AlterTest.java | 8 ++++++++ 3 files changed, 12 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/5414950d/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index b6b394a..eea14c8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.1.12 + * Forbid compact clustering column type changes in ALTER TABLE (CASSANDRA-8879) * Reject incremental repair with subrange repair (CASSANDRA-10422) * Add a nodetool command to refresh size_estimates (CASSANDRA-9579) * Shutdown compaction in drain to prevent leak (CASSANDRA-10079) http://git-wip-us.apache.org/repos/asf/cassandra/blob/5414950d/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java b/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java index 9d07459..44bc2bc 100644 --- a/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java @@ -182,6 +182,9 @@ public class AlterTableStatement extends SchemaAlteringStatement } break; case CLUSTERING_COLUMN: + if (!cfm.isCQL3Table()) + throw new InvalidRequestException(String.format("Cannot alter clustering column %s in a non-CQL3 table", columnName)); + AbstractType<?> oldType = cfm.comparator.subtype(def.position()); // Note that CFMetaData.validateCompatibility already validate the change we're about to do. However, the error message it // sends is a bit cryptic for a CQL3 user, so validating here for a sake of returning a better error message http://git-wip-us.apache.org/repos/asf/cassandra/blob/5414950d/test/unit/org/apache/cassandra/cql3/validation/operations/AlterTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/operations/AlterTest.java b/test/unit/org/apache/cassandra/cql3/validation/operations/AlterTest.java index cc7d2a4..a6aad87 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/operations/AlterTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/operations/AlterTest.java @@ -21,6 +21,7 @@ import org.apache.cassandra.cql3.CQLTester; import org.apache.cassandra.db.ColumnFamilyStore; import org.apache.cassandra.db.Keyspace; import org.apache.cassandra.exceptions.ConfigurationException; +import org.apache.cassandra.exceptions.InvalidRequestException; import org.apache.cassandra.exceptions.SyntaxException; import org.junit.Test; @@ -198,4 +199,11 @@ public class AlterTest extends CQLTester assertInvalidSyntaxMessage("no viable alternative at input 'WITH'", stmt); } } + + @Test // tests CASSANDRA-8879 + public void testAlterClusteringColumnTypeInCompactTable() throws Throwable + { + createTable("CREATE TABLE %s (key blob, column1 blob, value blob, PRIMARY KEY ((key), column1)) WITH COMPACT STORAGE"); + assertInvalidThrow(InvalidRequestException.class, "ALTER TABLE %s ALTER column1 TYPE ascii"); + } }