Updated Branches:
  refs/heads/trunk a307c1749 -> 36a661394

cqlsh: fix handling of semicolons inside BATCH queries

patch by Aleksey Yeschenko; reviewed by Brandon Williams for
CASSANDRA-5697


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

Branch: refs/heads/trunk
Commit: c1d71213bdb6f5d326f5cc5a55e645a8edf2e589
Parents: 909b2ed
Author: Aleksey Yeschenko <alek...@apache.org>
Authored: Mon Jul 8 22:57:35 2013 +0300
Committer: Aleksey Yeschenko <alek...@apache.org>
Committed: Mon Jul 8 22:57:35 2013 +0300

----------------------------------------------------------------------
 CHANGES.txt                    |  1 +
 pylib/cqlshlib/cql3handling.py |  4 ++--
 pylib/cqlshlib/cqlhandling.py  | 10 ++++------
 3 files changed, 7 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/c1d71213/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 7c16cd0..65dd404 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -9,6 +9,7 @@
  * Fix skipping range tombstones with reverse queries (CASSANDRA-5712)
  * Expire entries out of ThriftSessionManager (CASSANRDA-5719)
  * Don't keep ancestor information in memory (CASSANDRA-5342)
+ * cqlsh: fix handling of semicolons inside BATCH queries (CASSANDRA-5697)
 
 
 1.2.6

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c1d71213/pylib/cqlshlib/cql3handling.py
----------------------------------------------------------------------
diff --git a/pylib/cqlshlib/cql3handling.py b/pylib/cqlshlib/cql3handling.py
index 0e631ea..92701d6 100644
--- a/pylib/cqlshlib/cql3handling.py
+++ b/pylib/cqlshlib/cql3handling.py
@@ -986,8 +986,8 @@ syntax_rules += r'''
 <batchStatement> ::= "BEGIN" ( "UNLOGGED" | "COUNTER" )? "BATCH"
                         ( "USING" [batchopt]=<usingOption>
                                   ( "AND" [batchopt]=<usingOption> )* )?
-                        [batchstmt]=<batchStatementMember> ";"
-                            ( [batchstmt]=<batchStatementMember> ";" )*
+                        [batchstmt]=<batchStatementMember> ";"?
+                            ( [batchstmt]=<batchStatementMember> ";"? )*
                      "APPLY" "BATCH"
                    ;
 <batchStatementMember> ::= <insertStatement>

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c1d71213/pylib/cqlshlib/cqlhandling.py
----------------------------------------------------------------------
diff --git a/pylib/cqlshlib/cqlhandling.py b/pylib/cqlshlib/cqlhandling.py
index 83e1dc2..7d36301 100644
--- a/pylib/cqlshlib/cqlhandling.py
+++ b/pylib/cqlshlib/cqlhandling.py
@@ -189,13 +189,11 @@ class CqlParsingRuleSet(pylexotron.ParsingRuleSet):
                 output[-1].extend(stmt)
             else:
                 output.append(stmt)
-            if len(stmt) > 1 \
-            and stmt[0][0] == 'identifier' and stmt[1][0] == 'identifier' \
-            and stmt[1][1].lower() == 'batch':
-                if stmt[0][1].lower() == 'begin':
-                    in_batch = True
-                elif stmt[0][1].lower() == 'apply':
+            if len(stmt) > 2:
+                if stmt[-3][0] == 'K_APPLY':
                     in_batch = False
+                elif stmt[0][0] == 'K_BEGIN':
+                    in_batch = True
         return output, in_batch
 
     def cql_complete_single(self, text, partial, init_bindings={}, 
ignore_case=True,

Reply via email to