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;