diff --git a/CHANGES.txt b/CHANGES.txt index e86ad5bded..ac83b1230c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.1.1 + * Allow compilation in java 8 (CASSANDRA-7208) * Fix Assertion error on RangeTombstoneList diff (CASSANDRA-8013) * Release references to overlapping sstables during compaction (CASSANDRA-7819) * Send notification when opening compaction results early (CASSANDRA-8034) diff --git a/build.xml b/build.xml index 5f2b568e20..957006a03b 100644 --- a/build.xml +++ b/build.xml @@ -194,7 +194,7 @@ Building Grammar ${build.src.java}/org/apache/cassandra/cli/Cli.g .... @@ -221,7 +221,7 @@ Building Grammar ${build.src.java}/org/apache/cassandra/cql/Cql.g ... @@ -233,7 +233,7 @@ Building Grammar ${build.src.java}/org/apache/cassandra/cql3/Cql.g ... @@ -356,7 +356,9 @@ - + + + @@ -443,6 +445,7 @@ + @@ -485,6 +488,8 @@ + + diff --git a/lib/antlr-3.2.jar b/lib/antlr-3.2.jar deleted file mode 100644 index fdd167d444..0000000000 Binary files a/lib/antlr-3.2.jar and /dev/null differ diff --git a/lib/antlr-runtime-3.5.2.jar b/lib/antlr-runtime-3.5.2.jar new file mode 100644 index 0000000000..d48e3e8679 Binary files /dev/null and b/lib/antlr-runtime-3.5.2.jar differ diff --git a/lib/licenses/antlr-3.2.txt b/lib/licenses/antlr-runtime-3.5.2.txt similarity index 100% rename from lib/licenses/antlr-3.2.txt rename to lib/licenses/antlr-runtime-3.5.2.txt diff --git a/lib/licenses/stringtemplate-4.0.2.txt b/lib/licenses/stringtemplate-4.0.2.txt new file mode 100644 index 0000000000..015a53d034 --- /dev/null +++ b/lib/licenses/stringtemplate-4.0.2.txt @@ -0,0 +1,27 @@ + +Copyright (c) 2003-2006 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/lib/stringtemplate-4.0.2.jar b/lib/stringtemplate-4.0.2.jar new file mode 100644 index 0000000000..87d7faf6f6 Binary files /dev/null and b/lib/stringtemplate-4.0.2.jar differ diff --git a/src/java/org/apache/cassandra/cql/Cql.g b/src/java/org/apache/cassandra/cql/Cql.g index 3c41f44b40..f76be27cde 100644 --- a/src/java/org/apache/cassandra/cql/Cql.g +++ b/src/java/org/apache/cassandra/cql/Cql.g @@ -86,7 +86,7 @@ options { public Token nextToken() { super.nextToken(); if (tokens.size() == 0) - return Token.EOF_TOKEN; + return new CommonToken(Token.EOF); return tokens.remove(0); } diff --git a/src/java/org/apache/cassandra/cql3/Cql.g b/src/java/org/apache/cassandra/cql3/Cql.g index 9d54866673..2c90c183eb 100644 --- a/src/java/org/apache/cassandra/cql3/Cql.g +++ b/src/java/org/apache/cassandra/cql3/Cql.g @@ -184,7 +184,7 @@ options { { super.nextToken(); if (tokens.size() == 0) - return Token.EOF_TOKEN; + return new CommonToken(Token.EOF); return tokens.remove(0); } @@ -936,7 +936,16 @@ term returns [Term.Raw term] ; columnOperation[List> operations] - : key=cident '=' t=term ('+' c=cident )? + : key=cident columnOperationDifferentiator[operations, key] + ; + +columnOperationDifferentiator[List> operations, ColumnIdentifier key] + : '=' normalColumnOperation[operations, key] + | '[' k=term ']' specializedColumnOperation[operations, key, k] + ; + +normalColumnOperation[List> operations, ColumnIdentifier key] + : t=term ('+' c=cident )? { if (c == null) { @@ -949,13 +958,13 @@ columnOperation[List> operations] addRawUpdate(operations, key, new Operation.Prepend(t)); } } - | key=cident '=' c=cident sig=('+' | '-') t=term + | c=cident sig=('+' | '-') t=term { if (!key.equals(c)) addRecognitionError("Only expressions of the form X = X " + $sig.text + " are supported."); addRawUpdate(operations, key, $sig.text.equals("+") ? new Operation.Addition(t) : new Operation.Substraction(t)); } - | key=cident '=' c=cident i=INTEGER + | c=cident i=INTEGER { // Note that this production *is* necessary because X = X - 3 will in fact be lexed as [ X, '=', X, INTEGER]. if (!key.equals(c)) @@ -963,7 +972,10 @@ columnOperation[List> operations] addRecognitionError("Only expressions of the form X = X " + ($i.text.charAt(0) == '-' ? '-' : '+') + " are supported."); addRawUpdate(operations, key, new Operation.Addition(Constants.Literal.integer($i.text))); } - | key=cident '[' k=term ']' '=' t=term + ; + +specializedColumnOperation[List> operations, ColumnIdentifier key, Term.Raw k] + : '=' t=term { addRawUpdate(operations, key, new Operation.SetElement(k, t)); } diff --git a/test/unit/org/apache/cassandra/cql3/CqlParserTest.java b/test/unit/org/apache/cassandra/cql3/CqlParserTest.java index d122eb59ae..84509e89c5 100644 --- a/test/unit/org/apache/cassandra/cql3/CqlParserTest.java +++ b/test/unit/org/apache/cassandra/cql3/CqlParserTest.java @@ -46,8 +46,9 @@ public class CqlParserTest parser.query(); - assertEquals(1, firstCounter.count); - assertEquals(1, secondCounter.count); + // ANTLR 3.5 reports 2 errors in the sentence above (missing FROM and missing EOF). + assertTrue(firstCounter.count > 0); + assertTrue(secondCounter.count > 0); } @Test @@ -67,7 +68,7 @@ public class CqlParserTest parser.query(); - assertEquals(1, firstCounter.count); + assertTrue(firstCounter.count > 0); assertEquals(0, secondCounter.count); }