[ 
https://issues.apache.org/jira/browse/CASSANDRA-9198?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14505622#comment-14505622
 ] 

Jeff Jirsa commented on CASSANDRA-9198:
---------------------------------------

[~blerer] - sincere apologies, I originally meant to just link to the patch 
from 9077, then figured "why not at least make tests pass" for your 
convenience. Didn't mean to step on toes.

Attaching two diffs, one for trunk and a second for 2.1. 

I adjusted the set/delete logic to give the same messaging as in 9077, and 
cleaned up the ugly if/else return in favor of a ternary.  

{noformat}
cqlsh> create keyspace IF NOT EXISTS test WITH replication = {'class': 
'SimpleStrategy', 'replication_factor': 1};
cqlsh> USE test;
cqlsh:test> create table foo (k int primary key, v list<int>);
cqlsh:test> insert into foo(k,v) values (1, [1,2]);
cqlsh:test> update foo set v = v - [1] where k = 1;
cqlsh:test> update foo set v = v - [1] where k = 1;
cqlsh:test> update foo set v = v - [2] where k = 1;
cqlsh:test> update foo set v = v - [2] where k = 1;
cqlsh:test> 
cqlsh:test> update foo set v[0] = 2 where k=1;
InvalidRequest: code=2200 [Invalid query] message="Attempted to set an element 
on a list which is null"
cqlsh:test> delete v[0] from foo where k=1;
InvalidRequest: code=2200 [Invalid query] message="Attempted to delete an 
element from a list which is null"
{noformat}




> Deleting from an empty list produces an error
> ---------------------------------------------
>
>                 Key: CASSANDRA-9198
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-9198
>             Project: Cassandra
>          Issue Type: Bug
>          Components: API
>            Reporter: Olivier Michallat
>            Assignee: Jeff Jirsa
>            Priority: Minor
>             Fix For: 2.1.5
>
>         Attachments: 9198-v2-2.1.txt, 9198-v2-trunk.txt, 9198.txt
>
>
> While deleting an element from a list that does not contain it is a no-op, 
> deleting it from an empty list causes an error.
> This edge case is a bit inconsistent, because it makes list deletion non 
> idempotent:
> {code}
> cqlsh:test> create table foo (k int primary key, v list<int>);
> cqlsh:test> insert into foo(k,v) values (1, [1,2]);
> cqlsh:test> update foo set v = v - [1] where k = 1;
> cqlsh:test> update foo set v = v - [1] where k = 1;
> cqlsh:test> update foo set v = v - [2] where k = 1;
> cqlsh:test> update foo set v = v - [2] where k = 1;
> InvalidRequest: code=2200 [Invalid query] message="Attempted to delete an 
> element from a list which is null"
> {code}
> With speculative retries coming to the drivers, idempotency becomes more 
> important because it determines which query we might retry or not. So it 
> would be better if deleting from an empty list succeeded.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to