Files
email-tracker/external/duckdb/test/sql/update/test_null_update.test
2025-10-24 19:21:19 -05:00

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