Theo Hultberg created CASSANDRA-6601:
----------------------------------------

             Summary: WRITETIME of a null value does not return a time
                 Key: CASSANDRA-6601
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-6601
             Project: Cassandra
          Issue Type: Bug
         Environment: Cassandra 2.0.2
            Reporter: Theo Hultberg


When a cell's value is {{null}} the CQL {{WRITETIME}} function returns null. I 
was expecting it to return a timestamp. Looking at the data in 
{{cassandra-cli}} I can see that the cell has a timestamp.

Here's a session showing the issue:

{code}
cqlsh> CREATE KEYSPACE writetime_test WITH replication = {'class': 
'SimpleStrategy','replication_factor': '1'};
cqlsh> USE writetime_test;
cqlsh:writetime_test> CREATE TABLE writetime_test_table (pk INT, ck INT, value 
INT, PRIMARY KEY (pk, ck));
cqlsh:writetime_test> INSERT INTO writetime_test_table (pk, ck, value) VALUES 
(1, 2, null);
cqlsh:writetime_test> SELECT WRITETIME(value) FROM writetime_test_table WHERE 
pk = 1 AND ck = 2;

 writetime(value)
------------------
             null

(1 rows)

cqlsh:writetime_test> INSERT INTO writetime_test_table (pk, ck, value) VALUES 
(2, 3, 4);
cqlsh:writetime_test> SELECT WRITETIME(value) FROM writetime_test_table WHERE 
pk = 2 AND ck = 3;

 writetime(value)
------------------
 1389967663822000

(1 rows)

cqlsh:writetime_test> SELECT WRITETIME(value) FROM writetime_test_table WHERE 
pk = 3 AND ck = 4;

(0 rows)

{code}

I first insert data where the cell value is {{null}}. When I query its 
writetime I get a row back, but the timestamp is {{null}}.

I then insert a row with a value, and get a timestamp in the query results, as 
expected.

Finally I query for the writetime of a cell that does not exist, and get no 
rows back, just to show that there's a difference between calling {{WRITETIME}} 
on {{null}} and on something that doesn't exist.

Even though the value is {{null}} the cell exists and it has a timestamp. I can 
clearly see the timestamp using {{cassandra-cli}}:

{code}
[default@unknown] use writetime_test;
Authenticated to keyspace: writetime_test
[default@writetime_test] list writetime_test_table;
Using default limit of 100
Using default cell limit of 100
-------------------
RowKey: 1
=> (name=2:, value=, timestamp=1389967959822000)
-------------------
RowKey: 2
=> (name=3:, value=, timestamp=1389967964749000)
=> (name=3:value, value=00000004, timestamp=1389967964749000)
{code}

The reason I want to get the {{WRITETIME}} of a {{null}} value is that I have a 
table where I don't care about the value, I use the column keys as sorted set. 
I still want to know when some of them were written though, but I can't ask for 
the {{WRITETIME}} of something that is part of the primary key, so I must use 
the (otherwise unused) value.

A workaround is to write some dummy value in the cell, and that's probably what 
I need to do, but this felt like it was a bug, it was at least not what I 
expected.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to