Merge branch cassandra-3.0 into cassandra-3.11
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/078a8415 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/078a8415 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/078a8415 Branch: refs/heads/cassandra-3.11 Commit: 078a8415441ce965d5844cb8f246e0e61da6c397 Parents: 84d8361 714edbc Author: Benjamin Lerer <b.le...@gmail.com> Authored: Fri Jan 27 15:36:15 2017 +0100 Committer: Benjamin Lerer <b.le...@gmail.com> Committed: Fri Jan 27 15:36:15 2017 +0100 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../apache/cassandra/cql3/ColumnCondition.java | 62 ++++++- .../operations/InsertUpdateIfConditionTest.java | 162 ++++++++++++++++++- 3 files changed, 215 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/078a8415/CHANGES.txt ---------------------------------------------------------------------- diff --cc CHANGES.txt index 66e17a2,547fc07..6f7b5c2 --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -186,18 -80,6 +186,19 @@@ Merged from 3.0 * Correct log message for statistics of offheap memtable flush (CASSANDRA-12776) * Explicitly set locale for string validation (CASSANDRA-12541,CASSANDRA-12542,CASSANDRA-12543,CASSANDRA-12545) Merged from 2.2: ++ * Fix handling of nulls and unsets in IN conditions (CASSANDRA-12981) + * Fix race causing infinite loop if Thrift server is stopped before it starts listening (CASSANDRA-12856) + * CompactionTasks now correctly drops sstables out of compaction when not enough disk space is available (CASSANDRA-12979) + * Remove support for non-JavaScript UDFs (CASSANDRA-12883) + * Fix DynamicEndpointSnitch noop in multi-datacenter situations (CASSANDRA-13074) + * cqlsh copy-from: encode column names to avoid primary key parsing errors (CASSANDRA-12909) + * Temporarily fix bug that creates commit log when running offline tools (CASSANDRA-8616) + * Reduce granuality of OpOrder.Group during index build (CASSANDRA-12796) + * Test bind parameters and unset parameters in InsertUpdateIfConditionTest (CASSANDRA-12980) + * Use saved tokens when setting local tokens on StorageService.joinRing (CASSANDRA-12935) + * cqlsh: fix DESC TYPES errors (CASSANDRA-12914) + * Fix leak on skipped SSTables in sstableupgrade (CASSANDRA-12899) + * Avoid blocking gossip during pending range calculation (CASSANDRA-12281) * Fix purgeability of tombstones with max timestamp (CASSANDRA-12792) * Fail repair if participant dies during sync or anticompaction (CASSANDRA-12901) * cqlsh COPY: unprotected pk values before converting them if not using prepared statements (CASSANDRA-12863) http://git-wip-us.apache.org/repos/asf/cassandra/blob/078a8415/src/java/org/apache/cassandra/cql3/ColumnCondition.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/cql3/ColumnCondition.java index 07f9f60,60e67f3..75a988e --- a/src/java/org/apache/cassandra/cql3/ColumnCondition.java +++ b/src/java/org/apache/cassandra/cql3/ColumnCondition.java @@@ -22,8 -22,8 +22,9 @@@ import java.util.* import com.google.common.collect.Iterators; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; + import org.apache.cassandra.cql3.Term.Terminal; import org.apache.cassandra.cql3.functions.Function; import org.apache.cassandra.db.rows.*; import org.apache.cassandra.db.marshal.*; @@@ -300,10 -245,20 +301,20 @@@ public class ColumnConditio private SimpleInBound(ColumnCondition condition, QueryOptions options) throws InvalidRequestException { super(condition.column, condition.operator); - assert !(column.type instanceof CollectionType) && condition.collectionElement == null; + assert !(column.type instanceof CollectionType) && condition.field == null; assert condition.operator == Operator.IN; if (condition.inValues == null) - this.inValues = ((Lists.Value) condition.value.bind(options)).getElements(); + { + Terminal terminal = condition.value.bind(options); + + if (terminal == null) + throw new InvalidRequestException("Invalid null list in IN condition"); + + if (terminal == Constants.UNSET_VALUE) + throw new InvalidRequestException("Invalid 'unset' value in condition"); + + this.inValues = ((Lists.Value) terminal).getElements(); + } else { this.inValues = new ArrayList<>(condition.inValues.size()); http://git-wip-us.apache.org/repos/asf/cassandra/blob/078a8415/test/unit/org/apache/cassandra/cql3/validation/operations/InsertUpdateIfConditionTest.java ---------------------------------------------------------------------- diff --cc test/unit/org/apache/cassandra/cql3/validation/operations/InsertUpdateIfConditionTest.java index 1f01931,8adce7a..2729b83 --- a/test/unit/org/apache/cassandra/cql3/validation/operations/InsertUpdateIfConditionTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/operations/InsertUpdateIfConditionTest.java @@@ -18,9 -18,11 +18,12 @@@ package org.apache.cassandra.cql3.validation.operations; + import java.nio.ByteBuffer; + import java.util.List; + import org.junit.Test; +import org.apache.cassandra.config.SchemaConstants; import org.apache.cassandra.cql3.CQLTester; import org.apache.cassandra.exceptions.InvalidRequestException; import org.apache.cassandra.exceptions.SyntaxException;