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,74 @@
# name: test/sql/upsert/upsert_excluded_references.test
# group: [upsert]
statement ok
pragma enable_verification;
# Within the ON CONFLICT clause, we can have special column references that are qualified with 'excluded'
# These refer to the to-be-inserted tuples that caused the conflict, instead of the existing tuples that were found by the conflict.
statement ok
create or replace table tbl (
a integer primary key,
b integer
);
statement ok
insert into tbl VALUES (1,2), (2,2);
query II
select * from tbl;
----
1 2
2 2
# Conflict on '1' in 'a'
statement error
insert into tbl VALUES (1,3), (3,4);
----
Constraint Error: Duplicate key "a: 1" violates primary key constraint
# Usage of 'excluded' in a SET expression
statement ok
insert into tbl VALUES (1,3), (3,4) ON CONFLICT (a) DO UPDATE SET b = excluded.b;
query II
select * from tbl;
----
1 3
2 2
3 4
# Usage of 'excluded' in a ON CONFLICT (..) WHERE <expr>
statement error
insert into tbl VALUES (4,3), (3,8) ON CONFLICT (a) WHERE excluded.b < 8 DO NOTHING;
----
ON CONFLICT WHERE clause is only supported in DO UPDATE SET
statement ok
insert into tbl VALUES (4,3), (3,8) ON CONFLICT (a) DO UPDATE SET b = 10;
query II
select * from tbl;
----
1 3
2 2
3 10
4 3
# Usage of 'excluded' in a DO UPDATE SET ... WHERE <expr>
# Both '2' and '3' are conflicts, but only '2' meets the condition
# When the condition is not met, this turns into a DO NOTHING instead for that tuple
statement ok
insert into tbl VALUES (3,8), (2,2), (7,2) ON CONFLICT (a) DO UPDATE SET b = b*2 WHERE b == excluded.b;
# Only '2' is updated
query II
select * from tbl;
----
1 3
2 4
3 10
4 3
7 2