Author: eevans
Date: Fri Nov 12 19:33:00 2010
New Revision: 1034537

URL: http://svn.apache.org/viewvc?rev=1034537&view=rev
Log:
support empty/unset where clause

Patch by eevans

Modified:
    cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java
    cassandra/trunk/src/java/org/apache/cassandra/cql/SelectStatement.java
    cassandra/trunk/test/system/test_cql.py

Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java?rev=1034537&r1=1034536&r2=1034537&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java Fri 
Nov 12 19:33:00 2010
@@ -136,11 +136,10 @@ public class QueryProcessor
     {
         List<org.apache.cassandra.db.Row> rows = null;
         
-        // FIXME: ranges can be open-ended, but a start must exist.  Assert so 
here.
-        
+        ByteBuffer startKey = (select.getKeyStart() != null) ? 
select.getKeyStart().getByteBuffer() : (new Term()).getByteBuffer();
+        ByteBuffer finishKey = (select.getKeyFinish() != null) ? 
select.getKeyFinish().getByteBuffer() : (new Term()).getByteBuffer();
         IPartitioner<?> p = StorageService.getPartitioner();
-        AbstractBounds bounds = new 
Bounds(p.getToken(select.getKeyStart().getByteBuffer()),
-                                           
p.getToken(select.getKeyFinish().getByteBuffer()));
+        AbstractBounds bounds = new Bounds(p.getToken(startKey), 
p.getToken(finishKey));
         
         // XXX: Our use of Thrift structs internally makes me Sad. :(
         SlicePredicate thriftSlicePredicate = slicePredicateFromSelect(select);

Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/SelectStatement.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/SelectStatement.java?rev=1034537&r1=1034536&r2=1034537&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/SelectStatement.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/SelectStatement.java Fri 
Nov 12 19:33:00 2010
@@ -43,7 +43,7 @@ public class SelectStatement
         this.expression = expression;
         this.columnFamily = columnFamily;
         this.cLevel = cLevel;
-        this.clause = clause;
+        this.clause = (clause != null) ? clause : new WhereClause();
         this.numRecords = numRecords;
     }
     

Modified: cassandra/trunk/test/system/test_cql.py
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/system/test_cql.py?rev=1034537&r1=1034536&r2=1034537&view=diff
==============================================================================
--- cassandra/trunk/test/system/test_cql.py (original)
+++ cassandra/trunk/test/system/test_cql.py Fri Nov 12 19:33:00 2010
@@ -141,3 +141,13 @@ class TestCql(AvroTester):
         """)
         assert len(r) == 1
         assert r[0]['key'] == "dozer"
+
+    def test_no_where_clause(self):
+        "empty where clause (range query w/o start key)"
+        conn = init()
+        r = conn.execute('SELECT "col" FROM Standard1 LIMIT 3')
+        assert len(r) == 3
+        assert r[0]['key'] == "ka"
+        assert r[1]['key'] == "kb"
+        assert r[2]['key'] == "kc"
+


Reply via email to