Author: xedin
Date: Wed Nov 16 18:50:44 2011
New Revision: 1202834

URL: http://svn.apache.org/viewvc?rev=1202834&view=rev
Log:
Fix to properly support update of the counter with expression like '<field> = 
<field> - -<num>'
patch by Pavel Yaskevich; reviewed by Paul Canon for CASSANDRA-3418

Modified:
    cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/Cql.g
    cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/Term.java
    
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/UpdateStatement.java

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=1202834&r1=1202833&r2=1202834&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 
Wed Nov 16 18:50:44 2011
@@ -470,6 +470,7 @@ termPairWithOperation[Map<Term, Operatio
                               | 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);
+                                    if (op != null) v = new 
Term(-(Long.valueOf(v.getText())), v.getType());
                                     columns.put(key, new Operation(c, 
org.apache.cassandra.cql.Operation.OperationType.MINUS, v)); } ))
     ;
 

Modified: 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/Term.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/Term.java?rev=1202834&r1=1202833&r2=1202834&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/Term.java 
(original)
+++ 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/Term.java 
Wed Nov 16 18:50:44 2011
@@ -54,6 +54,12 @@ public class Term
         this.text = text == null ? "" : text;
         this.type = type;
     }
+
+    public Term(long value, TermType type)
+    {
+        this.text = String.valueOf(value);
+        this.type = type;
+    }
     
     protected Term()
     {

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=1202834&r1=1202833&r2=1202834&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
 Wed Nov 16 18:50:44 2011
@@ -217,11 +217,6 @@ public class UpdateStatement extends Abs
                 try
                 {
                     value = Long.parseLong(op.b.getText());
-
-                    if (op.type == OperationType.MINUS)
-                    {
-                        if (value > 0) value *= -1;
-                    }
                 }
                 catch (NumberFormatException e)
                 {


Reply via email to