Updated Branches:
  refs/heads/cassandra-1.2 50aa1f707 -> 65b9093d4

Fix writetime/ttl functions on columns with null values

patch by slebresne; reviewed by iamaleksey for CASSANDRA-5341


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/65b9093d
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/65b9093d
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/65b9093d

Branch: refs/heads/cassandra-1.2
Commit: 65b9093d4905da489e472dfd565417c6865d44c8
Parents: 50aa1f7
Author: Sylvain Lebresne <sylv...@datastax.com>
Authored: Tue Apr 2 11:38:30 2013 +0200
Committer: Sylvain Lebresne <sylv...@datastax.com>
Committed: Tue Apr 2 11:38:30 2013 +0200

----------------------------------------------------------------------
 CHANGES.txt                                        |    1 +
 .../cassandra/cql3/statements/Selection.java       |   16 +++++++++++---
 2 files changed, 13 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/65b9093d/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index ca062d6..c7d64b4 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -15,6 +15,7 @@
  * Correctly typecheck in CQL3 even with ReversedType (CASSANDRA-5386)
  * Fix streaming compressed files when using encryption (CASSANDRA-5391)
  * cassandra-all 1.2.0 pom missing netty dependency (CASSANDRA-5392)
+ * Fix writetime/ttl functions on null values (CASSANDRA-5341)
 Merged from 1.1:
  * cli: Quote ks and cf names in schema output when needed (CASSANDRA-5052)
  * Fix bad default for min/max timestamp in SSTableMetadata (CASSANDRA-5372)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/65b9093d/src/java/org/apache/cassandra/cql3/statements/Selection.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/Selection.java 
b/src/java/org/apache/cassandra/cql3/statements/Selection.java
index c42b587..983c35b 100644
--- a/src/java/org/apache/cassandra/cql3/statements/Selection.java
+++ b/src/java/org/apache/cassandra/cql3/statements/Selection.java
@@ -248,20 +248,25 @@ public abstract class Selection
 
         public void add(IColumn c)
         {
-            current.add(c == null || c.isMarkedForDelete() ? null : value(c));
+            current.add(isDead(c) ? null : value(c));
             if (timestamps != null)
             {
-                timestamps[current.size() - 1] = c.timestamp();
+                timestamps[current.size() - 1] = isDead(c) ? -1 : 
c.timestamp();
             }
             if (ttls != null)
             {
                 int ttl = -1;
-                if (c instanceof ExpiringColumn)
+                if (!isDead(c) && c instanceof ExpiringColumn)
                     ttl = ((ExpiringColumn)c).getLocalDeletionTime() - (int) 
(System.currentTimeMillis() / 1000);
                 ttls[current.size() - 1] = ttl;
             }
         }
 
+        private boolean isDead(IColumn c)
+        {
+            return c == null || c.isMarkedForDelete();
+        }
+
         public void newRow() throws InvalidRequestException
         {
             if (current != null)
@@ -366,7 +371,10 @@ public abstract class Selection
         public ByteBuffer compute(ResultSetBuilder rs)
         {
             if (isWritetime)
-                return ByteBufferUtil.bytes(rs.timestamps[idx]);
+            {
+                long ts = rs.timestamps[idx];
+                return ts >= 0 ? ByteBufferUtil.bytes(ts) : null;
+            }
 
             int ttl = rs.ttls[idx];
             return ttl > 0 ? ByteBufferUtil.bytes(ttl) : null;

Reply via email to