db/schema/0301_grp_usr.sql

74 lines
1.6 KiB
MySQL
Raw Normal View History

2023-07-14 22:13:34 +00:00
create table public.grp_usr
( grp int not null references public.grp(id)
, usr int not null references public.usr(id)
, primary key (grp, usr)
);
create function public.grp_add_member(to_grp int, add_usr int)
returns void
volatile
language plpgsql
as $$
begin
insert into public.grp_usr (grp, usr) values (to_grp, add_usr);
end;
$$;
create function public.grp_add_members(to_grp int, add_usrs int[])
returns void
volatile
language plpgsql
as $$
begin
insert into public.grp_usr (grp, usr)
2023-07-20 20:47:00 +00:00
select to_grp, usr_id
2023-07-14 22:13:34 +00:00
from unnest(add_usrs) usr_id
left join public.grp_usr gu on gu.usr = usr_id and gu.grp = to_grp
where gu is null;
end;
$$;
create function public.grp_members(of_grp int)
returns setof public.usr
stable
language plpgsql
as $$
begin
return query select u.*
2023-07-20 20:45:18 +00:00
from public.grp_usr gu
inner join public.usr u on gu.usr = u.id
where gu.grp = of_grp;
2023-07-14 22:13:34 +00:00
end;
$$;
2023-07-21 05:10:02 +00:00
create function public.usr_groups(of_usr human_uuid.huid)
returns setof public.grp
stable
language plpgsql
as $$
begin
return query select g.*
from public.usr u
inner join public.grp_usr gu on gu.usr = u.id
inner join public.grp g on g.id = gu.grp
where u.uid = of_usr;
end;
$$;
2023-07-14 22:13:34 +00:00
create function public.grp_members_admins()
returns setof public.usr
stable
language sql
as $$select * from public.grp_members((public.grp_admins()).id)$$;
2023-07-14 22:13:34 +00:00
create function public.grp_rm_member(from_grp int, rm_usr int)
returns void
volatile
language plpgsql
as $$
begin
delete from public.grp_usr gu
where gu.grp = from_grp and gu.usr = rm_usr;
end;
$$;