162 lines
2.5 KiB
SQL
162 lines
2.5 KiB
SQL
# 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
|