197 lines
2.1 KiB
SQL
197 lines
2.1 KiB
SQL
# name: test/sql/update/test_null_update.test
|
|
# description: Test standard update behavior with NULLs
|
|
# group: [update]
|
|
|
|
statement ok
|
|
SET default_null_order='nulls_first';
|
|
|
|
# create a table
|
|
statement ok con1
|
|
CREATE TABLE test (a INTEGER);
|
|
|
|
statement ok con1
|
|
INSERT INTO test VALUES (1), (2), (3), (NULL)
|
|
|
|
query I con1
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
NULL
|
|
1
|
|
2
|
|
3
|
|
|
|
# test updating from a non-null value to a null value
|
|
statement ok con1
|
|
BEGIN TRANSACTION
|
|
|
|
statement ok con1
|
|
UPDATE test SET a=NULL WHERE a=2
|
|
|
|
# not seen yet by con2, only by con1
|
|
query I con1
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
NULL
|
|
NULL
|
|
1
|
|
3
|
|
|
|
query I con2
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
NULL
|
|
1
|
|
2
|
|
3
|
|
|
|
# commit
|
|
statement ok con1
|
|
COMMIT
|
|
|
|
query I con1
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
NULL
|
|
NULL
|
|
1
|
|
3
|
|
|
|
query I con2
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
NULL
|
|
NULL
|
|
1
|
|
3
|
|
|
|
# now test a rollback
|
|
statement ok con1
|
|
BEGIN TRANSACTION
|
|
|
|
statement ok con1
|
|
UPDATE test SET a=NULL WHERE a=3
|
|
|
|
# not seen yet by con2, only by con1
|
|
query I con1
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
NULL
|
|
NULL
|
|
NULL
|
|
1
|
|
|
|
query I con2
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
NULL
|
|
NULL
|
|
1
|
|
3
|
|
|
|
statement ok con1
|
|
ROLLBACK
|
|
|
|
query I con1
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
NULL
|
|
NULL
|
|
1
|
|
3
|
|
|
|
query I con2
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
NULL
|
|
NULL
|
|
1
|
|
3
|
|
|
|
# test updating from a null value to a non-null value
|
|
statement ok con1
|
|
BEGIN TRANSACTION
|
|
|
|
statement ok con1
|
|
UPDATE test SET a=10 WHERE a IS NULL
|
|
|
|
# not seen yet by con2, only by con1
|
|
query I con1
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
1
|
|
3
|
|
10
|
|
10
|
|
|
|
query I con2
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
NULL
|
|
NULL
|
|
1
|
|
3
|
|
|
|
# now rollback
|
|
statement ok con1
|
|
ROLLBACK
|
|
|
|
# values are back to original values
|
|
query I con1
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
NULL
|
|
NULL
|
|
1
|
|
3
|
|
|
|
query I con2
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
NULL
|
|
NULL
|
|
1
|
|
3
|
|
|
|
# perform the same update, but this time commit
|
|
statement ok con1
|
|
BEGIN TRANSACTION
|
|
|
|
statement ok con1
|
|
UPDATE test SET a=10 WHERE a IS NULL
|
|
|
|
query I con1
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
1
|
|
3
|
|
10
|
|
10
|
|
|
|
query I con2
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
NULL
|
|
NULL
|
|
1
|
|
3
|
|
|
|
statement ok con1
|
|
COMMIT
|
|
|
|
query I con1
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
1
|
|
3
|
|
10
|
|
10
|
|
|
|
query I con2
|
|
SELECT * FROM test ORDER BY a
|
|
----
|
|
1
|
|
3
|
|
10
|
|
10
|
|
|