Repository: cassandra Updated Branches: refs/heads/cassandra-1.2 87097066e -> 13d3a4746 refs/heads/cassandra-2.0 ba95a68ab -> 167af2b25 refs/heads/cassandra-2.1 22d86eb2d -> 477a0a28b refs/heads/trunk c65973d2d -> 894d6f67a
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/cassandra-1.2 Commit: 13d3a47461af24fbd4b2ddee71a7042168ed860f Parents: 8709706 Author: Mikhail Stepura <mish...@apache.org> Authored: Wed Apr 16 21:10:18 2014 -0700 Committer: Mikhail Stepura <mish...@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" )? ; '''