File: test_update_many_updaters_nulls.test

package info (click to toggle)
duckdb 1.5.1-2
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 299,196 kB
  • sloc: cpp: 865,414; ansic: 57,292; python: 18,871; sql: 12,663; lisp: 11,751; yacc: 7,412; lex: 1,682; sh: 747; makefile: 558
file content (136 lines) | stat: -rw-r--r-- 2,158 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# name: test/sql/update/test_update_many_updaters_nulls.test
# description: Test update behavior with multiple updaters and NULL values
# group: [update]

statement ok
SET default_null_order='nulls_first';

statement ok
SET immediate_transaction_mode=true

statement ok updater
PRAGMA enable_verification

statement ok con1
PRAGMA enable_verification

statement ok con2
PRAGMA enable_verification

statement ok con3
PRAGMA enable_verification

statement ok con4
PRAGMA enable_verification

statement ok con5
PRAGMA enable_verification

# this test contains five query connections (con1, con2, con3, con4, con5)
# and one updating connection (updater)
# create a table, filled with 3 values (1), (2), (3)
statement ok con1
CREATE TABLE test (a INTEGER);

statement ok con1
INSERT INTO test VALUES (1), (2), (3)

# now we start updating specific values and reading different versions
statement ok con1
BEGIN TRANSACTION

query I updater
UPDATE test SET a=NULL WHERE a=1
----
1

statement ok con2
BEGIN TRANSACTION

query I updater
UPDATE test SET a=NULL WHERE a=2
----
1

statement ok con3
BEGIN TRANSACTION

query I updater
UPDATE test SET a=NULL WHERE a=3
----
1

statement ok con4
BEGIN TRANSACTION

query I updater
SELECT COUNT(*) FROM test WHERE a IS NULL
----
3

query I updater
UPDATE test SET a=99 WHERE a IS NULL
----
3

statement ok con5
BEGIN TRANSACTION

# now read the different states
# con sees {1, 2, 3}
query I con1
SELECT * FROM test ORDER BY a
----
1
2
3

# con2 sees {NULL, 2, 3}
query I con2
SELECT * FROM test ORDER BY a
----
NULL
2
3

# con3 sees {NULL, NULL, 3}
query I con3
SELECT * FROM test ORDER BY a
----
NULL
NULL
3

# con4 sees {NULL, NULL, NULL}
query I con4
SELECT * FROM test ORDER BY a
----
NULL
NULL
NULL

# con5 sees {99, 99, 99}
query I con5
SELECT * FROM test ORDER BY a
----
99
99
99

# now verify that we get conflicts when we update values that have been updated AFTER we started
statement error con1
UPDATE test SET a=99 WHERE a=1
----

statement error con2
UPDATE test SET a=99 WHERE a=2
----

statement error con3
UPDATE test SET a=99 WHERE a=3
----

statement error con4
UPDATE test SET a=99 WHERE a IS NULL
----