should be it
This commit is contained in:
90
external/duckdb/test/sql/upsert/upsert_aliased.test
vendored
Normal file
90
external/duckdb/test/sql/upsert/upsert_aliased.test
vendored
Normal file
@@ -0,0 +1,90 @@
|
||||
# name: test/sql/upsert/upsert_aliased.test
|
||||
# group: [upsert]
|
||||
|
||||
statement ok
|
||||
pragma enable_verification;
|
||||
|
||||
statement ok
|
||||
create table tbl (
|
||||
i integer,
|
||||
j integer unique
|
||||
);
|
||||
|
||||
statement ok
|
||||
insert into tbl values (5,3), (6,7);
|
||||
|
||||
# This works when we don't reference it anywhere
|
||||
statement ok
|
||||
insert into tbl AS test values (3,5), (8,3), (2,6) on conflict (j) do update set i = excluded.i * 2 where i <= excluded.i;
|
||||
|
||||
query II
|
||||
select * from tbl order by all
|
||||
----
|
||||
2 6
|
||||
3 5
|
||||
6 7
|
||||
16 3
|
||||
|
||||
# We can use the alias in the expressions
|
||||
statement ok
|
||||
insert into tbl AS test values (2,3) on conflict do update set i = test.i;
|
||||
|
||||
# Essentially a no-op
|
||||
query II
|
||||
select * from tbl order by all
|
||||
----
|
||||
2 6
|
||||
3 5
|
||||
6 7
|
||||
16 3
|
||||
|
||||
# We can use the 'test' alias in the conflict target condition
|
||||
|
||||
query I
|
||||
insert into tbl as test values (2,3) on conflict (j) do update set i = excluded.j where test.i < 5;
|
||||
----
|
||||
0
|
||||
|
||||
statement ok
|
||||
insert into tbl as test values (2,3) on conflict (j) do update set i = excluded.j where test.i >= 5;
|
||||
|
||||
query II rowsort
|
||||
select * from tbl
|
||||
----
|
||||
2 6
|
||||
3 3
|
||||
3 5
|
||||
6 7
|
||||
|
||||
# We can also use the 'test' alias in the DO UPDATE condition
|
||||
|
||||
statement ok
|
||||
insert into tbl as test (j, i) values (5,3) on conflict (j) do update set i = 10 where test.j <= 3;
|
||||
|
||||
# No-op, do update condition was not met
|
||||
query II rowsort
|
||||
select * from tbl;
|
||||
----
|
||||
2 6
|
||||
3 3
|
||||
3 5
|
||||
6 7
|
||||
|
||||
statement ok
|
||||
insert into tbl as test (j, i) values (5,3) on conflict (j) do update set i = 10 where test.j > 3;
|
||||
|
||||
# Now 'i' is changed to 10 in the conflicting tuple
|
||||
query II
|
||||
select * from tbl order by all
|
||||
----
|
||||
2 6
|
||||
3 3
|
||||
6 7
|
||||
10 5
|
||||
|
||||
# When we alias to 'excluded' we create an ambiguity error
|
||||
|
||||
statement error
|
||||
insert into tbl as excluded values (8,3) on conflict (j) do update set i = 5;
|
||||
----
|
||||
Ambiguous reference to table "excluded"
|
||||
Reference in New Issue
Block a user