Files
greptimedb/tests/cases-soft-drop/distributed/soft_drop_table.sql
Lei, HUANG 6a53bb053c feat: enable soft-drop table lifecycle (#8554)
* feat: add purge_table admin function

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix: restrict purge_table to admin

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix: keep purge tombstone lookup consistent

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* test: verify soft-drop table lifecycle

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* ci: run soft-drop lifecycle sqlness

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix: read purge tombstones authoritatively

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix(meta): invalidate soft-drop marker caches

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* feat(meta): enable configurable table soft drop

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix(ci): configure gc for soft-drop sqlness

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix(meta): close regions before soft-drop metadata

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix(meta): avoid rollback after soft-drop tombstone

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix(function): validate admin single-row calls

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix(meta): log purge dropped table target

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix(meta): mark soft-drop config experimental

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix: sqlness test base

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

---------

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>
2026-07-20 08:28:35 +00:00

121 lines
2.9 KiB
SQL

CREATE DATABASE soft_drop_lifecycle;
USE soft_drop_lifecycle;
CREATE TABLE lifecycle_table (
host STRING,
reading INT,
ts TIMESTAMP TIME INDEX
);
INSERT INTO lifecycle_table VALUES ('original', 42, 1000);
DROP TABLE lifecycle_table;
SELECT object_id > 0 AS has_object_id,
object_type,
original_catalog_name,
original_schema_name,
original_object_name,
purge_status,
restorable,
dropped_at IS NOT NULL AS has_dropped_at,
dropped_by,
retention_expires_at IS NOT NULL AS has_retention_expires_at,
retention_expires_at > dropped_at AS deadline_after_drop,
restored_at,
restored_by
FROM information_schema.recycle_bin
WHERE original_schema_name = 'soft_drop_lifecycle'
AND original_object_name = 'lifecycle_table';
SELECT COUNT(*) AS live_table_count
FROM information_schema.tables
WHERE table_catalog = 'greptime'
AND table_schema = 'soft_drop_lifecycle'
AND table_name = 'lifecycle_table';
SELECT COUNT(*) AS tombstone_count
FROM information_schema.recycle_bin
WHERE original_schema_name = 'soft_drop_lifecycle'
AND original_object_name = 'lifecycle_table';
UNDROP TABLE greptime.soft_drop_lifecycle.lifecycle_table;
SELECT host, reading, ts FROM lifecycle_table;
DROP TABLE lifecycle_table;
ADMIN purge_table('lifecycle_table');
SELECT COUNT(*) AS tombstone_count
FROM information_schema.recycle_bin
WHERE original_schema_name = 'soft_drop_lifecycle'
AND original_object_name = 'lifecycle_table';
UNDROP TABLE greptime.soft_drop_lifecycle.lifecycle_table;
CREATE TABLE same_name (
generation STRING,
reading INT,
ts TIMESTAMP TIME INDEX
);
INSERT INTO same_name VALUES ('old', 1, 2000);
DROP TABLE same_name;
CREATE TABLE same_name (
generation STRING,
reading INT,
ts TIMESTAMP TIME INDEX
);
INSERT INTO same_name VALUES ('new', 2, 3000);
SELECT object_type,
original_catalog_name,
original_schema_name,
original_object_name,
purge_status,
restorable
FROM information_schema.recycle_bin
WHERE original_schema_name = 'soft_drop_lifecycle'
AND original_object_name = 'same_name';
UNDROP TABLE soft_drop_lifecycle.same_name;
DROP TABLE same_name;
ADMIN purge_table('greptime.soft_drop_lifecycle.same_name');
SELECT COUNT(*) AS tombstone_count
FROM information_schema.recycle_bin
WHERE original_schema_name = 'soft_drop_lifecycle'
AND original_object_name = 'same_name';
SELECT generation, reading, ts FROM same_name;
DROP TABLE same_name;
SELECT COUNT(*) AS tombstone_count
FROM information_schema.recycle_bin
WHERE original_schema_name = 'soft_drop_lifecycle'
AND original_object_name = 'same_name';
UNDROP TABLE same_name;
SELECT generation, reading, ts FROM same_name;
DROP TABLE same_name;
ADMIN purge_table('soft_drop_lifecycle.same_name');
SELECT COUNT(*) AS tombstone_count
FROM information_schema.recycle_bin
WHERE original_schema_name = 'soft_drop_lifecycle';
USE public;
DROP DATABASE soft_drop_lifecycle;