64 lines
2.2 KiB
MySQL
64 lines
2.2 KiB
MySQL
|
-- Update comment_aggregates_score trigger function to exclude controversy_rank update
|
||
|
create or replace function comment_aggregates_score()
|
||
|
returns trigger language plpgsql
|
||
|
as $$
|
||
|
begin
|
||
|
IF (TG_OP = 'INSERT') THEN
|
||
|
update comment_aggregates ca
|
||
|
set score = score + NEW.score,
|
||
|
upvotes = case when NEW.score = 1 then upvotes + 1 else upvotes end,
|
||
|
downvotes = case when NEW.score = -1 then downvotes + 1 else downvotes end
|
||
|
where ca.comment_id = NEW.comment_id;
|
||
|
|
||
|
ELSIF (TG_OP = 'DELETE') THEN
|
||
|
-- Join to comment because that comment may not exist anymore
|
||
|
update comment_aggregates ca
|
||
|
set score = score - OLD.score,
|
||
|
upvotes = case when OLD.score = 1 then upvotes - 1 else upvotes end,
|
||
|
downvotes = case when OLD.score = -1 then downvotes - 1 else downvotes end
|
||
|
from comment c
|
||
|
where ca.comment_id = c.id
|
||
|
and ca.comment_id = OLD.comment_id;
|
||
|
|
||
|
END IF;
|
||
|
return null;
|
||
|
end $$;
|
||
|
|
||
|
-- Update post_aggregates_score trigger function to exclude controversy_rank update
|
||
|
create or replace function post_aggregates_score()
|
||
|
returns trigger language plpgsql
|
||
|
as $$
|
||
|
begin
|
||
|
IF (TG_OP = 'INSERT') THEN
|
||
|
update post_aggregates pa
|
||
|
set score = score + NEW.score,
|
||
|
upvotes = case when NEW.score = 1 then upvotes + 1 else upvotes end,
|
||
|
downvotes = case when NEW.score = -1 then downvotes + 1 else downvotes end
|
||
|
where pa.post_id = NEW.post_id;
|
||
|
|
||
|
ELSIF (TG_OP = 'DELETE') THEN
|
||
|
-- Join to post because that post may not exist anymore
|
||
|
update post_aggregates pa
|
||
|
set score = score - OLD.score,
|
||
|
upvotes = case when OLD.score = 1 then upvotes - 1 else upvotes end,
|
||
|
downvotes = case when OLD.score = -1 then downvotes - 1 else downvotes end
|
||
|
from post p
|
||
|
where pa.post_id = p.id
|
||
|
and pa.post_id = OLD.post_id;
|
||
|
END IF;
|
||
|
return null;
|
||
|
end $$;
|
||
|
|
||
|
-- Drop the indexes
|
||
|
drop index if exists idx_post_aggregates_featured_local_controversy;
|
||
|
drop index if exists idx_post_aggregates_featured_community_controversy;
|
||
|
drop index if exists idx_comment_aggregates_controversy;
|
||
|
|
||
|
-- Remove the added columns from the tables
|
||
|
alter table post_aggregates drop column controversy_rank;
|
||
|
alter table comment_aggregates drop column controversy_rank;
|
||
|
|
||
|
-- Remove function
|
||
|
drop function controversy_rank(numeric, numeric);
|
||
|
|