You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Maciej Sokol (Jira)" <ji...@apache.org> on 2022/02/17 07:18:00 UTC

[jira] [Assigned] (CASSANDRA-15266) java internal exception on attempt to UPDATE a row using CONTAINS operator

     [ https://issues.apache.org/jira/browse/CASSANDRA-15266?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Maciej Sokol reassigned CASSANDRA-15266:
----------------------------------------

    Assignee: Maciej Sokol

> java internal exception on attempt to UPDATE a row using CONTAINS operator
> --------------------------------------------------------------------------
>
>                 Key: CASSANDRA-15266
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-15266
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Legacy/CQL
>            Reporter: Konstantin
>            Assignee: Maciej Sokol
>            Priority: Normal
>              Labels: lhf
>             Fix For: 3.0.x, 3.11.x, 4.0.x
>
>
> kostja@atlas ~ % cqlsh -ucassandra -pcassandra
> Connected to My Cluster at 127.0.0.1:9042.
> [cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4]
> Use HELP for help.
> cassandra@cqlsh> CREATE KEYSPACE t1 WITH replication = \{'class':'SimpleStrategy', 'replication_factor' : 1};
> cassandra@cqlsh> use t1;
> cassandra@cqlsh:t1> create table t (a int, b frozen<map<int, int>>, c int, primary key (a, b));
> cassandra@cqlsh:t1> insert into t (a, b, c) values (1, \{1:1, 2:2}, 3);
> cassandra@cqlsh:t1> update t set c=3 where a=1 and b contains 1;
> ServerError: java.lang.UnsupportedOperationException
>  
> Server log file:
> ```
> ERROR [Native-Transport-Requests-1] 2019-08-07 17:02:59,283 QueryMessage.java:129 - Unexpected error during query 
> java.lang.UnsupportedOperationException: null
>  at org.apache.cassandra.cql3.restrictions.SingleColumnRestriction$ContainsRestriction.appendTo(SingleColumnRestriction.java:454) ~[a
> pache-cassandra-3.11.4.jar:3.11.4]
>  at org.apache.cassandra.cql3.restrictions.ClusteringColumnRestrictions.valuesAsClustering(ClusteringColumnRestrictions.java:109) ~[a
> pache-cassandra-3.11.4.jar:3.11.4]
>  at org.apache.cassandra.cql3.restrictions.StatementRestrictions.getClusteringColumns(StatementRestrictions.java:770) ~[apache-cassan
> dra-3.11.4.jar:3.11.4]
>  at org.apache.cassandra.cql3.statements.ModificationStatement.createClustering(ModificationStatement.java:312) ~[apache-cassandra-3.
> 11.4.jar:3.11.4]
>  at org.apache.cassandra.cql3.statements.ModificationStatement.addUpdates(ModificationStatement.java:677) ~[apache-cassandra-3.11.4.j
> ar:3.11.4]
>  at org.apache.cassandra.cql3.statements.ModificationStatement.getMutations(ModificationStatement.java:635) ~[apache-cassandra-3.11.4
> .jar:3.11.4]
>  at org.apache.cassandra.cql3.statements.ModificationStatement.executeWithoutCondition(ModificationStatement.java:437) ~[apache-cassa
> ndra-3.11.4.jar:3.11.4]
>  at org.apache.cassandra.cql3.statements.ModificationStatement.execute(ModificationStatement.java:425) ~[apache-cassandra-3.11.4.jar:
> 3.11.4]
>  at org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:225) ~[apache-cassandra-3.11.4.jar:3.11.4]
>  at org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:256) ~[apache-cassandra-3.11.4.jar:3.11.4]
>  at org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:241) ~[apache-cassandra-3.11.4.jar:3.11.4]
>  at org.apache.cassandra.transport.messages.QueryMessage.execute(QueryMessage.java:116) ~[apache-cassandra-3.11.4.jar:3.11.4]
>  at org.apache.cassandra.transport.Message$Dispatcher.channelRead0(Message.java:566) [apache-cassandra-3.11.4.jar:3.11.4]
>  at org.apache.cassandra.transport.Message$Dispatcher.channelRead0(Message.java:410) [apache-cassandra-3.11.4.jar:3.11.4]
>  at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) [netty-all-4.0.44.Final.jar:4.0.44
> ...
>  ```
> +Additional information for newcomers:+
> {{CONTAINS}} and {{CONTAINS KEY}} restrictions are not supported for {{UPDATE}} or {{DELETE}} operations but they should be properly rejected with a proper error message.
> To fix that problem a new check should be added in the {{StatementRestrictions}} constructor to thrown an {{InvalidRequestException}} if the relation operator is a {{CONTAINS}} or {{CONTAINS_KEY}} and the {{StatementType}} an {{UPDATE}} or a {{DELETION}}.
> Some unit tests should be added to {{UpdateTest}} an {{DeleteTest}} to test the behavior.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org