Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id B6913200BDB for ; Mon, 12 Dec 2016 13:24:58 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id B5316160B2A; Mon, 12 Dec 2016 12:24:58 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id B46D4160B0D for ; Mon, 12 Dec 2016 13:24:57 +0100 (CET) Received: (qmail 48556 invoked by uid 500); 12 Dec 2016 12:24:56 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 48545 invoked by uid 99); 12 Dec 2016 12:24:56 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 12 Dec 2016 12:24:56 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id BC63FE38C2; Mon, 12 Dec 2016 12:24:56 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: blerer@apache.org To: commits@cassandra.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: cassandra git commit: Test bind parameters and unset parameters in InsertUpdateIfConditionTest Date: Mon, 12 Dec 2016 12:24:56 +0000 (UTC) archived-at: Mon, 12 Dec 2016 12:24:58 -0000 Repository: cassandra Updated Branches: refs/heads/cassandra-2.2 dd415263c -> 9a5aef09f Test bind parameters and unset parameters in InsertUpdateIfConditionTest patch by Benjamin Lerer; reviewed by Alex Petrov for CASSANDRA-12980 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/9a5aef09 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/9a5aef09 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/9a5aef09 Branch: refs/heads/cassandra-2.2 Commit: 9a5aef09fe51592713d0fa38bfb9e42e21e7644d Parents: dd41526 Author: Benjamin Lerer Authored: Mon Dec 12 12:52:18 2016 +0100 Committer: Benjamin Lerer Committed: Mon Dec 12 12:52:18 2016 +0100 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../operations/InsertUpdateIfConditionTest.java | 147 ++++++++++++------- 2 files changed, 91 insertions(+), 57 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/9a5aef09/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 6b2a9c0..134a37d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.2.9 + * Test bind parameters and unset parameters in InsertUpdateIfConditionTest (CASSANDRA-12980) * Do not specify local address on outgoing connection when listen_on_broadcast_address is set (CASSANDRA-12673) * Use saved tokens when setting local tokens on StorageService.joinRing (CASSANDRA-12935) * cqlsh: fix DESC TYPES errors (CASSANDRA-12914) http://git-wip-us.apache.org/repos/asf/cassandra/blob/9a5aef09/test/unit/org/apache/cassandra/cql3/validation/operations/InsertUpdateIfConditionTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/operations/InsertUpdateIfConditionTest.java b/test/unit/org/apache/cassandra/cql3/validation/operations/InsertUpdateIfConditionTest.java index fc6cc2e..4a209e6 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/operations/InsertUpdateIfConditionTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/operations/InsertUpdateIfConditionTest.java @@ -41,8 +41,8 @@ public class InsertUpdateIfConditionTest extends CQLTester { execute("INSERT INTO %s (tkn, consumed) VALUES (?, FALSE)", i); - assertRows(execute("UPDATE %s SET consumed = TRUE WHERE tkn = ? IF consumed = FALSE", i), row(true)); - assertRows(execute("UPDATE %s SET consumed = TRUE WHERE tkn = ? IF consumed = FALSE", i), row(false, true)); + assertRows(execute("UPDATE %s SET consumed = TRUE WHERE tkn = ? IF consumed = ?", i, false), row(true)); + assertRows(execute("UPDATE %s SET consumed = TRUE WHERE tkn = ? IF consumed = ?", i, false), row(false, true)); } } @@ -54,8 +54,11 @@ public class InsertUpdateIfConditionTest extends CQLTester { createTable(" CREATE TABLE %s (k int PRIMARY KEY, v1 int, v2 text, v3 int)"); + assertInvalidMessage("Invalid 'unset' value in condition", + "UPDATE %s SET v1 = 3, v2 = 'bar' WHERE k = 0 IF v1 = ?", unset()); + // Shouldn't apply - assertRows(execute("UPDATE %s SET v1 = 3, v2 = 'bar' WHERE k = 0 IF v1 = 4"), row(false)); + assertRows(execute("UPDATE %s SET v1 = 3, v2 = 'bar' WHERE k = 0 IF v1 = ?", 4), row(false)); assertRows(execute("UPDATE %s SET v1 = 3, v2 = 'bar' WHERE k = 0 IF EXISTS"), row(false)); // Should apply @@ -66,50 +69,50 @@ public class InsertUpdateIfConditionTest extends CQLTester assertRows(execute("SELECT * FROM %s"), row(0, 2, "foo", null)); // Shouldn't apply - assertRows(execute("UPDATE %s SET v1 = 3, v2 = 'bar' WHERE k = 0 IF v1 = 4"), row(false, 2)); + assertRows(execute("UPDATE %s SET v1 = 3, v2 = 'bar' WHERE k = 0 IF v1 = ?", 4), row(false, 2)); assertRows(execute("SELECT * FROM %s"), row(0, 2, "foo", null)); // Should apply (note: we want v2 before v1 in the statement order to exercise #5786) - assertRows(execute("UPDATE %s SET v2 = 'bar', v1 = 3 WHERE k = 0 IF v1 = 2"), row(true)); + assertRows(execute("UPDATE %s SET v2 = 'bar', v1 = 3 WHERE k = 0 IF v1 = ?", 2), row(true)); assertRows(execute("UPDATE %s SET v2 = 'bar', v1 = 3 WHERE k = 0 IF EXISTS"), row(true)); assertRows(execute("SELECT * FROM %s"), row(0, 3, "bar", null)); // Shouldn't apply, only one condition is ok - assertRows(execute("UPDATE %s SET v1 = 5, v2 = 'foobar' WHERE k = 0 IF v1 = 3 AND v2 = 'foo'"), row(false, 3, "bar")); + assertRows(execute("UPDATE %s SET v1 = 5, v2 = 'foobar' WHERE k = 0 IF v1 = ? AND v2 = ?", 3, "foo"), row(false, 3, "bar")); assertRows(execute("SELECT * FROM %s"), row(0, 3, "bar", null)); // Should apply - assertRows(execute("UPDATE %s SET v1 = 5, v2 = 'foobar' WHERE k = 0 IF v1 = 3 AND v2 = 'bar'"), row(true)); + assertRows(execute("UPDATE %s SET v1 = 5, v2 = 'foobar' WHERE k = 0 IF v1 = ? AND v2 = ?", 3, "bar"), row(true)); assertRows(execute("SELECT * FROM %s"), row(0, 5, "foobar", null)); // Shouldn't apply - assertRows(execute("DELETE v2 FROM %s WHERE k = 0 IF v1 = 3"), row(false, 5)); + assertRows(execute("DELETE v2 FROM %s WHERE k = 0 IF v1 = ?", 3), row(false, 5)); assertRows(execute("SELECT * FROM %s"), row(0, 5, "foobar", null)); // Shouldn't apply - assertRows(execute("DELETE v2 FROM %s WHERE k = 0 IF v1 = null"), row(false, 5)); + assertRows(execute("DELETE v2 FROM %s WHERE k = 0 IF v1 = ?", (Integer) null), row(false, 5)); assertRows(execute("SELECT * FROM %s"), row(0, 5, "foobar", null)); // Should apply - assertRows(execute("DELETE v2 FROM %s WHERE k = 0 IF v1 = 5"), row(true)); + assertRows(execute("DELETE v2 FROM %s WHERE k = 0 IF v1 = ?", 5), row(true)); assertRows(execute("SELECT * FROM %s"), row(0, 5, null, null)); // Shouln't apply - assertRows(execute("DELETE v1 FROM %s WHERE k = 0 IF v3 = 4"), row(false, null)); + assertRows(execute("DELETE v1 FROM %s WHERE k = 0 IF v3 = ?", 4), row(false, null)); // Should apply - assertRows(execute("DELETE v1 FROM %s WHERE k = 0 IF v3 = null"), row(true)); + assertRows(execute("DELETE v1 FROM %s WHERE k = 0 IF v3 = ?", (Integer) null), row(true)); assertRows(execute("SELECT * FROM %s"), row(0, null, null, null)); // Should apply - assertRows(execute("DELETE FROM %s WHERE k = 0 IF v1 = null"), row(true)); + assertRows(execute("DELETE FROM %s WHERE k = 0 IF v1 = ?", (Integer) null), row(true)); assertEmpty(execute("SELECT * FROM %s")); // Shouldn't apply assertRows(execute("UPDATE %s SET v1 = 3, v2 = 'bar' WHERE k = 0 IF EXISTS"), row(false)); // Should apply - assertRows(execute("DELETE FROM %s WHERE k = 0 IF v1 IN (null)"), row(true)); + assertRows(execute("DELETE FROM %s WHERE k = 0 IF v1 IN (?)", (Integer) null), row(true)); } /** @@ -123,15 +126,28 @@ public class InsertUpdateIfConditionTest extends CQLTester // non-EQ conditions execute("INSERT INTO %s (k, v1, v2) VALUES (0, 2, 'foo')"); - assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 < 3"), row(true)); - assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 <= 3"), row(true)); - assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 > 1"), row(true)); - assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 >= 1"), row(true)); - assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 != 1"), row(true)); - assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 != 2"), row(false, 2)); - assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 IN (0, 1, 2)"), row(true)); - assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 IN (142, 276)"), row(false, 2)); + assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 < ?", 3), row(true)); + assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 <= ?", 3), row(true)); + assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 > ?", 1), row(true)); + assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 >= ?", 1), row(true)); + assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 != ?", 1), row(true)); + assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 != ?", 2), row(false, 2)); + assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 IN (?, ?, ?)", 0, 1, 2), row(true)); + assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 IN ?", list(142, 276)), row(false, 2)); assertRows(execute("UPDATE %s SET v2 = 'bar' WHERE k = 0 IF v1 IN ()"), row(false, 2)); + + assertInvalidMessage("Invalid 'unset' value in condition", + "UPDATE %s SET v1 = 3, v2 = 'bar' WHERE k = 0 IF v1 < ?", unset()); + assertInvalidMessage("Invalid 'unset' value in condition", + "UPDATE %s SET v1 = 3, v2 = 'bar' WHERE k = 0 IF v1 <= ?", unset()); + assertInvalidMessage("Invalid 'unset' value in condition", + "UPDATE %s SET v1 = 3, v2 = 'bar' WHERE k = 0 IF v1 > ?", unset()); + assertInvalidMessage("Invalid 'unset' value in condition", + "UPDATE %s SET v1 = 3, v2 = 'bar' WHERE k = 0 IF v1 >= ?", unset()); + assertInvalidMessage("Invalid 'unset' value in condition", + "UPDATE %s SET v1 = 3, v2 = 'bar' WHERE k = 0 IF v1 != ?", unset()); + assertInvalidMessage("Invalid 'unset' value in condition", + "UPDATE %s SET v1 = 3, v2 = 'bar' WHERE k = 0 IF v1 IN (?, ?)", unset(), 1); } /** @@ -175,20 +191,31 @@ public class InsertUpdateIfConditionTest extends CQLTester assertRows(execute("DELETE FROM %s WHERE k='k' AND i=0 IF EXISTS"), row(false)); // CASSANDRA-6430 - assertInvalid("DELETE FROM %s WHERE k = 'k' IF EXISTS"); - assertInvalid("DELETE FROM %s WHERE k = 'k' IF v = 'foo'"); - assertInvalid("DELETE FROM %s WHERE i = 0 IF EXISTS"); - assertInvalid("DELETE FROM %s WHERE k = 0 AND i > 0 IF EXISTS"); - assertInvalid("DELETE FROM %s WHERE k = 0 AND i > 0 IF v = 'foo'"); + assertInvalidMessage("DELETE statements must restrict all PRIMARY KEY columns with equality relations in order to use IF conditions, but column 'i' is not restricted", + "DELETE FROM %s WHERE k = 'k' IF EXISTS"); + assertInvalidMessage("DELETE statements must restrict all PRIMARY KEY columns with equality relations in order to use IF conditions, but column 'i' is not restricted", + "DELETE FROM %s WHERE k = 'k' IF v = ?", "foo"); + assertInvalidMessage("DELETE statements must restrict all PRIMARY KEY columns with equality relations in order to use IF conditions, but column 'k' is not restricted", + "DELETE FROM %s WHERE i = 0 IF EXISTS"); + assertInvalidMessage("Invalid INTEGER constant (0) for \"k\" of type text", + "DELETE FROM %s WHERE k = 0 AND i > 0 IF EXISTS"); + + assertInvalidMessage("Invalid operator > for PRIMARY KEY part i", + "DELETE FROM %s WHERE k = 'k' AND i > 0 IF EXISTS"); + assertInvalidMessage("Invalid operator > for PRIMARY KEY part i", + "DELETE FROM %s WHERE k = 'k' AND i > 0 IF v = ?", "foo"); + + assertInvalidMessage("Invalid 'unset' value in condition", + "DELETE FROM %s WHERE k = 'k' AND i = 0 IF v = ?", unset()); createTable("CREATE TABLE %s(k int, s int static, i int, v text, PRIMARY KEY(k, i))"); execute("INSERT INTO %s (k, s, i, v) VALUES ( 1, 1, 2, '1')"); - assertRows(execute("DELETE v FROM %s WHERE k = 1 AND i = 2 IF s != 1"), row(false, 1)); - assertRows(execute("DELETE v FROM %s WHERE k = 1 AND i = 2 IF s = 1"), row(true)); + assertRows(execute("DELETE v FROM %s WHERE k = 1 AND i = 2 IF s != ?", 1), row(false, 1)); + assertRows(execute("DELETE v FROM %s WHERE k = 1 AND i = 2 IF s = ?", 1), row(true)); assertRows(execute("SELECT * FROM %s WHERE k = 1 AND i = 2"), row(1, 2, 1, null)); - assertRows(execute("DELETE FROM %s WHERE k = 1 AND i = 2 IF s != 1"), row(false, 1)); - assertRows(execute("DELETE FROM %s WHERE k = 1 AND i = 2 IF s = 1"), row(true)); + assertRows(execute("DELETE FROM %s WHERE k = 1 AND i = 2 IF s != ?", 1), row(false, 1)); + assertRows(execute("DELETE FROM %s WHERE k = 1 AND i = 2 IF s = ?", 1), row(true)); assertEmpty(execute("SELECT * FROM %s WHERE k = 1 AND i = 2")); assertRows(execute("SELECT * FROM %s WHERE k = 1"), row(1, null, 1, null)); } @@ -211,13 +238,13 @@ public class InsertUpdateIfConditionTest extends CQLTester execute("INSERT INTO %s(id, version) VALUES (0, 0)"); - assertRows(execute("UPDATE %s SET v='foo', version=1 WHERE id=0 AND k='k1' IF version = 0"), row(true)); + assertRows(execute("UPDATE %s SET v='foo', version=1 WHERE id=0 AND k='k1' IF version = ?", 0), row(true)); assertRows(execute("SELECT * FROM %s"), row(0, "k1", 1, "foo")); - assertRows(execute("UPDATE %s SET v='bar', version=1 WHERE id=0 AND k='k2' IF version = 0"), row(false, 1)); + assertRows(execute("UPDATE %s SET v='bar', version=1 WHERE id=0 AND k='k2' IF version = ?", 0), row(false, 1)); assertRows(execute("SELECT * FROM %s"), row(0, "k1", 1, "foo")); - assertRows(execute("UPDATE %s SET v='bar', version=2 WHERE id=0 AND k='k2' IF version = 1"), row(true)); + assertRows(execute("UPDATE %s SET v='bar', version=2 WHERE id=0 AND k='k2' IF version = ?", 1), row(true)); assertRows(execute("SELECT * FROM %s"), row(0, "k1", 2, "foo"), row(0, "k2", 2, "bar")); // Testing batches @@ -559,14 +586,16 @@ public class InsertUpdateIfConditionTest extends CQLTester execute("INSERT INTO %s(k, l) VALUES (0, ['foo', 'bar', 'foobar'])"); - assertInvalid("DELETE FROM %s WHERE k=0 IF l[null] = 'foobar'"); - assertInvalid("DELETE FROM %s WHERE k=0 IF l[-2] = 'foobar'"); + assertInvalidMessage("Invalid null value for list element access", + "DELETE FROM %s WHERE k=0 IF l[?] = ?", null, "foobar"); + assertInvalidMessage("Invalid negative list index -2", + "DELETE FROM %s WHERE k=0 IF l[?] = ?", -2, "foobar"); - assertRows(execute("DELETE FROM %s WHERE k=0 IF l[1] = null"), row(false, list("foo", "bar", "foobar"))); - assertRows(execute("DELETE FROM %s WHERE k=0 IF l[1] = 'foobar'"), row(false, list("foo", "bar", "foobar"))); + assertRows(execute("DELETE FROM %s WHERE k=0 IF l[?] = ?", 1, null), row(false, list("foo", "bar", "foobar"))); + assertRows(execute("DELETE FROM %s WHERE k=0 IF l[?] = ?", 1, "foobar"), row(false, list("foo", "bar", "foobar"))); assertRows(execute("SELECT * FROM %s"), row(0, list("foo", "bar", "foobar"))); - assertRows(execute("DELETE FROM %s WHERE k=0 IF l[1] = 'bar'"), row(true)); + assertRows(execute("DELETE FROM %s WHERE k=0 IF l[?] = ?", 1, "bar"), row(true)); assertEmpty(execute("SELECT * FROM %s")); } } @@ -766,19 +795,21 @@ public class InsertUpdateIfConditionTest extends CQLTester : "map")); execute("INSERT INTO %s (k, m) VALUES (0, {'foo' : 'bar'})"); - assertInvalid("DELETE FROM %s WHERE k=0 IF m[null] = 'foo'"); - assertRows(execute("DELETE FROM %s WHERE k=0 IF m['foo'] = 'foo'"), row(false, map("foo", "bar"))); - assertRows(execute("DELETE FROM %s WHERE k=0 IF m['foo'] = null"), row(false, map("foo", "bar"))); + assertInvalidMessage("Invalid null value for map element access", + "DELETE FROM %s WHERE k=0 IF m[?] = ?", null, "foo"); + assertRows(execute("DELETE FROM %s WHERE k=0 IF m[?] = ?", "foo", "foo"), row(false, map("foo", "bar"))); + assertRows(execute("DELETE FROM %s WHERE k=0 IF m[?] = ?", "foo", null), row(false, map("foo", "bar"))); assertRows(execute("SELECT * FROM %s"), row(0, map("foo", "bar"))); - assertRows(execute("DELETE FROM %s WHERE k=0 IF m['foo'] = 'bar'"), row(true)); + assertRows(execute("DELETE FROM %s WHERE k=0 IF m[?] = ?", "foo", "bar"), row(true)); assertEmpty(execute("SELECT * FROM %s")); execute("INSERT INTO %s(k, m) VALUES (1, null)"); if (frozen) - assertInvalid("UPDATE %s set m['foo'] = 'bar', m['bar'] = 'foo' WHERE k = 1 IF m['foo'] IN ('blah', null)"); + assertInvalidMessage("Invalid operation (m['foo'] = 'bar') for frozen collection column m", + "UPDATE %s set m['foo'] = 'bar', m['bar'] = 'foo' WHERE k = 1 IF m[?] IN (?, ?)", "foo", "blah", null); else - assertRows(execute("UPDATE %s set m['foo'] = 'bar', m['bar'] = 'foo' WHERE k = 1 IF m['foo'] IN ('blah', null)"), row(true)); + assertRows(execute("UPDATE %s set m['foo'] = 'bar', m['bar'] = 'foo' WHERE k = 1 IF m[?] IN (?, ?)", "foo", "blah", null), row(true)); } } @@ -987,6 +1018,8 @@ public class InsertUpdateIfConditionTest extends CQLTester { createTable("CREATE TABLE %s (a int, b int, s int static, d text, PRIMARY KEY (a, b))"); + assertInvalidMessage("Invalid 'unset' value in condition", "UPDATE %s SET s = 6 WHERE a = 6 IF s = ?", unset()); + // pre-existing row execute("INSERT INTO %s (a, b, s, d) values (6, 6, 100, 'a')"); assertRows(execute("UPDATE %s SET s = 6 WHERE a = 6 IF s = 100"), @@ -1021,7 +1054,7 @@ public class InsertUpdateIfConditionTest extends CQLTester conditionalUpdatesWithNonExistingOrNullValues(); // rejected: IN doesn't contain null - assertRows(execute("UPDATE %s SET s = 30 WHERE a = 3 IF s IN (10,20,30)"), + assertRows(execute("UPDATE %s SET s = 30 WHERE a = 3 IF s IN ?", list(10,20,30)), row(false)); assertRows(execute("SELECT * FROM %s WHERE a = 3"), row(3, 3, null, null)); @@ -1029,7 +1062,7 @@ public class InsertUpdateIfConditionTest extends CQLTester // rejected: comparing number with NULL always returns false for (String operator: new String[] { ">", "<", ">=", "<=", "="}) { - assertRows(execute("UPDATE %s SET s = 50 WHERE a = 5 IF s " + operator + " 3"), + assertRows(execute("UPDATE %s SET s = 50 WHERE a = 5 IF s " + operator + " ?", 3), row(false)); assertRows(execute("SELECT * FROM %s WHERE a = 5"), row(5, 5, null, null)); @@ -1045,14 +1078,14 @@ public class InsertUpdateIfConditionTest extends CQLTester conditionalUpdatesWithNonExistingOrNullValues(); // rejected: IN doesn't contain null - assertRows(execute("UPDATE %s SET s = 3 WHERE a = 3 IF s IN (10,20,30)"), + assertRows(execute("UPDATE %s SET s = 3 WHERE a = 3 IF s IN ?", list(10,20,30)), row(false)); assertEmpty(execute("SELECT a, s, d FROM %s WHERE a = 3")); // rejected: comparing number with NULL always returns false for (String operator : new String[]{ ">", "<", ">=", "<=", "=" }) { - assertRows(execute("UPDATE %s SET s = 50 WHERE a = 5 IF s " + operator + " 3"), + assertRows(execute("UPDATE %s SET s = 50 WHERE a = 5 IF s " + operator + " ?", 3), row(false)); assertEmpty(execute("SELECT * FROM %s WHERE a = 5")); } @@ -1060,17 +1093,17 @@ public class InsertUpdateIfConditionTest extends CQLTester private void conditionalUpdatesWithNonExistingOrNullValues() throws Throwable { - assertRows(execute("UPDATE %s SET s = 1 WHERE a = 1 IF s = NULL"), + assertRows(execute("UPDATE %s SET s = 1 WHERE a = 1 IF s = ?", (Integer) null), row(true)); assertRows(execute("SELECT a, s, d FROM %s WHERE a = 1"), row(1, 1, null)); - assertRows(execute("UPDATE %s SET s = 2 WHERE a = 2 IF s IN (10,20,NULL)"), + assertRows(execute("UPDATE %s SET s = 2 WHERE a = 2 IF s IN (?, ?, ?)", 10,20,null), row(true)); assertRows(execute("SELECT a, s, d FROM %s WHERE a = 2"), row(2, 2, null)); - assertRows(execute("UPDATE %s SET s = 4 WHERE a = 4 IF s != 4"), + assertRows(execute("UPDATE %s SET s = 4 WHERE a = 4 IF s != ?", 4 ), row(true)); assertRows(execute("SELECT a, s, d FROM %s WHERE a = 4"), row(4, 4, null)); @@ -1182,23 +1215,23 @@ public class InsertUpdateIfConditionTest extends CQLTester for (int i = 1; i <= 5; i++) execute("INSERT INTO %s (a, b, s1, s2, v) VALUES (?, ?, ?, ?, ?)", i, i, i, null, i); - assertRows(execute("DELETE s1 FROM %s WHERE a = 1 IF s2 = NULL"), + assertRows(execute("DELETE s1 FROM %s WHERE a = 1 IF s2 = ?", (Integer) null), row(true)); assertRows(execute("SELECT * FROM %s WHERE a = 1"), row(1, 1, null, null, 1)); // rejected: IN doesn't contain null - assertRows(execute("DELETE s1 FROM %s WHERE a = 2 IF s2 IN (10,20,30)"), + assertRows(execute("DELETE s1 FROM %s WHERE a = 2 IF s2 IN ?", list(10,20,30)), row(false, null)); assertRows(execute("SELECT * FROM %s WHERE a = 2"), row(2, 2, 2, null, 2)); - assertRows(execute("DELETE s1 FROM %s WHERE a = 3 IF s2 IN (NULL,20,30)"), + assertRows(execute("DELETE s1 FROM %s WHERE a = 3 IF s2 IN (?, ?, ?)", null, 20, 30), row(true)); assertRows(execute("SELECT * FROM %s WHERE a = 3"), row(3, 3, null, null, 3)); - assertRows(execute("DELETE s1 FROM %s WHERE a = 4 IF s2 != 4"), + assertRows(execute("DELETE s1 FROM %s WHERE a = 4 IF s2 != ?", 4), row(true)); assertRows(execute("SELECT * FROM %s WHERE a = 4"), row(4, 4, null, null, 4)); @@ -1206,7 +1239,7 @@ public class InsertUpdateIfConditionTest extends CQLTester // rejected: comparing number with NULL always returns false for (String operator : new String[]{ ">", "<", ">=", "<=", "=" }) { - assertRows(execute("DELETE s1 FROM %s WHERE a = 5 IF s2 " + operator + " 3"), + assertRows(execute("DELETE s1 FROM %s WHERE a = 5 IF s2 " + operator + " ?", 3), row(false, null)); assertRows(execute("SELECT * FROM %s WHERE a = 5"), row(5, 5, 5, null, 5));