Repository: cassandra Updated Branches: refs/heads/cassandra-3.0 d2da7606a -> 47b66d7c1
Fix ordering with IN restriction on partition key patch by Benjamin Lerer; reviewed by Stefania Alborghetti for CASSANDRA-9970 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ee186b6b Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ee186b6b Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ee186b6b Branch: refs/heads/cassandra-3.0 Commit: ee186b6b05569537eb979027176ccee57354c4da Parents: 31db093 Author: blerer <[email protected]> Authored: Mon Aug 17 10:58:37 2015 +0200 Committer: blerer <[email protected]> Committed: Mon Aug 17 10:58:37 2015 +0200 ---------------------------------------------------------------------- .../restrictions/PrimaryKeyRestrictionSet.java | 2 +- .../operations/SelectOrderByTest.java | 43 ++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/ee186b6b/src/java/org/apache/cassandra/cql3/restrictions/PrimaryKeyRestrictionSet.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/restrictions/PrimaryKeyRestrictionSet.java b/src/java/org/apache/cassandra/cql3/restrictions/PrimaryKeyRestrictionSet.java index b49d774..3a20f6a 100644 --- a/src/java/org/apache/cassandra/cql3/restrictions/PrimaryKeyRestrictionSet.java +++ b/src/java/org/apache/cassandra/cql3/restrictions/PrimaryKeyRestrictionSet.java @@ -98,7 +98,7 @@ final class PrimaryKeyRestrictionSet extends AbstractPrimaryKeyRestrictions this.slice = true; else if (restriction.isContains() || primaryKeyRestrictions.isContains()) this.contains = true; - else if (restriction.isIN()) + else if (restriction.isIN() || primaryKeyRestrictions.isIN()) this.in = true; else this.eq = true; http://git-wip-us.apache.org/repos/asf/cassandra/blob/ee186b6b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectOrderByTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectOrderByTest.java b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectOrderByTest.java index e788095..699ade8 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectOrderByTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectOrderByTest.java @@ -22,6 +22,7 @@ import org.junit.Test; import org.apache.cassandra.cql3.CQLTester; import static org.junit.Assert.assertTrue; +import static java.util.Arrays.asList; public class SelectOrderByTest extends CQLTester { @@ -488,6 +489,48 @@ public class SelectOrderByTest extends CQLTester assertTrue(isFirstIntSorted(results)); } + @Test + public void testInOrderByWithTwoPartitionKeyColumns() throws Throwable + { + for (String option : asList("", "WITH CLUSTERING ORDER BY (col_3 DESC)")) + { + createTable("CREATE TABLE %s (col_1 int, col_2 int, col_3 int, PRIMARY KEY ((col_1, col_2), col_3)) " + option); + execute("INSERT INTO %s (col_1, col_2, col_3) VALUES(?, ?, ?)", 1, 1, 1); + execute("INSERT INTO %s (col_1, col_2, col_3) VALUES(?, ?, ?)", 1, 1, 2); + execute("INSERT INTO %s (col_1, col_2, col_3) VALUES(?, ?, ?)", 1, 1, 13); + execute("INSERT INTO %s (col_1, col_2, col_3) VALUES(?, ?, ?)", 1, 2, 10); + execute("INSERT INTO %s (col_1, col_2, col_3) VALUES(?, ?, ?)", 1, 2, 11); + + assertRows(execute("select * from %s where col_1=? and col_2 IN (?, ?) order by col_3;", 1, 1, 2), + row(1, 1, 1), + row(1, 1, 2), + row(1, 2, 10), + row(1, 2, 11), + row(1, 1, 13)); + + assertRows(execute("select * from %s where col_1=? and col_2 IN (?, ?) order by col_3 desc;", 1, 1, 2), + row(1, 1, 13), + row(1, 2, 11), + row(1, 2, 10), + row(1, 1, 2), + row(1, 1, 1)); + + assertRows(execute("select * from %s where col_2 IN (?, ?) and col_1=? order by col_3;", 1, 2, 1), + row(1, 1, 1), + row(1, 1, 2), + row(1, 2, 10), + row(1, 2, 11), + row(1, 1, 13)); + + assertRows(execute("select * from %s where col_2 IN (?, ?) and col_1=? order by col_3 desc;", 1, 2, 1), + row(1, 1, 13), + row(1, 2, 11), + row(1, 2, 10), + row(1, 1, 2), + row(1, 1, 1)); + } + } + private boolean isFirstIntSorted(Object[][] rows) { for (int i = 1; i < rows.length; i++)
