cqlsh pg-style-strings broken if line ends with ';'

patch by Robert Stupp; reviewed by Stefania for CASSANDRA-11123
This commit is contained in:
Robert Stupp 2016-02-17 13:42:02 +01:00
parent f7c75857da
commit 97f3aa681d
4 changed files with 7 additions and 5 deletions

View File

@ -1,4 +1,5 @@
2.2.6
* cqlsh pg-style-strings broken if line ends with ';' (CASSANDRA-11123)
* Use cloned TokenMetadata in size estimates to avoid race against membership check
(CASSANDRA-10736)
* Always persist upsampled index summaries (CASSANDRA-10512)

View File

@ -1108,7 +1108,7 @@ class Shell(cmd.Cmd):
"""
try:
statements, in_batch = cqlruleset.cql_split_statements(statementtext)
statements, endtoken_escaped = cqlruleset.cql_split_statements(statementtext)
except pylexotron.LexingError, e:
if self.show_line_nums:
self.printerr('Invalid syntax at char %d' % (e.charnum,))
@ -1124,7 +1124,7 @@ class Shell(cmd.Cmd):
statements = statements[:-1]
if not statements:
return True
if in_batch or statements[-1][-1][0] != 'endtoken':
if endtoken_escaped or statements[-1][-1][0] != 'endtoken':
self.set_continue_prompt()
return
for st in statements:

View File

@ -142,6 +142,7 @@ class CqlParsingRuleSet(pylexotron.ParsingRuleSet):
stmts = util.split_list(tokens, lambda t: t[0] == 'endtoken')
output = []
in_batch = False
in_pg_string = len([st for st in tokens if len(st) > 0 and st[0] == 'unclosedPgString']) == 1
for stmt in stmts:
if in_batch:
output[-1].extend(stmt)
@ -152,7 +153,7 @@ class CqlParsingRuleSet(pylexotron.ParsingRuleSet):
in_batch = False
elif stmt[0][1].upper() == 'BEGIN':
in_batch = True
return output, in_batch
return output, in_batch or in_pg_string
def cql_complete_single(self, text, partial, init_bindings={}, ignore_case=True,
startsymbol='Start'):

View File

@ -57,8 +57,8 @@ def create_test_keyspace(cursor):
def split_cql_commands(source):
ruleset = cql_rule_set()
statements, in_batch = ruleset.cql_split_statements(source)
if in_batch:
statements, endtoken_escaped = ruleset.cql_split_statements(source)
if endtoken_escaped:
raise ValueError("CQL source ends unexpectedly")
return [ruleset.cql_extract_orig(toks, source) for toks in statements if toks]