66 lines
2.6 KiB
SQL
66 lines
2.6 KiB
SQL
\set ON_ERROR_STOP on
|
|
|
|
DO $assertions$
|
|
DECLARE
|
|
actual_columns text[];
|
|
default_quota integer;
|
|
initial_version bigint;
|
|
updated_version bigint;
|
|
BEGIN
|
|
IF current_setting('server_version_num')::integer < 170000
|
|
OR current_setting('server_version_num')::integer >= 180000 THEN
|
|
RAISE EXCEPTION 'T-009 requires PostgreSQL 17.x';
|
|
END IF;
|
|
|
|
SELECT array_agg(column_name ORDER BY ordinal_position)
|
|
INTO actual_columns
|
|
FROM information_schema.columns
|
|
WHERE table_schema = 'bell' AND table_name = 'site_quota_v1';
|
|
IF actual_columns IS DISTINCT FROM ARRAY[
|
|
'tenant_id', 'site_id', 'max_video_channels', 'source_version', 'source_updated_at'
|
|
] THEN
|
|
RAISE EXCEPTION 'site_quota_v1 signature drift: %', actual_columns;
|
|
END IF;
|
|
|
|
IF NOT has_table_privilege('sense_app', 'bell.site_quota_v1', 'SELECT') THEN
|
|
RAISE EXCEPTION 'sense_app lacks SELECT on quota view';
|
|
END IF;
|
|
IF has_table_privilege('sense_app', 'bell.site_quota_v1', 'INSERT')
|
|
OR has_table_privilege('sense_app', 'bell.site_quota_v1', 'UPDATE')
|
|
OR has_table_privilege('sense_app', 'bell.site_quota_v1', 'DELETE') THEN
|
|
RAISE EXCEPTION 'sense_app has forbidden quota-view write privileges';
|
|
END IF;
|
|
IF has_table_privilege('sense_app', 'bell.sites', 'SELECT')
|
|
OR has_table_privilege('sense_app', 'bell.sites', 'INSERT')
|
|
OR has_table_privilege('sense_app', 'bell.sites', 'UPDATE')
|
|
OR has_table_privilege('sense_app', 'bell.sites', 'DELETE') THEN
|
|
RAISE EXCEPTION 'sense_app has forbidden Bell source-table privileges';
|
|
END IF;
|
|
|
|
INSERT INTO bell.sites(tenant_id, id, name)
|
|
VALUES ('assertion-tenant', 'assertion-site', 'Assertion Site')
|
|
RETURNING max_video_channels, version INTO default_quota, initial_version;
|
|
IF default_quota <> 16 OR initial_version <> 1 THEN
|
|
RAISE EXCEPTION 'Bell site default quota/version drift';
|
|
END IF;
|
|
|
|
UPDATE bell.sites SET name = 'Assertion Site Updated'
|
|
WHERE tenant_id = 'assertion-tenant' AND id = 'assertion-site'
|
|
RETURNING version INTO updated_version;
|
|
IF updated_version <> initial_version + 1 THEN
|
|
RAISE EXCEPTION 'Bell site source_version is not monotonic';
|
|
END IF;
|
|
|
|
BEGIN
|
|
INSERT INTO bell.sites(tenant_id, id, name, max_video_channels)
|
|
VALUES ('assertion-tenant', 'invalid-site', 'Invalid', 129);
|
|
RAISE EXCEPTION 'quota 129 unexpectedly accepted';
|
|
EXCEPTION
|
|
WHEN check_violation THEN NULL;
|
|
END;
|
|
|
|
DELETE FROM bell.sites
|
|
WHERE tenant_id = 'assertion-tenant' AND id = 'assertion-site';
|
|
END
|
|
$assertions$;
|