Repository: cassandra Updated Branches: refs/heads/trunk c158efdf6 -> 0f530413c
Fix ReversedType.isCompatibleWith() Patch by Tyler Hobbs; reviewed by Sylvain Lebresne for CASSANDRA-7797 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/a4e108c4 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a4e108c4 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a4e108c4 Branch: refs/heads/trunk Commit: a4e108c40b234fa754a56a21b63635b83f90aceb Parents: 4fc417c Author: Tyler Hobbs <ty...@datastax.com> Authored: Wed Aug 20 10:58:54 2014 -0500 Committer: Tyler Hobbs <ty...@datastax.com> Committed: Wed Aug 20 11:01:28 2014 -0500 ---------------------------------------------------------------------- CHANGES.txt | 2 ++ .../cassandra/db/marshal/ReversedType.java | 9 ++++++ .../org/apache/cassandra/cql3/TypeTest.java | 34 ++++++++++++++++++++ 3 files changed, 45 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/a4e108c4/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index fe9f4e0..94bdd89 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,6 @@ 2.0.10 + * Fix ALTER clustering column type from DateType to TimestampType when + using DESC clustering order (CASSANRDA-7797) * Stop inheriting liveRatio and liveRatioComputedAt from previous memtables (CASSANDRA-7796) * Throw EOFException if we run out of chunks in compressed datafile http://git-wip-us.apache.org/repos/asf/cassandra/blob/a4e108c4/src/java/org/apache/cassandra/db/marshal/ReversedType.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/marshal/ReversedType.java b/src/java/org/apache/cassandra/db/marshal/ReversedType.java index cd61bbe..ffb0229 100644 --- a/src/java/org/apache/cassandra/db/marshal/ReversedType.java +++ b/src/java/org/apache/cassandra/db/marshal/ReversedType.java @@ -84,6 +84,15 @@ public class ReversedType<T> extends AbstractType<T> } @Override + public boolean isCompatibleWith(AbstractType<?> otherType) + { + if (!(otherType instanceof ReversedType)) + return false; + + return this.baseType.isCompatibleWith(((ReversedType) otherType).baseType); + } + + @Override public boolean isValueCompatibleWith(AbstractType<?> otherType) { return this.baseType.isValueCompatibleWith(otherType); http://git-wip-us.apache.org/repos/asf/cassandra/blob/a4e108c4/test/unit/org/apache/cassandra/cql3/TypeTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/TypeTest.java b/test/unit/org/apache/cassandra/cql3/TypeTest.java index f911a44..b08ca2c 100644 --- a/test/unit/org/apache/cassandra/cql3/TypeTest.java +++ b/test/unit/org/apache/cassandra/cql3/TypeTest.java @@ -19,6 +19,7 @@ package org.apache.cassandra.cql3; import org.apache.cassandra.SchemaLoader; import org.apache.cassandra.db.ConsistencyLevel; +import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.exceptions.RequestExecutionException; import org.apache.cassandra.exceptions.RequestValidationException; import org.apache.cassandra.gms.Gossiper; @@ -35,6 +36,7 @@ import org.slf4j.LoggerFactory; import static org.apache.cassandra.cql3.QueryProcessor.process; import static org.apache.cassandra.cql3.QueryProcessor.processInternal; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; public class TypeTest { @@ -141,4 +143,36 @@ public class TypeTest results = executePrepared(prepare(select), QueryOptions.DEFAULT); assertEquals(2, results.size()); } + + @Test + // tests CASSANDRA-7797 + public void testAlterReversedColumn() throws Throwable + { + executeSchemaChange("CREATE TABLE IF NOT EXISTS %s.test_alter_reversed (a int, b 'org.apache.cassandra.db.marshal.DateType', PRIMARY KEY (a, b)) WITH CLUSTERING ORDER BY (b DESC)"); + executeSchemaChange("ALTER TABLE %s.test_alter_reversed ALTER b TYPE 'org.apache.cassandra.db.marshal.ReversedType(org.apache.cassandra.db.marshal.TimestampType)'"); + } + + @Test + public void testIncompatibleReversedTypes() throws Throwable + { + executeSchemaChange("CREATE TABLE IF NOT EXISTS %s.test_incompatible_reversed (a int, b 'org.apache.cassandra.db.marshal.DateType', PRIMARY KEY (a, b)) WITH CLUSTERING ORDER BY (b DESC)"); + try + { + executeSchemaChange("ALTER TABLE %s.test_incompatible_reversed ALTER b TYPE 'org.apache.cassandra.db.marshal.ReversedType(org.apache.cassandra.db.marshal.TimeUUIDType)'"); + fail("Expected error for ALTER statement"); + } + catch (ConfigurationException e) { } + } + + @Test + public void testReversedAndNonReversed() throws Throwable + { + executeSchemaChange("CREATE TABLE IF NOT EXISTS %s.test_reversed_and_non_reversed (a int, b 'org.apache.cassandra.db.marshal.DateType', PRIMARY KEY (a, b))"); + try + { + executeSchemaChange("ALTER TABLE %s.test_reversed_and_non_reversed ALTER b TYPE 'org.apache.cassandra.db.marshal.ReversedType(org.apache.cassandra.db.marshal.DateType)'"); + fail("Expected error for ALTER statement"); + } + catch (ConfigurationException e) { } + } } \ No newline at end of file