You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ty...@apache.org on 2014/10/07 17:23:16 UTC

[1/2] git commit: Fix CONTAINS filtering on sets

Repository: cassandra
Updated Branches:
  refs/heads/trunk 0cad81aeb -> 8a8d35e6d


Fix CONTAINS filtering on sets

We were comparing the index expression value with the cell values
instead of the cell names, which is where set values are stored.

Patch by Tyler Hobbs; reviewed by Benjamin Lerer for CASSANDRA-8033


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/8d20b48f
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/8d20b48f
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/8d20b48f

Branch: refs/heads/trunk
Commit: 8d20b48fc34b520f0c36250bb7557da8c1e59b7d
Parents: 2601604
Author: Tyler Hobbs <ty...@datastax.com>
Authored: Tue Oct 7 10:21:11 2014 -0500
Committer: Tyler Hobbs <ty...@datastax.com>
Committed: Tue Oct 7 10:21:11 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/db/filter/ExtendedFilter.java     | 15 +++++++++---
 .../cassandra/cql3/ContainsRelationTest.java    | 24 ++++++++++++++++++++
 3 files changed, 37 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/8d20b48f/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index f9523ed..6949209 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.1.1
+ * Fix filtering for CONTAINS on sets (CASSANDRA-8033)
  * Properly track added size (CASSANDRA-7239)
  * Allow compilation in java 8 (CASSANDRA-7208)
  * Fix Assertion error on RangeTombstoneList diff (CASSANDRA-8013)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8d20b48f/src/java/org/apache/cassandra/db/filter/ExtendedFilter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/filter/ExtendedFilter.java b/src/java/org/apache/cassandra/db/filter/ExtendedFilter.java
index bc59152..4f27a51 100644
--- a/src/java/org/apache/cassandra/db/filter/ExtendedFilter.java
+++ b/src/java/org/apache/cassandra/db/filter/ExtendedFilter.java
@@ -327,6 +327,7 @@ public abstract class ExtendedFilter
         private static boolean collectionSatisfies(ColumnDefinition def, ColumnFamily data, Composite prefix, IndexExpression expr, ByteBuffer collectionElement)
         {
             assert def.type.isCollection();
+            CollectionType type = (CollectionType)def.type;
 
             if (expr.operator == IndexExpression.Operator.CONTAINS)
             {
@@ -334,14 +335,22 @@ public abstract class ExtendedFilter
                 Iterator<Cell> iter = data.iterator(new ColumnSlice[]{ data.getComparator().create(prefix, def).slice() });
                 while (iter.hasNext())
                 {
-                    if (((CollectionType) def.type).valueComparator().compare(iter.next().value(), expr.value) == 0)
-                        return true;
+                    Cell cell = iter.next();
+                    if (type.kind == CollectionType.Kind.SET)
+                    {
+                        if (type.nameComparator().compare(cell.name().collectionElement(), expr.value) == 0)
+                            return true;
+                    }
+                    else
+                    {
+                        if (type.valueComparator().compare(cell.value(), expr.value) == 0)
+                            return true;
+                    }
                 }
 
                 return false;
             }
 
-            CollectionType type = (CollectionType)def.type;
             switch (type.kind)
             {
                 case LIST:

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8d20b48f/test/unit/org/apache/cassandra/cql3/ContainsRelationTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/ContainsRelationTest.java b/test/unit/org/apache/cassandra/cql3/ContainsRelationTest.java
index 84a8c8f..525059d 100644
--- a/test/unit/org/apache/cassandra/cql3/ContainsRelationTest.java
+++ b/test/unit/org/apache/cassandra/cql3/ContainsRelationTest.java
@@ -133,4 +133,28 @@ public class ContainsRelationTest extends CQLTester
             row("test", 5, map("lmn", "foo"))
         );
     }
+
+    // See CASSANDRA-8033
+    @Test
+    public void testFilterForContains() throws Throwable
+    {
+        createTable("CREATE TABLE %s (k1 int, k2 int, v set<int>, PRIMARY KEY ((k1, k2)))");
+        createIndex("CREATE INDEX ON %s(k2)");
+
+        execute("INSERT INTO %s (k1, k2, v) VALUES (?, ?, ?)", 0, 0, set(1, 2, 3));
+        execute("INSERT INTO %s (k1, k2, v) VALUES (?, ?, ?)", 0, 1, set(2, 3, 4));
+        execute("INSERT INTO %s (k1, k2, v) VALUES (?, ?, ?)", 1, 0, set(3, 4, 5));
+        execute("INSERT INTO %s (k1, k2, v) VALUES (?, ?, ?)", 1, 1, set(4, 5, 6));
+
+        assertRows(execute("SELECT * FROM %s WHERE k2 = ?", 1),
+            row(0, 1, set(2, 3, 4)),
+            row(1, 1, set(4, 5, 6))
+        );
+
+        assertRows(execute("SELECT * FROM %s WHERE k2 = ? AND v CONTAINS ? ALLOW FILTERING", 1, 6),
+            row(1, 1, set(4, 5, 6))
+        );
+
+        assertEmpty(execute("SELECT * FROM %s WHERE k2 = ? AND v CONTAINS ? ALLOW FILTERING", 1, 7));
+    }
 }


[2/2] git commit: Merge branch 'cassandra-2.1' into trunk

Posted by ty...@apache.org.
Merge branch 'cassandra-2.1' into trunk


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/8a8d35e6
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/8a8d35e6
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/8a8d35e6

Branch: refs/heads/trunk
Commit: 8a8d35e6d8e48cbedd6ca0bf8f0b50fa286a978e
Parents: 0cad81a 8d20b48
Author: Tyler Hobbs <ty...@datastax.com>
Authored: Tue Oct 7 10:23:05 2014 -0500
Committer: Tyler Hobbs <ty...@datastax.com>
Committed: Tue Oct 7 10:23:05 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/db/filter/ExtendedFilter.java     | 15 +++++++++---
 .../cassandra/cql3/ContainsRelationTest.java    | 24 ++++++++++++++++++++
 3 files changed, 37 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/8a8d35e6/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 132396e,6949209..47c3e74
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,35 -1,5 +1,36 @@@
 +3.0
 + * Support for aggregation functions (CASSANDRA-4914)
 + * Improve query to read paxos table on propose (CASSANDRA-7929)
 + * Remove cassandra-cli (CASSANDRA-7920)
 + * Optimize java source-based UDF invocation (CASSANDRA-7924)
 + * Accept dollar quoted strings in CQL (CASSANDRA-7769)
 + * Make assassinate a first class command (CASSANDRA-7935)
 + * Support IN clause on any clustering column (CASSANDRA-4762)
 + * Improve compaction logging (CASSANDRA-7818)
 + * Remove YamlFileNetworkTopologySnitch (CASSANDRA-7917)
 + * Support Java source code for user-defined functions (CASSANDRA-7562)
 + * Require arg types to disambiguate UDF drops (CASSANDRA-7812)
 + * Do anticompaction in groups (CASSANDRA-6851)
 + * Verify that UDF class methods are static (CASSANDRA-7781)
 + * Support pure user-defined functions (CASSANDRA-7395, 7740)
 + * Permit configurable timestamps with cassandra-stress (CASSANDRA-7416)
 + * Move sstable RandomAccessReader to nio2, which allows using the
 +   FILE_SHARE_DELETE flag on Windows (CASSANDRA-4050)
 + * Remove CQL2 (CASSANDRA-5918)
 + * Add Thrift get_multi_slice call (CASSANDRA-6757)
 + * Optimize fetching multiple cells by name (CASSANDRA-6933)
 + * Allow compilation in java 8 (CASSANDRA-7028)
 + * Make incremental repair default (CASSANDRA-7250)
 + * Enable code coverage thru JaCoCo (CASSANDRA-7226)
 + * Switch external naming of 'column families' to 'tables' (CASSANDRA-4369) 
 + * Shorten SSTable path (CASSANDRA-6962)
 + * Use unsafe mutations for most unit tests (CASSANDRA-6969)
 + * Fix race condition during calculation of pending ranges (CASSANDRA-7390)
 + * Fail on very large batch sizes (CASSANDRA-8011)
 +
 +
  2.1.1
+  * Fix filtering for CONTAINS on sets (CASSANDRA-8033)
   * Properly track added size (CASSANDRA-7239)
   * Allow compilation in java 8 (CASSANDRA-7208)
   * Fix Assertion error on RangeTombstoneList diff (CASSANDRA-8013)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8a8d35e6/src/java/org/apache/cassandra/db/filter/ExtendedFilter.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8a8d35e6/test/unit/org/apache/cassandra/cql3/ContainsRelationTest.java
----------------------------------------------------------------------