[ https://issues.apache.org/jira/browse/CASSANDRA-19637?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17847065#comment-17847065 ]
David Capwell commented on CASSANDRA-19637: ------------------------------------------- I was curious so tried to run this in Accord to see what happens... {code} String cql = "BEGIN TRANSACTION\n" + "LET a = (SELECT * FROM "+qualifiedTableName+" WHERE k=?);\n" + "SELECT a.v >= null;\n" + "IF a.v >= null THEN\n" + " INSERT INTO " + qualifiedTableName + "(k, v) VALUES (?, ?);\n" + "END IF\n" + "COMMIT TRANSACTION"; {code} * both the SELECT and the IF reject the syntax of a.v >= null, right now we use "IS NULL" and "IS NOT NULL" here... * SELECT doesn't allow "a.v IS NULL", so if you wish to know if your if block was taken, then there isn't a way to do that in this case? * when dropping the select and switching to "IS NULL", I had the following bind values: 0, 0, []. When I query the table it returns [0, null]. // Empty and Null look the same * Testing out ">= []" ; select doesn't allow but IF does. The statement was false as the row doesn't exist (null >= [] is false). When we add row [0, []] we and change insert to do [0, [42]] the if statement is now true! a.v was written as an empty list, so is it not "null" internally but instead byte[0]? > LWT conditions on MultiCell collections return invalid results > -------------------------------------------------------------- > > Key: CASSANDRA-19637 > URL: https://issues.apache.org/jira/browse/CASSANDRA-19637 > Project: Cassandra > Issue Type: Bug > Components: CQL/Semantics > Reporter: Benjamin Lerer > Assignee: Benjamin Lerer > Priority: Normal > > Due to the way multicell collections are implemented, it is not possible to > differentiate between {{null}} and empty collections like it is feasible for > single cell (frozen) collections. Therefore an empty multicell collection > will always be treated as {{null}}. > Unfortunately, the way LWT conditions handle that is not consistent with that. > For example for {{colA list<int>}} non null: {code}.. IF colA >= null{code} > will throw an invalid request error whereas {code}..IF colA >= []{code} will > returns {{true}}. > Moreover, if we insert an empty list through: > {code}INSERT INTO mytable (pk, colA) VALUES (1, []);{code} > and use {code}DELETE FROM mytable WHERE pk=1 IF colA >= []{code} the returned > results will be {code}{false, null}{code}. Which can be quite confusing. > The way to fix that behaviour to make it consistent with other operations is > to consider empty multicell collection input as {{null}} and reject the > {{null}} input for non {{=}} and {{!=}} operators. > -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org