You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Alex Petrov (JIRA)" <ji...@apache.org> on 2017/03/06 14:07:32 UTC

[jira] [Commented] (CASSANDRA-13197) +=/-= shortcut syntax bugs/inconsistencies

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

Alex Petrov commented on CASSANDRA-13197:
-----------------------------------------

Thank you for the report, [~kishkaru]. This is a nice find!

[CASSANDRA-12232] didn't really add this functionality, it only have make it available via the shortcut. So behaviour described in (1) would require some additional discussion. It'd be good to hear an opinion of [~blerer] on that. 

For example:

{code}
        execute("UPDATE %s SET l = l + ? WHERE k = 0", list("v1", "v2", "v1", "v2", "v1", "v2"));
        execute("UPDATE %s SET l = l - ? WHERE k=0", list("v1", "v2"));
        assertRows(execute("SELECT l FROM %s WHERE k = 0"), row((Object) null));
{code}

In my opinion this kind of makes sense. Although changing behaviour isn't a big problem (although it's going to be a breaking change).

re: (2), interface for removing items from maps is {{-= set(key)}}. So in that case I think even the error message is kind of making sense (at least from the inner workings perspective). We can make it more user-friendly though.

re: (3), I will make sure we give a better message.

> +=/-= shortcut syntax bugs/inconsistencies
> ------------------------------------------
>
>                 Key: CASSANDRA-13197
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-13197
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Kishan Karunaratne
>            Assignee: Alex Petrov
>
> CASSANDRA-12232 introduced (+=/-=) shortcuts for counters and collection types. I ran into some bugs/consistencies.
> Given the schema:
> {noformat}
> CREATE TABLE simplex.collection_table (k int PRIMARY KEY, d_l List<int>, d_s Set<int>, d_m Map<int,int>, d_t Tuple<int>);
> {noformat}
> 1) Using -= on a list column removes all elements that match the value, instead of the first or last occurrence of it. Is this expected?
> {noformat}
> Given d_l = [0, 1, 2, 1, 1]
> UPDATE collection_table SET d_l -= [1] WHERE k=0;
> yields 
> [0, 2]
> {noformat}
> 2) I can't seem to remove a map key/value pair:
> {noformat}
> Given d_m = {0: 0, 1: 1}
> UPDATE collection_table SET d_m -= {1:1} WHERE k=0;
> yields
> Invalid map literal for d_m of type frozen<set<int>>
> {noformat}
> However {noformat}UPDATE collection_table SET d_m -= {1} WHERE k=0;{noformat} does work.
> 3) Tuples are immutable so it make sense that +=/-= doesn't apply. However the error message could be better, now that other collection types are allowed:
> {noformat}
> UPDATE collection_table SET d_t += (1) WHERE k=0;
> yields
> Invalid operation (d_t = d_t + (1)) for non counter column d_t
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)