cqlsh COPY FROM fails with []{} chars in UDT/tuple fields/values patch by Robert Stupp; reviewed by Stefania for CASSANDRA-11633
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/07c9fa2c Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/07c9fa2c Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/07c9fa2c Branch: refs/heads/cassandra-2.2 Commit: 07c9fa2cac21e572312bcfb0c778db41541ea7e4 Parents: 666bee6 Author: Robert Stupp <sn...@snazy.de> Authored: Mon Apr 25 10:16:28 2016 +0200 Committer: Robert Stupp <sn...@snazy.de> Committed: Mon Apr 25 10:16:28 2016 +0200 ---------------------------------------------------------------------- CHANGES.txt | 1 + pylib/cqlshlib/copyutil.py | 17 +++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/07c9fa2c/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 2a93e9a..53945d6 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.1.15 + * cqlsh COPY FROM fails with []{} chars in UDT/tuple fields/values (CASSANDRA-11633) * clqsh: COPY FROM throws TypeError with Cython extensions enabled (CASSANDRA-11574) * cqlsh: COPY FROM ignores NULL values in conversion (CASSANDRA-11549) http://git-wip-us.apache.org/repos/asf/cassandra/blob/07c9fa2c/pylib/cqlshlib/copyutil.py ---------------------------------------------------------------------- diff --git a/pylib/cqlshlib/copyutil.py b/pylib/cqlshlib/copyutil.py index 16bdf02..e12b72f 100644 --- a/pylib/cqlshlib/copyutil.py +++ b/pylib/cqlshlib/copyutil.py @@ -1734,15 +1734,16 @@ class ImportConversion(object): level = 0 quote = False for i, c in enumerate(val): - if c == '{' or c == '[' or c == '(': - level += 1 - elif c == '}' or c == ']' or c == ')': - level -= 1 - elif c == '\'': + if c == '\'': quote = not quote - elif c == sep and level == 1 and not quote: - ret.append(val[last:i]) - last = i + 1 + elif not quote: + if c == '{' or c == '[' or c == '(': + level += 1 + elif c == '}' or c == ']' or c == ')': + level -= 1 + elif c == sep and level == 1: + ret.append(val[last:i]) + last = i + 1 else: if last < len(val) - 1: ret.append(val[last:-1])