diff --git a/CHANGES.txt b/CHANGES.txt index 123c1f38b0..fa2017a152 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.1.12 + * Reject counter writes in CQLSSTableWriter (CASSANDRA-10258) * Remove superfluous COUNTER_MUTATION stage mapping (CASSANDRA-10605) * Improve json2sstable error reporting on nonexistent columns (CASSANDRA-10401) * (cqlsh) fix COPY using wrong variable name for time_format (CASSANDRA-10633) diff --git a/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java b/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java index c364171126..ae8a3920bf 100644 --- a/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java +++ b/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java @@ -453,6 +453,8 @@ public class CQLSSTableWriter implements Closeable this.boundNames = p.right; if (this.insert.hasConditions()) throw new IllegalArgumentException("Conditional statements are not supported"); + if (this.insert.isCounter()) + throw new IllegalArgumentException("Counter update statements are not supported"); if (this.boundNames.isEmpty()) throw new IllegalArgumentException("Provided insert statement has no bind variables"); return this; diff --git a/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java b/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java index fa5cbb4b73..9c8a2c2de0 100644 --- a/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java +++ b/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java @@ -135,6 +135,28 @@ public class CQLSSTableWriterTest assertEquals(12, row.getInt("v2")); } + @Test(expected = IllegalArgumentException.class) + public void testForbidCounterUpdates() throws Exception + { + String KS = "cql_keyspace"; + String TABLE = "counter1"; + + File tempdir = Files.createTempDir(); + File dataDir = new File(tempdir.getAbsolutePath() + File.separator + KS + File.separator + TABLE); + assert dataDir.mkdirs(); + + String schema = "CREATE TABLE cql_keyspace.counter1 (" + + " my_id int, " + + " my_counter counter, " + + " PRIMARY KEY (my_id)" + + ")"; + String insert = String.format("UPDATE cql_keyspace.counter1 SET my_counter = my_counter - ? WHERE my_id = ?"); + CQLSSTableWriter.builder().inDirectory(dataDir) + .forTable(schema) + .withPartitioner(StorageService.instance.getPartitioner()) + .using(insert).build(); + } + @Test public void testSyncWithinPartition() throws Exception {