should be it

This commit is contained in:
2025-10-24 19:21:19 -05:00
parent a4b23fc57c
commit f09560c7b1
14047 changed files with 3161551 additions and 1 deletions

View File

@@ -0,0 +1,134 @@
# name: test/sql/upsert/upsert_transaction.test
# group: [upsert]
# This tests the desired behavior when UPSERT is used on a conflict that only exists within the transaction local storage.
# NOTE: This does not test behavior of conflicts that arise between transactions
# DO UPDATE
statement ok
BEGIN TRANSACTION;
statement ok
CREATE TABLE tbl (
a SHORT PRIMARY KEY,
b SHORT
);
statement ok
INSERT INTO tbl VALUES
(1, 2)
ON CONFLICT (a) DO UPDATE SET b = excluded.b;
# Create a conflict within the transaction
statement ok
INSERT INTO tbl VALUES
(1, 3)
ON CONFLICT (a) DO UPDATE SET b = excluded.b;
query II
select * from tbl;
----
1 3
statement ok
COMMIT;
query II
select * from tbl;
----
1 3
# DO NOTHING
statement ok
BEGIN TRANSACTION;
statement ok
INSERT INTO tbl VALUES
(2, 1),
(3, 1),
(4, 1);
statement ok
INSERT INTO tbl VALUES
(2, 1),
(3, 1),
(4, 1)
ON CONFLICT (a) DO NOTHING;
statement ok
COMMIT;
# Attempt to update the same row twice within the same UPSERT
statement ok
BEGIN TRANSACTION;
statement ok
INSERT INTO tbl VALUES
(5, 0)
statement ok
insert into tbl VALUES
(5, 0),
(5, 1)
ON CONFLICT (a) DO UPDATE SET
b = excluded.b;
statement ok
COMMIT;
# DO UPDATE 'affected_tuples' return value
statement ok
BEGIN TRANSACTION;
statement ok
INSERT INTO tbl VALUES (6,0);
# Both of these inserts turn into updates
# The first affected tuple (5) is an update in the global storage
# The second affected tuple (6) is an update in the local storage
# The third affected tuple is an insert into the local storage
query I
INSERT INTO tbl VALUES (5,0), (6,0), (7,0) ON CONFLICT (a) DO UPDATE set b = excluded.b;
----
3
# The only affected tuple is the insert into the local storage
# (5,0) causes a constraint error in the global storage
# (3,0) causes a constraint error in the local storage
query I
INSERT INTO tbl VALUES (-1, 0), (5,0), (6,0) ON CONFLICT (a) DO NOTHING;
----
1
statement ok
COMMIT;
# DO UPDATE > STANDARD_VECTOR_SIZE
statement ok
BEGIN TRANSACTION;
statement ok
CREATE OR REPLACE TABLE tbl (a SHORT PRIMARY KEY, b SHORT);
statement ok
INSERT INTO tbl (select i, 0 from range(2500) tbl(i));
query I
select max(b) from tbl;
----
0
statement ok
INSERT INTO tbl (select i, i from range(2500) tbl(i)) ON CONFLICT (a) DO UPDATE SET b = excluded.b;
query I
select max(b) from tbl;
----
2499
statement ok
COMMIT;