style(sql): make migrations more greppable

This commit is contained in:
Michael Gaffney committed 2022-08-08 18:17:57 -04:00
1 parent 02dd28f587
commit ac6f14a37f
77 files changed
+553 -1458

No files matched your search

@@ -7,8 +7,7 @@ check(
comment on domain wt_public_id is
'Random ID generated with github.com/hashicorp/go-secure-stdlib/base62';
create domain wt_private_id as text
not null
create domain wt_private_id as text not null
check(
length(trim(value)) > 10
);
@@ -22,31 +21,25 @@ check(
comment on domain wt_scope_id is
'"global" or random ID generated with github.com/hashicorp/go-secure-stdlib/base62';
create domain wt_user_id as text
not null
create domain wt_user_id as text not null
check(
length(trim(value)) > 10 or value = 'u_anon' or value = 'u_auth' or value = 'u_recovery'
);
comment on domain wt_scope_id is
'"u_anon", "u_auth", or random ID generated with github.com/hashicorp/go-secure-stdlib/base62';
create domain wt_role_id as text
not null
create domain wt_role_id as text not null
check(
length(trim(value)) > 10
);
comment on domain wt_scope_id is
'Random ID generated with github.com/hashicorp/go-secure-stdlib/base62';
create domain wt_timestamp as
timestamp with time zone
default current_timestamp;
create domain wt_timestamp as timestamp with time zone default current_timestamp;
comment on domain wt_timestamp is
'Standard timestamp for all create_time and update_time columns';
create or replace function
update_time_column()
returns trigger
create or replace function update_time_column() returns trigger
as $$
begin
if row(new.*) is distinct from row(old.*) then
@@ -57,16 +50,11 @@ begin
end if;
end;
$$ language plpgsql;
comment on function
update_time_column()
is
comment on function update_time_column() is
'function used in before update triggers to properly set update_time columns';
-- Replaced in 21/01_default_time.up.sql
create or replace function
default_create_time()
returns trigger
create or replace function default_create_time() returns trigger
as $$
begin
if new.create_time is distinct from now() then
@@ -76,16 +64,10 @@ begin
return new;
end;
$$ language plpgsql;
comment on function
default_create_time()
is
comment on function default_create_time() is
'function used in before insert triggers to set create_time column to now';
create domain wt_version as bigint
default 1
not null
create domain wt_version as bigint default 1 not null
check(
value > 0
);
@@ -96,9 +78,7 @@ comment on domain wt_version is
-- is updated and should only be used in an update after trigger. This function
-- will overwrite any explicit updates to the version column. The function
-- accepts an optional parameter of 'private_id' for the tables primary key.
create or replace function
update_version_column()
returns trigger
create or replace function update_version_column() returns trigger
as $$
begin
if pg_trigger_depth() = 1 then
@@ -118,18 +98,13 @@ begin
return new;
end;
$$ language plpgsql;
comment on function
update_version_column()
is
comment on function update_version_column() is
'function used in after update triggers to properly set version columns';
-- immutable_columns() will make the column names immutable which are passed as
-- parameters when the trigger is created. It raises error code 23601 which is a
-- class 23 integrity constraint violation: immutable column
create or replace function
immutable_columns()
returns trigger
create or replace function immutable_columns() returns trigger
as $$
declare
col_name text;
@@ -150,10 +125,7 @@ begin
return new;
end;
$$ language plpgsql;
comment on function
immutable_columns()
is
comment on function immutable_columns() is
'function used in before update triggers to make columns immutable';
commit;
@@ -10,23 +10,14 @@ create table if not exists oplog_entry (
"data" bytea not null
);
create trigger
update_time_column
before
update on oplog_entry
create trigger update_time_column before update on oplog_entry
for each row execute procedure update_time_column();
create trigger
default_create_time_column
before
insert on oplog_entry
create trigger default_create_time_column before insert on oplog_entry
for each row execute procedure default_create_time();
-- oplog_entry is immutable.
create trigger
immutable_columns
before
update on oplog_entry
create trigger immutable_columns before update on oplog_entry
for each row execute procedure immutable_columns('id','update_time','create_time','version','aggregate_name', 'data');
create table if not exists oplog_ticket (
@@ -37,23 +28,14 @@ create table if not exists oplog_ticket (
"version" bigint not null
);
create trigger
update_time_column
before
update on oplog_ticket
create trigger update_time_column before update on oplog_ticket
for each row execute procedure update_time_column();
create trigger
default_create_time_column
before
insert on oplog_ticket
create trigger default_create_time_column before insert on oplog_ticket
for each row execute procedure default_create_time();
-- oplog_ticket: only allow updates to: version and update_time
create trigger
immutable_columns
before
update on oplog_ticket
create trigger immutable_columns before update on oplog_ticket
for each row execute procedure immutable_columns('id','create_time','name');
-- TODO (jimlambrt 7/2020) remove update_time
@@ -61,28 +43,22 @@ create table if not exists oplog_metadata (
id bigint generated always as identity primary key,
create_time wt_timestamp,
update_time wt_timestamp,
entry_id bigint not null references oplog_entry(id) on delete cascade on update cascade,
entry_id bigint not null
references oplog_entry(id)
on delete cascade
on update cascade,
"key" text not null,
value text null
);
create trigger
update_time_column
before
update on oplog_metadata
create trigger update_time_column before update on oplog_metadata
for each row execute procedure update_time_column();
create trigger
default_create_time_column
before
insert on oplog_metadata
create trigger default_create_time_column before insert on oplog_metadata
for each row execute procedure default_create_time();
-- oplog_metadata is immutable
create trigger
immutable_columns
before
update on oplog_metadata
create trigger immutable_columns before update on oplog_metadata
for each row execute procedure immutable_columns('id','create_time','update_time','entry_id','key','value');
create index if not exists idx_oplog_metatadata_key on oplog_metadata(key);
@@ -15,28 +15,17 @@ create table if not exists db_test_user (
version wt_version
);
create trigger
update_time_column
before
update on db_test_user
create trigger update_time_column before update on db_test_user
for each row execute procedure update_time_column();
-- define the immutable fields for db_test_user
create trigger
immutable_columns
before
update on db_test_user
create trigger immutable_columns before update on db_test_user
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on db_test_user
create trigger default_create_time_column before insert on db_test_user
for each row execute procedure default_create_time();
create trigger
update_version_column
after update on db_test_user
create trigger update_version_column after update on db_test_user
for each row execute procedure update_version_column();
create table if not exists db_test_car (
@@ -49,23 +38,14 @@ create table if not exists db_test_car (
mpg smallint
);
create trigger
update_time_column
before
update on db_test_car
create trigger update_time_column before update on db_test_car
for each row execute procedure update_time_column();
-- define the immutable fields for db_test_car
create trigger
immutable_columns
before
update on db_test_car
create trigger immutable_columns before update on db_test_car
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on db_test_car
create trigger default_create_time_column before insert on db_test_car
for each row execute procedure default_create_time();
create table if not exists db_test_rental (
@@ -74,30 +54,22 @@ create table if not exists db_test_rental (
update_time wt_timestamp,
public_id text not null unique,
name text unique,
user_id bigint not null references db_test_user(id),
car_id bigint not null references db_test_car(id)
user_id bigint not null
references db_test_user(id),
car_id bigint not null
references db_test_car(id)
);
create trigger
update_time_column
before
update on db_test_rental
create trigger update_time_column before update on db_test_rental
for each row execute procedure update_time_column();
-- define the immutable fields for db_test_rental
create trigger
immutable_columns
before
update on db_test_rental
create trigger immutable_columns before update on db_test_rental
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on db_test_rental
create trigger default_create_time_column before insert on db_test_rental
for each row execute procedure default_create_time();
create table if not exists db_test_scooter (
id bigint generated always as identity primary key,
create_time wt_timestamp,
@@ -108,24 +80,14 @@ create table if not exists db_test_scooter (
mpg smallint
);
create trigger
update_time_column
before
update on db_test_scooter
create trigger update_time_column before update on db_test_scooter
for each row execute procedure update_time_column();
-- define the immutable fields for db_test_scooter
create trigger
immutable_columns
before
update on db_test_scooter
create trigger immutable_columns before update on db_test_scooter
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on db_test_scooter
create trigger default_create_time_column before insert on db_test_scooter
for each row execute procedure default_create_time();
commit;
@@ -14,10 +14,7 @@ values
('project');
-- define the immutable fields of iam_scope_type_enm
create trigger
immutable_columns
before
update on iam_scope_type_enm
create trigger immutable_columns before update on iam_scope_type_enm
for each row execute procedure immutable_columns('string');
create table iam_scope (
@@ -44,7 +41,10 @@ create table iam_scope (
)
),
description text,
parent_id text references iam_scope(public_id) on delete cascade on update cascade,
parent_id text
references iam_scope(public_id)
on delete cascade
on update cascade,
-- version allows optimistic locking of the role when modifying the role
-- itself and when modifying dependent items like principal roles.
@@ -68,8 +68,7 @@ create table iam_scope_org (
references iam_scope(public_id)
on delete cascade
on update cascade,
parent_id wt_scope_id
not null
parent_id wt_scope_id not null
references iam_scope_global(scope_id)
on delete cascade
on update cascade,
@@ -78,21 +77,21 @@ create table iam_scope_org (
);
create table iam_scope_project (
scope_id wt_scope_id
not null
scope_id wt_scope_id not null
references iam_scope(public_id)
on delete cascade
on update cascade,
parent_id wt_public_id not null references iam_scope_org(scope_id) on delete cascade on update cascade,
parent_id wt_public_id not null
references iam_scope_org(scope_id)
on delete cascade
on update cascade,
name text,
unique(parent_id, name),
unique(scope_id),
primary key(scope_id, parent_id)
);
create or replace function
iam_sub_scopes_func()
returns trigger
create or replace function iam_sub_scopes_func() returns trigger
as $$
declare parent_type int;
begin
@@ -118,15 +117,10 @@ begin
end;
$$ language plpgsql;
create trigger
iam_scope_insert
after
insert on iam_scope
create trigger iam_scope_insert after insert on iam_scope
for each row execute procedure iam_sub_scopes_func();
create or replace function
disallow_global_scope_deletion()
returns trigger
create or replace function disallow_global_scope_deletion() returns trigger
as $$
begin
if old.type = 'global' then
@@ -136,63 +130,39 @@ begin
end;
$$ language plpgsql;
create trigger
iam_scope_disallow_global_deletion
before
delete on iam_scope
create trigger iam_scope_disallow_global_deletion before delete on iam_scope
for each row execute procedure disallow_global_scope_deletion();
create trigger
update_time_column
before update on iam_scope
create trigger update_time_column before update on iam_scope
for each row execute procedure update_time_column();
create trigger
default_create_time_column
before
insert on iam_scope
create trigger default_create_time_column before insert on iam_scope
for each row execute procedure default_create_time();
create trigger
update_version_column
after update on iam_scope
create trigger update_version_column after update on iam_scope
for each row execute procedure update_version_column();
-- define the immutable fields for iam_scope
create trigger
immutable_columns
before
update on iam_scope
create trigger immutable_columns before update on iam_scope
for each row execute procedure immutable_columns('public_id', 'create_time', 'type', 'parent_id');
-- define the immutable fields of iam_scope_global
create trigger
immutable_columns
before
update on iam_scope_global
create trigger immutable_columns before update on iam_scope_global
for each row execute procedure immutable_columns('scope_id');
-- define the immutable fields of iam_scope_org
create trigger
immutable_columns
before
update on iam_scope_org
create trigger immutable_columns before update on iam_scope_org
for each row execute procedure immutable_columns('scope_id');
-- define the immutable fields of iam_scope_project
create trigger
immutable_columns
before
update on iam_scope_project
create trigger immutable_columns before update on iam_scope_project
for each row execute procedure immutable_columns('scope_id');
-- iam_sub_names will allow us to enforce the different name constraints for
-- orgs and projects via a before update trigger on the iam_scope
-- table.
create or replace function
iam_sub_names()
returns trigger
create or replace function iam_sub_names() returns trigger
as $$
begin
if new.name != old.name then
@@ -214,25 +184,19 @@ begin
end;
$$ language plpgsql;
create trigger
iam_sub_names
before
update on iam_scope
create trigger iam_sub_names before update on iam_scope
for each row execute procedure iam_sub_names();
insert into iam_scope (public_id, name, type, description)
values ('global', 'global', 'global', 'Global Scope');
create table iam_user (
public_id wt_user_id
primary key,
public_id wt_user_id primary key,
create_time wt_timestamp,
update_time wt_timestamp,
name text,
description text,
scope_id wt_scope_id
not null
scope_id wt_scope_id not null
references iam_scope(public_id)
on delete cascade
on update cascade,
@@ -245,9 +209,7 @@ create table iam_user (
unique(scope_id, public_id)
);
create or replace function
user_scope_id_valid()
returns trigger
create or replace function user_scope_id_valid() returns trigger
as $$
begin
perform from iam_scope where public_id = new.scope_id and type in ('global', 'org');
@@ -258,9 +220,7 @@ begin
end;
$$ language plpgsql;
create or replace function
grant_scope_id_valid()
returns trigger
create or replace function grant_scope_id_valid() returns trigger
as $$
declare parent_scope_id text;
declare role_scope_type text;
@@ -300,9 +260,7 @@ begin
end;
$$ language plpgsql;
create or replace function
disallow_iam_predefined_user_deletion()
returns trigger
create or replace function disallow_iam_predefined_user_deletion() returns trigger
as $$
begin
if old.public_id = 'u_anon' then
@@ -318,32 +276,19 @@ begin
end;
$$ language plpgsql;
create trigger
update_version_column
after update on iam_user
create trigger update_version_column after update on iam_user
for each row execute procedure update_version_column();
create trigger
ensure_user_scope_id_valid
before
insert or update on iam_user
create trigger ensure_user_scope_id_valid before insert or update on iam_user
for each row execute procedure user_scope_id_valid();
create trigger
update_time_column
before update on iam_user
create trigger update_time_column before update on iam_user
for each row execute procedure update_time_column();
create trigger
default_create_time_column
before
insert on iam_user
create trigger default_create_time_column before insert on iam_user
for each row execute procedure default_create_time();
create trigger
iam_user_disallow_predefined_user_deletion
before
delete on iam_user
create trigger iam_user_disallow_predefined_user_deletion before delete on iam_user
for each row execute procedure disallow_iam_predefined_user_deletion();
-- TODO: Do we want to disallow changing the name or description?
@@ -357,10 +302,7 @@ insert into iam_user (public_id, name, description, scope_id)
values ('u_recovery', 'recovery', 'The recovery user is used for any request that was performed with the recovery KMS workflow', 'global');
-- define the immutable fields for iam_user
create trigger
immutable_columns
before
update on iam_user
create trigger immutable_columns before update on iam_user
for each row execute procedure immutable_columns('public_id', 'create_time', 'scope_id');
create table iam_role (
@@ -369,13 +311,11 @@ create table iam_role (
update_time wt_timestamp,
name text,
description text,
scope_id wt_scope_id
not null
scope_id wt_scope_id not null
references iam_scope(public_id)
on delete cascade
on update cascade,
grant_scope_id wt_scope_id
not null
grant_scope_id wt_scope_id not null
references iam_scope(public_id)
on delete cascade
on update cascade,
@@ -407,59 +347,37 @@ create table iam_role (
);
-- iam_immutable_role_grant() ensures that grants assigned to roles are immutable.
create or replace function
iam_immutable_role_grant()
returns trigger
create or replace function iam_immutable_role_grant() returns trigger
as $$
begin
raise exception 'role grants are immutable';
end;
$$ language plpgsql;
create trigger immutable_role_grant
before
update on iam_role_grant
create trigger immutable_role_grant before update on iam_role_grant
for each row execute procedure iam_immutable_role_grant();
create trigger
default_create_time_column
before
insert on iam_role_grant
create trigger default_create_time_column before insert on iam_role_grant
for each row execute procedure default_create_time();
create trigger
update_version_column
after update on iam_role
create trigger update_version_column after update on iam_role
for each row execute procedure update_version_column();
create trigger
update_time_column
before update on iam_role
create trigger update_time_column before update on iam_role
for each row execute procedure update_time_column();
create trigger
default_create_time_column
before
insert on iam_role
create trigger default_create_time_column before insert on iam_role
for each row execute procedure default_create_time();
create trigger
ensure_grant_scope_id_valid
before
insert or update on iam_role
create trigger ensure_grant_scope_id_valid before insert or update on iam_role
for each row execute procedure grant_scope_id_valid();
-- define the immutable fields for iam_role (started trigger name with "a_" so
-- it will run first)
create trigger
a_immutable_columns
before
update on iam_role
create trigger a_immutable_columns before update on iam_role
for each row execute procedure immutable_columns('public_id', 'create_time', 'scope_id');
create or replace function
recovery_user_not_allowed()
returns trigger
create or replace function recovery_user_not_allowed() returns trigger
as $$
declare
new_value text;
@@ -473,14 +391,12 @@ end;
$$ language plpgsql;
create table iam_group (
public_id wt_public_id
primary key,
public_id wt_public_id primary key,
create_time wt_timestamp,
update_time wt_timestamp,
name text,
description text,
scope_id wt_scope_id
not null
scope_id wt_scope_id not null
references iam_scope(public_id)
on delete cascade
on update cascade,
@@ -493,27 +409,17 @@ create table iam_group (
unique(scope_id, public_id)
);
create trigger
update_version_column
after update on iam_group
create trigger update_version_column after update on iam_group
for each row execute procedure update_version_column();
create trigger
update_time_column
before update on iam_group
create trigger update_time_column before update on iam_group
for each row execute procedure update_time_column();
create trigger
default_create_time_column
before
insert on iam_group
create trigger default_create_time_column before insert on iam_group
for each row execute procedure default_create_time();
-- define the immutable fields for iam_group
create trigger
immutable_columns
before
update on iam_group
create trigger immutable_columns before update on iam_group
for each row execute procedure immutable_columns('public_id', 'create_time', 'scope_id');
-- iam_user_role contains roles that have been assigned to users. Users can be
@@ -600,77 +506,58 @@ where
g.public_id = gr.principal_id;
-- iam_immutable_role_principal() ensures that roles assigned to principals are immutable.
create or replace function
iam_immutable_role_principal()
returns trigger
create or replace function iam_immutable_role_principal() returns trigger
as $$
begin
raise exception 'roles are immutable';
end;
$$ language plpgsql;
create trigger immutable_role_principal
before
update on iam_user_role
create trigger immutable_role_principal before update on iam_user_role
for each row execute procedure iam_immutable_role_principal();
create trigger
recovery_user_not_allowed_user_role
before
insert on iam_user_role
create trigger recovery_user_not_allowed_user_role before insert on iam_user_role
for each row execute procedure recovery_user_not_allowed('principal_id');
create trigger
default_create_time_column
before
insert on iam_user_role
create trigger default_create_time_column before insert on iam_user_role
for each row execute procedure default_create_time();
create trigger immutable_role_principal
before
update on iam_group_role
create trigger immutable_role_principal before update on iam_group_role
for each row execute procedure iam_immutable_role_principal();
create trigger
default_create_time_column
before
insert on iam_group_role
create trigger default_create_time_column before insert on iam_group_role
for each row execute procedure default_create_time();
-- iam_group_member_user is an association table that represents groups with
-- associated users.
create table iam_group_member_user (
create_time wt_timestamp,
group_id wt_public_id references iam_group(public_id) on delete cascade on update cascade,
member_id wt_user_id references iam_user(public_id) on delete cascade on update cascade,
group_id wt_public_id
references iam_group(public_id)
on delete cascade
on update cascade,
member_id wt_user_id
references iam_user(public_id)
on delete cascade
on update cascade,
primary key (group_id, member_id)
);
-- iam_immutable_group_member() ensures that group members are immutable.
create or replace function
iam_immutable_group_member()
returns trigger
create or replace function iam_immutable_group_member() returns trigger
as $$
begin
raise exception 'group members are immutable';
end;
$$ language plpgsql;
create trigger
default_create_time_column
before
insert on iam_group_member_user
create trigger default_create_time_column before insert on iam_group_member_user
for each row execute procedure default_create_time();
create trigger iam_immutable_group_member
before
update on iam_group_member_user
create trigger iam_immutable_group_member before update on iam_group_member_user
for each row execute procedure iam_immutable_group_member();
create trigger
recovery_user_not_allowed_group_member
before
insert on iam_group_member_user
create trigger recovery_user_not_allowed_group_member before insert on iam_group_member_user
for each row execute procedure recovery_user_not_allowed('member_id');
-- get_scoped_member_id is used by the iam_group_member view as a convient
@@ -49,10 +49,8 @@ begin;
-- base table for auth methods
create table auth_method (
public_id wt_public_id
primary key,
scope_id wt_scope_id
not null
public_id wt_public_id primary key,
scope_id wt_scope_id not null
references iam_scope(public_id)
on delete cascade
on update cascade,
@@ -66,12 +64,9 @@ begin;
-- base table for auth accounts
create table auth_account (
public_id wt_public_id
primary key,
auth_method_id wt_public_id
not null,
scope_id wt_scope_id
not null,
public_id wt_public_id primary key,
auth_method_id wt_public_id not null,
scope_id wt_scope_id not null,
iam_user_id wt_public_id,
-- The auth_account can only be assigned to an iam_user in the same scope as
-- the auth_method the auth_account belongs to. A separate column for
@@ -99,9 +94,7 @@ begin;
unique(scope_id, auth_method_id, public_id)
);
create or replace function
insert_auth_method_subtype()
returns trigger
create or replace function insert_auth_method_subtype() returns trigger
as $$
begin
insert into auth_method
@@ -112,9 +105,7 @@ begin;
end;
$$ language plpgsql;
create or replace function
insert_auth_account_subtype()
returns trigger
create or replace function insert_auth_account_subtype() returns trigger
as $$
begin
@@ -139,9 +130,7 @@ begin;
-- and sets new.iam_user_scope_id to that value. If the new.iam_user_id column
-- is null and the old.iam_user_id column is not null,
-- update_iam_user_auth_account sets the iam_user_scope_id to null.
create or replace function
update_iam_user_auth_account()
returns trigger
create or replace function update_iam_user_auth_account() returns trigger
as $$
begin
if new.iam_user_id is distinct from old.iam_user_id then
@@ -157,10 +146,7 @@ begin;
end;
$$ language plpgsql;
create trigger update_iam_user_auth_account
before update of iam_user_id on auth_account
for each row
create trigger update_iam_user_auth_account before update of iam_user_id on auth_account for each row
execute procedure update_iam_user_auth_account();
commit;
@@ -17,35 +17,22 @@ create table server (
primary key (private_id, type)
);
create trigger
immutable_columns
before
update on server
create trigger immutable_columns before update on server
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on server
create trigger default_create_time_column before insert on server
for each row execute procedure default_create_time();
-- UPDATED in 18/01_nonce
create table recovery_nonces (
nonce text
primary key,
nonce text primary key,
create_time wt_timestamp
);
create trigger
default_create_time_column
before
insert on recovery_nonces
create trigger default_create_time_column before insert on recovery_nonces
for each row execute procedure default_create_time();
create trigger
immutable_columns
before
update on recovery_nonces
create trigger immutable_columns before update on recovery_nonces
for each row execute procedure immutable_columns('nonce', 'create_time');
commit;
@@ -45,9 +45,7 @@ begin;
inner join auth_account as aa
on at.auth_account_id = aa.public_id;
create or replace function
update_last_access_time()
returns trigger
create or replace function update_last_access_time() returns trigger
as $$
begin
if new.approximate_last_access_time is distinct from old.approximate_last_access_time then
@@ -56,15 +54,10 @@ begin;
return new;
end;
$$ language plpgsql;
comment on function
update_last_access_time()
is
comment on function update_last_access_time() is
'function used in before update triggers to properly set last_access_time columns';
create or replace function
immutable_auth_token_columns()
returns trigger
create or replace function immutable_auth_token_columns() returns trigger
as $$
begin
if new.auth_account_id is distinct from old.auth_account_id then
@@ -76,17 +69,12 @@ begin;
return new;
end;
$$ language plpgsql;
comment on function
immutable_auth_token_columns()
is
comment on function immutable_auth_token_columns() is
'function used in before update triggers to make specific columns immutable';
-- This allows the expiration to be calculated on the server side and still hold the constraint that
-- the expiration time cant be before the creation time of the auth token.
create or replace function
expire_time_not_older_than_token()
returns trigger
create or replace function expire_time_not_older_than_token() returns trigger
as $$
begin
if new.expiration_time < new.create_time then
@@ -95,42 +83,25 @@ begin;
return new;
end;
$$ language plpgsql;
comment on function
expire_time_not_older_than_token()
is
comment on function expire_time_not_older_than_token() is
'function used in before insert triggers to ensure expiration time is not older than create time';
create trigger
default_create_time_column
before insert on auth_token
create trigger default_create_time_column before insert on auth_token
for each row execute procedure default_create_time();
create trigger
expire_time_not_older_than_token
before insert on auth_token
create trigger expire_time_not_older_than_token before insert on auth_token
for each row execute procedure expire_time_not_older_than_token();
create trigger
update_time_column
before update on auth_token
create trigger update_time_column before update on auth_token
for each row execute procedure update_time_column();
create trigger
update_last_access_time
before update on auth_token
create trigger update_last_access_time before update on auth_token
for each row execute procedure update_last_access_time();
create trigger
immutable_auth_token_columns
before update on auth_token
create trigger immutable_auth_token_columns before update on auth_token
for each row execute procedure immutable_auth_token_columns();
create trigger
immutable_columns
before
update on auth_token
create trigger immutable_columns before update on auth_token
for each row execute procedure immutable_columns('public_id', 'auth_account_id', 'create_time');
commit;
@@ -58,21 +58,15 @@ begin;
*/
create table auth_password_method (
public_id wt_public_id
primary key,
scope_id wt_scope_id
not null,
public_id wt_public_id primary key,
scope_id wt_scope_id not null,
password_conf_id wt_private_id, -- FK to auth_password_conf added below
name text,
description text,
create_time wt_timestamp,
update_time wt_timestamp,
min_login_name_length int
not null
default 3,
min_password_length int
not null
default 8,
min_login_name_length int not null default 3,
min_password_length int not null default 8,
version wt_version,
foreign key (scope_id, public_id)
references auth_method (scope_id, public_id)
@@ -82,21 +76,15 @@ begin;
unique(scope_id, public_id)
);
create trigger
update_version_column
after update on auth_password_method
create trigger update_version_column after update on auth_password_method
for each row execute procedure update_version_column();
create trigger
insert_auth_method_subtype
before insert on auth_password_method
create trigger insert_auth_method_subtype before insert on auth_password_method
for each row execute procedure insert_auth_method_subtype();
create table auth_password_account (
public_id wt_public_id
primary key,
auth_method_id wt_public_id
not null,
public_id wt_public_id primary key,
auth_method_id wt_public_id not null,
-- NOTE(mgaffney): The scope_id type is not wt_scope_id because the domain
-- check is executed before the insert trigger which retrieves the scope_id
-- causing an insert to fail.
@@ -107,9 +95,9 @@ begin;
update_time wt_timestamp,
login_name text not null
constraint login_name_must_be_lowercase
check(lower(trim(login_name)) = login_name)
check(lower(trim(login_name)) = login_name)
constraint login_name_must_not_be_empty
check(length(trim(login_name)) > 0),
check(length(trim(login_name)) > 0),
version wt_version,
foreign key (scope_id, auth_method_id)
references auth_password_method (scope_id, public_id)
@@ -124,21 +112,15 @@ begin;
unique(auth_method_id, public_id)
);
create trigger
update_version_column
after update on auth_password_account
create trigger update_version_column after update on auth_password_account
for each row execute procedure update_version_column();
create trigger
insert_auth_account_subtype
before insert on auth_password_account
create trigger insert_auth_account_subtype before insert on auth_password_account
for each row execute procedure insert_auth_account_subtype();
create table auth_password_conf (
private_id wt_private_id
primary key,
password_method_id wt_public_id
not null
private_id wt_private_id primary key,
password_method_id wt_public_id not null
references auth_password_method (public_id)
on delete cascade
on update cascade
@@ -156,9 +138,7 @@ begin;
-- insert_auth_password_conf_subtype() is a trigger function for subtypes of
-- auth_password_conf
create or replace function
insert_auth_password_conf_subtype()
returns trigger
create or replace function insert_auth_password_conf_subtype() returns trigger
as $$
begin
insert into auth_password_conf
@@ -170,14 +150,10 @@ begin;
$$ language plpgsql;
create table auth_password_credential (
private_id wt_private_id
primary key,
password_account_id wt_public_id
not null
unique,
private_id wt_private_id primary key,
password_account_id wt_public_id not null unique,
password_conf_id wt_private_id,
password_method_id wt_public_id
not null,
password_method_id wt_public_id not null,
foreign key (password_method_id, password_conf_id)
references auth_password_conf (password_method_id, private_id)
on delete cascade
@@ -191,9 +167,7 @@ begin;
-- insert_auth_password_credential_subtype() is a trigger function for
-- subtypes of auth_password_credential
create or replace function
insert_auth_password_credential_subtype()
returns trigger
create or replace function insert_auth_password_credential_subtype() returns trigger
as $$
begin
@@ -212,9 +186,7 @@ begin;
-- update_auth_password_credential_subtype() is an after update trigger
-- function for subtypes of auth_password_credential
create or replace function
update_auth_password_credential_subtype()
returns trigger
create or replace function update_auth_password_credential_subtype() returns trigger
as $$
begin
/*
@@ -232,9 +204,7 @@ begin;
-- delete_auth_password_credential_subtype() is an after delete trigger
-- function for subtypes of auth_password_credential
create or replace function
delete_auth_password_credential_subtype()
returns trigger
create or replace function delete_auth_password_credential_subtype() returns trigger
as $$
begin
delete
@@ -248,40 +218,22 @@ begin;
-- triggers for time columns
--
create trigger
update_time_column
before
update on auth_password_method
create trigger update_time_column before update on auth_password_method
for each row execute procedure update_time_column();
create trigger
immutable_columns
before
update on auth_password_method
create trigger immutable_columns before update on auth_password_method
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on auth_password_method
create trigger default_create_time_column before insert on auth_password_method
for each row execute procedure default_create_time();
create trigger
update_time_column
before
update on auth_password_account
create trigger update_time_column before update on auth_password_account
for each row execute procedure update_time_column();
create trigger
immutable_columns
before
update on auth_password_account
create trigger immutable_columns before update on auth_password_account
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on auth_password_account
create trigger default_create_time_column before insert on auth_password_account
for each row execute procedure default_create_time();
-- The tickets for oplog are the subtypes not the base types because no updates
@@ -35,24 +35,17 @@ begin;
deferrable initially deferred
);
create or replace function
read_only_auth_password_argon2_conf()
returns trigger
create or replace function read_only_auth_password_argon2_conf() returns trigger
as $$
begin
raise exception 'auth_password_argon2_conf is read-only';
end;
$$ language plpgsql;
create trigger
read_only_auth_password_argon2_conf
before
update on auth_password_argon2_conf
create trigger read_only_auth_password_argon2_conf before update on auth_password_argon2_conf
for each row execute procedure read_only_auth_password_argon2_conf();
create trigger
insert_auth_password_conf_subtype
before insert on auth_password_argon2_conf
create trigger insert_auth_password_conf_subtype before insert on auth_password_argon2_conf
for each row execute procedure insert_auth_password_conf_subtype();
create table auth_password_argon2_cred (
@@ -89,53 +82,32 @@ begin;
deferrable initially deferred
);
create trigger
insert_auth_password_credential_subtype
before insert on auth_password_argon2_cred
create trigger insert_auth_password_credential_subtype before insert on auth_password_argon2_cred
for each row execute procedure insert_auth_password_credential_subtype();
create trigger
update_auth_password_credential_subtype
after update on auth_password_argon2_cred
create trigger update_auth_password_credential_subtype after update on auth_password_argon2_cred
for each row execute procedure update_auth_password_credential_subtype();
create trigger
delete_auth_password_credential_subtype
after delete on auth_password_argon2_cred
create trigger delete_auth_password_credential_subtype after delete on auth_password_argon2_cred
for each row execute procedure delete_auth_password_credential_subtype();
--
-- triggers for time columns
--
create trigger
immutable_columns
before
update on auth_password_argon2_conf
create trigger immutable_columns before update on auth_password_argon2_conf
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on auth_password_argon2_conf
create trigger default_create_time_column before insert on auth_password_argon2_conf
for each row execute procedure default_create_time();
create trigger
update_time_column
before
update on auth_password_argon2_cred
create trigger update_time_column before update on auth_password_argon2_cred
for each row execute procedure update_time_column();
create trigger
immutable_columns
before
update on auth_password_argon2_cred
create trigger immutable_columns before update on auth_password_argon2_cred
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on auth_password_argon2_cred
create trigger default_create_time_column before insert on auth_password_argon2_cred
for each row execute procedure default_create_time();
-- The tickets for oplog are the subtypes not the base types because no updates
@@ -38,10 +38,8 @@ begin;
-- host_catalog
create table host_catalog (
public_id wt_public_id
primary key,
scope_id wt_scope_id
not null
public_id wt_public_id primary key,
scope_id wt_scope_id not null
references iam_scope (public_id)
on delete cascade
on update cascade,
@@ -57,8 +55,7 @@ begin;
-- insert_host_catalog_subtype() is a before insert trigger
-- function for subtypes of host_catalog
create or replace function insert_host_catalog_subtype()
returns trigger
create or replace function insert_host_catalog_subtype() returns trigger
as $$
begin
insert into host_catalog
@@ -71,8 +68,7 @@ begin;
-- delete_host_catalog_subtype() is an after delete trigger
-- function for subtypes of host_catalog
create or replace function delete_host_catalog_subtype()
returns trigger
create or replace function delete_host_catalog_subtype() returns trigger
as $$
begin
delete from host_catalog
@@ -96,8 +92,7 @@ begin;
-- insert_host_subtype() is a before insert trigger
-- function for subtypes of host
create or replace function insert_host_subtype()
returns trigger
create or replace function insert_host_subtype() returns trigger
as $$
begin
insert into host
@@ -110,8 +105,7 @@ begin;
-- delete_host_subtype() is an after delete trigger
-- function for subtypes of host
create or replace function delete_host_subtype()
returns trigger
create or replace function delete_host_subtype() returns trigger
as $$
begin
delete from host
@@ -135,8 +129,7 @@ begin;
-- insert_host_set_subtype() is a before insert trigger
-- function for subtypes of host_set
create or replace function insert_host_set_subtype()
returns trigger
create or replace function insert_host_set_subtype() returns trigger
as $$
begin
insert into host_set
@@ -149,8 +142,7 @@ begin;
-- delete_host_set_subtype() is an after delete trigger
-- function for subtypes of host_set
create or replace function delete_host_set_subtype()
returns trigger
create or replace function delete_host_set_subtype() returns trigger
as $$
begin
delete from host_set
@@ -37,10 +37,8 @@ begin;
*/
create table static_host_catalog (
public_id wt_public_id
primary key,
scope_id wt_scope_id
not null
public_id wt_public_id primary key,
scope_id wt_scope_id not null
references iam_scope (public_id)
on delete cascade
on update cascade,
@@ -176,8 +174,7 @@ begin;
create trigger immutable_columns before update on static_host_set_member
for each row execute procedure immutable_columns('host_id', 'set_id', 'catalog_id');
create or replace function insert_static_host_set_member()
returns trigger
create or replace function insert_static_host_set_member() returns trigger
as $$
begin
select static_host_set.catalog_id
@@ -3,9 +3,7 @@ begin;
-- kms_version_column() will increment the version column whenever row data
-- is inserted and should only be used in an before insert trigger. This
-- function will overwrite any explicit values to the version column.
create or replace function
kms_version_column()
returns trigger
create or replace function kms_version_column() returns trigger
as $$
declare
_key_id text;
@@ -20,10 +18,7 @@ begin
return new;
end;
$$ language plpgsql;
comment on function
kms_version_column()
is
comment on function kms_version_column() is
'function used in before insert triggers to properly set version columns for kms_* tables with a version column';
commit;
commit;
@@ -48,16 +48,10 @@ create table kms_root_key (
);
-- define the immutable fields for kms_root_key (all of them)
create trigger
immutable_columns
before
update on kms_root_key
create trigger immutable_columns before update on kms_root_key
for each row execute procedure immutable_columns('private_id', 'scope_id', 'create_time');
create trigger
default_create_time_column
before
insert on kms_root_key
create trigger default_create_time_column before insert on kms_root_key
for each row execute procedure default_create_time();
create table kms_root_key_version (
@@ -73,22 +67,13 @@ create table kms_root_key_version (
);
-- define the immutable fields for kms_root_key_version (all of them)
create trigger
immutable_columns
before
update on kms_root_key_version
create trigger immutable_columns before update on kms_root_key_version
for each row execute procedure immutable_columns('private_id', 'root_key_id', 'version', 'key', 'create_time');
create trigger
default_create_time_column
before
insert on kms_root_key_version
create trigger default_create_time_column before insert on kms_root_key_version
for each row execute procedure default_create_time();
create trigger
kms_version_column
before insert on kms_root_key_version
create trigger kms_version_column before insert on kms_root_key_version
for each row execute procedure kms_version_column('root_key_id');
create table kms_database_key (
@@ -101,16 +86,10 @@ create table kms_database_key (
);
-- define the immutable fields for kms_database_key (all of them)
create trigger
immutable_columns
before
update on kms_database_key
create trigger immutable_columns before update on kms_database_key
for each row execute procedure immutable_columns('private_id', 'root_key_id', 'create_time');
create trigger
default_create_time_column
before
insert on kms_database_key
create trigger default_create_time_column before insert on kms_database_key
for each row execute procedure default_create_time();
create table kms_database_key_version (
@@ -130,21 +109,13 @@ create table kms_database_key_version (
);
-- define the immutable fields for kms_database_key_version (all of them)
create trigger
immutable_columns
before
update on kms_database_key_version
create trigger immutable_columns before update on kms_database_key_version
for each row execute procedure immutable_columns('private_id', 'database_key_id', 'root_key_version_id', 'version', 'key', 'create_time');
create trigger
default_create_time_column
before
insert on kms_database_key_version
create trigger default_create_time_column before insert on kms_database_key_version
for each row execute procedure default_create_time();
create trigger
kms_version_column
before insert on kms_database_key_version
create trigger kms_version_column before insert on kms_database_key_version
for each row execute procedure kms_version_column('database_key_id');
create table kms_oplog_key (
@@ -157,16 +128,10 @@ create table kms_oplog_key (
);
-- define the immutable fields for kms_oplog_key (all of them)
create trigger
immutable_columns
before
update on kms_oplog_key
create trigger immutable_columns before update on kms_oplog_key
for each row execute procedure immutable_columns('private_id', 'root_key_id', 'create_time');
create trigger
default_create_time_column
before
insert on kms_oplog_key
create trigger default_create_time_column before insert on kms_oplog_key
for each row execute procedure default_create_time();
create table kms_oplog_key_version (
@@ -186,21 +151,13 @@ create table kms_oplog_key_version (
);
-- define the immutable fields for kms_oplog_key_version (all of them)
create trigger
immutable_columns
before
update on kms_oplog_key_version
create trigger immutable_columns before update on kms_oplog_key_version
for each row execute procedure immutable_columns('private_id', 'oplog_key_id', 'root_key_version_id', 'version', 'key', 'create_time');
create trigger
default_create_time_column
before
insert on kms_oplog_key_version
create trigger default_create_time_column before insert on kms_oplog_key_version
for each row execute procedure default_create_time();
create trigger
kms_version_column
before insert on kms_oplog_key_version
create trigger kms_version_column before insert on kms_oplog_key_version
for each row execute procedure kms_version_column('oplog_key_id');
create table kms_session_key (
@@ -213,16 +170,10 @@ create table kms_session_key (
);
-- define the immutable fields for kms_oplog_key (all of them)
create trigger
immutable_columns
before
update on kms_session_key
create trigger immutable_columns before update on kms_session_key
for each row execute procedure immutable_columns('private_id', 'root_key_id', 'create_time');
create trigger
default_create_time_column
before
insert on kms_session_key
create trigger default_create_time_column before insert on kms_session_key
for each row execute procedure default_create_time();
create table kms_session_key_version (
@@ -243,21 +194,13 @@ create table kms_session_key_version (
-- define the immutable fields for kms_session_key_version (all of them)
create trigger
immutable_columns
before
update on kms_session_key_version
create trigger immutable_columns before update on kms_session_key_version
for each row execute procedure immutable_columns('private_id', 'session_key_id', 'root_key_version_id', 'version', 'key', 'create_time');
create trigger
default_create_time_column
before
insert on kms_session_key_version
create trigger default_create_time_column before insert on kms_session_key_version
for each row execute procedure default_create_time();
create trigger
kms_version_column
before insert on kms_session_key_version
create trigger kms_version_column before insert on kms_session_key_version
for each row execute procedure kms_version_column('session_key_id');
create table kms_token_key (
@@ -270,16 +213,10 @@ create table kms_token_key (
);
-- define the immutable fields for kms_token_key (all of them)
create trigger
immutable_columns
before
update on kms_token_key
create trigger immutable_columns before update on kms_token_key
for each row execute procedure immutable_columns('private_id', 'root_key_id', 'create_time');
create trigger
default_create_time_column
before
insert on kms_token_key
create trigger default_create_time_column before insert on kms_token_key
for each row execute procedure default_create_time();
create table kms_token_key_version (
@@ -299,21 +236,13 @@ create table kms_token_key_version (
);
-- define the immutable fields for kms_token_key_version (all of them)
create trigger
immutable_columns
before
update on kms_token_key_version
create trigger immutable_columns before update on kms_token_key_version
for each row execute procedure immutable_columns('private_id', 'token_key_id', 'root_key_version_id', 'version', 'key', 'create_time');
create trigger
default_create_time_column
before
insert on kms_token_key_version
create trigger default_create_time_column before insert on kms_token_key_version
for each row execute procedure default_create_time();
create trigger
kms_version_column
before insert on kms_token_key_version
create trigger kms_version_column before insert on kms_token_key_version
for each row execute procedure kms_version_column('token_key_id');
insert into oplog_ticket
@@ -322,4 +251,4 @@ before insert on kms_token_key_version
('kms_root_key', 1),
('kms_root_key_version', 1);
commit;
commit;
@@ -1,11 +1,8 @@
begin;
-- insert_target_subtype() is a before insert trigger
-- function for subtypes of target
create or replace function
insert_target_subtype()
returns trigger
create or replace function insert_target_subtype() returns trigger
as $$
begin
insert into target
@@ -18,8 +15,7 @@ $$ language plpgsql;
-- delete_target_subtype() is an after delete trigger
-- function for subtypes of host
create or replace function delete_target_subtype()
returns trigger
create or replace function delete_target_subtype() returns trigger
as $$
begin
delete from target
@@ -30,9 +26,7 @@ end;
$$ language plpgsql;
-- target_scope_valid() is a before insert trigger function for target
create or replace function
target_scope_valid()
returns trigger
create or replace function target_scope_valid() returns trigger
as $$
declare scope_type text;
begin
@@ -46,9 +40,7 @@ end;
$$ language plpgsql;
-- target_host_set_scope_valid() is a before insert trigger function for target_host_set
create or replace function
target_host_set_scope_valid()
returns trigger
create or replace function target_host_set_scope_valid() returns trigger
as $$
begin
perform from
@@ -67,4 +59,4 @@ return new;
end;
$$ language plpgsql;
commit;
commit;
@@ -44,21 +44,13 @@ create table target (
create_time wt_timestamp
);
create trigger
immutable_columns
before
update on target
create trigger immutable_columns before update on target
for each row execute procedure immutable_columns('public_id', 'scope_id', 'create_time');
create trigger
default_create_time_column
before
insert on target
create trigger default_create_time_column before insert on target
for each row execute procedure default_create_time();
create trigger
target_scope_valid
before insert on target
create trigger target_scope_valid before insert on target
for each row execute procedure target_scope_valid();
@@ -75,16 +67,10 @@ create table target_host_set(
create_time wt_timestamp
);
create trigger
immutable_columns
before
update on target_host_set
create trigger immutable_columns before update on target_host_set
for each row execute procedure immutable_columns('target_id', 'host_set_id', 'create_time');
create trigger
target_host_set_scope_valid
before
insert on target_host_set
create trigger target_host_set_scope_valid before insert on target_host_set
for each row execute procedure target_host_set_scope_valid();
create table target_tcp (
@@ -115,42 +101,26 @@ create table target_tcp (
unique(scope_id, name) -- name must be unique within a scope
);
create trigger
insert_target_subtype
before insert on target_tcp
create trigger insert_target_subtype before insert on target_tcp
for each row execute procedure insert_target_subtype();
create trigger
delete_target_subtype
after delete on target_tcp
create trigger delete_target_subtype after delete on target_tcp
for each row execute procedure delete_target_subtype();
-- define the immutable fields for target
create trigger
immutable_columns
before
update on target_tcp
create trigger immutable_columns before update on target_tcp
for each row execute procedure immutable_columns('public_id', 'scope_id', 'create_time');
create trigger
update_version_column
after update on target_tcp
create trigger update_version_column after update on target_tcp
for each row execute procedure update_version_column();
create trigger
update_time_column
before update on target_tcp
create trigger update_time_column before update on target_tcp
for each row execute procedure update_time_column();
create trigger
default_create_time_column
before
insert on target_tcp
create trigger default_create_time_column before insert on target_tcp
for each row execute procedure default_create_time();
create trigger
target_scope_valid
before insert on target_tcp
create trigger target_scope_valid before insert on target_tcp
for each row execute procedure target_scope_valid();
@@ -162,33 +162,21 @@ begin;
);
-- Replaced in 100 to add worker_filter
create trigger
immutable_columns
before
update on session
create trigger immutable_columns before update on session
for each row execute procedure immutable_columns('public_id', 'certificate', 'expiration_time', 'connection_limit', 'create_time', 'endpoint');
-- session table has some cascades of FK to null, so we need to be careful
-- which columns trigger an update of the version column
create trigger
update_version_column
after update of version, termination_reason, key_id, tofu_token, server_id, server_type on session
create trigger update_version_column after update of version, termination_reason, key_id, tofu_token, server_id, server_type on session
for each row execute procedure update_version_column();
create trigger
update_time_column
before update on session
create trigger update_time_column before update on session
for each row execute procedure update_time_column();
create trigger
default_create_time_column
before
insert on session
create trigger default_create_time_column before insert on session
for each row execute procedure default_create_time();
create or replace function
insert_session()
returns trigger
create or replace function insert_session() returns trigger
as $$
begin
case
@@ -212,14 +200,10 @@ begin;
end;
$$ language plpgsql;
create trigger
insert_session
before insert on session
create trigger insert_session before insert on session
for each row execute procedure insert_session();
create or replace function
insert_new_session_state()
returns trigger
create or replace function insert_new_session_state() returns trigger
as $$
begin
insert into session_state (session_id, state)
@@ -229,18 +213,14 @@ begin;
end;
$$ language plpgsql;
create trigger
insert_new_session_state
after insert on session
create trigger insert_new_session_state after insert on session
for each row execute procedure insert_new_session_state();
-- update_connection_state_on_closed_reason() is used in an update insert trigger on the
-- session_connection table. it will valiadate that all the session's
-- connections are closed, and then insert a state of "closed" in
-- session_connection_state for the closed session connection.
create or replace function
update_session_state_on_termination_reason()
returns trigger
create or replace function update_session_state_on_termination_reason() returns trigger
as $$
begin
if new.termination_reason is not null then
@@ -283,18 +263,13 @@ begin;
end;
$$ language plpgsql;
create trigger
update_session_state_on_termination_reason
after update of termination_reason on session
create trigger update_session_state_on_termination_reason after update of termination_reason on session
for each row execute procedure update_session_state_on_termination_reason();
-- Updated in 29/01_cancel_session_null_fkey
-- cancel_session will insert a cancel state for the session, if there's isn't
-- a canceled state already. It's used by cancel_session_with_null_fk.
create or replace function
cancel_session(in sessionId text) returns void
create or replace function cancel_session(in sessionId text) returns void
as $$
declare
rows_affected numeric;
@@ -324,9 +299,7 @@ begin;
-- cancel_session_with_null_fk is intended to be a before update trigger that
-- sets the session's state to cancel if a FK is set to null.
create or replace function
cancel_session_with_null_fk()
returns trigger
create or replace function cancel_session_with_null_fk() returns trigger
as $$
begin
case
@@ -347,9 +320,7 @@ begin;
end;
$$ language plpgsql;
create trigger
cancel_session_with_null_fk
before update of user_id, host_id, target_id, host_set_id, auth_token_id, scope_id on session
create trigger cancel_session_with_null_fk before update of user_id, host_id, target_id, host_set_id, auth_token_id, scope_id on session
for each row execute procedure cancel_session_with_null_fk();
create table session_state_enm (
@@ -420,17 +391,11 @@ begin;
references session_state (session_id, end_time)
);
create trigger
immutable_columns
before
update on session_state
create trigger immutable_columns before update on session_state
for each row execute procedure immutable_columns('session_id', 'state', 'start_time', 'previous_end_time');
-- Replaced in 28/02_prior_session_trigger.up.sql
create or replace function
insert_session_state()
returns trigger
create or replace function insert_session_state() returns trigger
as $$
begin
@@ -454,7 +419,6 @@ begin;
end;
$$ language plpgsql;
create trigger insert_session_state before insert on session_state
for each row execute procedure insert_session_state();
@@ -133,34 +133,22 @@ begin;
update_time wt_timestamp
);
create trigger
immutable_columns
before
update on session_connection
create trigger immutable_columns before update on session_connection
for each row execute procedure immutable_columns('public_id', 'session_id', 'create_time');
create trigger
update_version_column
after update on session_connection
create trigger update_version_column after update on session_connection
for each row execute procedure update_version_column();
create trigger
update_time_column
before update on session_connection
create trigger update_time_column before update on session_connection
for each row execute procedure update_time_column();
create trigger
default_create_time_column
before
insert on session_connection
create trigger default_create_time_column before insert on session_connection
for each row execute procedure default_create_time();
-- insert_new_connection_state() is used in an after insert trigger on the
-- session_connection table. it will insert a state of "authorized" in
-- session_connection_state for the new session connection.
create or replace function
insert_new_connection_state()
returns trigger
create or replace function insert_new_connection_state() returns trigger
as $$
begin
insert into session_connection_state (connection_id, state)
@@ -170,18 +158,14 @@ begin;
end;
$$ language plpgsql;
create trigger
insert_new_connection_state
after insert on session_connection
create trigger insert_new_connection_state after insert on session_connection
for each row execute procedure insert_new_connection_state();
-- Replaced in 27/01_disable_terminate_session.up.sql
-- update_connection_state_on_closed_reason() is used in an update trigger on the
-- session_connection table. it will insert a state of "closed" in
-- session_connection_state for the closed session connection.
create or replace function
update_connection_state_on_closed_reason()
returns trigger
create or replace function update_connection_state_on_closed_reason() returns trigger
as $$
begin
if new.closed_reason is not null then
@@ -205,9 +189,7 @@ begin;
end;
$$ language plpgsql;
create trigger
update_connection_state_on_closed_reason
after update of closed_reason on session_connection
create trigger update_connection_state_on_closed_reason after update of closed_reason on session_connection
for each row execute procedure update_connection_state_on_closed_reason();
create table session_connection_state_enm (
@@ -224,7 +206,6 @@ begin;
('connected'),
('closed');
create table session_connection_state (
connection_id wt_public_id not null
references session_connection (public_id)
@@ -250,15 +231,10 @@ begin;
references session_connection_state (connection_id, end_time)
);
create trigger
immutable_columns
before
update on session_connection_state
create trigger immutable_columns before update on session_connection_state
for each row execute procedure immutable_columns('connection_id', 'state', 'start_time', 'previous_end_time');
create or replace function
insert_session_connection_state()
returns trigger
create or replace function insert_session_connection_state() returns trigger
as $$
begin
@@ -295,9 +271,7 @@ begin;
--
-- Note: this function should align closely with the domain function
-- TerminateCompletedSessions
create or replace function
terminate_session_if_possible(terminate_session_id text)
returns void
create or replace function terminate_session_if_possible(terminate_session_id text) returns void
as $$
begin
-- is terminate_session_id in a canceling state
@@ -377,5 +351,4 @@ create or replace function
end;
$$ language plpgsql;
commit;
@@ -20,8 +20,7 @@ begin;
-- wh_dim_id generates and returns a random ID which should be considered as
-- universally unique.
create or replace function wh_dim_id()
returns text
create or replace function wh_dim_id() returns text
as $$
select encode(digest(gen_random_bytes(16), 'sha256'), 'base64');
$$ language sql;
@@ -54,29 +53,25 @@ begin;
'Text fields in dimension tables are always not null and always not empty strings';
-- wh_date_id returns the wh_date_dimension id for ts.
create or replace function wh_date_id(ts wh_timestamp)
returns integer
create or replace function wh_date_id(ts wh_timestamp) returns integer
as $$
select to_char(ts, 'YYYYMMDD')::integer;
$$ language sql;
-- wh_time_id returns the wh_time_of_day_dimension id for ts.
create or replace function wh_time_id(ts wh_timestamp)
returns integer
create or replace function wh_time_id(ts wh_timestamp) returns integer
as $$
select to_char(ts, 'SSSS')::integer;
$$ language sql;
-- wh_date_id returns the wh_date_dimension id for current_timestamp.
create or replace function wh_current_date_id()
returns integer
create or replace function wh_current_date_id() returns integer
as $$
select wh_date_id(current_timestamp);
$$ language sql;
-- wh_time_id returns the wh_time_of_day_dimension id for current_timestamp.
create or replace function wh_current_time_id()
returns integer
create or replace function wh_current_time_id() returns integer
as $$
select wh_time_id(current_timestamp);
$$ language sql;
@@ -29,8 +29,7 @@ begin;
'None'
);
insert
into wh_date_dimension
insert into wh_date_dimension
select to_char(t.day, 'YYYYMMDD')::integer as id,
t.day::date as date,
'Q' || to_char(t.day, 'Q') as calendar_quarter,
@@ -77,8 +76,7 @@ begin;
'None', 'None', 'None'
);
insert
into wh_time_of_day_dimension
insert into wh_time_of_day_dimension
select to_char(t.second, 'SSSS')::integer as id,
t.second::time as time_no_zone,
t.second::time as time_at_utc,
@@ -8,8 +8,7 @@ begin;
-- wh_host_dimension to match the current values in the operational tables and
-- the new id is returned. If the values do not differ, the current id is
-- returned.
create or replace function wh_upsert_host(p_host_id wt_public_id, p_host_set_id wt_public_id, p_target_id wt_public_id)
returns wh_dim_id
create or replace function wh_upsert_host(p_host_id wt_public_id, p_host_set_id wt_public_id, p_target_id wt_public_id) returns wh_dim_id
as $$
declare
src whx_host_dimension_target%rowtype;
@@ -78,8 +77,7 @@ begin;
-- wh_user_dimension differ, a new row is inserted in the wh_user_dimension to
-- match the current values in the operational tables and the new id is
-- returned. If the values do not differ, the current id is returned.
create or replace function wh_upsert_user(p_user_id wt_user_id, p_auth_token_id wt_public_id)
returns wh_dim_id
create or replace function wh_upsert_user(p_user_id wt_user_id, p_auth_token_id wt_public_id) returns wh_dim_id
as $$
declare
src whx_user_dimension_target%rowtype;
@@ -3,8 +3,7 @@ begin;
-- wh_rollup_connections calculates the aggregate values from
-- wh_session_connection_accumulating_fact for p_session_id and updates
-- wh_session_accumulating_fact for p_session_id with those values.
create or replace function wh_rollup_connections(p_session_id wt_public_id)
returns void
create or replace function wh_rollup_connections(p_session_id wt_public_id) returns void
as $$
declare
session_row wh_session_accumulating_fact%rowtype;
@@ -38,8 +37,7 @@ begin;
-- wh_insert_session also calls the wh_upsert_host and wh_upsert_user
-- functions which can result in new rows in wh_host_dimension and
-- wh_user_dimension respectively.
create or replace function wh_insert_session()
returns trigger
create or replace function wh_insert_session() returns trigger
as $$
declare
new_row wh_session_accumulating_fact%rowtype;
@@ -73,10 +71,8 @@ begin;
end;
$$ language plpgsql;
create trigger wh_insert_session
after insert on session
for each row
execute function wh_insert_session();
create trigger wh_insert_session after insert on session
for each row execute function wh_insert_session();
--
-- Session Connection triggers
@@ -87,8 +83,7 @@ begin;
-- wh_session_connection_accumulating_fact for the new session connection.
-- wh_insert_session_connection also calls wh_rollup_connections which can
-- result in updates to wh_session_accumulating_fact.
create or replace function wh_insert_session_connection()
returns trigger
create or replace function wh_insert_session_connection() returns trigger
as $$
declare
new_row wh_session_connection_accumulating_fact%rowtype;
@@ -141,10 +136,8 @@ begin;
end;
$$ language plpgsql;
create trigger wh_insert_session_connection
after insert on session_connection
for each row
execute function wh_insert_session_connection();
create trigger wh_insert_session_connection after insert on session_connection
for each row execute function wh_insert_session_connection();
-- Updated in 27/01_disable_terminate_session.up.sql
-- wh_update_session_connection returns an after update trigger for the
@@ -152,8 +145,7 @@ begin;
-- wh_session_connection_accumulating_fact for the session connection.
-- wh_update_session_connection also calls wh_rollup_connections which can
-- result in updates to wh_session_accumulating_fact.
create or replace function wh_update_session_connection()
returns trigger
create or replace function wh_update_session_connection() returns trigger
as $$
declare
updated_row wh_session_connection_accumulating_fact%rowtype;
@@ -172,10 +164,8 @@ begin;
end;
$$ language plpgsql;
create trigger wh_update_session_connection
after update on session_connection
for each row
execute function wh_update_session_connection();
create trigger wh_update_session_connection after update on session_connection
for each row execute function wh_update_session_connection();
--
-- Session State trigger
@@ -183,8 +173,7 @@ begin;
-- wh_insert_session_state returns an after insert trigger for the
-- session_state table which updates wh_session_accumulating_fact.
create or replace function wh_insert_session_state()
returns trigger
create or replace function wh_insert_session_state() returns trigger
as $$
declare
date_col text;
@@ -218,10 +207,8 @@ begin;
end;
$$ language plpgsql;
create trigger wh_insert_session_state
after insert on session_state
for each row
execute function wh_insert_session_state();
create trigger wh_insert_session_state after insert on session_state
for each row execute function wh_insert_session_state();
--
-- Session Connection State trigger
@@ -230,8 +217,7 @@ begin;
-- wh_insert_session_connection_state returns an after insert trigger for the
-- session_connection_state table which updates
-- wh_session_connection_accumulating_fact.
create or replace function wh_insert_session_connection_state()
returns trigger
create or replace function wh_insert_session_connection_state() returns trigger
as $$
declare
date_col text;
@@ -266,9 +252,7 @@ begin;
end;
$$ language plpgsql;
create trigger wh_insert_session_connection_state
after insert on session_connection_state
for each row
execute function wh_insert_session_connection_state();
create trigger wh_insert_session_connection_state after insert on session_connection_state
for each row execute function wh_insert_session_connection_state();
commit;
@@ -44,8 +44,7 @@ alter table session
-- Replace the immutable columns trigger from 50 to add worker_filter
drop trigger immutable_columns on session;
create trigger immutable_columns
before update on session
create trigger immutable_columns before update on session
for each row execute procedure immutable_columns('public_id', 'certificate', 'expiration_time', 'connection_limit', 'create_time', 'endpoint', 'worker_filter');
-- Replaces the view created in 41 to include worker_filter
@@ -124,4 +123,4 @@ create table server_tag (
primary key(server_id, key, value)
);
commit;
commit;
@@ -11,17 +11,11 @@ create table kms_oidc_key (
);
-- define the immutable fields for kms_oidc_key (all of them)
create trigger
immutable_columns
before
update on kms_oidc_key
create trigger immutable_columns before update on kms_oidc_key
for each row execute procedure immutable_columns('private_id', 'root_key_id', 'create_time');
-- define the value of kms_oidc_key's create_time
create trigger
default_create_time_column
before
insert on kms_oidc_key
create trigger default_create_time_column before insert on kms_oidc_key
for each row execute procedure default_create_time();
-- kms_oidc_key_version entries are version of DEK keys used to encrypt oidc
@@ -43,23 +37,15 @@ create table kms_oidc_key_version (
);
-- define the immutable fields for kms_oidc_key_version (all of them)
create trigger
immutable_columns
before
update on kms_oidc_key_version
create trigger immutable_columns before update on kms_oidc_key_version
for each row execute procedure immutable_columns('private_id', 'oidc_key_id', 'root_key_version_id', 'version', 'key', 'create_time');
-- define the value of kms_oidc_key_version's create_time
create trigger
default_create_time_column
before
insert on kms_oidc_key_version
create trigger default_create_time_column before insert on kms_oidc_key_version
for each row execute procedure default_create_time();
-- define the value of kms_oidc_key_version's version column
create trigger
kms_version_column
before insert on kms_oidc_key_version
create trigger kms_version_column before insert on kms_oidc_key_version
for each row execute procedure kms_version_column('oidc_key_id');
commit;
@@ -1,7 +1,6 @@
begin;
create function wt_is_sentinel(string text)
returns bool
create function wt_is_sentinel(string text) returns bool
as $$
select length(trim(leading u&'\fffe ' from string)) > 0 AND starts_with(string, u&'\fffe');
$$ language sql
@@ -20,8 +19,7 @@ begin;
comment on domain wt_sentinel is
'A non-empty string with a Unicode prefix of U+FFFE to indicate it is a sentinel value';
create function wt_to_sentinel(string text)
returns text
create function wt_to_sentinel(string text) returns text
as $$
select concat(u&'\fffe', trim(ltrim(string, u&'\fffe ')));
$$ language sql
@@ -24,8 +24,7 @@ begin;
-- insert_credential_store_subtype() is a before insert trigger
-- function for subtypes of credential_store
create function insert_credential_store_subtype()
returns trigger
create function insert_credential_store_subtype() returns trigger
as $$
begin
insert into credential_store
@@ -38,8 +37,7 @@ begin;
-- delete_credential_store_subtype() is an after delete trigger
-- function for subtypes of credential_store
create function delete_credential_store_subtype()
returns trigger
create function delete_credential_store_subtype() returns trigger
as $$
begin
delete from credential_store
@@ -48,7 +46,6 @@ begin;
end;
$$ language plpgsql;
-- credential_library
create table credential_library (
public_id wt_public_id primary key,
@@ -69,8 +66,7 @@ begin;
-- insert_credential_library_subtype() is a before insert trigger
-- function for subtypes of credential_library
create function insert_credential_library_subtype()
returns trigger
create function insert_credential_library_subtype() returns trigger
as $$
begin
insert into credential_library
@@ -83,8 +79,7 @@ begin;
-- delete_credential_library_subtype() is an after delete trigger
-- function for subtypes of credential_library
create function delete_credential_library_subtype()
returns trigger
create function delete_credential_library_subtype() returns trigger
as $$
begin
delete from credential_library
@@ -105,8 +100,7 @@ begin;
-- insert_credential_subtype() is a before insert trigger
-- function for subtypes of credential
create function insert_credential_subtype()
returns trigger
create function insert_credential_subtype() returns trigger
as $$
begin
insert into credential
@@ -119,8 +113,7 @@ begin;
-- delete_credential_subtype() is an after delete trigger
-- function for subtypes of credential
create function delete_credential_subtype()
returns trigger
create function delete_credential_subtype() returns trigger
as $$
begin
delete from credential
@@ -159,8 +152,7 @@ begin;
-- insert_credential_static_subtype() is a before insert trigger
-- function for subtypes of credential_static
create function insert_credential_static_subtype()
returns trigger
create function insert_credential_static_subtype() returns trigger
as $$
begin
insert into credential_static
@@ -173,8 +165,7 @@ begin;
-- delete_credential_static_subtype() is an after delete trigger
-- function for subtypes of credential_static
create function delete_credential_static_subtype()
returns trigger
create function delete_credential_static_subtype() returns trigger
as $$
begin
delete from credential_static
@@ -213,8 +204,7 @@ begin;
-- insert_credential_dynamic_subtype() is a before insert trigger
-- function for subtypes of credential_dynamic
create function insert_credential_dynamic_subtype()
returns trigger
create function insert_credential_dynamic_subtype() returns trigger
as $$
begin
insert into credential_dynamic
@@ -227,8 +217,7 @@ begin;
-- delete_credential_dynamic_subtype() is an after delete trigger
-- function for subtypes of credential_dynamic
create function delete_credential_dynamic_subtype()
returns trigger
create function delete_credential_dynamic_subtype() returns trigger
as $$
begin
delete from credential_dynamic
@@ -64,8 +64,7 @@ begin;
-- and an update contains a value for delete_time different from the current
-- value, this trigger will raise an error with error code 23602 which is a
-- class 23 integrity constraint violation: set_once_violation.
create function before_soft_delete_credential_vault_store()
returns trigger
create function before_soft_delete_credential_vault_store() returns trigger
as $$
begin
if new.delete_time is distinct from old.delete_time then
@@ -92,8 +91,7 @@ begin;
-- When a credential store is soft deleted, this trigger:
-- * marks any active Vault tokens owned by the credential store for revocation
-- * deletes any credential library owned by the credential store
create function after_soft_delete_credential_vault_store()
returns trigger
create function after_soft_delete_credential_vault_store() returns trigger
as $$
begin
if new.delete_time is distinct from old.delete_time then
@@ -198,8 +196,7 @@ begin;
-- insert_credential_vault_token() is a before insert trigger
-- function for credential_vault_token that changes the status of the current
-- token to 'maintaining'
create function insert_credential_vault_token()
returns trigger
create function insert_credential_vault_token() returns trigger
as $$
begin
update credential_vault_token
@@ -327,8 +324,7 @@ begin;
-- before_insert_credential_vault_library is a before insert trigger for
-- the credential_vault_library table that prevents a library from being
-- inserted for a soft deleted credential store.
create function before_insert_credential_vault_library()
returns trigger
create function before_insert_credential_vault_library() returns trigger
as $$
declare
delete_time_val timestamp with time zone;
@@ -427,8 +423,7 @@ begin;
-- update_credential_status_column() is a before update trigger function for
-- credential_vault_credential that changes the status of the credential to 'revoke' if
-- the session_id is updated to null
create function update_credential_status_column()
returns trigger
create function update_credential_status_column() returns trigger
as $$
begin
if new.session_id is distinct from old.session_id then
@@ -446,8 +441,7 @@ begin;
-- not_null_columns() will make the column names not null which are passed as
-- parameters when the trigger is created. It raises error code 23502 which is a
-- class 23 integrity constraint violation: not null column
create function not_null_columns()
returns trigger
create function not_null_columns() returns trigger
as $$
declare
col_name text;
@@ -466,7 +460,6 @@ begin;
return new;
end;
$$ language plpgsql;
comment on function not_null_columns() is
'function used in before insert triggers to make columns not null on insert, but are allowed be updated to null';
@@ -38,8 +38,7 @@ begin;
-- revoke_credentials revokes any active credentials for a session when the
-- session enters the canceling or terminated states.
create function revoke_credentials()
returns trigger
create function revoke_credentials() returns trigger
as $$
begin
if new.state in ('canceling', 'terminated') then
@@ -51,6 +50,7 @@ begin;
return new;
end;
$$ language plpgsql;
create trigger revoke_credentials after insert on session_state
for each row execute procedure revoke_credentials();
@@ -10,8 +10,7 @@ alter domain wt_sentinel
drop function wt_is_sentinel;
create function wt_is_sentinel(string text)
returns bool
create function wt_is_sentinel(string text) returns bool
as $$
select starts_with(string, u&'\fffe') and starts_with(reverse(string), u&'\ffff');
$$ language sql
@@ -27,7 +26,6 @@ alter domain wt_sentinel
or
length(trim(trailing u&'\ffff' from trim(leading u&'\fffe ' from value))) > 0
);
comment on domain wt_sentinel is
'A non-empty string with a Unicode prefix of U+FFFE and suffix of U+FFFF to indicate it is a sentinel value';
@@ -1,7 +1,6 @@
begin;
create function wt_sub_seconds(sec integer, ts timestamp with time zone)
returns timestamp with time zone
create function wt_sub_seconds(sec integer, ts timestamp with time zone) returns timestamp with time zone
as $$
select ts - sec * '1 second'::interval;
$$ language sql
@@ -10,8 +9,7 @@ begin;
comment on function wt_add_seconds is
'wt_sub_seconds returns ts - sec.';
create function wt_sub_seconds_from_now(sec integer)
returns timestamp with time zone
create function wt_sub_seconds_from_now(sec integer) returns timestamp with time zone
as $$
select wt_sub_seconds(sec, current_timestamp);
$$ language sql
@@ -135,8 +135,7 @@ begin;
;
drop function wh_upsert_user;
create function wh_upsert_user(p_user_id wt_user_id, p_auth_token_id wt_public_id)
returns wh_dim_id
create function wh_upsert_user(p_user_id wt_user_id, p_auth_token_id wt_public_id) returns wh_dim_id
as $$
declare
src whx_user_dimension_target%rowtype;
@@ -95,8 +95,7 @@ begin;
-- replaces function from 14/01_wh_user_dimension_oidc.up.sql
drop function wh_upsert_user;
create function wh_upsert_user(p_user_id wt_user_id, p_auth_token_id wt_public_id)
returns wh_dim_key
create function wh_upsert_user(p_user_id wt_user_id, p_auth_token_id wt_public_id) returns wh_dim_key
as $$
declare
src whx_user_dimension_target%rowtype;
@@ -193,8 +192,7 @@ begin;
-- replaces function from 0/66_wh_session_dimensions.up.sql
drop function wh_upsert_host;
create function wh_upsert_host(p_host_id wt_public_id, p_host_set_id wt_public_id, p_target_id wt_public_id)
returns wh_dim_key
create function wh_upsert_host(p_host_id wt_public_id, p_host_set_id wt_public_id, p_target_id wt_public_id) returns wh_dim_key
as $$
declare
src whx_host_dimension_target%rowtype;
@@ -259,8 +257,8 @@ begin;
-- replaces function from 0/69_wh_session_facts.up.sql
drop trigger wh_insert_session on session;
drop function wh_insert_session;
create function wh_insert_session()
returns trigger
create function wh_insert_session() returns trigger
as $$
declare
new_row wh_session_accumulating_fact%rowtype;
@@ -293,16 +291,15 @@ begin;
return null;
end;
$$ language plpgsql;
create trigger wh_insert_session
after insert on session
for each row
execute function wh_insert_session();
create trigger wh_insert_session after insert on session
for each row execute function wh_insert_session();
-- replaces function from 0/69_wh_session_facts.up.sql
drop trigger wh_insert_session_connection on session_connection;
drop function wh_insert_session_connection;
create function wh_insert_session_connection()
returns trigger
create function wh_insert_session_connection() returns trigger
as $$
declare
new_row wh_session_connection_accumulating_fact%rowtype;
@@ -355,16 +352,14 @@ begin;
end;
$$ language plpgsql;
create trigger wh_insert_session_connection
after insert on session_connection
for each row
execute function wh_insert_session_connection();
create trigger wh_insert_session_connection after insert on session_connection
for each row execute function wh_insert_session_connection();
-- replaces function from 0/69_wh_session_facts.up.sql
drop trigger wh_insert_session_state on session_state;
drop function wh_insert_session_state;
create function wh_insert_session_state()
returns trigger
create function wh_insert_session_state() returns trigger
as $$
declare
date_col text;
@@ -398,16 +393,14 @@ begin;
end;
$$ language plpgsql;
create trigger wh_insert_session_state
after insert on session_state
for each row
execute function wh_insert_session_state();
create trigger wh_insert_session_state after insert on session_state
for each row execute function wh_insert_session_state();
-- replaces function from 0/69_wh_session_facts.up.sql
drop trigger wh_insert_session_connection_state on session_connection_state;
drop function wh_insert_session_connection_state;
create function wh_insert_session_connection_state()
returns trigger
create function wh_insert_session_connection_state() returns trigger
as $$
declare
date_col text;
@@ -442,8 +435,7 @@ begin;
end;
$$ language plpgsql;
create trigger wh_insert_session_connection_state
after insert on session_connection_state
for each row
execute function wh_insert_session_connection_state();
create trigger wh_insert_session_connection_state after insert on session_connection_state
for each row execute function wh_insert_session_connection_state();
commit;
@@ -93,8 +93,7 @@ begin;
-- replaces function from 15/01_wh_rename_key_columns.up.sql
-- replaced in 26/03_wh_network_address_dimensions.up.sql
drop function wh_upsert_host;
create function wh_upsert_host(p_host_id wt_public_id, p_host_set_id wt_public_id, p_target_id wt_public_id)
returns wh_dim_key
create function wh_upsert_host(p_host_id wt_public_id, p_host_set_id wt_public_id, p_target_id wt_public_id) returns wh_dim_key
as $$
declare
src whx_host_dimension_target%rowtype;
@@ -1,10 +1,10 @@
begin;
-- wh_upsert_credential_dimension compares the current vaules in the wh_credential_dimension
-- with the current values in the operational tables for the given parameters. IF the values
-- between operational tables and the wh_credential_dimension differ, a new row is inserted in
-- the wh_credential_dimension to match the current values in the operational tables.
create function wh_upsert_credential_dimension(p_session_id wt_public_id, p_library_id wt_public_id, p_credential_purpose wh_dim_text)
returns wh_dim_key
create function wh_upsert_credential_dimension(p_session_id wt_public_id, p_library_id wt_public_id, p_credential_purpose wh_dim_text) returns wh_dim_key
as $$
declare
src whx_credential_dimension_target%rowtype;
@@ -76,24 +76,21 @@ begin;
$$ language plpgsql;
-- Run wh_upsert_credential_dimension for session_credential_dynamic row that is inserted.
create function wh_insert_session_credential_dynamic()
returns trigger
create function wh_insert_session_credential_dynamic() returns trigger
as $$
begin
perform wh_upsert_credential_dimension(new.session_id, new.library_id, new.credential_purpose);
return null;
end;
$$ language plpgsql;
create trigger wh_insert_session_credential_dynamic
after insert on session_credential_dynamic
for each row
execute function wh_insert_session_credential_dynamic();
create trigger wh_insert_session_credential_dynamic after insert on session_credential_dynamic
for each row execute function wh_insert_session_credential_dynamic();
-- wh_upsert_credentail_group determines if a new wh_credential_group needs to be
-- created due to changes to the coresponding wh_credential_dimensions. It then
-- updates the wh_session_accumulating_fact to associate it with the correct wh_credential_group.
create function wh_upsert_credentail_group()
returns trigger
create function wh_upsert_credentail_group() returns trigger
as $$
declare
cg_key wh_dim_key;
@@ -162,9 +159,8 @@ begin;
-- the wh_insert_session_credential_dynamic trigger ran for each row and updated
-- the wh_credential_dimensions. Then this statement trigger can run to update the
-- bridge tables and wh_session_accumulating_fact.
create trigger wh_insert_stmt_session_credential_dynamic
after insert on session_credential_dynamic
create trigger wh_insert_stmt_session_credential_dynamic after insert on session_credential_dynamic
referencing new table as new_table
for each statement
execute function wh_upsert_credentail_group();
for each statement execute function wh_upsert_credentail_group();
commit;
@@ -1,18 +1,19 @@
begin;
alter table wh_session_accumulating_fact
add column credential_group_key wh_dim_key not null
default 'Unknown'
add column credential_group_key wh_dim_key not null default 'Unknown'
references wh_credential_group (key)
on delete restrict
on update cascade;
alter table wh_session_accumulating_fact
alter column credential_group_key drop default;
-- replaces function from 15/01_wh_rename_key_columns.up.sql
drop trigger wh_insert_session on session;
drop function wh_insert_session;
create function wh_insert_session()
returns trigger
create function wh_insert_session() returns trigger
as $$
declare
new_row wh_session_accumulating_fact%rowtype;
@@ -47,8 +48,8 @@ begin;
return null;
end;
$$ language plpgsql;
create trigger wh_insert_session
after insert on session
for each row
execute function wh_insert_session();
create trigger wh_insert_session after insert on session
for each row execute function wh_insert_session();
commit;
@@ -1,10 +1,11 @@
begin;
alter table wh_session_connection_accumulating_fact
add column credential_group_key wh_dim_key not null
default 'Unknown'
add column credential_group_key wh_dim_key not null default 'Unknown'
references wh_credential_group (key)
on delete restrict
on update cascade;
alter table wh_session_connection_accumulating_fact
alter column credential_group_key drop default;
@@ -12,8 +13,8 @@ begin;
-- replaces function from 15/01_wh_rename_key_columns.up.sql
drop trigger wh_insert_session_connection on session_connection;
drop function wh_insert_session_connection;
create function wh_insert_session_connection()
returns trigger
create function wh_insert_session_connection() returns trigger
as $$
declare
new_row wh_session_connection_accumulating_fact%rowtype;
@@ -68,9 +69,8 @@ begin;
end;
$$ language plpgsql;
create trigger wh_insert_session_connection
after insert on session_connection
for each row
execute function wh_insert_session_connection();
create trigger wh_insert_session_connection after insert on session_connection
for each row execute function wh_insert_session_connection();
commit;
@@ -3,14 +3,10 @@ begin;
-- server table inserts/updates historically included setting the update_time
-- column to now(). Since we're now using the "standard" db package to do this,
-- we need to add triggers to set the update_time for every insert/update.
create trigger
update_time_column
before update on server
create trigger update_time_column before update on server
for each row execute procedure update_time_column();
create trigger
insert_time_column
before insert on server
create trigger insert_time_column before insert on server
for each row execute procedure update_time_column();
commit;
commit;
@@ -30,8 +30,7 @@ alter table recovery_nonces rename to nonce;
-- Add purpose field
alter table nonce
add column purpose text not null
default 'recovery'
add column purpose text not null default 'recovery'
constraint nonce_type_enm_fkey
references nonce_type_enm(name)
on update cascade
@@ -42,16 +41,10 @@ alter table nonce
-- Recreate triggers
create trigger
default_create_time_column
before
insert on nonce
create trigger default_create_time_column before insert on nonce
for each row execute procedure default_create_time();
create trigger
immutable_columns
before
update on nonce
create trigger immutable_columns before update on nonce
for each row execute procedure immutable_columns('nonce', 'create_time', 'purpose');
commit;
commit;
@@ -7,25 +7,15 @@ create table if not exists db_test_accessory (
description text not null
);
create trigger
update_time_column
before
update on db_test_accessory
create trigger update_time_column before update on db_test_accessory
for each row execute procedure update_time_column();
create trigger
immutable_columns
before
update on db_test_accessory
create trigger immutable_columns before update on db_test_accessory
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on db_test_accessory
create trigger default_create_time_column before insert on db_test_accessory
for each row execute procedure default_create_time();
create table if not exists db_test_scooter_accessory (
accessory_id bigint references db_test_accessory(accessory_id),
scooter_id bigint references db_test_scooter(id),
@@ -35,22 +25,13 @@ create table if not exists db_test_scooter_accessory (
primary key(accessory_id, scooter_id)
);
create trigger
update_time_column
before
update on db_test_scooter_accessory
create trigger update_time_column before update on db_test_scooter_accessory
for each row execute procedure update_time_column();
create trigger
immutable_columns
before
update on db_test_scooter_accessory
create trigger immutable_columns before update on db_test_scooter_accessory
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on db_test_scooter_accessory
create trigger default_create_time_column before insert on db_test_scooter_accessory
for each row execute procedure default_create_time();
commit;
commit;
@@ -11,17 +11,11 @@ create table kms_audit_key (
);
-- define the immutable fields for kms_audit_key (all of them)
create trigger
immutable_columns
before
update on kms_audit_key
create trigger immutable_columns before update on kms_audit_key
for each row execute procedure immutable_columns('private_id', 'root_key_id', 'create_time');
-- define the value of kms_audit_key's create_time
create trigger
default_create_time_column
before
insert on kms_audit_key
create trigger default_create_time_column before insert on kms_audit_key
for each row execute procedure default_create_time();
-- kms_audit_key_version entries are version of DEK keys used crypto operations on audit entries.
@@ -44,23 +38,15 @@ create table kms_audit_key_version (
);
-- define the immutable fields for kms_audit_key_version (all of them)
create trigger
immutable_columns
before
update on kms_audit_key_version
create trigger immutable_columns before update on kms_audit_key_version
for each row execute procedure immutable_columns('private_id', 'audit_key_id', 'root_key_version_id', 'version', 'key', 'create_time');
-- define the value of kms_audit_key_version's create_time
create trigger
default_create_time_column
before
insert on kms_audit_key_version
create trigger default_create_time_column before insert on kms_audit_key_version
for each row execute procedure default_create_time();
-- define the value of kms_audit_key_version's version column
create trigger
kms_version_column
before insert on kms_audit_key_version
create trigger kms_version_column before insert on kms_audit_key_version
for each row execute procedure kms_version_column('audit_key_id');
commit;
@@ -18,10 +18,7 @@ insert into auth_oidc_method_state_enm(name)
('active-public');
-- define the immutable fields for auth_oidc_method_state_enm (all of them)
create trigger
immutable_columns
before
update on auth_oidc_method_state_enm
create trigger immutable_columns before update on auth_oidc_method_state_enm
for each row execute procedure immutable_columns('name');
@@ -61,10 +58,7 @@ insert into auth_oidc_signing_alg_enm (name)
;
-- define the immutable fields for auth_oidc_signing_alg (all of them)
create trigger
immutable_columns
before
update on auth_oidc_signing_alg_enm
create trigger immutable_columns before update on auth_oidc_signing_alg_enm
for each row execute procedure immutable_columns('name');
commit;
@@ -3,10 +3,8 @@ begin;
-- auth_oidc_method entries are the current oidc auth methods configured for
-- existing scopes.
create table auth_oidc_method (
public_id wt_public_id
primary key,
scope_id wt_scope_id
not null,
public_id wt_public_id primary key,
scope_id wt_scope_id not null,
name wt_name,
description wt_description,
create_time wt_timestamp,
@@ -116,10 +114,8 @@ comment on table auth_oidc_certificate is
-- auth_oidc_account entries are subtypes of auth_account and represent an
-- oidc account.
create table auth_oidc_account (
public_id wt_public_id
primary key,
auth_method_id wt_public_id
not null,
public_id wt_public_id primary key,
auth_method_id wt_public_id not null,
-- NOTE(mgaffney): The scope_id type is not wt_scope_id because the domain
-- check is executed before the insert trigger which retrieves the scope_id
-- causing an insert to fail.
@@ -166,40 +162,25 @@ comment on table auth_oidc_method is
'auth_oidc_account entries are subtypes of auth_account and represent an oidc account.';
-- auth_oidc_method column triggers
create trigger
insert_auth_method_subtype
before insert on auth_oidc_method
create trigger insert_auth_method_subtype before insert on auth_oidc_method
for each row execute procedure insert_auth_method_subtype();
create trigger
update_time_column
before
update on auth_oidc_method
create trigger update_time_column before update on auth_oidc_method
for each row execute procedure update_time_column();
create trigger
immutable_columns
before
update on auth_oidc_method
create trigger immutable_columns before update on auth_oidc_method
for each row execute procedure immutable_columns('public_id', 'scope_id', 'create_time');
create trigger
default_create_time_column
before
insert on auth_oidc_method
create trigger default_create_time_column before insert on auth_oidc_method
for each row execute procedure default_create_time();
create trigger
update_version_column
after update on auth_oidc_method
create trigger update_version_column after update on auth_oidc_method
for each row execute procedure update_version_column();
-- active_auth_oidc_method_must_be_complete() defines a function to be used in
-- a "before update" trigger for auth_oidc_method entries. Its intent: prevent
-- incomplete oidc methods from transitioning out of the "inactive" state.
create or replace function
active_auth_oidc_method_must_be_complete()
returns trigger
create or replace function active_auth_oidc_method_must_be_complete() returns trigger
as $$
begin
-- validate signing alg
@@ -258,10 +239,7 @@ $$ language plpgsql;
comment on function active_auth_oidc_method_must_be_complete() is
'active_auth_oidc_method_must_be_complete() will raise an error if the oidc auth method is not complete';
create trigger
update_active_auth_oidc_method_must_be_complete
before
update on auth_oidc_method
create trigger update_active_auth_oidc_method_must_be_complete before update on auth_oidc_method
for each row execute procedure active_auth_oidc_method_must_be_complete();
-- new_auth_oidc_method_must_be_inactive() defines a function to be used in
@@ -270,9 +248,7 @@ update on auth_oidc_method
-- you can insert an entry that's anything but incomplete, since we have a
-- chicken/egg problem: you need the auth method id to create the required
-- signing algs value objects.
create or replace function
new_auth_oidc_method_must_be_inactive()
returns trigger
create or replace function new_auth_oidc_method_must_be_inactive() returns trigger
as $$
begin
if new.state != 'inactive' then
@@ -283,34 +259,20 @@ $$ language plpgsql;
comment on function new_auth_oidc_method_must_be_inactive() is
'new_auth_oidc_method_must_be_inactive ensures that new incomplete oidc auth methods must remain inactive';
create trigger
new_auth_oidc_method_must_be_inactive
before
insert on auth_oidc_method
create trigger new_auth_oidc_method_must_be_inactive before insert on auth_oidc_method
for each row execute procedure active_auth_oidc_method_must_be_complete();
-- auth_oidc_account column triggers
create trigger
update_time_column
before
update on auth_oidc_account
create trigger update_time_column before update on auth_oidc_account
for each row execute procedure update_time_column();
create trigger
immutable_columns
before
update on auth_oidc_account
create trigger immutable_columns before update on auth_oidc_account
for each row execute procedure immutable_columns('public_id', 'auth_method_id', 'scope_id', 'create_time', 'issuer', 'subject');
create trigger
default_create_time_column
before
insert on auth_oidc_account
create trigger default_create_time_column before insert on auth_oidc_account
for each row execute procedure default_create_time();
create trigger
update_version_column
after update on auth_oidc_account
create trigger update_version_column after update on auth_oidc_account
for each row execute procedure update_version_column();
@@ -322,9 +284,7 @@ after update on auth_oidc_account
-- raising on an error to insert into the auth_oidc_account table.
-- this is all necessary because of we're using predictable public ids
-- for oidc accounts.
create or replace function
insert_auth_oidc_account_subtype()
returns trigger
create or replace function insert_auth_oidc_account_subtype() returns trigger
as $$
begin
select auth_method.scope_id
@@ -342,9 +302,7 @@ begin
end;
$$ language plpgsql;
create trigger
insert_auth_oidc_account_subtype
before insert on auth_oidc_account
create trigger insert_auth_oidc_account_subtype before insert on auth_oidc_account
for each row execute procedure insert_auth_oidc_account_subtype();
-- triggers for auth_oidc_method children tables: auth_oidc_aud_claim,
@@ -355,9 +313,7 @@ before insert on auth_oidc_account
-- to be used in an "after delete" trigger for auth_oidc_signing_alg
-- Its intent: prevent deletes that would result in an "active" oidc
-- auth method which is incomplete.
create or replace function
on_delete_active_auth_oidc_method_must_be_complete()
returns trigger
create or replace function on_delete_active_auth_oidc_method_must_be_complete() returns trigger
as $$
declare am_state text;
declare alg_cnt int;
@@ -408,10 +364,7 @@ before
insert on auth_oidc_signing_alg
for each row execute procedure default_create_time();
create trigger
on_delete_active_auth_oidc_method_must_be_complete
after
delete on auth_oidc_signing_alg
create trigger on_delete_active_auth_oidc_method_must_be_complete after delete on auth_oidc_signing_alg
for each row execute procedure on_delete_active_auth_oidc_method_must_be_complete();
insert into oplog_ticket (name, version)
@@ -21,9 +21,7 @@ insert into auth_token_status_enm(name)
-- add the state column with a default to the auth_token table.
alter table auth_token
add column status text
not null
default 'token issued' -- safest default
add column status text not null default 'token issued' -- safest default
references auth_token_status_enm(name)
on update cascade
on delete restrict;
@@ -45,4 +43,4 @@ create or replace view auth_token_account as
inner join auth_account as aa
on at.auth_account_id = aa.public_id;
commit;
commit;
@@ -24,9 +24,7 @@ where
-- migration 07_auth.up.sql This new definition also inserts the sub type's name
-- into the base type. The name column must be on the base type, so the database
-- can ensure that auth method names are unique across all sub types.
create or replace function
insert_auth_method_subtype()
returns trigger
create or replace function insert_auth_method_subtype() returns trigger
as $$
begin
insert into auth_method
@@ -44,9 +42,7 @@ comment on function insert_auth_method_subtype() is
-- that the name column is syncronized between the sub and base auth method
-- types. The name column must be on the base type, so the database can ensure
-- that auth method names are unique across all sub types.
create or replace function
update_auth_method_subtype()
returns trigger
create or replace function update_auth_method_subtype() returns trigger
as $$
begin
update auth_method set name = new.name where public_id = new.public_id and new.name != name;
@@ -56,23 +52,15 @@ $$ language plpgsql;
comment on function update_auth_method_subtype() is
'update_auth_method_subtype() will update base auth method type name column with new values from sub type';
create trigger
update_auth_method_subtype
before update on auth_oidc_method
create trigger update_auth_method_subtype before update on auth_oidc_method
for each row execute procedure update_auth_method_subtype();
create trigger
update_auth_method_subtype
before update on auth_password_method
create trigger update_auth_method_subtype before update on auth_password_method
for each row execute procedure update_auth_method_subtype();
-- delete_auth_method_subtype() is an after trigger function for subytypes of
-- auth_method
create or replace function
delete_auth_method_subtype()
returns trigger
create or replace function delete_auth_method_subtype() returns trigger
as $$
begin
delete from auth_method
@@ -83,15 +71,10 @@ $$ language plpgsql;
comment on function delete_auth_method_subtype is
'delete_auth_method_subtype() is an after trigger function for subytypes of auth_method';
create trigger
delete_auth_method_subtype
after delete on auth_oidc_method
create trigger delete_auth_method_subtype after delete on auth_oidc_method
for each row execute procedure delete_auth_method_subtype();
create trigger
delete_auth_method_subtype
after delete on auth_password_method
create trigger delete_auth_method_subtype after delete on auth_password_method
for each row execute procedure delete_auth_method_subtype();
commit;
@@ -9,9 +9,7 @@ begin;
-- in a specific scope across all plugin subtypes.
alter table plugin
add column name wt_name,
add column scope_id wt_scope_id
not null
default 'global'
add column scope_id wt_scope_id not null default 'global'
constraint iam_scope_global_fkey
references iam_scope_global(scope_id)
on delete cascade
@@ -32,8 +30,7 @@ begin;
-- insert, update, and delete plugin_subtypes are created since we are adding
-- subtyped plugins and we need to keep the base table plugin in sync with all
-- subtype tables.
create function insert_plugin_subtype()
returns trigger
create function insert_plugin_subtype() returns trigger
as $$
begin
insert into plugin
@@ -46,8 +43,7 @@ begin;
comment on function insert_plugin_subtype() is
'insert_plugin_subtype() inserts sub type name into the base type plugin table';
create function update_plugin_subtype()
returns trigger
create function update_plugin_subtype() returns trigger
as $$
begin
update plugin set name = new.name where public_id = new.public_id and new.name != name;
@@ -59,8 +55,7 @@ begin;
-- delete_plugin_subtype() is an after delete trigger function
-- for subtypes of plugin
create function delete_plugin_subtype()
returns trigger
create function delete_plugin_subtype() returns trigger
as $$
begin
delete from plugin
@@ -23,8 +23,7 @@ begin;
-- to include the name.
-- insert_host_catalog_subtype() is a before insert trigger
-- function for subtypes of host_catalog
create or replace function insert_host_catalog_subtype()
returns trigger
create or replace function insert_host_catalog_subtype() returns trigger
as $$
begin
insert into host_catalog
@@ -44,8 +43,7 @@ begin;
-- base table for host catalog to contain the updated names for each host catalog
-- in order to enforce uniqueness across all host catalogs, regardless of subtype,
-- in a given scope.
create function update_host_catalog_subtype()
returns trigger
create function update_host_catalog_subtype() returns trigger
as $$
begin
update host_catalog set name = new.name where public_id = new.public_id and new.name != name;
@@ -206,9 +206,7 @@ begin;
-- will have conflicting PKs and we just want to "do nothing" on those
-- conflicts, deferring the raising on an error to insert into the
-- host_plugin_host table. This allows the upsert-style workflow.
create or replace function
insert_host_plugin_host_subtype()
returns trigger
create or replace function insert_host_plugin_host_subtype() returns trigger
as $$
begin
insert into host
@@ -247,17 +245,14 @@ begin;
-- host_immutable_ip_address() ensures that ip addresses assigned to hosts are
-- immutable.
create function
host_immutable_ip_address()
returns trigger
create function host_immutable_ip_address() returns trigger
as $$
begin
raise exception 'host ip addresses are immutable';
end;
$$ language plpgsql;
create trigger immutable_ip_address
before update on host_ip_address
create trigger immutable_ip_address before update on host_ip_address
for each row execute procedure host_immutable_ip_address();
-- host_dns_name contains the DNS names associated with a host, one per row.
@@ -279,17 +274,14 @@ begin;
-- host_immutable_dns_name() ensures that dns names assigned to hosts are
-- immutable.
create function
host_immutable_dns_name()
returns trigger
create function host_immutable_dns_name() returns trigger
as $$
begin
raise exception 'host dns names are immutable';
end;
$$ language plpgsql;
create trigger immutable_dns_name
before update on host_dns_name
create trigger immutable_dns_name before update on host_dns_name
for each row execute procedure host_immutable_dns_name();
create table host_plugin_set_member (
@@ -318,8 +310,7 @@ begin;
create trigger immutable_columns before update on host_plugin_set_member
for each row execute procedure immutable_columns('host_id', 'set_id', 'catalog_id', 'create_time');
create function insert_host_plugin_set_member()
returns trigger
create function insert_host_plugin_set_member() returns trigger
as $$
begin
select host_plugin_set.catalog_id
@@ -367,17 +358,14 @@ begin;
-- host_set_immutable_preferred_endpoint() ensures that endpoint conditions
-- assigned to host sets are immutable.
create function
host_set_immutable_preferred_endpoint()
returns trigger
create function host_set_immutable_preferred_endpoint() returns trigger
as $$
begin
raise exception 'preferred endpoints are immutable';
end;
$$ language plpgsql;
create trigger immutable_preferred_endpoint
before update on host_set_preferred_endpoint
create trigger immutable_preferred_endpoint before update on host_set_preferred_endpoint
for each row execute procedure host_set_immutable_preferred_endpoint();
insert into oplog_ticket (name, version)
@@ -1,8 +1,7 @@
begin;
-- Replaces function from 0/01_domain_types.up.sql
create or replace function default_create_time()
returns trigger
create or replace function default_create_time() returns trigger
as $$
begin
if new.create_time is distinct from now() then
@@ -1,7 +1,6 @@
begin;
create function wt_to_sentinel(string text)
returns text
create function wt_to_sentinel(string text) returns text
as $$
select concat(
u&'\fffe',
@@ -60,8 +60,7 @@ begin;
-- insert_credential_library_subtype() is a before insert trigger
-- function for subtypes of credential_library
create function insert_credential_library_subtype()
returns trigger
create function insert_credential_library_subtype() returns trigger
as $$
begin
insert into credential_library
@@ -13,8 +13,7 @@ begin;
-- insert_credential_vault_library_mapping_override_subtype() is a before insert trigger
-- function for subtypes of credential_vault_library_mapping_override
create function insert_credential_vault_library_mapping_override_subtype()
returns trigger
create function insert_credential_vault_library_mapping_override_subtype() returns trigger
as $$
begin
insert into credential_vault_library_mapping_override
@@ -27,8 +26,7 @@ begin;
-- delete_credential_vault_library_mapping_override_subtype() is an after delete trigger
-- function for subtypes of credential_vault_library_mapping_override
create function delete_credential_vault_library_mapping_override_subtype()
returns trigger
create function delete_credential_vault_library_mapping_override_subtype() returns trigger
as $$
begin
delete from credential_vault_library_mapping_override
@@ -26,8 +26,7 @@ begin;
-- delete_credentials deletes all credentials for a session when the
-- session enters the canceling or terminated states.
create function delete_session_credentials()
returns trigger
create function delete_session_credentials() returns trigger
as $$
begin
if new.state in ('canceling', 'terminated') then
@@ -66,9 +66,7 @@ alter table session_state
alter table session_state
add unique (session_id, state);
create function
update_prior_session_state()
returns trigger
create function update_prior_session_state() returns trigger
as $$
begin
-- Prior state is the most recent valid prior state entry for this session_id
@@ -89,4 +87,4 @@ $$ language plpgsql;
create trigger update_session_state before insert on session_state
for each row execute procedure update_prior_session_state();
commit;
commit;
@@ -53,8 +53,7 @@ begin;
-- Allow the host dimension to reference a group of addresses as referenced
-- above.
alter table wh_host_dimension
add column network_address_group_key wh_dim_key not null
default 'Unknown'
add column network_address_group_key wh_dim_key not null default 'Unknown'
constraint wh_network_address_group_fkey
references wh_network_address_group(key)
on delete restrict
@@ -64,8 +63,7 @@ begin;
alter column network_address_group_key drop default;
-- wh_try_cast_inet returns either the provided text cast into inet or a null.
create function wh_try_cast_inet(text)
returns inet
create function wh_try_cast_inet(text) returns inet
as $$
begin
return cast($1 as inet);
@@ -5,8 +5,7 @@ begin;
-- a network address group which contains only the addresses for the
-- provided host if one doesn't exist and returns the group key which contains
-- exactly the set of addresses which the provided host contains.
create function wh_upsert_network_address_dimension(p_host_id wt_public_id)
returns wh_dim_key
create function wh_upsert_network_address_dimension(p_host_id wt_public_id) returns wh_dim_key
as $$
declare
nag_key wh_dim_key;
@@ -73,8 +72,7 @@ begin;
-- replaces function from 15/02_wh_rename_key_columns.up.sql
-- adds the network address key to the host dimension table.
drop function wh_upsert_host;
create function wh_upsert_host(p_host_id wt_public_id, p_host_set_id wt_public_id, p_target_id wt_public_id)
returns wh_dim_key
create function wh_upsert_host(p_host_id wt_public_id, p_host_set_id wt_public_id, p_target_id wt_public_id) returns wh_dim_key
as $$
declare
src whx_host_dimension_target%rowtype;
@@ -142,4 +140,4 @@ begin;
$$ language plpgsql;
commit;
commit;
@@ -3,9 +3,8 @@ begin;
-- Remove call to terminate_session_if_possible
drop trigger update_connection_state_on_closed_reason on session_connection;
drop function update_connection_state_on_closed_reason();
create function
update_connection_state_on_closed_reason()
returns trigger
create function update_connection_state_on_closed_reason() returns trigger
as $$
begin
if new.closed_reason is not null then
@@ -25,12 +24,10 @@ as $$
end;
$$ language plpgsql;
create trigger
update_connection_state_on_closed_reason
after update of closed_reason on session_connection
create trigger update_connection_state_on_closed_reason after update of closed_reason on session_connection
for each row execute procedure update_connection_state_on_closed_reason();
-- Remove function, defined in 0/51_connection.up.sql
drop function terminate_session_if_possible;
commit;
commit;
@@ -3,11 +3,11 @@ begin;
-- Remove call to wh_rollup_connections(new.session_id) from function
drop trigger wh_insert_session_connection on session_connection;
drop function wh_insert_session_connection();
create function wh_insert_session_connection()
returns trigger
create function wh_insert_session_connection() returns trigger
as $$
declare
new_row wh_session_connection_accumulating_fact%rowtype;
new_row wh_session_connection_accumulating_fact%rowtype;
begin
with
authorized_timestamp (date_dim_key, time_dim_key, ts) as (
@@ -58,20 +58,18 @@ return null;
end;
$$ language plpgsql;
create trigger wh_insert_session_connection
after insert on session_connection
for each row
execute function wh_insert_session_connection();
create trigger wh_insert_session_connection after insert on session_connection
for each row execute function wh_insert_session_connection();
-- Updating definition from 0/69_wh_session_facts.up.sql
-- Remove call to wh_rollup_connections(new.session_id) from function
drop trigger wh_update_session_connection on session_connection;
drop function wh_update_session_connection;
create function wh_update_session_connection()
returns trigger
create function wh_update_session_connection() returns trigger
as $$
declare
updated_row wh_session_connection_accumulating_fact%rowtype;
updated_row wh_session_connection_accumulating_fact%rowtype;
begin
update wh_session_connection_accumulating_fact
set client_tcp_address = new.client_tcp_address,
@@ -86,14 +84,10 @@ return null;
end;
$$ language plpgsql;
create trigger wh_update_session_connection
after update on session_connection
for each row
execute function wh_update_session_connection();
create trigger wh_update_session_connection after update on session_connection
for each row execute function wh_update_session_connection();
create function
wh_session_rollup()
returns trigger
create function wh_session_rollup() returns trigger
as $$
begin
if new.termination_reason is not null then
@@ -106,9 +100,7 @@ return null;
end;
$$ language plpgsql;
create trigger
wh_rollup_connections_on_session_termination
after update of termination_reason on session
create trigger wh_rollup_connections_on_session_termination after update of termination_reason on session
for each row execute procedure wh_session_rollup();
commit;
commit;
@@ -78,9 +78,7 @@ end; $$;
drop trigger insert_session_state on session_state;
drop function insert_session_state();
create function
insert_session_state()
returns trigger
create function insert_session_state() returns trigger
as $$
declare
old_col_state text;
@@ -111,4 +109,4 @@ $$ language plpgsql;
create trigger insert_session_state before insert on session_state
for each row execute procedure insert_session_state();
commit;
commit;
@@ -1,12 +1,12 @@
begin;
drop function cancel_session(in sessionId text);
-- Updates cancel_session() from 0/50_session to check if a session is either terminated or canceling
-- Sessions can progress directly to terminated without going through the canceling state
-- cancel_session will insert a cancel state for the session, if there's isn't
-- a canceled or terminated state already. It's used by cancel_session_with_null_fk.
create function
cancel_session(in sessionId text) returns void
create function cancel_session(in sessionId text) returns void
as $$
declare
rows_affected numeric;
@@ -34,4 +34,4 @@ begin
end;
$$ language plpgsql;
commit;
commit;
@@ -5,8 +5,7 @@ begin;
-- this migration is from:
-- https://github.com/hashicorp/go-kms-wrapping/blob/main/extras/kms/migrations/postgres/01_domain_types.up.sql
create domain kms_private_id as text
not null
create domain kms_private_id as text not null
check(
length(trim(value)) > 0
);
@@ -20,15 +19,11 @@ check(
comment on domain kms_scope_id is
'standard column for scope id';
create domain kms_timestamp as
timestamp with time zone
default current_timestamp;
create domain kms_timestamp as timestamp with time zone default current_timestamp;
comment on domain kms_timestamp is
'Standard timestamp for all create_time and update_time columns';
create domain kms_version as bigint
default 1
not null
create domain kms_version as bigint default 1 not null
check(
value > 0
);
@@ -38,8 +33,7 @@ comment on domain kms_version is
-- kms_immutable_columns() will make the column names immutable which are passed as
-- parameters when the trigger is created. It raises error code 23601 which is a
-- class 23 integrity constraint violation: immutable column
create function kms_immutable_columns()
returns trigger
create function kms_immutable_columns() returns trigger
as $$
declare
col_name text;
@@ -60,15 +54,10 @@ begin
return new;
end;
$$ language plpgsql;
comment on function
kms_immutable_columns()
is
comment on function kms_immutable_columns() is
'function used in before update triggers to make columns immutable';
create function kms_default_create_time()
returns trigger
create function kms_default_create_time() returns trigger
as $$
begin
if new.create_time is distinct from now() then
@@ -77,14 +66,10 @@ begin
return new;
end;
$$ language plpgsql;
comment on function
kms_default_create_time()
is
comment on function kms_default_create_time() is
'function used to properly set create_time columns';
create function
kms_update_time_column()
returns trigger
create function kms_update_time_column() returns trigger
as $$
begin
if row(new.*) is distinct from row(old.*) then
@@ -95,9 +80,7 @@ begin
end if;
end;
$$ language plpgsql;
comment on function
kms_update_time_column()
is
comment on function kms_update_time_column() is
'function used in before update triggers to properly set update_time columns';
commit;
commit;
@@ -20,21 +20,15 @@ create unique index kms_schema_version_one_row
ON kms_schema_version((version is not null));
-- define the immutable fields for kms_root_key (all of them)
create trigger kms_immutable_columns
before
update on kms_schema_version
create trigger kms_immutable_columns before update on kms_schema_version
for each row execute procedure kms_immutable_columns('create_time');
create trigger kms_default_create_time_column
before
insert on kms_schema_version
create trigger kms_default_create_time_column before insert on kms_schema_version
for each row execute procedure kms_default_create_time();
create trigger kms_update_time_column
before
update on kms_schema_version
create trigger kms_update_time_column before update on kms_schema_version
for each row execute procedure kms_update_time_column();
insert into kms_schema_version(version) values('v0.0.1');
commit;
commit;
@@ -11,8 +11,7 @@ begin;
-- kms_version_column() will increment the version column whenever row data
-- is inserted and should only be used in an before insert trigger. This
-- function will overwrite any explicit values to the version column.
create or replace function kms_version_column()
returns trigger
create or replace function kms_version_column() returns trigger
as $$
declare
_key_id text;
@@ -27,11 +26,7 @@ begin
return new;
end;
$$ language plpgsql;
comment on function
kms_version_column()
is
comment on function kms_version_column() is
'function used in before insert triggers to properly set version columns for kms_* tables with a version column';
commit;
commit;
@@ -21,9 +21,7 @@ comment on table kms_root_key is
'kms_root_key defines a root key for a scope';
-- define the immutable fields for kms_root_key (all of them)
create trigger kms_immutable_columns
before
update on kms_root_key
create trigger kms_immutable_columns before update on kms_root_key
for each row execute procedure kms_immutable_columns('private_id', 'scope_id', 'create_time');
-- not adding the kms_default_create_time_column trigger until after we've
@@ -50,9 +48,7 @@ comment on table kms_root_key_version is
'kms_root_key_version contains versions of a kms_root_key';
-- define the immutable fields for kms_root_key_version (all of them)
create trigger kms_immutable_columns
before
update on kms_root_key_version
create trigger kms_immutable_columns before update on kms_root_key_version
for each row execute procedure kms_immutable_columns('private_id', 'root_key_id', 'version', 'key', 'create_time');
-- not adding the kms_default_create_time_column or kms_version_column triggers
@@ -77,9 +73,7 @@ comment on table kms_data_key is
'kms_data_key contains deks (data keys) for specific purposes';
-- define the immutable fields for kms_data_key (all of them)
create trigger kms_immutable_columns
before
update on kms_data_key
create trigger kms_immutable_columns before update on kms_data_key
for each row execute procedure kms_immutable_columns('private_id', 'root_key_id', 'purpose', 'create_time');
-- not adding the kms_default_create_time_column trigger until after we've
@@ -111,9 +105,7 @@ comment on table kms_data_key is
'kms_data_key_version contains versions of a kms_data_key (dek aka data keys)';
-- define the immutable fields for kms_data_key_version (all of them)
create trigger kms_immutable_columns
before
update on kms_data_key_version
create trigger kms_immutable_columns before update on kms_data_key_version
for each row execute procedure immutable_columns('private_id', 'data_key_id', 'root_key_version_id', 'version', 'key', 'create_time');
-- not adding the kms_default_create_time_column or kms_version_column triggers
@@ -190,32 +182,22 @@ from kms_session_key_version;
-- ############################################################################
-- post conversion, we add the required triggers
create trigger kms_default_create_time_column
before
insert on kms_root_key
create trigger kms_default_create_time_column before insert on kms_root_key
for each row execute procedure kms_default_create_time();
create trigger kms_default_create_time_column
before
insert on kms_root_key_version
create trigger kms_default_create_time_column before insert on kms_root_key_version
for each row execute procedure kms_default_create_time();
create trigger kms_version_column
before insert on kms_root_key_version
create trigger kms_version_column before insert on kms_root_key_version
for each row execute procedure kms_version_column('root_key_id');
create trigger default_create_time_column
before
insert on kms_data_key
create trigger default_create_time_column before insert on kms_data_key
for each row execute procedure kms_default_create_time();
create trigger default_create_time
before
insert on kms_data_key_version
create trigger default_create_time before insert on kms_data_key_version
for each row execute procedure kms_default_create_time();
create trigger kms_version_column
before insert on kms_data_key_version
create trigger kms_version_column before insert on kms_data_key_version
for each row execute procedure kms_version_column('data_key_id');
-- Next: we will convert all the existing DEKs FKs to the new model
@@ -278,4 +260,4 @@ alter table kms_session_key rename to kms_deprecated_session_key;
alter table kms_token_key_version rename to kms_deprecated_token_key_version;
alter table kms_token_key rename to kms_deprecated_token_key;
commit;
commit;
@@ -10,7 +10,7 @@ create table server_controller (
create_time wt_timestamp,
update_time wt_timestamp
);
comment on table server_controller is
comment on table server_controller is
'server_controller is a table where each row represents a Boundary controller.';
create trigger immutable_columns before update on server_controller
@@ -90,7 +90,7 @@ create table server_worker (
constraint server_worker_scope_id_name_uq
unique(scope_id, name)
);
comment on table server_worker is
comment on table server_worker is
'server_worker is a table where each row represents a Boundary worker.';
create trigger immutable_columns before update on server_worker
@@ -110,8 +110,7 @@ create trigger worker_update_time_column before update on server_worker
create trigger update_version_column after update of version, description, name on server_worker
for each row execute procedure update_version_column();
create function immutable_kms_name()
returns trigger
create function immutable_kms_name() returns trigger
as $$
begin
if old.type = 'kms' and new.name is distinct from old.name then
@@ -130,8 +129,7 @@ comment on function immutable_kms_name is
create trigger immutable_kms_name before update on server_worker
for each row execute procedure immutable_kms_name();
create function update_kms_server_worker_update_last_status_time_column()
returns trigger
create function update_kms_server_worker_update_last_status_time_column() returns trigger
as $$
begin
if new.type = 'kms' then
@@ -146,8 +144,7 @@ comment on function update_kms_server_worker_update_last_status_time_column is
create trigger update_kms_server_worker_last_status_time_column before update of address, name, description on server_worker
for each row execute procedure update_kms_server_worker_update_last_status_time_column();
create function update_pki_server_worker_update_last_status_time_column()
returns trigger
create function update_pki_server_worker_update_last_status_time_column() returns trigger
as $$
begin
if new.type = 'pki' then
@@ -162,8 +159,7 @@ comment on function update_pki_server_worker_update_last_status_time_column is
create trigger update_pki_server_worker_last_status_time_column before update of address on server_worker
for each row execute procedure update_pki_server_worker_update_last_status_time_column();
create function insert_kms_server_worker_update_last_status_time_column()
returns trigger
create function insert_kms_server_worker_update_last_status_time_column() returns trigger
as $$
begin
if new.type = 'kms' then
@@ -217,15 +213,14 @@ drop view session_list;
-- Update session table to use worker_id instead of server_id
-- Updating the session table modified in 01/01_server_tags_migrations.up.sql
drop trigger update_version_column
on session;
drop trigger update_version_column on session;
alter table session
drop constraint session_server_id_fkey,
drop column server_type,
drop column server_id;
create trigger
update_version_column
after update of version, termination_reason, key_id, tofu_token on session
create trigger update_version_column after update of version, termination_reason, key_id, tofu_token on session
for each row execute procedure update_version_column();
-- Update session_connection table to use worker_id instead of server_id
@@ -252,6 +247,7 @@ alter table job_run
-- Column updated in 35/01_job_migrations.up.sql
add column controller_id text,
drop column server_id;
alter table job_run
add constraint controller_id_must_be_at_least_10_characters
check(
@@ -277,4 +273,4 @@ where
drop table server;
drop table server_type_enm;
commit;
commit;
@@ -7,7 +7,6 @@ create table worker_auth_operational_indicator_enm(
state in ('next','current')
)
);
comment on table worker_auth_operational_indicator_enm is
'worker_auth_operational_indicator_enm is an enumeration table representing the state of certificates used for worker authentication.';
@@ -25,20 +24,13 @@ create table worker_auth_ca(
update_time wt_timestamp
);
create trigger
immutable_columns
before
update on worker_auth_ca
create trigger immutable_columns before update on worker_auth_ca
for each row execute procedure immutable_columns('private_id','create_time');
create trigger worker_auth_ca_default_create_time_column
before
insert on worker_auth_ca
create trigger worker_auth_ca_default_create_time_column before insert on worker_auth_ca
for each row execute procedure default_create_time();
create trigger worker_auth_ca_update_time_column
before
update on worker_auth_ca
create trigger worker_auth_ca_update_time_column before update on worker_auth_ca
for each row execute procedure update_time_column();
insert into worker_auth_ca(private_id) values('roots');
@@ -79,12 +71,8 @@ create table worker_auth_ca_certificate(
references worker_auth_ca(private_id)
);
create trigger
immutable_columns
before
update on worker_auth_ca_certificate
for each row execute procedure immutable_columns('serial_number', 'certificate', 'not_valid_before', 'not_valid_after',
'public_key', 'private_key', 'key_id', 'state', 'issuing_ca');
create trigger immutable_columns before update on worker_auth_ca_certificate
for each row execute procedure immutable_columns('serial_number', 'certificate', 'not_valid_before', 'not_valid_after', 'public_key', 'private_key', 'key_id', 'state', 'issuing_ca');
comment on table worker_auth_ca_certificate is
'worker_auth_ca_certificate is a table where each row represents a root certificate for used for worker authentication.';
@@ -115,15 +103,10 @@ create table worker_auth_authorized(
comment on table worker_auth_authorized is
'worker_auth_authorized is a table where each row represents key and cert data associated with an authorized worker.';
create trigger
immutable_columns
before
update on worker_auth_authorized
for each row execute procedure immutable_columns('worker_key_identifier', 'worker_id', 'worker_signing_pub_key',
'worker_encryption_pub_key', 'controller_encryption_priv_key', 'key_id', 'nonce');
create trigger immutable_columns before update on worker_auth_authorized
for each row execute procedure immutable_columns('worker_key_identifier', 'worker_id', 'worker_signing_pub_key', 'worker_encryption_pub_key', 'controller_encryption_priv_key', 'key_id', 'nonce');
create function insert_worker_auth_authorized_type_check()
returns trigger
create function insert_worker_auth_authorized_type_check() returns trigger
as $$
begin
perform from server_worker where type = 'pki' and public_id = new.worker_id;
@@ -155,14 +138,10 @@ create table worker_auth_certificate_bundle(
check(length(cert_bundle) > 0),
primary key(root_certificate_public_key, worker_key_identifier)
);
comment on table worker_auth_certificate_bundle is
'worker_auth_certificate_bundle is a table where each row represents a cert bundle issued by a ca certificate for a worker.';
create trigger
immutable_columns
before
update on worker_auth_certificate_bundle
create trigger immutable_columns before update on worker_auth_certificate_bundle
for each row execute procedure immutable_columns('root_certificate_public_key', 'worker_key_identifier', 'cert_bundle');
commit;
commit;
@@ -2,7 +2,6 @@ begin;
-- Changes the default that was set in 0/41_targets.up.sql
alter table target_tcp
alter column session_connection_limit
set default -1;
alter column session_connection_limit set default -1;
commit;
@@ -16,14 +16,10 @@ create table kms_collection_version (
create unique index kms_collection_version_one_row
ON kms_collection_version((version is not null));
create trigger kms_immutable_columns
before
update on kms_collection_version
create trigger kms_immutable_columns before update on kms_collection_version
for each row execute procedure kms_immutable_columns('create_time');
create trigger kms_update_time_column
before
update on kms_collection_version
create trigger kms_update_time_column before update on kms_collection_version
for each row execute procedure kms_update_time_column();
@@ -31,4 +27,4 @@ insert into kms_collection_version(version) values(1);
update kms_schema_version set version = 'v0.0.2';
commit;
commit;
@@ -14,12 +14,8 @@ begin;
references credential_vault_library_mapping_override (library_id)
on delete cascade
on update cascade,
username_attribute wt_sentinel
default wt_to_sentinel('no override')
not null,
private_key_attribute wt_sentinel
default wt_to_sentinel('no override')
not null
username_attribute wt_sentinel default wt_to_sentinel('no override') not null,
private_key_attribute wt_sentinel default wt_to_sentinel('no override') not null
);
comment on table credential_vault_library_ssh_private_key_mapping_override is
'credential_vault_library_ssh_private_key_mapping_override is a table '
@@ -12,9 +12,7 @@ alter table credential_static_ssh_private_key_credential
;
alter table credential_vault_library_ssh_private_key_mapping_override
add column private_key_passphrase_attribute wt_sentinel
default wt_to_sentinel('no override')
not null;
add column private_key_passphrase_attribute wt_sentinel default wt_to_sentinel('no override') not null;
-- Replaces view from 41/01_worker_filter_vault_cred_store.up.sql
drop view credential_vault_library_public;
@@ -103,4 +101,4 @@ comment on view credential_vault_library_public is
'credential_vault_library_public is a view where each row contains a credential library and any of library''s credential mapping overrides. '
'No encrypted data is returned. This view can be used to retrieve data which will be returned external to boundary.';
commit;
commit;
@@ -24,11 +24,7 @@ create table auth_oidc_scope (
comment on table auth_oidc_scope is
'auth_oidc_scope entries are the optional scopes for a specific oidc auth method. There can be 0 or more for each parent oidc auth method. If an auth method has any scopes, they will be added to provider requests along with the openid default.';
create trigger
default_create_time_column
before
insert on auth_oidc_scope
create trigger default_create_time_column before insert on auth_oidc_scope
for each row execute procedure default_create_time();
@@ -23,18 +23,10 @@ create table auth_oidc_account_claim_map (
comment on table auth_oidc_account_claim_map is
'auth_oidc_account_claim_map entries are the optional claim maps from custom claims to the standard claims of sub, name and email. There can be 0 or more for each parent oidc auth method.';
create trigger
default_create_time_column
before
insert on auth_oidc_account_claim_map
create trigger default_create_time_column before insert on auth_oidc_account_claim_map
for each row execute procedure default_create_time();
create trigger
immutable_columns
before
update on auth_oidc_account_claim_map
create trigger immutable_columns before update on auth_oidc_account_claim_map
for each row execute procedure immutable_columns('oidc_method_id', 'from_claim', 'to_claim', 'create_time');
@@ -91,4 +83,4 @@ comment on view oidc_auth_method_with_value_obj is
'oidc auth method with its associated value objects (algs, auds, certs, scopes) as columns with | delimited values';
commit;
commit;
@@ -1,7 +1,6 @@
begin;
create function wt_add_seconds(sec integer, ts timestamp with time zone)
returns timestamp with time zone
create function wt_add_seconds(sec integer, ts timestamp with time zone) returns timestamp with time zone
as $$
select ts + sec * '1 second'::interval;
$$ language sql
@@ -10,8 +9,7 @@ begin;
comment on function wt_add_seconds is
'wt_add_seconds returns ts + sec.';
create function wt_add_seconds_to_now(sec integer)
returns timestamp with time zone
create function wt_add_seconds_to_now(sec integer) returns timestamp with time zone
as $$
select wt_add_seconds(sec, current_timestamp);
$$ language sql
@@ -1,7 +1,6 @@
begin;
create domain wt_plugin_id as text
not null
create domain wt_plugin_id as text not null
check(
length(trim(value)) > 10 or value = 'pi_system'
);
@@ -11,7 +10,6 @@ begin;
create table plugin (
public_id wt_plugin_id primary key
);
comment on table plugin is
'plugin is a table where each row represents a unique plugin registered with Boundary.';
@@ -22,9 +20,7 @@ begin;
create trigger immutable_columns before update on plugin
for each row execute procedure immutable_columns('public_id');
create or replace function
disallow_system_plugin_deletion()
returns trigger
create or replace function disallow_system_plugin_deletion() returns trigger
as $$
begin
if old.public_id = 'pi_system' then
@@ -11,7 +11,6 @@ begin;
next_scheduled_run timestamp with time zone not null,
primary key (plugin_id, name)
);
comment on table job is
'job is a table where each row represents a unique job that can only have one running instance at any specific time.';
@@ -23,7 +22,6 @@ begin;
constraint only_predefined_job_status_allowed
check(name in ('running', 'completed', 'failed', 'interrupted'))
);
comment on table job_run_status_enm is
'job_run_status_enm is an enumeration table where each row contains a valid job run state.';
@@ -35,8 +33,7 @@ begin;
('interrupted');
create table job_run (
private_id wh_dim_id primary key
default wh_dim_id(),
private_id wh_dim_id primary key default wh_dim_id(),
job_plugin_id wt_plugin_id not null,
job_name wt_name not null,
server_id wt_private_id
@@ -47,16 +44,13 @@ begin;
create_time wt_timestamp,
update_time wt_timestamp,
end_time timestamp with time zone,
completed_count int not null
default 0
completed_count int not null default 0
constraint completed_count_can_not_be_negative
check(completed_count >= 0),
total_count int not null
default 0
total_count int not null default 0
constraint total_count_can_not_be_negative
check(total_count >= 0),
status text not null
default 'running'
status text not null default 'running'
constraint job_run_status_enm_fkey
references job_run_status_enm (name)
on delete restrict
@@ -71,7 +65,6 @@ begin;
on delete cascade
on update cascade
);
comment on table job_run is
'job_run is a table where each row represents an instance of a job run that is either actively running or has already completed.';
@@ -2,10 +2,8 @@ begin;
-- The base abstract table
create table auth_managed_group (
public_id wt_public_id
primary key,
auth_method_id wt_public_id
not null,
public_id wt_public_id primary key,
auth_method_id wt_public_id not null,
-- Ensure that if the auth method is deleted (which will also happen if the
-- scope is deleted) this is deleted too
constraint auth_method_fkey
@@ -20,18 +18,13 @@ comment on table auth_managed_group is
'auth_managed_group is the abstract base table for managed groups.';
-- Define the immutable fields of auth_managed_group
create trigger
immutable_columns
before
update on auth_managed_group
create trigger immutable_columns before update on auth_managed_group
for each row execute procedure immutable_columns('public_id', 'auth_method_id');
-- Function to insert into the base table when values are inserted into a
-- concrete type table. This happens before inserts so the foreign keys in the
-- concrete type will be valid.
create or replace function
insert_managed_group_subtype()
returns trigger
create or replace function insert_managed_group_subtype() returns trigger
as $$
begin
@@ -47,8 +40,7 @@ $$ language plpgsql;
-- delete_managed_group_subtype() is an after delete trigger
-- function for subtypes of managed_group
create or replace function delete_managed_group_subtype()
returns trigger
create or replace function delete_managed_group_subtype() returns trigger
as $$
begin
delete from auth_managed_group
@@ -1,17 +1,14 @@
begin;
create table auth_oidc_managed_group (
public_id wt_public_id
primary key,
auth_method_id wt_public_id
not null,
public_id wt_public_id primary key,
auth_method_id wt_public_id not null,
name wt_name,
description wt_description,
create_time wt_timestamp,
update_time wt_timestamp,
version wt_version,
filter wt_bexprfilter
not null,
filter wt_bexprfilter not null,
-- Ensure that this managed group relates to an oidc auth method, as opposed
-- to other types
constraint auth_oidc_method_fkey
@@ -32,45 +29,28 @@ comment on table auth_oidc_managed_group is
'auth_oidc_managed_group entries are subtypes of auth_managed_group and represent an oidc managed group.';
-- Define the immutable fields of auth_oidc_managed_group
create trigger
immutable_columns
before
update on auth_oidc_managed_group
create trigger immutable_columns before update on auth_oidc_managed_group
for each row execute procedure immutable_columns('public_id', 'auth_method_id', 'create_time');
-- Populate create time on insert
create trigger
default_create_time_column
before
insert on auth_oidc_managed_group
create trigger default_create_time_column before insert on auth_oidc_managed_group
for each row execute procedure default_create_time();
-- Generate update time on update
create trigger
update_time_column
before
update on auth_oidc_managed_group
create trigger update_time_column before update on auth_oidc_managed_group
for each row execute procedure update_time_column();
-- Update version when something changes
create trigger
update_version_column
after
update on auth_oidc_managed_group
create trigger update_version_column after update on auth_oidc_managed_group
for each row execute procedure update_version_column();
-- Add into the base table when inserting into the concrete table
create trigger
insert_managed_group_subtype
before insert on auth_oidc_managed_group
create trigger insert_managed_group_subtype before insert on auth_oidc_managed_group
for each row execute procedure insert_managed_group_subtype();
-- Ensure that deletions in the oidc subtype result in deletions to the base
-- table.
create trigger
delete_managed_group_subtype
after
delete on auth_oidc_managed_group
create trigger delete_managed_group_subtype after delete on auth_oidc_managed_group
for each row execute procedure delete_managed_group_subtype();
-- The tickets for oplog are the subtypes not the base types because no updates
@@ -18,25 +18,17 @@ comment on table auth_oidc_managed_group_member_account is
'auth_oidc_managed_group_member_account is the join table for managed oidc groups and accounts.';
-- auth_immutable_managed_oidc_group_member_account() ensures that group members are immutable.
create or replace function
auth_immutable_managed_oidc_group_member_account()
returns trigger
create or replace function auth_immutable_managed_oidc_group_member_account() returns trigger
as $$
begin
raise exception 'managed oidc group members are immutable';
end;
$$ language plpgsql;
create trigger
default_create_time_column
before
insert on auth_oidc_managed_group_member_account
create trigger default_create_time_column before insert on auth_oidc_managed_group_member_account
for each row execute procedure default_create_time();
create trigger
auth_immutable_managed_oidc_group_member_account
before
update on auth_oidc_managed_group_member_account
create trigger auth_immutable_managed_oidc_group_member_account before update on auth_oidc_managed_group_member_account
for each row execute procedure auth_immutable_managed_oidc_group_member_account();
-- Initially create the view with just oidc; eventually we can replace this view
@@ -17,12 +17,10 @@ create table iam_managed_group_role (
primary key (role_id, principal_id)
);
create trigger immutable_role_principal
before update on iam_managed_group_role
create trigger immutable_role_principal before update on iam_managed_group_role
for each row execute procedure iam_immutable_role_principal();
create trigger default_create_time_column
before insert on iam_managed_group_role
create trigger default_create_time_column before insert on iam_managed_group_role
for each row execute procedure default_create_time();
-- iam_principal_role provides a consolidated view all principal roles assigned