2023-10-25 11:50:15 -07:00
|
|
|
-- Copyright (c) HashiCorp, Inc.
|
|
|
|
|
-- SPDX-License-Identifier: BUSL-1.1
|
|
|
|
|
|
|
|
|
|
begin;
|
|
|
|
|
create function op_table(deletion_table_name name) returns text
|
|
|
|
|
as $$
|
|
|
|
|
select split_part(deletion_table_name, '_deleted', 1);
|
|
|
|
|
$$ language sql;
|
|
|
|
|
|
|
|
|
|
create function has_operational_table(deletion_table_name name) returns text
|
|
|
|
|
as $$
|
|
|
|
|
select has_table(op_table(deletion_table_name));
|
|
|
|
|
$$ language sql;
|
|
|
|
|
|
|
|
|
|
-- tests that the deletion table has the insert trigger
|
|
|
|
|
create function has_insert_trigger(deletion_table_name name) returns text
|
|
|
|
|
as $$
|
|
|
|
|
select * from collect_tap(
|
|
|
|
|
has_trigger(op_table(deletion_table_name), 'insert_deleted_id'),
|
|
|
|
|
trigger_is(op_table(deletion_table_name), 'insert_deleted_id', 'insert_deleted_id')
|
|
|
|
|
);
|
|
|
|
|
$$ language sql;
|
|
|
|
|
|
2024-09-16 16:48:03 +00:00
|
|
|
-- tests that the deletion table has the bulk insert trigger
|
|
|
|
|
create function has_bulk_insert_trigger(deletion_table_name name) returns text
|
|
|
|
|
as $$
|
|
|
|
|
select * from collect_tap(
|
|
|
|
|
has_trigger(op_table(deletion_table_name), 'bulk_insert_deleted_ids'),
|
|
|
|
|
trigger_is(op_table(deletion_table_name), 'bulk_insert_deleted_ids', 'bulk_insert_deleted_ids')
|
|
|
|
|
);
|
|
|
|
|
$$ language sql;
|
|
|
|
|
|
2023-10-25 11:50:15 -07:00
|
|
|
-- tests the public_id column
|
|
|
|
|
create function has_public_id(deletion_table_name name) returns text
|
|
|
|
|
as $$
|
|
|
|
|
select * from collect_tap(
|
|
|
|
|
has_column(deletion_table_name, 'public_id'),
|
|
|
|
|
col_not_null(deletion_table_name, 'public_id'),
|
|
|
|
|
col_hasnt_default(deletion_table_name, 'public_id')
|
|
|
|
|
);
|
|
|
|
|
$$ language sql;
|
|
|
|
|
|
|
|
|
|
-- tests the delete_time column
|
|
|
|
|
create function has_delete_time(deletion_table_name name) returns text
|
|
|
|
|
as $$
|
|
|
|
|
select * from collect_tap(
|
|
|
|
|
has_column(deletion_table_name, 'delete_time'),
|
|
|
|
|
col_not_null(deletion_table_name, 'delete_time'),
|
|
|
|
|
col_hasnt_default(deletion_table_name, 'delete_time')
|
|
|
|
|
);
|
|
|
|
|
$$ language sql;
|
|
|
|
|
|
|
|
|
|
-- tests for delete_time index
|
|
|
|
|
create function has_delete_time_index(deletion_table_name name) returns text
|
|
|
|
|
as $$
|
|
|
|
|
select case when length(deletion_table_name || '_delete_time_idx') > 63
|
|
|
|
|
then hasnt_index(deletion_table_name, deletion_table_name || '_delete_time_idx', 'Index name too long: ' || deletion_table_name || '_delete_time_idx')
|
|
|
|
|
else collect_tap(
|
|
|
|
|
has_index(deletion_table_name, deletion_table_name || '_delete_time_idx', 'delete_time')
|
|
|
|
|
) end;
|
|
|
|
|
$$ language sql;
|
|
|
|
|
|
|
|
|
|
-- tests the tables exist and follow the required naming pattern
|
|
|
|
|
create function has_correct_tables(deletetion_table_name name) returns text
|
|
|
|
|
as $$
|
|
|
|
|
select * from collect_tap(
|
|
|
|
|
has_table(deletetion_table_name),
|
|
|
|
|
has_operational_table(deletetion_table_name)
|
|
|
|
|
);
|
|
|
|
|
$$ language sql;
|
|
|
|
|
|
|
|
|
|
-- runs all the tests on a single deletion table
|
|
|
|
|
create function test_deletion_table(deletion_table_name name) returns text
|
|
|
|
|
as $$
|
|
|
|
|
select * from collect_tap(
|
|
|
|
|
has_correct_tables(deletion_table_name),
|
|
|
|
|
has_public_id(deletion_table_name),
|
|
|
|
|
has_delete_time(deletion_table_name),
|
|
|
|
|
has_delete_time_index(deletion_table_name),
|
|
|
|
|
has_insert_trigger(deletion_table_name)
|
|
|
|
|
);
|
|
|
|
|
$$ language sql;
|
|
|
|
|
|
2024-09-16 16:48:03 +00:00
|
|
|
-- like above, but using the bulk delete trigger
|
|
|
|
|
create function test_bulk_deletion_table(deletion_table_name name) returns text
|
|
|
|
|
as $$
|
|
|
|
|
select * from collect_tap(
|
|
|
|
|
has_correct_tables(deletion_table_name),
|
|
|
|
|
has_public_id(deletion_table_name),
|
|
|
|
|
has_delete_time(deletion_table_name),
|
|
|
|
|
has_delete_time_index(deletion_table_name),
|
|
|
|
|
has_bulk_insert_trigger(deletion_table_name)
|
|
|
|
|
);
|
|
|
|
|
$$ language sql;
|
|
|
|
|
|
2023-10-25 11:50:15 -07:00
|
|
|
-- 11 tests for each deletion table
|
|
|
|
|
select plan(a.table_count::integer)
|
|
|
|
|
from (
|
|
|
|
|
select 11 * count(*) as table_count
|
2024-09-16 16:48:03 +00:00
|
|
|
from deletion_table
|
2023-10-25 11:50:15 -07:00
|
|
|
) as a;
|
|
|
|
|
|
2024-09-16 16:48:03 +00:00
|
|
|
select test_deletion_table(a.tablename)
|
|
|
|
|
from deletion_table a
|
|
|
|
|
where a.tablename not in ('session_deleted');
|
|
|
|
|
|
|
|
|
|
select test_bulk_deletion_table(a.tablename)
|
|
|
|
|
from deletion_table a
|
|
|
|
|
where a.tablename in ('session_deleted');
|
2023-10-25 11:50:15 -07:00
|
|
|
|
|
|
|
|
select * from finish();
|
|
|
|
|
rollback;
|