49 lines
1.5 KiB
SQL
49 lines
1.5 KiB
SQL
# name: test/sql/merge/merge_into_constraint.test
|
|
# description: Test MERGE INTO with constraints
|
|
# group: [merge]
|
|
|
|
statement ok
|
|
PRAGMA enable_verification
|
|
|
|
statement ok
|
|
CREATE TABLE Stock(item_id int NOT NULL, balance int, CHECK (balance>0));
|
|
|
|
statement error
|
|
MERGE INTO Stock USING (VALUES (NULL, NULL)) new_accounts(item_id, balance) USING (item_id)
|
|
WHEN NOT MATCHED THEN INSERT VALUES (new_accounts.item_id, new_accounts.balance)
|
|
----
|
|
NOT NULL constraint
|
|
|
|
statement ok
|
|
MERGE INTO Stock USING (VALUES (1, 10)) new_accounts(item_id, balance) USING (item_id)
|
|
WHEN NOT MATCHED THEN INSERT VALUES (new_accounts.item_id, new_accounts.balance)
|
|
|
|
# trying to delete too much
|
|
statement error
|
|
MERGE INTO Stock USING (VALUES (1, 15)) sales(item_id, volume) USING (item_id)
|
|
WHEN MATCHED THEN UPDATE SET balance = balance - volume
|
|
----
|
|
CHECK constraint
|
|
|
|
# binding with check constraints
|
|
statement ok
|
|
CREATE TABLE Items(item_id int NOT NULL, total_cost INTEGER, base_cost INTEGER, tax_cost INTEGER, CHECK (total_cost = base_cost + tax_cost));
|
|
|
|
statement ok
|
|
INSERT INTO Items VALUES (1, 10, 8, 2);
|
|
|
|
statement error
|
|
MERGE INTO Items USING (VALUES (1, 15)) new_prices(item_id, total_cost) USING (item_id)
|
|
WHEN MATCHED THEN UPDATE SET total_cost = new_prices.total_cost
|
|
----
|
|
CHECK constraint
|
|
|
|
statement ok
|
|
MERGE INTO Items USING (VALUES (1, 15)) new_prices(item_id, total_cost) USING (item_id)
|
|
WHEN MATCHED THEN UPDATE SET total_cost = new_prices.total_cost, base_cost = new_prices.total_cost - 2
|
|
|
|
query IIII
|
|
FROM Items
|
|
----
|
|
1 15 13 2
|