diff --git a/CHANGES.txt b/CHANGES.txt index ae2b0f184c..55d17f755e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -47,6 +47,7 @@ Merged from 1.0: * fix race leading to super columns assertion failure (CASSANDRA-3957) * ensure that directory is selected for compaction for user-defined tasks and upgradesstables (CASSANDRA-3985) + * fix NPE on invalid CQL delete command (CASSANDRA-3755) 1.1-beta1 diff --git a/src/java/org/apache/cassandra/cql/DeleteStatement.java b/src/java/org/apache/cassandra/cql/DeleteStatement.java index 9de571ed2b..19cbc42eef 100644 --- a/src/java/org/apache/cassandra/cql/DeleteStatement.java +++ b/src/java/org/apache/cassandra/cql/DeleteStatement.java @@ -71,6 +71,8 @@ public class DeleteStatement extends AbstractModification public List prepareRowMutations(String keyspace, ClientState clientState, Long timestamp, List variables) throws InvalidRequestException { + CFMetaData metadata = validateColumnFamily(keyspace, columnFamily); + clientState.hasColumnFamilyAccess(columnFamily, Permission.WRITE); AbstractType keyType = Schema.instance.getCFMetaData(keyspace, columnFamily).getKeyValidator(); @@ -78,18 +80,17 @@ public class DeleteStatement extends AbstractModification for (Term key : keys) { - rowMutations.add(mutationForKey(key.getByteBuffer(keyType, variables), keyspace, timestamp, clientState,variables)); + rowMutations.add(mutationForKey(key.getByteBuffer(keyType, variables), keyspace, timestamp, clientState, variables, metadata)); } return rowMutations; } - public RowMutation mutationForKey(ByteBuffer key, String keyspace, Long timestamp, ClientState clientState, List variables) + public RowMutation mutationForKey(ByteBuffer key, String keyspace, Long timestamp, ClientState clientState, List variables, CFMetaData metadata) throws InvalidRequestException { RowMutation rm = new RowMutation(keyspace, key); - CFMetaData metadata = validateColumnFamily(keyspace, columnFamily); QueryProcessor.validateKeyAlias(metadata, keyName); AbstractType comparator = metadata.getComparatorFor(null); diff --git a/src/java/org/apache/cassandra/cql3/statements/DeleteStatement.java b/src/java/org/apache/cassandra/cql3/statements/DeleteStatement.java index 7e322a6819..1e0447450a 100644 --- a/src/java/org/apache/cassandra/cql3/statements/DeleteStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/DeleteStatement.java @@ -57,7 +57,6 @@ public class DeleteStatement extends ModificationStatement public List getMutations(ClientState clientState, List variables) throws InvalidRequestException { - // Check key List keys = processedKeys.get(cfDef.key.name); if (keys == null || keys.isEmpty())