Repository: cassandra
Updated Branches:
  refs/heads/cassandra-3.0 b360653fc -> 7927ace3e


Fix slice queries on ordered COMPACT tables

patch by Alex Petrov; reviewed by Benjamin Lerer for CASSANDRA-10988


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

Branch: refs/heads/cassandra-3.0
Commit: c8d955533b6968368907e5b090a309ac57bf419f
Parents: 88f22b9
Author: Alex Petrov <oleksandr.pet...@gmail.com>
Authored: Thu Apr 28 11:00:35 2016 +0200
Committer: Benjamin Lerer <b.le...@gmail.com>
Committed: Thu Apr 28 11:01:58 2016 +0200

----------------------------------------------------------------------
 CHANGES.txt                                     |    1 +
 .../cql3/statements/SelectStatement.java        |   19 +-
 .../SelectMultiColumnRelationTest.java          | 1678 +++++++++---------
 .../cql3/validation/operations/SelectTest.java  |   73 +
 4 files changed, 938 insertions(+), 833 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/c8d95553/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 91179b3..d5cccfa 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -7,6 +7,7 @@
  * cqlsh: COPY FROM should use regular inserts for single statement batches and
    report errors correctly if workers processes crash on initialization 
(CASSANDRA-11474)
  * Always close cluster with connection in CqlRecordWriter (CASSANDRA-11553)
+ * Fix slice queries on ordered COMPACT tables (CASSANDRA-10988)
 Merged from 2.1:
  * cqlsh COPY FROM fails for null values with non-prepared statements 
(CASSANDRA-11631)
  * Make cython optional in pylib/setup.py (CASSANDRA-11630)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c8d95553/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 7bba330..20fe982 100644
--- a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
@@ -611,12 +611,29 @@ public class SelectStatement implements CQLStatement
 
     private CellName makeExclusiveSliceBound(Bound bound, CellNameType type, 
QueryOptions options) throws InvalidRequestException
     {
-        if (restrictions.areRequestedBoundsInclusive(bound))
+        // clusteringColumnBounds may reverse bound if clustering order is 
reversed
+        // but areRequestedBoundsInclusive checks for Restriction::isInclusive 
and never
+        // reverses the order. In order to avoid inconsistencies and check 
inclusive
+        // bounds correctly, we need to check for column order and reverse it. 
See CASSANDRA-10988
+        if 
(restrictions.areRequestedBoundsInclusive(reverseBoundIfNeeded(bound)))
             return null;
 
        return type.makeCellName(restrictions.getClusteringColumnsBounds(bound, 
options).get(0));
     }
 
+    /**
+     * Reverses the specified bound if the non-compound clustering column is a 
reversed one.
+     * @param bound bound to reverse
+     * @return the bound reversed if the column type was a reversed one or the 
original bound
+     */
+    private Bound reverseBoundIfNeeded(Bound bound)
+    {
+        assert !cfm.comparator.isCompound();
+
+        List<ColumnDefinition> columnDefs = cfm.clusteringColumns();
+        return columnDefs.get(columnDefs.size() - 1).isReversedType() ? 
bound.reverse() : bound;
+    }
+
     private Iterator<Cell> applySliceRestriction(final Iterator<Cell> cells, 
final QueryOptions options) throws InvalidRequestException
     {
         final CellNameType type = cfm.comparator;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c8d95553/test/unit/org/apache/cassandra/cql3/validation/operations/SelectMultiColumnRelationTest.java
----------------------------------------------------------------------
diff --git 
a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectMultiColumnRelationTest.java
 
b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectMultiColumnRelationTest.java
index 3b367f3..a1542ce 100644
--- 
a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectMultiColumnRelationTest.java
+++ 
b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectMultiColumnRelationTest.java
@@ -996,854 +996,868 @@ public class SelectMultiColumnRelationTest extends 
CQLTester
     @Test
     public void testMixedOrderColumns1() throws Throwable
     {
-        createTable("CREATE TABLE %s (a int, b int, c int, d int, e int, 
PRIMARY KEY (a, b, c, d, e)) " +
-                "WITH CLUSTERING ORDER BY (b DESC, c ASC, d DESC, e ASC)");
-
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 2, 
0, -1, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 2, 
0, -1, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 2, 
0, 1, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
-1, 0, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
-1, 1, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
-1, 1, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, 1, -1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, 1, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, 0, -1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, 0, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, 0, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, -1, -1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, 0, -1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, 0, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, 0, -1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, 0, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, 0, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, -1, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 0, 
0, 0, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 
-1, 0, -1, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 
-1, 0, 0, 0);
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d,e)<=(?,?,?,?) " +
-                                "AND (b)>(?)", 0, 2, 0, 1, 1, -1),
-
-                row( 0, 2, 0, 1, 1),
-                row( 0, 2, 0, -1, 0),
-                row( 0, 2, 0, -1, 1),
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 0, 0, 0, 0)
-        );
-
-
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d,e)<=(?,?,?,?) " +
-                                "AND (b)>=(?)", 0, 2, 0, 1, 1, -1),
-
-                row( 0, 2, 0, 1, 1),
-                row( 0, 2, 0, -1, 0),
-                row( 0, 2, 0, -1, 1),
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 0, 0, 0, 0),
-                row( 0, -1, 0, 0, 0),
-                row( 0, -1, 0, -1, 0)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d)>=(?,?,?)"+
-                                "AND (b,c,d,e)<(?,?,?,?) ", 0, 1, 1,0,1,  1, 
0,1),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0)
-
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d,e)>(?,?,?,?)"+
-                                "AND (b,c,d)<=(?,?,?) ", 0, -1, 0,-1,-1,  2, 
0,-1),
-
-                row( 0, 2, 0, -1, 0),
-                row( 0, 2, 0, -1, 1),
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 0, 0, 0, 0),
-                row( 0, -1, 0, 0, 0),
-                row( 0, -1, 0, -1, 0)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d,e) < (?,?,?,?) " +
-                                "AND (b,c,d,e)>(?,?,?,?)", 0, 1, 0, 0, 0, 1, 
0,-1,-1),
-                row(0, 1, 0, 0, -1)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d,e) <= (?,?,?,?) " +
-                                "AND (b,c,d,e)>(?,?,?,?)", 0, 1, 0, 0, 0, 1, 
0,-1,-1),
-                row(0, 1, 0, 0, -1),
-                row(0, 1, 0, 0, 0)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b)<(?) " +
-                                "AND (b,c,d,e)>(?,?,?,?)", 0, 2, -1, 0,-1,-1),
-
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 0, 0, 0, 0),
-                row( 0, -1, 0, 0, 0),
-                row( 0, -1, 0, -1, 0)
-
-        );
-
-
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b)<(?) " +
-                                "AND (b)>(?)", 0, 2, -1),
-
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 0, 0, 0, 0)
-
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b)<(?) " +
-                                "AND (b)>=(?)", 0, 2, -1),
-
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 0, 0, 0, 0),
-                row( 0, -1, 0, 0, 0),
-                row( 0, -1, 0, -1, 0)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d,e)<=(?,?,?,?) " +
-                                "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, 1, 1, -1, 
0,-1,-1),
-
-                row( 0, 2, 0, 1, 1),
-                row( 0, 2, 0, -1, 0),
-                row( 0, 2, 0, -1, 1),
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 0, 0, 0, 0),
-                row( 0, -1, 0, 0, 0),
-                row( 0, -1, 0, -1, 0)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c)<=(?,?) " +
-                                "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, -1, 
0,-1,-1),
-
-                row( 0, 2, 0, 1, 1),
-                row( 0, 2, 0, -1, 0),
-                row( 0, 2, 0, -1, 1),
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 0, 0, 0, 0),
-                row( 0, -1, 0, 0, 0),
-                row( 0, -1, 0, -1, 0)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d)<=(?,?,?) " +
-                                "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0,-1, -1, 
0,-1,-1),
-
-                row( 0, 2, 0, -1, 0),
-                row( 0, 2, 0, -1, 1),
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 0, 0, 0, 0),
-                row( 0, -1, 0, 0, 0),
-                row( 0, -1, 0, -1, 0)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d,e)>(?,?,?,?)"+
-                                "AND (b,c,d)<=(?,?,?) ", 0, -1, 0,-1,-1,  2, 
0,-1),
-
-                row( 0, 2, 0, -1, 0),
-                row( 0, 2, 0, -1, 1),
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 0, 0, 0, 0),
-                row( 0, -1, 0, 0, 0),
-                row( 0, -1, 0, -1, 0)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d)>=(?,?,?)"+
-                                "AND (b,c,d,e)<(?,?,?,?) ", 0, 1, 1,0,1,  1, 
0,1),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0)
-        );
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d,e)<(?,?,?,?) "+
-                                "AND (b,c,d)>=(?,?,?)", 0, 1, 1,0,1,1,  1, 0),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0)
-
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c)<(?,?) " +
-                                "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, -1, 
0,-1,-1),
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 0, 0, 0, 0),
-                row( 0, -1, 0, 0, 0),
-                row( 0, -1, 0, -1, 0)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c)<(?,?) " +
-                                "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, -1, 
0,-1,-1),
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 0, 0, 0, 0),
-                row( 0, -1, 0, 0, 0),
-                row( 0, -1, 0, -1, 0)
-        );
-
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) <= 
(?,?,?,?)", 0, 1, 0, 0, 0),
-                row(0, 1, -1, 1, 0),
-                row(0, 1, -1, 1, 1),
-                row(0, 1, -1, 0, 0),
-                row(0, 1, 0, 0, -1),
-                row(0, 1, 0, 0, 0),
-                row(0, 1, 0, -1, -1),
-                row(0, 0, 0, 0, 0),
-                row(0, -1, 0, 0, 0),
-                row(0, -1, 0, -1, 0)
-        );
-
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) > 
(?,?,?,?)", 0, 1, 0, 0, 0),
-                row(0, 2, 0, 1, 1),
-                row(0, 2, 0, -1, 0),
-                row(0, 2, 0, -1, 1),
-                row(0, 1, 0,  1, -1),
-                row(0, 1, 0,  1, 1),
-                row(0, 1, 0,  0, 1),
-                row(0, 1, 1,  0, -1),
-                row(0, 1, 1,  0, 0),
-                row(0, 1, 1,  0, 1),
-                row(0, 1, 1, -1, 0)
-        );
-
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) >= 
(?,?,?,?)", 0, 1, 0, 0, 0),
-                row( 0, 2, 0, 1, 1),
-                row(0, 2, 0, -1, 0),
-                row(0, 2, 0, -1, 1),
-                row(0, 1, 0,  1, -1),
-                row(0, 1, 0,  1, 1),
-                row(0, 1, 0,  0, 0),
-                row(0, 1, 0,  0, 1),
-                row(0, 1, 1,  0, -1),
-                row(0, 1, 1,  0, 0),
-                row(0, 1, 1,  0, 1),
-                row(0, 1, 1, -1, 0)
-        );
-
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d) >= 
(?,?,?)", 0, 1, 0, 0),
-                row( 0, 2, 0, 1, 1),
-                row(0, 2, 0, -1, 0),
-                row(0, 2, 0, -1, 1),
-                row(0, 1, 0,  1, -1),
-                row(0, 1, 0,  1, 1),
-                row(0, 1, 0,  0, -1),
-                row(0, 1, 0,  0, 0),
-                row(0, 1, 0,  0, 1),
-                row(0, 1, 1,  0, -1),
-                row(0, 1, 1,  0, 0),
-                row(0, 1, 1,  0, 1),
-                row(0, 1, 1, -1, 0)
-        );
-
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d) > 
(?,?,?)", 0, 1, 0, 0),
-                row(0, 2, 0, 1, 1),
-                row(0, 2, 0, -1, 0),
-                row(0, 2, 0, -1, 1),
-                row(0, 1, 0,  1, -1),
-                row(0, 1, 0,  1, 1),
-                row(0, 1, 1,  0, -1),
-                row(0, 1, 1,  0, 0),
-                row(0, 1, 1,  0, 1),
-                row(0, 1, 1, -1, 0)
-        );
-
+        for (String compactOption : new String[]{"", " COMPACT STORAGE AND "})
+        {
+            createTable("CREATE TABLE %s (a int, b int, c int, d int, e int, 
PRIMARY KEY (a, b, c, d, e)) WITH " +
+                        compactOption +
+                        " CLUSTERING ORDER BY (b DESC, c ASC, d DESC, e ASC)");
+
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 2, 0, -1, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 2, 0, -1, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 2, 0, 1, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, -1, 0, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, -1, 1, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, -1, 1, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, 1, -1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, 1, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, 0, -1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, 0, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, 0, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, -1, -1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, 0, -1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, 0, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, 0, -1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, 0, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, 0, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, -1, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 0, 0, 0, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, -1, 0, -1, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, -1, 0, 0, 0);
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d,e)<=(?,?,?,?) " +
+            "AND (b)>(?)", 0, 2, 0, 1, 1, -1),
+
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 0, 0, 0, 0)
+            );
+
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d,e)<=(?,?,?,?) " +
+            "AND (b)>=(?)", 0, 2, 0, 1, 1, -1),
+
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d)>=(?,?,?)" +
+            "AND (b,c,d,e)<(?,?,?,?) ", 0, 1, 1, 0, 1, 1, 0, 1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0)
+
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d,e)>(?,?,?,?)" +
+            "AND (b,c,d)<=(?,?,?) ", 0, -1, 0, -1, -1, 2, 0, -1),
+
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d,e) < (?,?,?,?) " +
+            "AND (b,c,d,e)>(?,?,?,?)", 0, 1, 0, 0, 0, 1, 0, -1, -1),
+                       row(0, 1, 0, 0, -1)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d,e) <= (?,?,?,?) " +
+            "AND (b,c,d,e)>(?,?,?,?)", 0, 1, 0, 0, 0, 1, 0, -1, -1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b)<(?) " +
+            "AND (b,c,d,e)>(?,?,?,?)", 0, 2, -1, 0, -1, -1),
+
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0)
+
+            );
+
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b)<(?) " +
+            "AND (b)>(?)", 0, 2, -1),
+
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 0, 0, 0, 0)
+
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b)<(?) " +
+            "AND (b)>=(?)", 0, 2, -1),
+
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d,e)<=(?,?,?,?) " +
+            "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, 1, 1, -1, 0, -1, -1),
+
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c)<=(?,?) " +
+            "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, -1, 0, -1, -1),
+
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d)<=(?,?,?) " +
+            "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, -1, -1, 0, -1, -1),
+
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d,e)>(?,?,?,?)" +
+            "AND (b,c,d)<=(?,?,?) ", 0, -1, 0, -1, -1, 2, 0, -1),
+
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d)>=(?,?,?)" +
+            "AND (b,c,d,e)<(?,?,?,?) ", 0, 1, 1, 0, 1, 1, 0, 1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0)
+            );
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d,e)<(?,?,?,?) " +
+            "AND (b,c,d)>=(?,?,?)", 0, 1, 1, 0, 1, 1, 1, 0),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0)
+
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c)<(?,?) " +
+            "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, -1, 0, -1, -1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c)<(?,?) " +
+            "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, -1, 0, -1, -1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0)
+            );
+
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) <= 
(?,?,?,?)", 0, 1, 0, 0, 0),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 0, 0, 0, 0),
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0)
+            );
+
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) > 
(?,?,?,?)", 0, 1, 0, 0, 0),
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0)
+            );
+
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) >= 
(?,?,?,?)", 0, 1, 0, 0, 0),
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0)
+            );
+
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d) >= 
(?,?,?)", 0, 1, 0, 0),
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0)
+            );
+
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d) > 
(?,?,?)", 0, 1, 0, 0),
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0)
+            );
+        }
     }
 
     @Test
     public void testMixedOrderColumns2() throws Throwable
     {
-        createTable("CREATE TABLE %s (a int, b int, c int, d int, e int, 
PRIMARY KEY (a, b, c, d, e)) " +
-                "WITH CLUSTERING ORDER BY (b DESC, c ASC, d ASC, e ASC)");
-
-        // b and d are reversed in the clustering order
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 2, 
0, -1, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 2, 
0, -1, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
-1, 0, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
-1, 1, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
-1, 1, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, 1, -1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, 1, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, 0, -1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, 0, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, 0, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, -1, -1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, 0, -1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, 0, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, 0, -1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, 0, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, 0, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, -1, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 0, 
0, 0, 0);
+        for (String compactOption : new String[]{"", " COMPACT STORAGE AND "})
+        {
+            createTable("CREATE TABLE %s (a int, b int, c int, d int, e int, 
PRIMARY KEY (a, b, c, d, e)) WITH " +
+                        compactOption +
+                        "CLUSTERING ORDER BY (b DESC, c ASC, d ASC, e ASC)");
 
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) <= 
(?,?,?,?)", 0, 1, 0, 0, 0),
-                row(0, 1, -1, 0, 0),
-                row(0, 1, -1, 1, 0),
-                row(0, 1, -1, 1, 1),
-                row(0, 1, 0, -1, -1),
-                row(0, 1, 0, 0, -1),
-                row(0, 1, 0, 0, 0),
-                row(0, 0, 0, 0, 0)
-        );
-
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) > 
(?,?,?,?)", 0, 1, 0, 0, 0),
-                row(0, 2, 0, -1, 0),
-                row(0, 2, 0, -1, 1),
-                row(0, 1, 0,  0, 1),
-                row(0, 1, 0,  1, -1),
-                row(0, 1, 0,  1, 1),
-                row(0, 1, 1, -1, 0),
-                row(0, 1, 1,  0, -1),
-                row(0, 1, 1,  0, 0),
-                row(0, 1, 1,  0, 1)
-        );
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) >= 
(?,?,?,?)", 0, 1, 0, 0, 0),
-                row(0, 2, 0, -1, 0),
-                row(0, 2, 0, -1, 1),
-                row(0, 1, 0,  0, 0),
-                row(0, 1, 0,  0, 1),
-                row(0, 1, 0,  1, -1),
-                row(0, 1, 0,  1, 1),
-                row(0, 1, 1, -1, 0),
-                row(0, 1, 1,  0, -1),
-                row(0, 1, 1,  0, 0),
-                row(0, 1, 1,  0, 1)
-        );
+            // b and d are reversed in the clustering order
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 2, 0, -1, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 2, 0, -1, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, -1, 0, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, -1, 1, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, -1, 1, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, 1, -1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, 1, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, 0, -1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, 0, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, 0, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, -1, -1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, 0, -1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, 0, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, 0, -1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, 0, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, 0, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, -1, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 0, 0, 0, 0);
+
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) <= 
(?,?,?,?)", 0, 1, 0, 0, 0),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 0, 0, 0, 0)
+            );
+
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) > 
(?,?,?,?)", 0, 1, 0, 0, 0),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1)
+            );
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) >= 
(?,?,?,?)", 0, 1, 0, 0, 0),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1)
+            );
+        }
     }
 
     @Test
     public void testMixedOrderColumns3() throws Throwable
     {
-        createTable("create table %s (a int, b int, c int, PRIMARY KEY (a, b, 
c)) WITH CLUSTERING ORDER BY (b DESC, c ASC)");
-
-        execute("INSERT INTO %s (a, b, c) VALUES (?,?,?);", 0, 2, 3);
-        execute("INSERT INTO %s (a, b, c) VALUES (?,?,?);", 0, 2, 4);
-        execute("INSERT INTO %s (a, b, c) VALUES (?,?,?);", 0, 4, 4);
-        execute("INSERT INTO %s (a, b, c) VALUES (?,?,?);", 0, 3, 4);
-        execute("INSERT INTO %s (a, b, c) VALUES (?,?,?);", 0, 4, 5);
-        execute("INSERT INTO %s (a, b, c) VALUES (?,?,?);", 0, 4, 6);
-
-
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c)>=(?,?) AND 
(b,c)<(?,?) ALLOW FILTERING", 0, 2, 3, 4, 5),
-                row(0, 4, 4), row(0, 3, 4), row(0, 2, 3), row(0, 2, 4)
-        );
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c)>=(?,?) AND 
(b,c)<=(?,?) ALLOW FILTERING", 0, 2, 3, 4, 5),
-                row(0, 4, 4), row(0, 4, 5), row(0, 3, 4), row(0, 2, 3), row(0, 
2, 4)
-        );
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c)<(?,?) ALLOW 
FILTERING", 0, 4, 5),
-                row(0, 4, 4),row(0, 3, 4),row(0, 2, 3),row(0, 2, 4)
-        );
-
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c)>(?,?) ALLOW 
FILTERING", 0, 4, 5),
-                row(0, 4, 6)
-        );
-
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b)<(?) and 
(b)>(?) ALLOW FILTERING", 0, 4, 2),
-                row(0, 3, 4)
-        );
+        for (String compactOption : new String[]{"", " COMPACT STORAGE AND "})
+        {
+            createTable("CREATE TABLE %s (a int, b int, c int, PRIMARY KEY (a, 
b, c)) WITH " +
+                        compactOption +
+                        "CLUSTERING ORDER BY (b DESC, c ASC)");
+
+            execute("INSERT INTO %s (a, b, c) VALUES (?,?,?);", 0, 2, 3);
+            execute("INSERT INTO %s (a, b, c) VALUES (?,?,?);", 0, 2, 4);
+            execute("INSERT INTO %s (a, b, c) VALUES (?,?,?);", 0, 4, 4);
+            execute("INSERT INTO %s (a, b, c) VALUES (?,?,?);", 0, 3, 4);
+            execute("INSERT INTO %s (a, b, c) VALUES (?,?,?);", 0, 4, 5);
+            execute("INSERT INTO %s (a, b, c) VALUES (?,?,?);", 0, 4, 6);
+
+
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c)>=(?,?) 
AND (b,c)<(?,?) ALLOW FILTERING", 0, 2, 3, 4, 5),
+                       row(0, 4, 4), row(0, 3, 4), row(0, 2, 3), row(0, 2, 4)
+            );
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c)>=(?,?) 
AND (b,c)<=(?,?) ALLOW FILTERING", 0, 2, 3, 4, 5),
+                       row(0, 4, 4), row(0, 4, 5), row(0, 3, 4), row(0, 2, 3), 
row(0, 2, 4)
+            );
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c)<(?,?) 
ALLOW FILTERING", 0, 4, 5),
+                       row(0, 4, 4), row(0, 3, 4), row(0, 2, 3), row(0, 2, 4)
+            );
+
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c)>(?,?) 
ALLOW FILTERING", 0, 4, 5),
+                       row(0, 4, 6)
+            );
+
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b)<(?) and 
(b)>(?) ALLOW FILTERING", 0, 4, 2),
+                       row(0, 3, 4)
+            );
+        }
     }
 
     @Test
     public void testMixedOrderColumns4() throws Throwable
     {
-        createTable("CREATE TABLE %s (a int, b int, c int, d int, e int, 
PRIMARY KEY (a, b, c, d, e)) " +
-                "WITH CLUSTERING ORDER BY (b ASC, c DESC, d DESC, e ASC)");
-
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 2, 
0, -1, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 2, 
0, -1, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 2, 
0, 1, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 2, 
-1, 1, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 2, 
-3, 1, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
-1, 0, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
-1, 1, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
-1, 1, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, 1, -1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, 1, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, 0, -1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, 0, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, 0, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
0, -1, -1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, 0, -1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, 0, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, 0, -1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, 0, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, 0, 1);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 1, 
1, -1, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 0, 
0, 0, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 
-1, 0, -1, 0);
-        execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 0, 
-1, 0, 0, 0);
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d,e)<(?,?,?,?) " +
-                                "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, 1, 1, -1, 
0, -1, -1),
-
-                row(0, -1, 0, 0, 0),
-                row(0, -1, 0, -1, 0),
-                row(0, 0, 0, 0, 0),
-                row(0, 1, 1, 0, -1),
-                row(0, 1, 1, 0, 0),
-                row(0, 1, 1, 0, 1),
-                row(0, 1, 1, -1, 0),
-                row(0, 1, 0, 1, -1),
-                row(0, 1, 0, 1, 1),
-                row(0, 1, 0, 0, -1),
-                row(0, 1, 0, 0, 0),
-                row(0, 1, 0, 0, 1),
-                row(0, 1, 0, -1, -1),
-                row(0, 1, -1, 1, 0),
-                row(0, 1, -1, 1, 1),
-                row(0, 1, -1, 0, 0),
-                row(0, 2, 0, -1, 0),
-                row(0, 2, 0, -1, 1),
-                row(0, 2, -1, 1, 1),
-                row(0, 2, -3, 1, 1)
-
-        );
-
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d,e) < (?,?,?,?) " +
-                                "AND (b,c,d,e)>(?,?,?,?)", 0, 1, 0, 0, 0, 1, 
0, -1, -1),
-                row(0, 1, 0, 0, -1)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d,e) <= (?,?,?,?) " +
-                                "AND (b,c,d,e)>(?,?,?,?)", 0, 1, 0, 0, 0, 1, 
0,-1,-1),
-                row(0, 1, 0, 0, -1),
-                row(0, 1, 0, 0, 0)
-        );
-
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d,e)<=(?,?,?,?) " +
-                                "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, 1, 1, -1, 
0,-1,-1),
-
-                row( 0, -1, 0, 0, 0),
-                row( 0, -1, 0, -1, 0),
-                row(0, 0, 0, 0, 0),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 2, 0, 1, 1),
-                row( 0, 2, 0, -1, 0),
-                row( 0, 2, 0, -1, 1),
-                row(  0, 2, -1, 1, 1),
-                row(  0, 2, -3, 1, 1)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c)<=(?,?) " +
-                                "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, -1, 
0,-1,-1),
-
-                row( 0, -1, 0, 0, 0),
-                row(0, -1, 0, -1, 0),
-                row( 0, 0, 0, 0, 0),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 2, 0, 1, 1),
-                row( 0, 2, 0, -1, 0),
-                row( 0, 2, 0, -1, 1),
-                row(  0, 2, -1, 1, 1),
-                row(  0, 2, -3, 1, 1)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c)<(?,?) " +
-                                "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, -1, 0, -1, 
-1),
-                row( 0, -1, 0, 0, 0),
-                row( 0, -1, 0, -1, 0),
-                row( 0, 0, 0, 0, 0),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row(  0, 2, -1, 1, 1),
-                row(0, 2, -3, 1, 1)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d,e)<=(?,?,?,?) " +
-                                "AND (b)>=(?)", 0, 2, 0, 1, 1, -1),
-
-                row( 0, -1, 0, 0, 0),
-                row( 0, -1, 0, -1, 0),
-                row( 0, 0, 0, 0, 0),
-                row( 0, 1, 1, 0, -1),
-                row(0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 2, 0, 1, 1),
-                row( 0, 2, 0, -1, 0),
-                row( 0, 2, 0, -1, 1),
-                row(  0, 2, -1, 1, 1),
-                row(  0, 2, -3, 1, 1)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d,e)<=(?,?,?,?) " +
-                                "AND (b)>(?)", 0, 2, 0, 1, 1, -1),
-
-                row( 0, 0, 0, 0, 0),
-                row( 0, 1, 1, 0, -1),
-                row( 0, 1, 1, 0, 0),
-                row( 0, 1, 1, 0, 1),
-                row( 0, 1, 1, -1, 0),
-                row( 0, 1, 0, 1, -1),
-                row( 0, 1, 0, 1, 1),
-                row( 0, 1, 0, 0, -1),
-                row( 0, 1, 0, 0, 0),
-                row( 0, 1, 0, 0, 1),
-                row( 0, 1, 0, -1, -1),
-                row( 0, 1, -1, 1, 0),
-                row( 0, 1, -1, 1, 1),
-                row( 0, 1, -1, 0, 0),
-                row( 0, 2, 0, 1, 1),
-                row( 0, 2, 0, -1, 0),
-                row( 0, 2, 0, -1, 1),
-                row(  0, 2, -1, 1, 1),
-                row(  0, 2, -3, 1, 1)
-        );
-
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) <= 
(?,?,?,?)", 0, 1, 0, 0, 0),
-                row(0, -1, 0, 0, 0),
-                row(0, -1, 0, -1, 0),
-                row(0, 0, 0, 0, 0),
-                row(0, 1, 0, 0, -1),
-                row(0, 1, 0, 0, 0),
-                row(0, 1, 0, -1, -1),
-                row(0, 1, -1, 1, 0),
-                row(0, 1, -1, 1, 1),
-                row(0, 1, -1, 0, 0)
-        );
-
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) > 
(?,?,?,?)", 0, 1, 0, 0, 0),
-                row(0, 1, 1,  0, -1),
-                row(0, 1, 1,  0, 0),
-                row(0, 1, 1, 0, 1),
-                row(0, 1, 1, -1, 0),
-                row(0, 1, 0,  1, -1),
-                row(0, 1, 0,  1, 1),
-                row(0, 1, 0,  0, 1),
-                row(0, 2, 0, 1, 1),
-                row(0, 2, 0, -1, 0),
-                row(0, 2, 0, -1, 1),
-                row(  0, 2, -1, 1, 1),
-                row(  0, 2, -3, 1, 1)
-
-        );
-
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) >= 
(?,?,?,?)", 0, 1, 0, 0, 0),
-                row(0, 1, 1,  0, -1),
-                row(0, 1, 1,  0, 0),
-                row(0, 1, 1, 0, 1),
-                row(0, 1, 1, -1, 0),
-                row(0, 1, 0,  1, -1),
-                row(0, 1, 0,  1, 1),
-                row(0, 1, 0,  0, 0),
-                row(0, 1, 0,  0, 1),
-                row(0, 2, 0, 1, 1),
-                row(0, 2, 0, -1, 0),
-                row(0, 2, 0, -1, 1),
-                row(  0, 2, -1, 1, 1),
-                row(  0, 2, -3, 1, 1)
-        );
-
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d) >= 
(?,?,?)", 0, 1, 0, 0),
-                row(0, 1, 1,  0, -1),
-                row(0, 1, 1,  0, 0),
-                row(0, 1, 1, 0, 1),
-                row(0, 1, 1, -1, 0),
-                row(0, 1, 0,  1, -1),
-                row(0, 1, 0,  1, 1),
-                row(0, 1, 0,  0, -1),
-                row(0, 1, 0,  0, 0),
-                row(0, 1, 0,  0, 1),
-                row(0, 2, 0, 1, 1),
-                row(0, 2, 0, -1, 0),
-                row(0, 2, 0, -1, 1),
-                row(  0, 2, -1, 1, 1),
-                row(  0, 2, -3, 1, 1)
-        );
-
-        assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d) > 
(?,?,?)", 0, 1, 0, 0),
-                row(0, 1, 1,  0, -1),
-                row(0, 1, 1,  0, 0),
-                row(0, 1, 1,  0, 1),
-                row(0, 1, 1, -1, 0),
-                row(0, 1, 0,  1, -1),
-                row(0, 1, 0,  1, 1),
-                row(0, 2, 0, 1, 1),
-                row(0, 2, 0, -1, 0),
-                row(0, 2, 0, -1, 1),
-                row(  0, 2, -1, 1, 1),
-                row(  0, 2, -3, 1, 1)
-        );
-
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b) < (?) ", 0, 0),
-                row(0, -1, 0, 0, 0), row(0, -1, 0, -1, 0)
-        );
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b) <= (?) ", 0,-1),
-                row(0, -1, 0, 0, 0), row(0, -1, 0, -1, 0)
-        );
-        assertRows(execute(
-                        "SELECT * FROM %s" +
-                                " WHERE a = ? " +
-                                "AND (b,c,d,e) < (?,?,?,?) and (b,c,d,e) > 
(?,?,?,?) ", 0, 2, 0, 0, 0, 2, -2, 0, 0),
-                row(0, 2, 0, -1, 0),
-                row(0, 2, 0, -1, 1),
-                row(0, 2, -1, 1, 1)
-        );
+        for (String compactOption : new String[]{"", " COMPACT STORAGE AND "})
+        {
+            createTable("CREATE TABLE %s (a int, b int, c int, d int, e int, 
PRIMARY KEY (a, b, c, d, e)) WITH " +
+                        compactOption +
+                        "CLUSTERING ORDER BY (b ASC, c DESC, d DESC, e ASC)");
+
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 2, 0, -1, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 2, 0, -1, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 2, 0, 1, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 2, -1, 1, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 2, -3, 1, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, -1, 0, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, -1, 1, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, -1, 1, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, 1, -1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, 1, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, 0, -1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, 0, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, 0, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 0, -1, -1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, 0, -1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, 0, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, 0, -1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, 0, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, 0, 1);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 1, 1, -1, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, 0, 0, 0, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, -1, 0, -1, 0);
+            execute("INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)", 
0, -1, 0, 0, 0);
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d,e)<(?,?,?,?) " +
+            "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, 1, 1, -1, 0, -1, -1),
+
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 2, -1, 1, 1),
+                       row(0, 2, -3, 1, 1)
+
+            );
+
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d,e) < (?,?,?,?) " +
+            "AND (b,c,d,e)>(?,?,?,?)", 0, 1, 0, 0, 0, 1, 0, -1, -1),
+                       row(0, 1, 0, 0, -1)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d,e) <= (?,?,?,?) " +
+            "AND (b,c,d,e)>(?,?,?,?)", 0, 1, 0, 0, 0, 1, 0, -1, -1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0)
+            );
+
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d,e)<=(?,?,?,?) " +
+            "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, 1, 1, -1, 0, -1, -1),
+
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 2, -1, 1, 1),
+                       row(0, 2, -3, 1, 1)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c)<=(?,?) " +
+            "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, -1, 0, -1, -1),
+
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 2, -1, 1, 1),
+                       row(0, 2, -3, 1, 1)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c)<(?,?) " +
+            "AND (b,c,d,e)>(?,?,?,?)", 0, 2, 0, -1, 0, -1, -1),
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 2, -1, 1, 1),
+                       row(0, 2, -3, 1, 1)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d,e)<=(?,?,?,?) " +
+            "AND (b)>=(?)", 0, 2, 0, 1, 1, -1),
+
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 2, -1, 1, 1),
+                       row(0, 2, -3, 1, 1)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d,e)<=(?,?,?,?) " +
+            "AND (b)>(?)", 0, 2, 0, 1, 1, -1),
+
+                       row(0, 0, 0, 0, 0),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0),
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 2, -1, 1, 1),
+                       row(0, 2, -3, 1, 1)
+            );
+
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) <= 
(?,?,?,?)", 0, 1, 0, 0, 0),
+                       row(0, -1, 0, 0, 0),
+                       row(0, -1, 0, -1, 0),
+                       row(0, 0, 0, 0, 0),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, -1, -1),
+                       row(0, 1, -1, 1, 0),
+                       row(0, 1, -1, 1, 1),
+                       row(0, 1, -1, 0, 0)
+            );
+
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) > 
(?,?,?,?)", 0, 1, 0, 0, 0),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 2, -1, 1, 1),
+                       row(0, 2, -3, 1, 1)
+
+            );
+
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d,e) >= 
(?,?,?,?)", 0, 1, 0, 0, 0),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 2, -1, 1, 1),
+                       row(0, 2, -3, 1, 1)
+            );
+
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d) >= 
(?,?,?)", 0, 1, 0, 0),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 1, 0, 0, -1),
+                       row(0, 1, 0, 0, 0),
+                       row(0, 1, 0, 0, 1),
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 2, -1, 1, 1),
+                       row(0, 2, -3, 1, 1)
+            );
+
+            assertRows(execute("SELECT * FROM %s WHERE a = ? AND (b,c,d) > 
(?,?,?)", 0, 1, 0, 0),
+                       row(0, 1, 1, 0, -1),
+                       row(0, 1, 1, 0, 0),
+                       row(0, 1, 1, 0, 1),
+                       row(0, 1, 1, -1, 0),
+                       row(0, 1, 0, 1, -1),
+                       row(0, 1, 0, 1, 1),
+                       row(0, 2, 0, 1, 1),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 2, -1, 1, 1),
+                       row(0, 2, -3, 1, 1)
+            );
+
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b) < (?) ", 0, 0),
+                       row(0, -1, 0, 0, 0), row(0, -1, 0, -1, 0)
+            );
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b) <= (?) ", 0, -1),
+                       row(0, -1, 0, 0, 0), row(0, -1, 0, -1, 0)
+            );
+            assertRows(execute(
+            "SELECT * FROM %s" +
+            " WHERE a = ? " +
+            "AND (b,c,d,e) < (?,?,?,?) and (b,c,d,e) > (?,?,?,?) ", 0, 2, 0, 
0, 0, 2, -2, 0, 0),
+                       row(0, 2, 0, -1, 0),
+                       row(0, 2, 0, -1, 1),
+                       row(0, 2, -1, 1, 1)
+            );
+        }
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c8d95553/test/unit/org/apache/cassandra/cql3/validation/operations/SelectTest.java
----------------------------------------------------------------------
diff --git 
a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectTest.java 
b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectTest.java
index d444fde..97fdf6a 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectTest.java
@@ -2177,4 +2177,77 @@ public class SelectTest extends CQLTester
                              "SELECT * FROM %s WHERE c CONTAINS KEY ? ALLOW 
FILTERING",
                              unset());
     }
+
+    /**
+     * Check select with and without compact storage, with different column
+     * order. See CASSANDRA-10988
+     */
+    @Test
+    public void testClusteringOrderWithSlice() throws Throwable
+    {
+        for (String compactOption : new String[] { "", " COMPACT STORAGE AND" 
})
+        {
+            // non-compound, ASC order
+            createTable("CREATE TABLE %s (a text, b int, PRIMARY KEY (a, b)) 
WITH" +
+                        compactOption +
+                        " CLUSTERING ORDER BY (b ASC)");
+
+            execute("INSERT INTO %s (a, b) VALUES ('a', 2)");
+            execute("INSERT INTO %s (a, b) VALUES ('a', 3)");
+            assertRows(execute("SELECT * FROM %s WHERE a = 'a' AND b > 0"),
+                       row("a", 2),
+                       row("a", 3));
+
+            assertRows(execute("SELECT * FROM %s WHERE a = 'a' AND b > 0 ORDER 
BY b DESC"),
+                       row("a", 3),
+                       row("a", 2));
+
+            // non-compound, DESC order
+            createTable("CREATE TABLE %s (a text, b int, PRIMARY KEY (a, b)) 
WITH" +
+                        compactOption +
+                        " CLUSTERING ORDER BY (b DESC)");
+
+            execute("INSERT INTO %s (a, b) VALUES ('a', 2)");
+            execute("INSERT INTO %s (a, b) VALUES ('a', 3)");
+            assertRows(execute("SELECT * FROM %s WHERE a = 'a' AND b > 0"),
+                       row("a", 3),
+                       row("a", 2));
+
+            assertRows(execute("SELECT * FROM %s WHERE a = 'a' AND b > 0 ORDER 
BY b ASC"),
+                       row("a", 2),
+                       row("a", 3));
+
+            // compound, first column DESC order
+            createTable("CREATE TABLE %s (a text, b int, c int, PRIMARY KEY 
(a, b, c)) WITH" +
+                        compactOption +
+                        " CLUSTERING ORDER BY (b DESC)"
+            );
+
+            execute("INSERT INTO %s (a, b, c) VALUES ('a', 2, 4)");
+            execute("INSERT INTO %s (a, b, c) VALUES ('a', 3, 5)");
+            assertRows(execute("SELECT * FROM %s WHERE a = 'a' AND b > 0"),
+                       row("a", 3, 5),
+                       row("a", 2, 4));
+
+            assertRows(execute("SELECT * FROM %s WHERE a = 'a' AND b > 0 ORDER 
BY b ASC"),
+                       row("a", 2, 4),
+                       row("a", 3, 5));
+
+            // compound, mixed order
+            createTable("CREATE TABLE %s (a text, b int, c int, PRIMARY KEY 
(a, b, c)) WITH" +
+                        compactOption +
+                        " CLUSTERING ORDER BY (b ASC, c DESC)"
+            );
+
+            execute("INSERT INTO %s (a, b, c) VALUES ('a', 2, 4)");
+            execute("INSERT INTO %s (a, b, c) VALUES ('a', 3, 5)");
+            assertRows(execute("SELECT * FROM %s WHERE a = 'a' AND b > 0"),
+                       row("a", 2, 4),
+                       row("a", 3, 5));
+
+            assertRows(execute("SELECT * FROM %s WHERE a = 'a' AND b > 0 ORDER 
BY b ASC"),
+                       row("a", 2, 4),
+                       row("a", 3, 5));
+        }
+    }
 }

Reply via email to