You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ee...@apache.org on 2010/11/27 03:22:22 UTC

svn commit: r1039595 - in /cassandra/trunk: src/java/org/apache/cassandra/cql/Cql.g src/java/org/apache/cassandra/cql/QueryProcessor.java src/java/org/apache/cassandra/cql/StatementType.java test/system/test_cql.py

Author: eevans
Date: Sat Nov 27 02:22:22 2010
New Revision: 1039595

URL: http://svn.apache.org/viewvc?rev=1039595&view=rev
Log:
CQL TRUNCATE implementation + test

Patch by eevans for CASSANDRA-1716

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

Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g?rev=1039595&r1=1039594&r2=1039595&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g Sat Nov 27 02:22:22 2010
@@ -43,10 +43,11 @@ options {
 }
 
 query returns [CQLStatement stmnt]
-    : selectStatement { $stmnt = new CQLStatement(StatementType.SELECT, $selectStatement.expr); }
-    | updateStatement { $stmnt = new CQLStatement(StatementType.UPDATE, $updateStatement.expr); }
+    : selectStatement   { $stmnt = new CQLStatement(StatementType.SELECT, $selectStatement.expr); }
+    | updateStatement   { $stmnt = new CQLStatement(StatementType.UPDATE, $updateStatement.expr); }
     | batchUpdateStatement { $stmnt = new CQLStatement(StatementType.BATCH_UPDATE, $batchUpdateStatement.expr); }
-    | useStatement    { $stmnt = new CQLStatement(StatementType.USE, $useStatement.keyspace); }
+    | useStatement      { $stmnt = new CQLStatement(StatementType.USE, $useStatement.keyspace); }
+    | truncateStatement { $stmnt = new CQLStatement(StatementType.TRUNCATE, $truncateStatement.cfam); }
     ;
 
 // USE <KEYSPACE>;
@@ -168,6 +169,11 @@ selectExpression returns [SelectExpressi
       | start=term '..' finish=term { $expr = new SelectExpression(start, finish, count, reversed); }
       )
     ;
+
+// TRUNCATE <CF>;
+truncateStatement returns [String cfam]
+    : K_TRUNCATE columnFamily=IDENT { $cfam = $columnFamily.text; } endStmnt
+    ;
     
 endStmnt
     : (EOF | ';')
@@ -201,6 +207,7 @@ K_SET:         S E T;
 K_BEGIN:       B E G I N;
 K_APPLY:       A P P L Y;
 K_BATCH:       B A T C H;
+K_TRUNCATE:    T R U N C A T E;
 
 // Case-insensitive alpha characters
 fragment A: ('a'|'A');

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=1039595&r1=1039594&r2=1039595&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java Sat Nov 27 02:22:22 2010
@@ -69,6 +69,7 @@ import org.slf4j.LoggerFactory;
 import static org.apache.cassandra.avro.AvroValidation.validateKey;
 import static org.apache.cassandra.avro.AvroValidation.validateColumnFamily;
 import static org.apache.cassandra.avro.AvroErrorFactory.newInvalidRequestException;
+import static org.apache.cassandra.avro.AvroErrorFactory.newUnavailableException;
 
 public class QueryProcessor
 {
@@ -419,6 +420,29 @@ public class QueryProcessor
                 avroResult.type = CqlResultType.VOID;
                 
                 return avroResult;
+            
+            case TRUNCATE:
+                String columnFamily = (String)statement.statement;
+                
+                try
+                {
+                    StorageProxy.truncateBlocking(keyspace, columnFamily);
+                }
+                catch (org.apache.cassandra.thrift.UnavailableException e)
+                {
+                    throw newUnavailableException(e);
+                }
+                catch (TimeoutException e)
+                {
+                    throw newUnavailableException(e);
+                }
+                catch (IOException e)
+                {
+                    throw newUnavailableException(e);
+                }
+                
+                avroResult.type = CqlResultType.VOID;
+                return avroResult;
         }
         
         return null;    // We should never get here.

Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/StatementType.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/StatementType.java?rev=1039595&r1=1039594&r2=1039595&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/StatementType.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/StatementType.java Sat Nov 27 02:22:22 2010
@@ -22,5 +22,5 @@ package org.apache.cassandra.cql;
 
 public enum StatementType
 {
-    SELECT, UPDATE, BATCH_UPDATE, USE;
+    SELECT, UPDATE, BATCH_UPDATE, USE, TRUNCATE;
 }

Modified: cassandra/trunk/test/system/test_cql.py
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/system/test_cql.py?rev=1039595&r1=1039594&r2=1039595&view=diff
==============================================================================
--- cassandra/trunk/test/system/test_cql.py (original)
+++ cassandra/trunk/test/system/test_cql.py Sat Nov 27 02:22:22 2010
@@ -160,3 +160,9 @@ class TestCql(AvroTester):
         r = conn.execute('SELECT COUNT(1L..4L) FROM StandardLong1 WHERE KEY = "aa";')
         assert r == 4
 
+    def test_truncate_columnfamily(self):
+        "truncating a column family"
+        conn = init()
+        conn.execute('TRUNCATE Standard1;')
+        r = conn.execute('SELECT "cd1" FROM Standard1 WHERE KEY = "kd"')
+        assert len(r) == 0