Updated Branches:
  refs/heads/cassandra-1.1 14d57389b -> 058307b65

Update ORDER BY syntax for CQL3

patch by slebresne; reviewed by jbellis for CASSANDRA-3925


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

Branch: refs/heads/cassandra-1.1
Commit: 058307b65ebf6d85027c8960e26ed10a4f4bfd80
Parents: 14d5738
Author: Sylvain Lebresne <sylv...@datastax.com>
Authored: Mon Feb 20 11:04:00 2012 +0100
Committer: Sylvain Lebresne <sylv...@datastax.com>
Committed: Mon Feb 20 11:04:00 2012 +0100

----------------------------------------------------------------------
 CHANGES.txt                                        |    1 +
 src/java/org/apache/cassandra/cql3/Cql.g           |    5 ++++-
 .../cassandra/cql3/statements/SelectStatement.java |   15 ++++++++++++++-
 3 files changed, 19 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/058307b6/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 596ceeb..b8ffb10 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -3,6 +3,7 @@
    (CASSANDRA-3921)
  * fix concurrency issues with CQL keyspace creation (CASSANDRA-3903)
  * Show Effective Owership via Nodetool ring <keyspace> (CASSANDRA-3412)
+ * Update ORDER BY syntax for CQL3 (CASSANDRA-3925)
 
 1.1-beta1
  * add nodetool rebuild_index (CASSANDRA-3583)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/058307b6/src/java/org/apache/cassandra/cql3/Cql.g
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/Cql.g 
b/src/java/org/apache/cassandra/cql3/Cql.g
index 4c9cfe4..ec6e8e0 100644
--- a/src/java/org/apache/cassandra/cql3/Cql.g
+++ b/src/java/org/apache/cassandra/cql3/Cql.g
@@ -157,16 +157,18 @@ selectStatement returns [SelectStatement.RawStatement 
expr]
         ConsistencyLevel cLevel = ConsistencyLevel.ONE;
         int limit = 10000;
         boolean reversed = false;
+        ColumnIdentifier orderBy = null;
     }
     : K_SELECT ( sclause=selectClause | (K_COUNT '(' sclause=selectClause ')' 
{ isCount = true; }) )
       K_FROM cf=columnFamilyName
       ( K_USING K_CONSISTENCY K_LEVEL { cLevel = 
ConsistencyLevel.valueOf($K_LEVEL.text.toUpperCase()); } )?
       ( K_WHERE wclause=whereClause )?
-      ( K_ORDER (K_ASC | K_DESC { reversed = true; }) )?
+      ( K_ORDER K_BY c=cident { orderBy = c; } (K_ASC | K_DESC { reversed = 
true; })? )?
       ( K_LIMIT rows=INTEGER { limit = Integer.parseInt($rows.text); } )?
       {
           SelectStatement.Parameters params = new 
SelectStatement.Parameters(cLevel,
                                                                              
limit,
+                                                                             
orderBy,
                                                                              
reversed,
                                                                              
isCount);
           $expr = new SelectStatement.RawStatement(cf, params, sclause, 
wclause);
@@ -533,6 +535,7 @@ K_TYPE:        T Y P E;
 K_COMPACT:     C O M P A C T;
 K_STORAGE:     S T O R A G E;
 K_ORDER:       O R D E R;
+K_BY:          B Y;
 K_ASC:         A S C;
 K_DESC:        D E S C;
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/058307b6/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 3b699b9..e8b7c45 100644
--- a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
@@ -915,6 +915,17 @@ public class SelectStatement implements CQLStatement
                 }
             }
 
+            // We only support order by on the the second PK column
+            if (stmt.parameters.orderBy != null)
+            {
+                CFDefinition.Name name = cfDef.get(stmt.parameters.orderBy);
+                if (name == null)
+                    throw new InvalidRequestException(String.format("Order by 
on unknown column %s", stmt.parameters.orderBy));
+
+                if (name.kind != CFDefinition.Name.Kind.COLUMN_ALIAS || 
name.position != 0)
+                    throw new InvalidRequestException(String.format("Order by 
is currently only supported on the second column of the PRIMARY KEY (if any), 
got %s", stmt.parameters.orderBy));
+            }
+
             // Only allow reversed if the row key restriction is an equality,
             // since we don't know how to reverse otherwise
             if (stmt.parameters.isColumnsReversed)
@@ -1079,13 +1090,15 @@ public class SelectStatement implements CQLStatement
     {
         private final int limit;
         private final ConsistencyLevel consistencyLevel;
+        private final ColumnIdentifier orderBy;
         private final boolean isColumnsReversed;
         private final boolean isCount;
 
-        public Parameters(ConsistencyLevel consistency, int limit, boolean 
reversed, boolean isCount)
+        public Parameters(ConsistencyLevel consistency, int limit, 
ColumnIdentifier orderBy, boolean reversed, boolean isCount)
         {
             this.consistencyLevel = consistency;
             this.limit = limit;
+            this.orderBy = orderBy;
             this.isColumnsReversed = reversed;
             this.isCount = isCount;
         }

Reply via email to