Author: xedin
Date: Sun Aug 28 11:06:17 2011
New Revision: 1162495

URL: http://svn.apache.org/viewvc?rev=1162495&view=rev
Log:
Fix parsing of the Keyspace and ColumnFamily names in numeric and string 
representations in CLI
patch by Pavel Yaskevich; reviewed by Jonathan Ellis for CASSANDRA-3075

Modified:
    cassandra/branches/cassandra-0.8/CHANGES.txt
    cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/Cli.g
    
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliCompiler.java
    
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java

Modified: cassandra/branches/cassandra-0.8/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/CHANGES.txt?rev=1162495&r1=1162494&r2=1162495&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.8/CHANGES.txt Sun Aug 28 11:06:17 2011
@@ -35,7 +35,8 @@
  * work around native memory leak in com.sun.management.GarbageCollectorMXBean
     (CASSANDRA-2868)
  * fix UnavailableException with writes at CL.EACH_QUORM (CASSANDRA-3084)
-
+ * fix parsing of the Keyspace and ColumnFamily names in numeric
+   and string representations in CLI (CASSANDRA-3075)
 
 0.8.4
  * include files-to-be-streamed in StreamInSession.getSources (CASSANDRA-2972)

Modified: 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/Cli.g
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/Cli.g?rev=1162495&r1=1162494&r2=1162495&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/Cli.g 
(original)
+++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/Cli.g 
Sun Aug 28 11:06:17 2011
@@ -382,8 +382,8 @@ useKeyspace
 
 
 keyValuePairExpr
-    : objectName ( (AND | WITH) keyValuePair )* 
-        -> ^(NODE_NEW_KEYSPACE_ACCESS objectName ( keyValuePair )* )
+    : entityName ( (AND | WITH) keyValuePair )*
+        -> ^(NODE_NEW_KEYSPACE_ACCESS entityName ( keyValuePair )* )
     ;
             
 keyValuePair 
@@ -423,12 +423,12 @@ columnFamilyExpr
     ;
 
 keyRangeExpr
-    :    '[' ( startKey? ':' endKey? )? ']'
-      -> ^(NODE_KEY_RANGE startKey? endKey?)
+    :    '[' ( startKey=entityName? ':' endKey=entityName? )? ']'
+      -> ^(NODE_KEY_RANGE $startKey? $endKey?)
     ;
 
 columnName
-       : (StringLiteral | Identifier | IntegerPositiveLiteral | 
IntegerNegativeLiteral)
+       : entityName
        ;
 
 attr_name
@@ -448,12 +448,8 @@ attrValueDouble
        : DoubleLiteral
        ;
   
-objectName
-       : Identifier
-       ;
-
 keyspace
-       : Identifier
+       : entityName
        ;
 
 replica_placement_strategy
@@ -461,7 +457,7 @@ replica_placement_strategy
        ;
 
 keyspaceNewName
-       : Identifier
+       : entityName
        ;
 
 comparator
@@ -472,7 +468,7 @@ command     : Identifier
        ;
 
 newColumnFamily
-       : Identifier
+       : entityName
        ;
 
 username: Identifier
@@ -482,8 +478,12 @@ password: StringLiteral
        ;
 
 columnFamily
-       : Identifier
-       ;
+  : entityName
+  ;
+
+entityName
+  : (Identifier | StringLiteral | IntegerPositiveLiteral | 
IntegerNegativeLiteral)
+  ;
 
 rowKey 
     :  (Identifier | StringLiteral | IntegerPositiveLiteral | 
IntegerNegativeLiteral | functionCall)
@@ -502,14 +502,6 @@ functionArgument 
     : Identifier | StringLiteral | IntegerPositiveLiteral | 
IntegerNegativeLiteral
     ;
 
-startKey
-    : (Identifier | StringLiteral)
-       ;
-
-endKey 
-    : (Identifier | StringLiteral)
-       ;
-
 columnOrSuperColumn
        : (Identifier | IntegerPositiveLiteral | IntegerNegativeLiteral | 
StringLiteral | functionCall)
        ;

Modified: 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliCompiler.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliCompiler.java?rev=1162495&r1=1162494&r2=1162495&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliCompiler.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliCompiler.java
 Sun Aug 28 11:06:17 2011
@@ -96,7 +96,7 @@ public class CliCompiler
 
     public static String getColumnFamily(Tree astNode, List<CfDef> cfDefs)
     {
-        return getColumnFamily(astNode.getChild(0).getText(), cfDefs);
+        return 
getColumnFamily(CliUtils.unescapeSQLString(astNode.getChild(0).getText()), 
cfDefs);
     }
 
     public static String getColumnFamily(String cfName, List<CfDef> cfDefs)

Modified: 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java?rev=1162495&r1=1162494&r2=1162495&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java
 Sun Aug 28 11:06:17 2011
@@ -37,36 +37,41 @@ public class CliTest extends CleanupHelp
     // please add new statements here so they could be auto-runned by this 
test.
     private String[] statements = {
         "use TestKeySpace;",
-        "create column family CF1 with comparator=UTF8Type and 
column_metadata=[{ column_name:world, validation_class:IntegerType, 
index_type:0, index_name:IdxName }, " +
+        "create column family 123 with comparator=UTF8Type and 
column_metadata=[{ column_name:world, validation_class:IntegerType, 
index_type:0, index_name:IdxName }, " +
                                                                                
"{ column_name:world2, validation_class:LongType, index_type:KEYS, 
index_name:LongIdxName}, " +
                                                                                
"{ column_name:617070, validation_class:UTF8Type, index_type:KEYS }, " +
                                                                                
"{ column_name:'-617071', validation_class:UTF8Type, index_type:KEYS }];",
-        "assume CF1 keys as utf8;",
-        "set CF1[hello][world] = 123848374878933948398384;",
-        "set CF1[hello][test_quote] = 'value\\'';",
-        "set CF1['k\\'ey'][VALUE] = 'VAL';",
-        "set CF1['k\\'ey'][VALUE] = 'VAL\\'';",
-        "set CF1[hello][-31337] = 'some string value';",
-        "get CF1[hello][-31337];",
-        "get CF1[hello][world];",
-        "get CF1[hello][test_quote];",
-        "get CF1['k\\'ey'][VALUE]",
-        "set CF1[hello][-31337] = -23876;",
-        "set CF1[hello][-31337] = long(-23876);",
-        "set CF1[hello][world2] = 15;",
-        "get CF1 where world2 = long(15);",
-        "get cF1 where world2 = long(15);",
-        "get Cf1 where world2 = long(15);",
-        "del CF1[utf8('hello')][utf8('world')];",
-        "del CF1[hello][world2];",
-        "set CF1['hello'][time_spent_uuid] = 
timeuuid(a8098c1a-f86e-11da-bd1a-00112444be1e);",
+        "assume 123 keys as utf8;",
+        "set 123[hello][world] = 123848374878933948398384;",
+        "set 123[hello][test_quote] = 'value\\'';",
+        "set 123['k\\'ey'][VALUE] = 'VAL';",
+        "set 123['k\\'ey'][VALUE] = 'VAL\\'';",
+        "set 123[hello][-31337] = 'some string value';",
+        "list 123;",
+        "list 123[:];",
+        "list 123[456:];",
+        "list 123 limit 5",
+        "list 123[12:15] limit 20",
+        "get 123[hello][-31337];",
+        "get 123[hello][world];",
+        "get 123[hello][test_quote];",
+        "get 123['k\\'ey'][VALUE]",
+        "set 123[hello][-31337] = -23876;",
+        "set 123[hello][-31337] = long(-23876);",
+        "set 123[hello][world2] = 15;",
+        "get 123 where world2 = long(15);",
+        "get 123 where world2 = long(15);",
+        "get 123 where world2 = long(15);",
+        "del 123[utf8('hello')][utf8('world')];",
+        "del 123[hello][world2];",
+        "set 123['hello'][time_spent_uuid] = 
timeuuid(a8098c1a-f86e-11da-bd1a-00112444be1e);",
         "create column family CF2 with comparator=IntegerType;",
         "assume CF2 keys as utf8;",
         "set CF2['key'][98349387493847748398334] = 'some text';",
         "get CF2['key'][98349387493847748398334];",
         "set CF2['key'][98349387493] = 'some text other';",
         "get CF2['key'][98349387493];",
-        "create column family CF3 with comparator=UTF8Type and 
column_metadata=[{column_name:'big world', validation_class:LongType}];",
+        "create column family CF3 with comparator=UTF8Type and 
column_metadata=[{column_name:'big world', validation_class:LongType, 
index_type:KEYS, index_name:WorldIdx}];",
         "assume CF3 keys as utf8;",
         "set CF3['hello']['big world'] = 3748;",
         "get CF3['hello']['big world'];",
@@ -86,24 +91,24 @@ public class CliTest extends CleanupHelp
         "get CF4['hello'][9999] as Long;",
         "del CF4['hello'][9999];",
         "get CF4['hello'][9999];",
-        "create column family SCF1 with column_type=Super and 
comparator=IntegerType and subcomparator=LongType and 
column_metadata=[{column_name:9999, validation_class:LongType}];",
-        "assume SCF1 keys as utf8;",
-        "set SCF1['hello'][1][9999] = 1234;",
-        "get SCF1['hello'][1][9999];",
-        "get SCF1['hello'][1][9999] as Long;",
-        "get SCF1['hello'][1][9999] as Bytes;",
-        "set SCF1['hello'][1][9999] = Long(1234);",
-        "set SCF1['hello'][-1][-12] = Long(5678);",
-        "get SCF1['hello'][-1][-12];",
-        "set SCF1['hello'][-1][-12] = -340897;",
-        "set SCF1['hello'][-1][-12] = integer(-340897);",
-        "get SCF1['hello'][1][9999];",
-        "get SCF1['hello'][1][9999] as Long;",
-        "del SCF1['hello'][1][9999];",
-        "get SCF1['hello'][1][9999];",
-        "set SCF1['hello'][1][9999] = Long(1234);",
-        "del SCF1['hello'][9999];",
-        "get SCF1['hello'][1][9999];",
+        "create column family sCf1 with column_type=Super and 
comparator=IntegerType and subcomparator=LongType and 
column_metadata=[{column_name:9999, validation_class:LongType}];",
+        "assume sCf1 keys as utf8;",
+        "set sCf1['hello'][1][9999] = 1234;",
+        "get sCf1['hello'][1][9999];",
+        "get sCf1['hello'][1][9999] as Long;",
+        "get sCf1['hello'][1][9999] as Bytes;",
+        "set sCf1['hello'][1][9999] = Long(1234);",
+        "set sCf1['hello'][-1][-12] = Long(5678);",
+        "get sCf1['hello'][-1][-12];",
+        "set sCf1['hello'][-1][-12] = -340897;",
+        "set sCf1['hello'][-1][-12] = integer(-340897);",
+        "get sCf1['hello'][1][9999];",
+        "get sCf1['hello'][1][9999] as Long;",
+        "del sCf1['hello'][1][9999];",
+        "get sCf1['hello'][1][9999];",
+        "set sCf1['hello'][1][9999] = Long(1234);",
+        "del sCf1['hello'][9999];",
+        "get sCf1['hello'][1][9999];",
         "create column family Counter1 with comparator=UTF8Type and 
default_validation_class=CounterColumnType;",
         "assume Counter1 keys as utf8;",
         "incr Counter1['hello']['cassandra'];",
@@ -114,16 +119,17 @@ public class CliTest extends CleanupHelp
         "decr Counter1['hello']['cassandra'] by -2;",
         "get Counter1['hello']['cassandra'];",
         "get Counter1['hello'];",
-        "truncate CF1;",
-        "drop index on CF1.world2;",
-        "drop index on CF1.617070;",
-        "drop index on CF1.'-617071';",
+        "truncate 123;",
+        "drop index on '123'.world2;",
+        "drop index on '123'.617070;",
+        "drop index on '123'.'-617071';",
+        "drop index on CF3.'big world';",
         "update keyspace TestKeySpace with 
placement_strategy='org.apache.cassandra.locator.LocalStrategy' and 
durable_writes = false;",
         "update keyspace TestKeySpace with strategy_options=[{DC1:3, DC2:4, 
DC5:1}];",
-        "assume CF1 comparator as utf8;",
-        "assume CF1 sub_comparator as integer;",
-        "assume CF1 validator as lexicaluuid;",
-        "assume CF1 keys as timeuuid;",
+        "assume 123 comparator as utf8;",
+        "assume 123 sub_comparator as integer;",
+        "assume 123 validator as lexicaluuid;",
+        "assume 123 keys as timeuuid;",
         "create column family CF7;",
         "assume CF7 keys as utf8;",
         "set CF7[1][timeuuid()] = utf8(test1);",
@@ -142,14 +148,15 @@ public class CliTest extends CleanupHelp
         "count sCf1[hello];",
         "count sCf1[utf8('hello')];",
         "count sCf1[utf8('hello')][integer(1)];",
-        "count sCF1[hello][1];",
+        "count sCf1[hello][1];",
         "list sCf1;",
-        "del SCF1['hello'][1][9999];",
+        "del sCf1['hello'][1][9999];",
         "assume sCf1 comparator as utf8;",
         "create column family CF8;",
         "drop column family cF8;",
         "create keyspace TESTIN;",
         "drop keyspace tesTIN;",
+        "drop column family 123;",
         "create column family myCF with column_type='Super' and 
comparator='UTF8Type' AND subcomparator='UTF8Type';",
         "assume myCF keys as utf8;",
         "create column family Countries with comparator=UTF8Type and 
column_metadata=[ {column_name: name, validation_class: UTF8Type} ];",


Reply via email to