Updated Branches: refs/heads/trunk 25f8b6fae -> 82087b83c
Don't allow prepared marker inside collections patch by slebresne; reviewed by jbellis for CASSANDRA-4890 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/82087b83 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/82087b83 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/82087b83 Branch: refs/heads/trunk Commit: 82087b83c326c2e2978bc23380dd71a10952212a Parents: 25f8b6f Author: Sylvain Lebresne <[email protected]> Authored: Thu Nov 1 15:31:36 2012 +0100 Committer: Sylvain Lebresne <[email protected]> Committed: Thu Nov 1 15:31:36 2012 +0100 ---------------------------------------------------------------------- CHANGES.txt | 1 + src/java/org/apache/cassandra/cql3/Cql.g | 14 +++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/82087b83/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index c530234..30f68f3 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -48,6 +48,7 @@ * Fix composite index bug (CASSANDRA-4884) * Fix short read protection for CQL3 (CASSANDRA-4882) * Add tracing support to the binary protocol (CASSANDRA-4699) + * Don't allow prepared marker inside collections (CASSANDRA-4890) Merged from 1.1: * add get[Row|Key]CacheEntries to CacheServiceMBean (CASSANDRA-4859) * fix get_paged_slice to wrap to next row correctly (CASSANDRA-4816) http://git-wip-us.apache.org/repos/asf/cassandra/blob/82087b83/src/java/org/apache/cassandra/cql3/Cql.g ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/Cql.g b/src/java/org/apache/cassandra/cql3/Cql.g index 347bc1e..bc7fd4d 100644 --- a/src/java/org/apache/cassandra/cql3/Cql.g +++ b/src/java/org/apache/cassandra/cql3/Cql.g @@ -568,23 +568,27 @@ set_operation returns [Operation op] ; list_literal returns [List<Term> value] - : '[' { List<Term> l = new ArrayList<Term>(); } ( t1=term { l.add(t1); } ( ',' tn=term { l.add(tn); } )* )? ']' { $value = l; } + : '[' { List<Term> l = new ArrayList<Term>(); } ( t1=finalTerm { l.add(t1); } ( ',' tn=finalTerm { l.add(tn); } )* )? ']' { $value = l; } ; set_literal returns [List<Term> value] - : '{' { List<Term> s = new ArrayList<Term>(); } ( t1=term { s.add(t1); } ( ',' tn=term { s.add(tn); } )* )? '}' { $value = s; } + : '{' { List<Term> s = new ArrayList<Term>(); } ( t1=finalTerm { s.add(t1); } ( ',' tn=finalTerm { s.add(tn); } )* )? '}' { $value = s; } ; map_literal returns [Map<Term, Term> value] // Note that we have an ambiguity between maps and set for "{}". So we force it to a set, and deal with it later based on the type of the column : '{' { Map<Term, Term> m = new HashMap<Term, Term>(); } - k1=term ':' v1=term { m.put(k1, v1); } ( ',' kn=term ':' vn=term { m.put(kn, vn); } )* '}' + k1=finalTerm ':' v1=finalTerm { m.put(k1, v1); } ( ',' kn=finalTerm ':' vn=finalTerm { m.put(kn, vn); } )* '}' { $value = m; } ; -term returns [Term term] +finalTerm returns [Term term] : t=(STRING_LITERAL | UUID | INTEGER | FLOAT | K_TRUE | K_FALSE ) { $term = new Term($t.text, $t.type); } - | t=QMARK { $term = new Term($t.text, $t.type, ++currentBindMarkerIdx); } + ; + +term returns [Term term] + : ft=finalTerm { $term = ft; } + | t=QMARK { $term = new Term($t.text, $t.type, ++currentBindMarkerIdx); } ; intTerm returns [Term integer]
