should be it
This commit is contained in:
37
external/duckdb/test/sql/delete/cleanup_delete_on_conflict.test
vendored
Normal file
37
external/duckdb/test/sql/delete/cleanup_delete_on_conflict.test
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
# name: test/sql/delete/cleanup_delete_on_conflict.test
|
||||
# description: Verify that partial deletes are cleaned up on conflicts
|
||||
# group: [delete]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE tbl(i INTEGER);
|
||||
|
||||
statement ok
|
||||
INSERT INTO tbl FROM range(1000) t(i);
|
||||
|
||||
statement ok
|
||||
SET immediate_transaction_mode=true
|
||||
|
||||
statement ok con1
|
||||
BEGIN
|
||||
|
||||
statement ok con2
|
||||
BEGIN
|
||||
|
||||
statement ok con1
|
||||
DELETE FROM tbl WHERE i BETWEEN 200 AND 300
|
||||
|
||||
statement error con2
|
||||
DELETE FROM tbl WHERE i <= 500
|
||||
----
|
||||
Conflict on tuple deletion
|
||||
|
||||
statement ok con1
|
||||
COMMIT
|
||||
|
||||
statement ok con2
|
||||
ROLLBACK
|
||||
|
||||
query I
|
||||
DELETE FROM tbl WHERE i <= 500
|
||||
----
|
||||
400
|
||||
31
external/duckdb/test/sql/delete/in_memory_bulk_delete.test_slow
vendored
Normal file
31
external/duckdb/test/sql/delete/in_memory_bulk_delete.test_slow
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
# name: test/sql/delete/in_memory_bulk_delete.test_slow
|
||||
# description: Test that repeated almost full delete of in-memory table frees up memory
|
||||
# group: [delete]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
SET threads=1
|
||||
|
||||
statement ok
|
||||
CREATE TABLE a(i INTEGER)
|
||||
|
||||
loop i 0 10
|
||||
|
||||
statement ok
|
||||
INSERT INTO a FROM range(1000000)
|
||||
|
||||
# this deletes almost all rows
|
||||
statement ok
|
||||
DELETE FROM a WHERE i%100000 <> 0
|
||||
|
||||
statement ok
|
||||
CHECKPOINT
|
||||
|
||||
query I
|
||||
SELECT memory_usage_bytes FROM duckdb_memory() WHERE tag='IN_MEMORY_TABLE'
|
||||
----
|
||||
262144
|
||||
|
||||
endloop
|
||||
27
external/duckdb/test/sql/delete/in_memory_truncate.test_slow
vendored
Normal file
27
external/duckdb/test/sql/delete/in_memory_truncate.test_slow
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
# name: test/sql/delete/in_memory_truncate.test_slow
|
||||
# description: Test that repeated truncate of in-memory table frees up memory
|
||||
# group: [delete]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
CREATE TABLE a(i INTEGER)
|
||||
|
||||
loop i 0 10
|
||||
|
||||
statement ok
|
||||
INSERT INTO a FROM range(1000000)
|
||||
|
||||
statement ok
|
||||
TRUNCATE a
|
||||
|
||||
statement ok
|
||||
CHECKPOINT
|
||||
|
||||
query I
|
||||
SELECT memory_usage_bytes FROM duckdb_memory() WHERE tag='IN_MEMORY_TABLE'
|
||||
----
|
||||
0
|
||||
|
||||
endloop
|
||||
40
external/duckdb/test/sql/delete/large_deletes_transactions.test
vendored
Normal file
40
external/duckdb/test/sql/delete/large_deletes_transactions.test
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
# name: test/sql/delete/large_deletes_transactions.test
|
||||
# description: Test large deletions with transactions
|
||||
# group: [delete]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok con1
|
||||
CREATE TABLE a AS SELECT * FROM range(1000000) t1(i);
|
||||
|
||||
statement ok con2
|
||||
BEGIN TRANSACTION
|
||||
|
||||
query I con2
|
||||
SELECT COUNT(*) FROM a
|
||||
----
|
||||
1000000
|
||||
|
||||
query I con1
|
||||
DELETE FROM a WHERE i%2=0
|
||||
----
|
||||
500000
|
||||
|
||||
query I con1
|
||||
SELECT COUNT(*) FROM a
|
||||
----
|
||||
500000
|
||||
|
||||
query I con2
|
||||
SELECT COUNT(*) FROM a
|
||||
----
|
||||
1000000
|
||||
|
||||
statement ok con2
|
||||
COMMIT
|
||||
|
||||
query I con2
|
||||
SELECT COUNT(*) FROM a
|
||||
----
|
||||
500000
|
||||
28
external/duckdb/test/sql/delete/list_delete.test
vendored
Normal file
28
external/duckdb/test/sql/delete/list_delete.test
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
# name: test/sql/delete/list_delete.test
|
||||
# description: Test list deletions
|
||||
# group: [delete]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
CREATE TABLE aggr (k int[]);
|
||||
|
||||
statement ok
|
||||
INSERT INTO aggr VALUES ([0, 1, 1, 1, 4, 0, 3, 3, 2, 2, 4, 4, 2, 4, 0, 0, 0, 1, 2, 3, 4, 2, 3, 3, 1]);
|
||||
|
||||
statement ok
|
||||
INSERT INTO aggr VALUES ([]), ([NULL]), (NULL), ([0, 1, 1, 1, 4, NULL, 0, 3, 3, 2, NULL, 2, 4, 4, 2, 4, 0, 0, 0, 1, NULL, 2, 3, 4, 2, 3, 3, 1]);
|
||||
|
||||
query I
|
||||
SELECT COUNT(k) FROM aggr
|
||||
----
|
||||
4
|
||||
|
||||
statement ok
|
||||
DELETE FROM aggr;
|
||||
|
||||
query I
|
||||
SELECT COUNT(k) FROM aggr
|
||||
----
|
||||
0
|
||||
55
external/duckdb/test/sql/delete/test_delete.test
vendored
Normal file
55
external/duckdb/test/sql/delete/test_delete.test
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
# name: test/sql/delete/test_delete.test
|
||||
# description: Test deletions
|
||||
# group: [delete]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
CREATE TABLE a(i INTEGER);
|
||||
|
||||
statement ok
|
||||
INSERT INTO a VALUES (42);
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
1
|
||||
|
||||
# delete everything
|
||||
statement ok
|
||||
DELETE FROM a;
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
0
|
||||
|
||||
statement ok
|
||||
INSERT INTO a VALUES (42);
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
1
|
||||
|
||||
# now test rollback of deletion
|
||||
statement ok
|
||||
BEGIN TRANSACTION
|
||||
|
||||
statement ok
|
||||
DELETE FROM a;
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
0
|
||||
|
||||
statement ok
|
||||
ROLLBACK
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
1
|
||||
|
||||
161
external/duckdb/test/sql/delete/test_delete_indexed.test
vendored
Normal file
161
external/duckdb/test/sql/delete/test_delete_indexed.test
vendored
Normal file
@@ -0,0 +1,161 @@
|
||||
# name: test/sql/delete/test_delete_indexed.test
|
||||
# description: Test deletions on tables with indexes
|
||||
# group: [delete]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
CREATE TABLE t (id INT PRIMARY KEY, s TEXT, j BIGINT);
|
||||
|
||||
statement ok
|
||||
CREATE INDEX idx ON t(j);
|
||||
|
||||
statement ok
|
||||
INSERT INTO t VALUES (1, 'a', 10), (2, 'b', 20), (3, 'c', 30);
|
||||
|
||||
# verify initial state
|
||||
query III
|
||||
SELECT * FROM t ORDER BY id;
|
||||
----
|
||||
1 a 10
|
||||
2 b 20
|
||||
3 c 30
|
||||
|
||||
# delete using primary key
|
||||
statement ok
|
||||
DELETE FROM t WHERE id = 2;
|
||||
|
||||
query III
|
||||
SELECT * FROM t ORDER BY id;
|
||||
----
|
||||
1 a 10
|
||||
3 c 30
|
||||
|
||||
# delete using indexed column
|
||||
statement ok
|
||||
DELETE FROM t WHERE j = 30;
|
||||
|
||||
query III
|
||||
SELECT * FROM t ORDER BY id;
|
||||
----
|
||||
1 a 10
|
||||
|
||||
# insert more data
|
||||
statement ok
|
||||
INSERT INTO t VALUES (4, 'd', 40), (5, 'e', 50);
|
||||
|
||||
# test transaction rollback
|
||||
statement ok
|
||||
BEGIN TRANSACTION
|
||||
|
||||
statement ok
|
||||
DELETE FROM t WHERE j > 10;
|
||||
|
||||
query III
|
||||
SELECT * FROM t ORDER BY id;
|
||||
----
|
||||
1 a 10
|
||||
|
||||
statement ok
|
||||
ROLLBACK
|
||||
|
||||
query III
|
||||
SELECT * FROM t ORDER BY id;
|
||||
----
|
||||
1 a 10
|
||||
4 d 40
|
||||
5 e 50
|
||||
|
||||
# delete everything
|
||||
statement ok
|
||||
DELETE FROM t;
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM t;
|
||||
----
|
||||
0
|
||||
|
||||
# test delete and insert in same transaction with overlapping values
|
||||
statement ok
|
||||
INSERT INTO t VALUES (1, 'a', 10), (2, 'b', 20), (3, 'c', 30);
|
||||
|
||||
statement ok
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
# delete rows with j=20,30
|
||||
statement ok
|
||||
DELETE FROM t WHERE j >= 20;
|
||||
|
||||
# insert new rows with same ids and j values
|
||||
statement ok
|
||||
INSERT INTO t VALUES (2, 'new_20', 20), (3, 'new_30', 30);
|
||||
|
||||
# verify index lookup during transaction
|
||||
query III
|
||||
SELECT * FROM t WHERE j = 20;
|
||||
----
|
||||
2 new_20 20
|
||||
|
||||
query III
|
||||
SELECT * FROM t WHERE j = 30;
|
||||
----
|
||||
3 new_30 30
|
||||
|
||||
statement ok
|
||||
COMMIT;
|
||||
|
||||
# verify index lookups after commit
|
||||
query III
|
||||
SELECT * FROM t WHERE j = 20;
|
||||
----
|
||||
2 new_20 20
|
||||
|
||||
query III
|
||||
SELECT * FROM t WHERE j = 30;
|
||||
----
|
||||
3 new_30 30
|
||||
|
||||
# test rollback with overlapping values
|
||||
statement ok
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
# delete rows with j=20,30
|
||||
statement ok
|
||||
DELETE FROM t WHERE j >= 20;
|
||||
|
||||
# insert rows with same ids and j values again
|
||||
statement ok
|
||||
INSERT INTO t VALUES (2, 'tmp_20', 20), (3, 'tmp_30', 30);
|
||||
|
||||
# verify index lookup during transaction
|
||||
query III
|
||||
SELECT * FROM t WHERE j = 20;
|
||||
----
|
||||
2 tmp_20 20
|
||||
|
||||
query III
|
||||
SELECT * FROM t WHERE j = 30;
|
||||
----
|
||||
3 tmp_30 30
|
||||
|
||||
statement ok
|
||||
ROLLBACK;
|
||||
|
||||
# verify index lookups after rollback
|
||||
query III
|
||||
SELECT * FROM t WHERE j = 20;
|
||||
----
|
||||
2 new_20 20
|
||||
|
||||
query III
|
||||
SELECT * FROM t WHERE j = 30;
|
||||
----
|
||||
3 new_30 30
|
||||
|
||||
# verify range queries on index
|
||||
query III
|
||||
SELECT * FROM t WHERE j >= 20 ORDER BY j;
|
||||
----
|
||||
2 new_20 20
|
||||
3 new_30 30
|
||||
24
external/duckdb/test/sql/delete/test_large_delete.test
vendored
Normal file
24
external/duckdb/test/sql/delete/test_large_delete.test
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
# name: test/sql/delete/test_large_delete.test
|
||||
# description: Test scan with large deletions
|
||||
# group: [delete]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
CREATE TABLE a AS SELECT * FROM range(0, 10000, 1) t1(i);
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM a WHERE i >= 2000 AND i < 5000;
|
||||
----
|
||||
3000
|
||||
|
||||
query I
|
||||
DELETE FROM a WHERE i >= 2000 AND i < 5000;
|
||||
----
|
||||
3000
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
7000
|
||||
25
external/duckdb/test/sql/delete/test_large_delete_parallel.test
vendored
Normal file
25
external/duckdb/test/sql/delete/test_large_delete_parallel.test
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
# name: test/sql/delete/test_large_delete_parallel.test
|
||||
# description: Test scan with large deletions
|
||||
# group: [delete]
|
||||
|
||||
statement ok
|
||||
pragma threads=2
|
||||
|
||||
statement ok
|
||||
pragma verify_parallelism
|
||||
|
||||
statement ok
|
||||
CREATE TABLE a AS SELECT * FROM range(0, 10000, 1) t1(i);
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
10000
|
||||
|
||||
statement ok
|
||||
DELETE FROM a WHERE i >= 2000 AND i < 5000;
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
7000
|
||||
179
external/duckdb/test/sql/delete/test_segment_deletes.test
vendored
Normal file
179
external/duckdb/test/sql/delete/test_segment_deletes.test
vendored
Normal file
@@ -0,0 +1,179 @@
|
||||
# name: test/sql/delete/test_segment_deletes.test
|
||||
# description: Test deletions
|
||||
# group: [delete]
|
||||
|
||||
statement ok con1
|
||||
CREATE TABLE a(i INTEGER);
|
||||
|
||||
# insert the values [0, 1, 2, .. 1022, 1023] repeatedly
|
||||
# however, make sure the order that we insert them is
|
||||
loop i 0 20
|
||||
|
||||
statement ok con1
|
||||
INSERT INTO a SELECT * FROM range(0, 1024, 1);
|
||||
|
||||
endloop
|
||||
|
||||
# verify the count
|
||||
|
||||
query I con1
|
||||
SELECT COUNT(*) FROM a
|
||||
----
|
||||
20480
|
||||
|
||||
# we test the values 0, 1, 1022 and 1023
|
||||
# for every tested value, delete it and then rollback
|
||||
|
||||
# value = 0
|
||||
statement ok con1
|
||||
BEGIN TRANSACTION;
|
||||
DELETE FROM a WHERE i=0;
|
||||
|
||||
# verify the deleted count
|
||||
query I con1
|
||||
SELECT COUNT(*) FROM a
|
||||
----
|
||||
20460
|
||||
|
||||
statement ok con1
|
||||
ROLLBACK
|
||||
|
||||
# verify the initial count
|
||||
query I con1
|
||||
SELECT COUNT(*) FROM a
|
||||
----
|
||||
20480
|
||||
|
||||
# value = 1
|
||||
statement ok con1
|
||||
BEGIN TRANSACTION;
|
||||
DELETE FROM a WHERE i=1;
|
||||
|
||||
# verify the deleted count
|
||||
query I con1
|
||||
SELECT COUNT(*) FROM a
|
||||
----
|
||||
20460
|
||||
|
||||
statement ok con1
|
||||
ROLLBACK
|
||||
|
||||
# verify the initial count
|
||||
query I con1
|
||||
SELECT COUNT(*) FROM a
|
||||
----
|
||||
20480
|
||||
|
||||
# value = 1022
|
||||
statement ok con1
|
||||
BEGIN TRANSACTION;
|
||||
DELETE FROM a WHERE i=1022;
|
||||
|
||||
# verify the deleted count
|
||||
query I con1
|
||||
SELECT COUNT(*) FROM a
|
||||
----
|
||||
20460
|
||||
|
||||
statement ok con1
|
||||
ROLLBACK
|
||||
|
||||
# verify the initial count
|
||||
query I con1
|
||||
SELECT COUNT(*) FROM a
|
||||
----
|
||||
20480
|
||||
|
||||
# value = 1023
|
||||
statement ok con1
|
||||
BEGIN TRANSACTION;
|
||||
DELETE FROM a WHERE i=1023;
|
||||
|
||||
# verify the deleted count
|
||||
query I con1
|
||||
SELECT COUNT(*) FROM a
|
||||
----
|
||||
20460
|
||||
|
||||
statement ok con1
|
||||
ROLLBACK
|
||||
|
||||
# verify the initial count
|
||||
query I con1
|
||||
SELECT COUNT(*) FROM a
|
||||
----
|
||||
20480
|
||||
|
||||
# now, for every tested value, delete it in a separate connection and verify the count
|
||||
# con2 -> 0
|
||||
statement ok con2
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
statement ok con2
|
||||
DELETE FROM a WHERE i=0;
|
||||
|
||||
query I con2
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
20460
|
||||
|
||||
# con3 -> 1
|
||||
statement ok con3
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
statement ok con3
|
||||
DELETE FROM a WHERE i=1;
|
||||
|
||||
query I con3
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
20460
|
||||
|
||||
# con4 -> 1022
|
||||
statement ok con4
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
statement ok con4
|
||||
DELETE FROM a WHERE i=1022;
|
||||
|
||||
query I con4
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
20460
|
||||
|
||||
# con5 -> 1023
|
||||
statement ok con5
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
statement ok con5
|
||||
DELETE FROM a WHERE i=1023;
|
||||
|
||||
query I con5
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
20460
|
||||
|
||||
# con1 still has the original count
|
||||
query I con1
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
20480
|
||||
|
||||
# until we update the other transactions
|
||||
statement ok con2
|
||||
COMMIT
|
||||
|
||||
statement ok con3
|
||||
COMMIT
|
||||
|
||||
statement ok con4
|
||||
COMMIT
|
||||
|
||||
statement ok con5
|
||||
COMMIT
|
||||
|
||||
# now the count is updated
|
||||
query I con1
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
20400
|
||||
54
external/duckdb/test/sql/delete/test_truncate.test
vendored
Normal file
54
external/duckdb/test/sql/delete/test_truncate.test
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
# name: test/sql/delete/test_truncate.test
|
||||
# description: Test truncate
|
||||
# group: [delete]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
CREATE TABLE a(i INTEGER);
|
||||
|
||||
statement ok
|
||||
INSERT INTO a VALUES (42);
|
||||
|
||||
query I
|
||||
TRUNCATE TABLE a
|
||||
----
|
||||
1
|
||||
|
||||
# delete everything
|
||||
statement ok
|
||||
TRUNCATE a
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
0
|
||||
|
||||
statement ok
|
||||
INSERT INTO a VALUES (42);
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
1
|
||||
|
||||
# now test rollback of deletion
|
||||
statement ok
|
||||
BEGIN TRANSACTION
|
||||
|
||||
statement ok
|
||||
TRUNCATE a
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
0
|
||||
|
||||
statement ok
|
||||
ROLLBACK
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM a;
|
||||
----
|
||||
1
|
||||
91
external/duckdb/test/sql/delete/test_using_delete.test
vendored
Normal file
91
external/duckdb/test/sql/delete/test_using_delete.test
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
# name: test/sql/delete/test_using_delete.test
|
||||
# description: Test deletions with USING clause
|
||||
# group: [delete]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification;
|
||||
|
||||
statement ok
|
||||
CREATE TABLE a(i INTEGER);
|
||||
|
||||
statement ok
|
||||
INSERT INTO a VALUES (1), (2), (3);
|
||||
|
||||
query I
|
||||
DELETE FROM a USING (values (1)) tbl(i) WHERE a.i=tbl.i;
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT * FROM a;
|
||||
----
|
||||
2
|
||||
3
|
||||
|
||||
# no condition?
|
||||
query I
|
||||
DELETE FROM a USING (values (1)) tbl(i);
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT * FROM a;
|
||||
----
|
||||
|
||||
statement ok
|
||||
INSERT INTO a VALUES (1), (2), (3);
|
||||
|
||||
query I
|
||||
SELECT * FROM a;
|
||||
----
|
||||
1
|
||||
2
|
||||
3
|
||||
|
||||
# multiple joins
|
||||
query I
|
||||
DELETE FROM a USING (values (1)) tbl(i), (values (1), (2)) tbl2(i) WHERE a.i=tbl.i AND a.i=tbl2.i;
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT * FROM a;
|
||||
----
|
||||
2
|
||||
3
|
||||
|
||||
# no matches
|
||||
query I
|
||||
DELETE FROM a USING (values (4)) tbl(i) WHERE a.i=tbl.i;
|
||||
----
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT * FROM a;
|
||||
----
|
||||
2
|
||||
3
|
||||
|
||||
# self join
|
||||
query I
|
||||
DELETE FROM a USING a a2(i) WHERE a.i>a2.i;
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT * FROM a;
|
||||
----
|
||||
2
|
||||
|
||||
# binding errors
|
||||
# table does not exist
|
||||
statement error
|
||||
DELETE FROM a USING b WHERE a.i=b.i;
|
||||
----
|
||||
<REGEX>:.*Catalog Error.*does not exist.*
|
||||
|
||||
# column does not exist
|
||||
statement error
|
||||
DELETE FROM a USING a b WHERE a.i=b.j;
|
||||
----
|
||||
<REGEX>:.*Binder Error.*does not have a column.*
|
||||
130
external/duckdb/test/sql/delete/test_using_delete_duplicates.test
vendored
Normal file
130
external/duckdb/test/sql/delete/test_using_delete_duplicates.test
vendored
Normal file
@@ -0,0 +1,130 @@
|
||||
# name: test/sql/delete/test_using_delete_duplicates.test
|
||||
# description: Test USING deletion with duplicates
|
||||
# group: [delete]
|
||||
|
||||
statement ok
|
||||
create table integers as select * from generate_series(0, 9, 1);
|
||||
|
||||
statement ok
|
||||
create table integers2 as select * from generate_series(0, 9, 1);
|
||||
|
||||
query I
|
||||
DELETE FROM integers USING integers2;
|
||||
----
|
||||
10
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM integers
|
||||
----
|
||||
0
|
||||
|
||||
# the same but with transaction local storage
|
||||
statement ok
|
||||
DROP TABLE integers
|
||||
|
||||
statement ok
|
||||
DROP TABLE integers2
|
||||
|
||||
statement ok
|
||||
BEGIN transaction
|
||||
|
||||
statement ok
|
||||
create table integers as select * from generate_series(0, 9, 1);
|
||||
|
||||
statement ok
|
||||
create table integers2 as select * from generate_series(0, 9, 1);
|
||||
|
||||
query I
|
||||
DELETE FROM integers USING integers2;
|
||||
----
|
||||
10
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM integers
|
||||
----
|
||||
0
|
||||
|
||||
statement ok
|
||||
COMMIT
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM integers
|
||||
----
|
||||
0
|
||||
|
||||
statement ok
|
||||
CREATE or replace TABLE integers AS FROM range(10);
|
||||
|
||||
statement ok
|
||||
create table integers_copy as select * from integers;
|
||||
|
||||
query I nosort delete_result_1
|
||||
DELETE FROM integers USING range(100) RETURNING *;
|
||||
----
|
||||
|
||||
query I nosort delte_result_1
|
||||
select * from integers_copy;
|
||||
|
||||
|
||||
statement ok
|
||||
create or replace table t1 as select range%10 a from range(1000);
|
||||
|
||||
statement ok
|
||||
create or replace table t2 as select range b from range(10);
|
||||
|
||||
statement ok
|
||||
create or replace table t2_copy as select * from t2;
|
||||
|
||||
query I nosort delete_result_small
|
||||
delete from t2 using t1 where a=b returning *;
|
||||
----
|
||||
|
||||
query I nosort delete_result_small
|
||||
select * from t2_copy;
|
||||
----
|
||||
|
||||
|
||||
statement ok
|
||||
create or replace table t1 as select range%10 a from range(100);
|
||||
|
||||
statement ok
|
||||
create or replace table t2 as select range b from range(10);
|
||||
|
||||
statement ok
|
||||
insert into t2 select 12 from range(5);
|
||||
|
||||
statement ok
|
||||
insert into t1 select 12 from range(10);
|
||||
|
||||
statement ok
|
||||
create or replace table t2_copy as select * from t2;
|
||||
|
||||
query I nosort delete_result_small_2
|
||||
delete from t2 using t1 where a=b returning *;
|
||||
----
|
||||
|
||||
query I nosort delete_result_small_2
|
||||
select * from t2_copy
|
||||
----
|
||||
|
||||
|
||||
statement ok
|
||||
create or replace table t1 as select range%1000 a from range(100_000);
|
||||
|
||||
statement ok
|
||||
create or replace table t2 as select range b from range(100);
|
||||
|
||||
statement ok
|
||||
insert into t2 select 100_050 from range(50);
|
||||
|
||||
statement ok
|
||||
insert into t1 select 100_050 from range(50);
|
||||
|
||||
statement ok
|
||||
create or replace table t2_copy as select * from t2;
|
||||
|
||||
query I nosort delete_result
|
||||
delete from t2 using t1 where a=b returning *;
|
||||
|
||||
query I nosort delete_result;
|
||||
select * from t2_copy;
|
||||
Reference in New Issue
Block a user