-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtrigger.sql
More file actions
138 lines (118 loc) · 4.17 KB
/
Copy pathtrigger.sql
File metadata and controls
138 lines (118 loc) · 4.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
------**** Trigger 1 ****---------
-- function for adding msg recipient
create or replace function msg_rec_func()
returns trigger as
$$
DECLARE
userID_fun integer;
begin
if new.toUserID > 0 and new.toUserID NOTNULL then -- if it is a private message
insert into messageRecipient
values (new.msgid, new.toUserID);
elseif new.toGroupId > 0 and new.toGroupID NOTNULL then -- if it is a group message
-- if the user belongs to the group he/she sent to.
if (select x.userid
from groupmember x
where x.gid = new.togroupid
and x.userid = new.fromid) notnull then
-- insert every group members as a recipient into the message recipient table.
for userID_fun in
select g.userID
from groupmember g
where g.gid = new.togroupid
-- and g.userid != new.fromid
loop
insert into messagerecipient
values (new.msgid, userID_fun);
end loop;
else -- if the user does not belong to the group.
raise exception 'The user does not belong to the group he/she sent to.';
end if;
end if;
return new;
end;
$$
LANGUAGE plpgsql;
-- Trigger to add message recipient table after insert into message table
drop trigger if exists msg_rec_trig on messageInfo;
create constraint trigger msg_rec_trig
after insert
on messageInfo deferrable
for each row
execute procedure msg_rec_func();
------**** Trigger 2 ****---------
-- Function to delete group memberships after user drops
create or replace function delete_group_member_after_delete_profile_func()
returns trigger as
$$
begin
delete from groupmember where userid = OLD.userid;
return old;
end;
$$
language plpgsql;
-- Trigger to delete group memberships after user drops
drop trigger if exists delete_group_member_after_delte_profile_trig on profile;
create trigger delete_group_member_after_delete_profile_trig
after delete
on "profile"
for each row
execute procedure delete_group_member_after_delete_profile_func();
------**** Trigger 3 ****---------
-- Trigger to delete a group from groupInfo after all member of this group were deleted
create or replace function delete_group_after_all_members_were_deleted_func()
returns trigger as
$$
begin
if (select count(gid) from groupmember where gid = old.gid) = 0 then
delete from groupinfo where groupinfo.gid = old.gid;
end if;
return old;
end;
$$
language plpgsql;
drop trigger if exists delete_group_after_all_members_were_deleted_trig on groupmember;
create trigger delete_group_after_all_members_were_deleted_trig
after delete
on groupmember
for each row
execute procedure delete_group_after_all_members_were_deleted_func();
------**** Trigger 4 ****---------
--Function to potentially delete messageRecipient after message was deleted
create or replace function delete_messageRecipient_after_msgInfo_deleted_func()
returns trigger as
$$
begin
delete from messagerecipient where messagerecipient.msgid = old.msgid;
return old;
end;
$$
language plpgsql;
drop trigger if exists delete_messageRecipient_after_msgInfo_deleted_trig on messageinfo;
create trigger delete_messageRecipient_after_msgInfo_deleted_trig
after delete
on messageinfo
for each row
execute procedure delete_messageRecipient_after_msgInfo_deleted_func();
-- ------**** Trigger 5 ****---------
-- -- Function to potentially delete messages after user drops.
-- create or replace function delete_msg_after_delete_user_func()
-- returns trigger as
-- $$
-- begin
-- delete from messageInfo where fromid = OLD.userid;
-- delete from messagerecipient where messagerecipient.userid = OLD.userid;
-- return old;
-- end;
-- $$
-- language plpgsql;
--
--
-- -- Trigger to potentially delete message from messageInfo after user drops.
-- drop trigger if exists delete_msg_after_delete_user_trig on profile;
-- create trigger delete_msg_after_delete_user_trig
-- after delete
-- on "profile"
-- for each row
-- execute procedure delete_msg_after_delete_user_func();
--delete from profile where