should be it
This commit is contained in:
109
external/duckdb/test/sql/upsert/postgres/composite_key.test
vendored
Normal file
109
external/duckdb/test/sql/upsert/postgres/composite_key.test
vendored
Normal file
@@ -0,0 +1,109 @@
|
||||
# name: test/sql/upsert/postgres/composite_key.test
|
||||
# group: [postgres]
|
||||
|
||||
statement ok
|
||||
pragma enable_verification;
|
||||
|
||||
# insert...on conflict do unique index inference
|
||||
|
||||
statement ok
|
||||
create table insertconflicttest(
|
||||
key int4,
|
||||
fruit text,
|
||||
other int4,
|
||||
unique (key, fruit)
|
||||
);
|
||||
|
||||
# fails
|
||||
|
||||
statement error
|
||||
insert into insertconflicttest values(0, 'Crowberry', 0) on conflict (key) do nothing;
|
||||
----
|
||||
|
||||
statement error
|
||||
insert into insertconflicttest values(0, 'Crowberry', 0) on conflict (fruit) do nothing;
|
||||
----
|
||||
|
||||
# succeeds
|
||||
|
||||
statement ok
|
||||
insert into insertconflicttest values(0, 'Crowberry', 0) on conflict (key, fruit) do nothing;
|
||||
|
||||
statement ok
|
||||
insert into insertconflicttest values(0, 'Crowberry', 0) on conflict (fruit, key, fruit, key) do nothing;
|
||||
|
||||
## -- We explicitly don't support a subquery in the WHERE clause currently -- ##
|
||||
statement error
|
||||
insert into insertconflicttest
|
||||
values (0, 'Crowberry', 0) on conflict (key, fruit) do update set other = 1 where exists (select 1 from insertconflicttest ii where ii.key = excluded.key);
|
||||
----
|
||||
DO UPDATE SET clause cannot contain a subquery
|
||||
|
||||
# inference succeeds:
|
||||
|
||||
statement ok
|
||||
insert into insertconflicttest values (7, 'Raspberry', 0) on conflict (key, fruit) do update set other = 1
|
||||
|
||||
statement ok
|
||||
insert into insertconflicttest values (8, 'Lime', 0) on conflict (fruit, key) do update set other = 1
|
||||
|
||||
# inference fails:
|
||||
|
||||
statement error
|
||||
insert into insertconflicttest values (9, 'Banana', 0) on conflict (key) do update set other = 1
|
||||
----
|
||||
|
||||
statement error
|
||||
insert into insertconflicttest values (10, 'Blueberry', 0) on conflict (key, key, key) do update set other = 1
|
||||
----
|
||||
|
||||
## -- This fails on postgres for some reason? -- ##
|
||||
statement ok
|
||||
insert into insertconflicttest values (11, 'Cherry', 0) on conflict (key, fruit) do update set other = 1
|
||||
|
||||
## -- This fails on postgres for some reason? -- ##
|
||||
statement ok
|
||||
insert into insertconflicttest values (12, 'Date', 0) on conflict (fruit, key) do update set other = 1
|
||||
|
||||
# Partial index tests, no inference predicate specified
|
||||
statement error
|
||||
create unique index part_comp_key_index on insertconflicttest(key, fruit) where key < 5;
|
||||
----
|
||||
Creating partial indexes is not supported currently
|
||||
|
||||
statement error
|
||||
create unique index expr_part_comp_key_index on insertconflicttest(key, fruit) where key < 5;
|
||||
----
|
||||
Creating partial indexes is not supported currently
|
||||
|
||||
# Expression index tests
|
||||
statement ok
|
||||
create unique index expr_key_index on insertconflicttest(fruit);
|
||||
|
||||
# inference succeeds:
|
||||
|
||||
statement ok
|
||||
insert into insertconflicttest values (20, 'Quince', 0) on conflict (fruit) do update set other = 1
|
||||
|
||||
statement ok
|
||||
insert into insertconflicttest values (21, 'Pomegranate', 0) on conflict (fruit, fruit) do update set other = 1
|
||||
|
||||
|
||||
# Expression index tests (with regular column)
|
||||
statement ok
|
||||
create unique index expr_comp_key_index on insertconflicttest(key, fruit);
|
||||
|
||||
statement ok
|
||||
create unique index tricky_expr_comp_key_index on insertconflicttest(key, fruit, fruit);
|
||||
|
||||
# inference succeeds:
|
||||
|
||||
statement ok
|
||||
insert into insertconflicttest values (24, 'Plum', 0) on conflict (key, fruit) do update set other = 1
|
||||
|
||||
statement ok
|
||||
insert into insertconflicttest values (25, 'Peach', 0) on conflict (fruit, key) do update set other = 1
|
||||
# Should not infer "tricky_expr_comp_key_index" index:
|
||||
|
||||
statement ok
|
||||
insert into insertconflicttest values (26, 'Fig', 0) on conflict (fruit, key, fruit, key) do update set other = 1
|
||||
Reference in New Issue
Block a user