You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "David Capwell (Jira)" <ji...@apache.org> on 2025/05/28 03:49:00 UTC
[jira] [Updated] (CASSANDRA-20680) Cannot mix IF conditions and IF NOT EXISTS for the same row, even though the conditions could be met
[ https://issues.apache.org/jira/browse/CASSANDRA-20680?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
David Capwell updated CASSANDRA-20680:
--------------------------------------
Workflow: Copy of Cassandra Default Workflow (was: Copy of Cassandra Bug Workflow)
Issue Type: Improvement (was: Bug)
> Cannot mix IF conditions and IF NOT EXISTS for the same row, even though the conditions could be met
> ----------------------------------------------------------------------------------------------------
>
> Key: CASSANDRA-20680
> URL: https://issues.apache.org/jira/browse/CASSANDRA-20680
> Project: Apache Cassandra
> Issue Type: Improvement
> Reporter: Andrzej Jackowski
> Priority: Normal
>
> Mixing {_}IF conditions{_}, {_}IF EXISTS{_}, and _IF NOT EXISTS_ for the same row is never possible, even in batches for which all LWT conditions are true.
>
> Consider the following example:
> {noformat}
> CREATE KEYSPACE ks WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor' : 1};
> CREATE TABLE ks.cf (p int, c int, r int, PRIMARY KEY(p, c));
> INSERT INTO ks.cf (p,c,r) VALUES (1,1,1);
>
> BEGIN BATCH
> UPDATE ks.cf SET r=2 WHERE p=1 AND c=1 IF EXISTS
> UPDATE ks.cf SET r=3 WHERE p=1 AND c=1 IF r > 0
> APPLY BATCH; {noformat}
> Both _IF EXISTS_ and _IF r > 0_ conditions are true, however Cassandra rejects the batch with the following error:
> {noformat}
> "Cannot mix IF conditions and IF NOT EXISTS for the same row" {noformat}
>
> In contrast, a very similar batch with two _IF EXISTS_ conditions works:
> {noformat}
> BEGIN BATCH
> UPDATE ks.cf SET r=2 WHERE p=1 AND c=1 IF EXISTS
> UPDATE ks.cf SET r=3 WHERE p=1 AND c=1 IF EXISTS
> APPLY BATCH;
>
> [applied]
> -----------
> True{noformat}
>
> I can see two problems here:
> # The error message is incorrect: there is no _NOT EXISTS_ in my query. However, it is rather a cosmetic issue.
> # Why is a batch statement with two _IF EXISTS_ statement allowed, while the one mixing _IF EXISTS_ and _IF r > 0_ is not? I thought that the _Invalid query_ error should be returned only for conditions that cannot be met (e.g., asking for the same row to _EXISTS_ and _NOT EXISTS_ in the same time).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org