You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/internal/db/sqltest/tests/history/hst_triggers.sql

117 lines
3.2 KiB

-- Copyright (c) HashiCorp, Inc.
-- SPDX-License-Identifier: BUSL-1.1
begin;
select plan(28);
-- Verify the trigger functions exist and are declared properly
select has_function('hst_on_insert');
select volatility_is('hst_on_insert', 'volatile');
select isnt_strict('hst_on_insert');
select has_function('hst_on_delete');
select volatility_is('hst_on_delete', 'volatile');
select isnt_strict('hst_on_delete');
select has_function('hst_on_update');
select volatility_is('hst_on_update', 'volatile');
select isnt_strict('hst_on_update');
select has_trigger('iam_scope', 'hst_on_insert');
select has_trigger('iam_scope', 'hst_on_update');
select has_trigger('iam_scope', 'hst_on_delete');
select is(count(a.*), count(b.*)) from iam_scope a, iam_scope_hst b;
-- test on_delete trigger
select is(count(*), 1::bigint)
from iam_scope_hst
where public_id = 'p____rcolors';
select is(upper(valid_range), null)
from iam_scope_hst
where public_id = 'p____rcolors';
select ok(isempty(valid_range) = false)
from iam_scope_hst
where public_id = 'p____rcolors';
delete
from iam_scope
where public_id = 'p____rcolors';
select is(count(*), 1::bigint)
from iam_scope_hst
where public_id = 'p____rcolors';
select is(upper(valid_range), now())
from iam_scope_hst
where public_id = 'p____rcolors';
select ok(isempty(valid_range) = false)
from iam_scope_hst
where public_id = 'p____rcolors';
-- test on_update trigger
select is(count(*), 1::bigint)
from iam_scope_hst
where public_id = 'p____bcolors';
update iam_scope
set description = 'updated description'
where public_id = 'p____bcolors';
select is(count(*), 2::bigint)
from iam_scope_hst
where public_id = 'p____bcolors';
select is(count(*), 1::bigint)
from iam_scope_hst
where public_id = 'p____bcolors'
and upper(valid_range) = now();
update iam_scope
set version = version + 1
where public_id = 'p____bcolors';
select is(count(*), 2::bigint, 'update to version column should not add a new history record')
from iam_scope_hst
where public_id = 'p____bcolors';
-- test a delete happening within the same transaction as an update
delete
from iam_scope
where public_id = 'p____bcolors';
select is(count(*), 2::bigint, 'delete of scope should not add a new history record')
from iam_scope_hst
where public_id = 'p____bcolors';
-- Doing an update and a delete in the same transaction produces a row in the
-- history table with a valid_range value of 'empty'.
select is(count(*), 1::bigint, 'an update and delete in the same transaction should result in an empty valid_range')
from iam_scope_hst
where public_id = 'p____bcolors'
and isempty(valid_range);
-- test on_insert trigger
insert into iam_scope
(parent_id, type, public_id, name)
values
('o_____colors', 'project', 'p_______test', 'Test Color');
select is(count(*), 1::bigint)
from iam_scope_hst
where public_id = 'p_______test';
select is(lower(valid_range), now())
from iam_scope_hst
where public_id = 'p_______test';
select is(upper(valid_range), null)
from iam_scope_hst
where public_id = 'p_______test';
select * from finish();
rollback;