Author: eevans
Date: Fri Mar 11 21:57:04 2011
New Revision: 1080772

URL: http://svn.apache.org/viewvc?rev=1080772&view=rev
Log:
more flexible keyspace/column family specifications

Patch by eevans for CASSANDRA-2027

Modified:
    cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g
    
cassandra/trunk/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java
    
cassandra/trunk/src/java/org/apache/cassandra/cql/CreateKeyspaceStatement.java

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=1080772&r1=1080771&r2=1080772&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g Fri Mar 11 21:57:04 
2011
@@ -95,7 +95,7 @@ selectStatement returns [SelectStatement
           ( s1=selectExpression                 { expression = s1; }
           | K_COUNT '(' s2=selectExpression ')' { expression = s2; isCountOp = 
true; }
           )
-          K_FROM columnFamily=IDENT
+          K_FROM columnFamily=( IDENT | STRING_LITERAL | INTEGER )
           ( K_USING K_CONSISTENCY K_LEVEL { cLevel = 
ConsistencyLevel.valueOf($K_LEVEL.text); } )?
           ( K_WHERE whereClause )?
           ( K_LIMIT rows=INTEGER { numRecords = Integer.parseInt($rows.text); 
} )?
@@ -167,7 +167,7 @@ updateStatement returns [UpdateStatement
           ConsistencyLevel cLevel = null;
           Map<Term, Term> columns = new HashMap<Term, Term>();
       }
-      K_UPDATE columnFamily=IDENT
+      K_UPDATE columnFamily=( IDENT | STRING_LITERAL | INTEGER )
           (K_USING K_CONSISTENCY K_LEVEL { cLevel = 
ConsistencyLevel.valueOf($K_LEVEL.text); })?
           K_SET termPair[columns] (',' termPair[columns])*
           K_WHERE K_KEY '=' key=term endStmnt
@@ -194,7 +194,7 @@ deleteStatement returns [DeleteStatement
       }
       K_DELETE
           ( cols=termList { columnsList = $cols.items; })?
-          K_FROM columnFamily=IDENT ( K_USING K_CONSISTENCY K_LEVEL )?
+          K_FROM columnFamily=( IDENT | STRING_LITERAL | INTEGER ) ( K_USING 
K_CONSISTENCY K_LEVEL )?
           K_WHERE ( K_KEY '=' key=term           { keyList = 
Collections.singletonList(key); }
                   | K_KEY K_IN '(' keys=termList { keyList = $keys.items; } ')'
                   )?
@@ -208,7 +208,7 @@ createKeyspaceStatement returns [CreateK
     : {
           Map<String, String> attrs = new HashMap<String, String>();
       }
-      K_CREATE K_KEYSPACE keyspace=IDENT
+      K_CREATE K_KEYSPACE keyspace=( IDENT | STRING_LITERAL | INTEGER )
           K_WITH  a1=( COMPIDENT | IDENT ) '=' v1=( STRING_LITERAL | INTEGER ) 
{ attrs.put($a1.text, $v1.text); }
           ( K_AND aN=( COMPIDENT | IDENT ) '=' vN=( STRING_LITERAL | INTEGER ) 
{ attrs.put($aN.text, $vN.text); } )*
           endStmnt
@@ -225,7 +225,8 @@ createKeyspaceStatement returns [CreateK
  * ) WITH comparator = <type> [AND ...];
  */
 createColumnFamilyStatement returns [CreateColumnFamilyStatement expr]
-    : K_CREATE K_COLUMNFAMILY name=IDENT { $expr = new 
CreateColumnFamilyStatement($name.text); } ( '('
+    : K_CREATE K_COLUMNFAMILY name=( IDENT | STRING_LITERAL | INTEGER ) { 
$expr = new CreateColumnFamilyStatement($name.text); }
+      ( '('
           col1=term v1=createCfamColumnValidator { $expr.addColumn(col1, 
$v1.validator); } ( ','
           colN=term vN=createCfamColumnValidator { $expr.addColumn(colN, 
$vN.validator); } )*
       ')' )?
@@ -247,18 +248,18 @@ createCfamKeywordArgument returns [Strin
 
 /** CREATE INDEX [indexName] ON columnFamily (columnName); */
 createIndexStatement returns [CreateIndexStatement expr]
-    : K_CREATE K_INDEX (idxName=IDENT)? K_ON cf=IDENT '(' columnName=term ')' 
endStmnt
+    : K_CREATE K_INDEX (idxName=IDENT)? K_ON cf=( IDENT | STRING_LITERAL | 
INTEGER ) '(' columnName=term ')' endStmnt
       { $expr = new CreateIndexStatement($idxName.text, $cf.text, columnName); 
}
     ;
 
 /** DROP KEYSPACE <KSP>; */
 dropKeyspaceStatement returns [String ksp]
-    : K_DROP K_KEYSPACE IDENT endStmnt { $ksp = $IDENT.text; }
+    : K_DROP K_KEYSPACE name=( IDENT | STRING_LITERAL | INTEGER ) endStmnt { 
$ksp = $name.text; }
     ;
 
 /** DROP COLUMNFAMILY <CF>; */
 dropColumnFamilyStatement returns [String cfam]
-    : K_DROP K_COLUMNFAMILY IDENT endStmnt { $cfam = $IDENT.text; }
+    : K_DROP K_COLUMNFAMILY name=( IDENT | STRING_LITERAL | INTEGER ) endStmnt 
{ $cfam = $name.text; }
     ;
 
 comparatorType
@@ -288,7 +289,7 @@ relation returns [Relation rel]
 
 // TRUNCATE <CF>;
 truncateStatement returns [String cfam]
-    : K_TRUNCATE columnFamily=IDENT { $cfam = $columnFamily.text; } endStmnt
+    : K_TRUNCATE columnFamily=( IDENT | STRING_LITERAL | INTEGER ) { $cfam = 
$columnFamily.text; } endStmnt
     ;
 
 endStmnt

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java?rev=1080772&r1=1080771&r2=1080772&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java
 (original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java
 Fri Mar 11 21:57:04 2011
@@ -96,6 +96,10 @@ public class CreateColumnFamilyStatement
     /** Perform validation of parsed params */
     private void validate() throws InvalidRequestException
     {
+        // Column family name
+        if (!name.matches("\\w+"))
+            throw new InvalidRequestException(String.format("\"%s\" is not a 
valid column family name", name));
+        
         // Catch the case where someone passed a kwarg that is not recognized.
         Set<String> keywordsFound = new HashSet<String>(properties.keySet());
         keywordsFound.removeAll(keywords);

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/cql/CreateKeyspaceStatement.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/CreateKeyspaceStatement.java?rev=1080772&r1=1080771&r2=1080772&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/cql/CreateKeyspaceStatement.java 
(original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/cql/CreateKeyspaceStatement.java 
Fri Mar 11 21:57:04 2011
@@ -34,7 +34,11 @@ public class CreateKeyspaceStatement
      * @throws InvalidRequestException if arguments are missing or unacceptable
      */
     public void validate() throws InvalidRequestException
-    {   
+    {
+        // keyspace name
+        if (!name.matches("\\w+"))
+            throw new InvalidRequestException(String.format("\"%s\" is not a 
valid keyspace name", name));
+        
         // required
         if (!attrs.containsKey("strategy_class"))
             throw new InvalidRequestException("missing required argument 
\"strategy_class\"");


Reply via email to