You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by mi...@apache.org on 2014/04/19 03:18:38 UTC

[04/10] git commit: cqlsh: Updated CQL3 parser to support functions and BLOB literals

cqlsh: Updated CQL3 parser to support functions and BLOB literals

patch by Mikhail Stepura; reviewed by Aleksey Yeschenko for CASSANDRA-7018


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

Branch: refs/heads/trunk
Commit: 13d3a47461af24fbd4b2ddee71a7042168ed860f
Parents: 8709706
Author: Mikhail Stepura <mi...@apache.org>
Authored: Wed Apr 16 21:10:18 2014 -0700
Committer: Mikhail Stepura <mi...@apache.org>
Committed: Fri Apr 18 18:01:41 2014 -0700

----------------------------------------------------------------------
 CHANGES.txt                    |  1 +
 bin/cqlsh                      |  2 +-
 pylib/cqlshlib/cql3handling.py | 24 ++++++++++++++++++------
 3 files changed, 20 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/13d3a474/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index bb08a37..bf80e1e 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -6,6 +6,7 @@
  * Non-droppable verbs shouldn't be dropped from OTC (CASSANDRA-6980)
  * Shutdown batchlog executor in SS#drain() (CASSANDRA-7025)
  * Fix batchlog to account for CF truncation records (CASSANDRA-6999)
+ * Fix CQLSH parsing of functions and BLOB literals (CASSANDRA-7018)
 
 
 1.2.16

http://git-wip-us.apache.org/repos/asf/cassandra/blob/13d3a474/bin/cqlsh
----------------------------------------------------------------------
diff --git a/bin/cqlsh b/bin/cqlsh
index 4bf1b76..8e1e0e2 100755
--- a/bin/cqlsh
+++ b/bin/cqlsh
@@ -133,7 +133,7 @@ if os.path.exists(OLD_HISTORY):
 
 DEFAULT_HOST = 'localhost'
 DEFAULT_PORT = 9160
-DEFAULT_CQLVER = '3'
+DEFAULT_CQLVER = '3.0.5'
 DEFAULT_TRANSPORT_FACTORY = 'cqlshlib.tfactory.regular_transport_factory'
 
 DEFAULT_TIME_FORMAT = '%Y-%m-%d %H:%M:%S%z'

http://git-wip-us.apache.org/repos/asf/cassandra/blob/13d3a474/pylib/cqlshlib/cql3handling.py
----------------------------------------------------------------------
diff --git a/pylib/cqlshlib/cql3handling.py b/pylib/cqlshlib/cql3handling.py
index 50e2015..b04ba1d 100644
--- a/pylib/cqlshlib/cql3handling.py
+++ b/pylib/cqlshlib/cql3handling.py
@@ -206,6 +206,7 @@ JUNK ::= /([ \t\r\f\v]+|(--|[/][/])[^\n\r]*([\n\r]|$)|[/][*].*?[*][/])/ ;
 <stringLiteral> ::= /'([^']|'')*'/ ;
 <quotedName> ::=    /"([^"]|"")*"/ ;
 <float> ::=         /-?[0-9]+\.[0-9]+/ ;
+<blobLiteral> ::=    /0x[0-9a-f]+/ ;
 <wholenumber> ::=   /[0-9]+/ ;
 <uuid> ::=          /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/ ;
 <identifier> ::=    /[a-z][a-z0-9_]*/ ;
@@ -230,10 +231,15 @@ JUNK ::= /([ \t\r\f\v]+|(--|[/][/])[^\n\r]*([\n\r]|$)|[/][*].*?[*][/])/ ;
          | <float>
          | <uuid>
          | <boolean>
+         | <blobLiteral>
+         | <functionName> <functionArguments>
          ;
 
+<functionArguments> ::= "(" ( <term> ( "," <term> )* )? ")"
+                 ;
+
 <tokenDefinition> ::= token="TOKEN" "(" <term> ( "," <term> )* ")"
-                    | <stringLiteral>
+                    | <term>
                     ;
 <value> ::= <term>
           | <collectionLiteral>
@@ -255,6 +261,9 @@ JUNK ::= /([ \t\r\f\v]+|(--|[/][/])[^\n\r]*([\n\r]|$)|[/][*].*?[*][/])/ ;
 <mapLiteral> ::= "{" <term> ":" <term> ( "," <term> ":" <term> )* "}"
                ;
 
+<functionName> ::= <identifier>
+                 ;
+
 <statementBody> ::= <useStatement>
                   | <selectStatement>
                   | <dataChangeStatement>
@@ -739,13 +748,13 @@ syntax_rules += r'''
                  ;
 <selectStatement> ::= "SELECT" <selectClause>
                         "FROM" cf=<columnFamilyName>
-                          ("WHERE" <whereClause>)?
-                          ("ORDER" "BY" <orderByClause> ( "," <orderByClause> )* )?
-                          ("LIMIT" limit=<wholenumber>)?
+                          ( "WHERE" <whereClause> )?
+                          ( "ORDER" "BY" <orderByClause> ( "," <orderByClause> )* )?
+                          ( "LIMIT" limit=<wholenumber> )?
                     ;
-<whereClause> ::= <relation> ("AND" <relation>)*
+<whereClause> ::= <relation> ( "AND" <relation> )*
                 ;
-<relation> ::= [rel_lhs]=<cident> ("=" | "<" | ">" | "<=" | ">=") <term>
+<relation> ::= [rel_lhs]=<cident> ( "=" | "<" | ">" | "<=" | ">=" ) <term>
              | token="TOKEN" "(" [rel_tokname]=<cident>
                                  ( "," [rel_tokname]=<cident> )*
                              ")" ("=" | "<" | ">" | "<=" | ">=") <tokenDefinition>
@@ -758,7 +767,10 @@ syntax_rules += r'''
 <selector> ::= [colname]=<cident>
              | "WRITETIME" "(" [colname]=<cident> ")"
              | "TTL" "(" [colname]=<cident> ")"
+             | <functionName> <selectionFunctionArguments>
              ;
+<selectionFunctionArguments> ::= "(" ( <selector> ( "," <selector> )* )? ")"
+                          ;
 <orderByClause> ::= [ordercol]=<cident> ( "ASC" | "DESC" )?
                   ;
 '''