61 lines
1.6 KiB
PL/PgSQL
61 lines
1.6 KiB
PL/PgSQL
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,
|
|
-- 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
|
|
foreign key (auth_method_id) -- fk1
|
|
references auth_method(public_id)
|
|
on delete cascade
|
|
on update cascade,
|
|
constraint auth_managed_group_auth_method_id_public_id_uq
|
|
unique(auth_method_id, public_id)
|
|
);
|
|
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
|
|
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
|
|
as $$
|
|
begin
|
|
|
|
insert into auth_managed_group
|
|
(public_id, auth_method_id)
|
|
values
|
|
(new.public_id, new.auth_method_id);
|
|
|
|
return new;
|
|
|
|
end;
|
|
$$ 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
|
|
as $$
|
|
begin
|
|
delete from auth_managed_group
|
|
where public_id = old.public_id;
|
|
return null; -- result is ignored since this is an after trigger
|
|
end;
|
|
$$ language plpgsql;
|
|
|
|
commit;
|