You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2014/09/24 03:54:34 UTC

git commit: Fix CASSANDRA-6075

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.0 62db20a77 -> b1166c099


Fix CASSANDRA-6075

patch by Aleksey Yeschenko and Benjamin Lerer


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

Branch: refs/heads/cassandra-2.0
Commit: b1166c09983b1678cbc4b241f1da860930c571a5
Parents: 62db20a
Author: Aleksey Yeschenko <al...@apache.org>
Authored: Tue Sep 23 18:51:58 2014 -0700
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Tue Sep 23 18:53:27 2014 -0700

----------------------------------------------------------------------
 .../cql3/statements/SelectStatement.java        |  5 ++--
 .../cql3/SelectWithTokenFunctionTest.java       | 30 ++++++++++++++++++++
 2 files changed, 33 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/b1166c09/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
index 363e3d3..aadd0bd 100644
--- a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
@@ -24,6 +24,7 @@ import com.google.common.base.Joiner;
 import com.google.common.base.Objects;
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
+import com.google.common.collect.Iterators;
 
 import org.github.jamm.MemoryMeter;
 
@@ -1815,7 +1816,7 @@ public class SelectStatement implements CQLStatement, MeasurableForPreparedCache
                 previous = cname;
             }
 
-            if (stmt.onToken && cfDef.partitionKeyCount() > 0)
+            if (stmt.onToken)
                 checkTokenFunctionArgumentsOrder(cfDef);
         }
 
@@ -1827,7 +1828,7 @@ public class SelectStatement implements CQLStatement, MeasurableForPreparedCache
          */
         private void checkTokenFunctionArgumentsOrder(CFDefinition cfDef) throws InvalidRequestException
         {
-            Iterator<Name> iter = cfDef.partitionKeys().iterator();
+            Iterator<Name> iter = Iterators.cycle(cfDef.partitionKeys());
             for (Relation relation : whereClause)
             {
                 SingleColumnRelation singleColumnRelation = (SingleColumnRelation) relation;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b1166c09/test/unit/org/apache/cassandra/cql3/SelectWithTokenFunctionTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/SelectWithTokenFunctionTest.java b/test/unit/org/apache/cassandra/cql3/SelectWithTokenFunctionTest.java
index f089a5b..9199862 100644
--- a/test/unit/org/apache/cassandra/cql3/SelectWithTokenFunctionTest.java
+++ b/test/unit/org/apache/cassandra/cql3/SelectWithTokenFunctionTest.java
@@ -20,6 +20,7 @@ package org.apache.cassandra.cql3;
 import org.apache.cassandra.SchemaLoader;
 import org.apache.cassandra.db.ConsistencyLevel;
 import org.apache.cassandra.exceptions.InvalidRequestException;
+import org.apache.cassandra.exceptions.SyntaxException;
 import org.apache.cassandra.gms.Gossiper;
 import org.apache.cassandra.service.ClientState;
 import org.junit.AfterClass;
@@ -90,6 +91,8 @@ public class SelectWithTokenFunctionTest
         {
             UntypedResultSet results = execute("SELECT * FROM %s.single_partition WHERE token(a) >= token(0)");
             assertEquals(1, results.size());
+            results = execute("SELECT * FROM %s.single_partition WHERE token(a) >= token(0) and token(a) < token(1)");
+            assertEquals(1, results.size());
         }
         finally
         {
@@ -104,6 +107,24 @@ public class SelectWithTokenFunctionTest
     }
 
     @Test(expected = InvalidRequestException.class)
+    public void testTokenFunctionWithTwoGreaterThan() throws Throwable
+    {
+        execute("SELECT * FROM %s.single_clustering WHERE token(a) >= token(0) and token(a) >= token(1)");
+    }
+
+    @Test(expected = InvalidRequestException.class)
+    public void testTokenFunctionWithGreaterThanAndEquals() throws Throwable
+    {
+        execute("SELECT * FROM %s.single_clustering WHERE token(a) >= token(0) and token(a) = token(1)");
+    }
+
+    @Test(expected = SyntaxException.class)
+    public void testTokenFunctionWithGreaterThanAndIn() throws Throwable
+    {
+        execute("SELECT * FROM %s.single_clustering WHERE token(a) >= token(0) and token(a) in (token(1))");
+    }
+
+    @Test(expected = InvalidRequestException.class)
     public void testTokenFunctionWithPartitionKeyAndClusteringKeyArguments() throws Throwable
     {
         execute("SELECT * FROM %s.single_clustering WHERE token(a, b) > token(0, 'c')");
@@ -126,6 +147,9 @@ public class SelectWithTokenFunctionTest
         {
             UntypedResultSet results = execute("SELECT * FROM %s.compound_partition WHERE token(a, b) > token(0, 'a')");
             assertEquals(2, results.size());
+            results = execute("SELECT * FROM %s.compound_partition WHERE token(a, b) > token(0, 'a') "
+                    + "and token(a, b) < token(0, 'd')");
+            assertEquals(2, results.size());
         }
         finally
         {
@@ -138,4 +162,10 @@ public class SelectWithTokenFunctionTest
     {
         execute("SELECT * FROM %s.compound_partition WHERE token(b, a) > token(0, 'c')");
     }
+
+    @Test(expected = InvalidRequestException.class)
+    public void testTokenFunctionOnEachPartitionKeyColumns() throws Throwable
+    {
+        execute("SELECT * FROM %s.compound_partition WHERE token(a) > token(0) and token(b) > token('c')");
+    }
 }