You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by xe...@apache.org on 2011/11/11 17:48:14 UTC
svn commit: r1200943 - in /cassandra/branches/cassandra-1.0: CHANGES.txt
src/java/org/apache/cassandra/cql/Cql.g
src/java/org/apache/cassandra/cql/UpdateStatement.java
Author: xedin
Date: Fri Nov 11 16:48:14 2011
New Revision: 1200943
URL: http://svn.apache.org/viewvc?rev=1200943&view=rev
Log:
(CQL) fix for counter decrement syntax
patch by Pavel Yaskevich; reviewed by Jonathan Ellis for CASSANDRA-3418
Modified:
cassandra/branches/cassandra-1.0/CHANGES.txt
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/Cql.g
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/UpdateStatement.java
Modified: cassandra/branches/cassandra-1.0/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/CHANGES.txt?rev=1200943&r1=1200942&r2=1200943&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0/CHANGES.txt Fri Nov 11 16:48:14 2011
@@ -9,6 +9,7 @@
* add sstable forward-compatibility (CASSANDRA-3478)
* report compression ratio in CFSMBean (CASSANDRA-3393)
* fix incorrect size exception during streaming of counters (CASSANDRA-3481)
+ * (CQL) fix for counter decrement syntax (CASSANDRA-3418)
Merged from 0.8:
* Make counter shard merging thread safe (CASSANDRA-3178)
* fix updating CF row_cache_provider (CASSANDRA-3414)
Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/Cql.g
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/Cql.g?rev=1200943&r1=1200942&r2=1200943&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/Cql.g (original)
+++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/Cql.g Fri Nov 11 16:48:14 2011
@@ -59,6 +59,13 @@ options {
if (recognitionErrors.size() > 0)
throw new InvalidRequestException(recognitionErrors.get((recognitionErrors.size()-1)));
}
+
+ // used by UPDATE of the counter columns to validate if '-' was supplied by user
+ public void validateMinusSupplied(Object op, final Term value, IntStream stream) throws MissingTokenException
+ {
+ if (op == null && Long.parseLong(value.getText()) > 0)
+ throw new MissingTokenException(102, stream, value);
+ }
}
@lexer::header {
@@ -454,10 +461,16 @@ termPair[Map<Term, Term> columns]
: key=term '=' value=term { columns.put(key, value); }
;
+intTerm returns [Term integer]
+ : t=INTEGER { $integer = new Term($t.text, $t.type); }
+ ;
+
termPairWithOperation[Map<Term, Operation> columns]
: key=term '=' (value=term { columns.put(key, new Operation(value)); }
- | c=term ( '+' v=term { columns.put(key, new Operation(c, org.apache.cassandra.cql.Operation.OperationType.PLUS, v)); }
- | '-' v=term { columns.put(key, new Operation(c, org.apache.cassandra.cql.Operation.OperationType.MINUS, v)); } ))
+ | c=term ( '+' v=term { columns.put(key, new Operation(c, org.apache.cassandra.cql.Operation.OperationType.PLUS, v)); }
+ | op='-'? v=intTerm
+ { validateMinusSupplied(op, v, input);
+ columns.put(key, new Operation(c, org.apache.cassandra.cql.Operation.OperationType.MINUS, v)); } ))
;
// Note: ranges are inclusive so >= and >, and < and <= all have the same semantics.
Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/UpdateStatement.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/UpdateStatement.java?rev=1200943&r1=1200942&r2=1200943&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/UpdateStatement.java (original)
+++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/UpdateStatement.java Fri Nov 11 16:48:14 2011
@@ -220,7 +220,7 @@ public class UpdateStatement extends Abs
if (op.type == OperationType.MINUS)
{
- value *= -1;
+ if (value > 0) value *= -1;
}
}
catch (NumberFormatException e)