2023-11-15 20:55:00 +00:00
|
|
|
-- Couldn't find a way to put local_subscribers right after subscribers
|
|
|
|
ALTER TABLE community_aggregates
|
|
|
|
ADD COLUMN local_subscribers int8 NOT NULL DEFAULT 0;
|
|
|
|
|
|
|
|
-- update initial value
|
|
|
|
UPDATE
|
|
|
|
community_aggregates
|
|
|
|
SET
|
|
|
|
local_subscribers = (
|
|
|
|
SELECT
|
|
|
|
COUNT(*)
|
|
|
|
FROM
|
|
|
|
community_follower
|
|
|
|
WHERE
|
|
|
|
community_follower.community_id = community_aggregates.community_id
|
|
|
|
AND community_follower.person_id IN (
|
|
|
|
SELECT
|
|
|
|
id
|
|
|
|
FROM
|
|
|
|
person
|
|
|
|
WHERE
|
2023-11-15 21:06:25 +00:00
|
|
|
local));
|
2023-11-15 20:55:00 +00:00
|
|
|
|
|
|
|
CREATE OR REPLACE FUNCTION community_aggregates_subscriber_count ()
|
|
|
|
RETURNS TRIGGER
|
|
|
|
LANGUAGE plpgsql
|
|
|
|
AS $$
|
|
|
|
BEGIN
|
|
|
|
IF (TG_OP = 'INSERT') THEN
|
|
|
|
UPDATE
|
|
|
|
community_aggregates
|
|
|
|
SET
|
|
|
|
subscribers = subscribers + 1,
|
|
|
|
local_subscribers = local_subscribers + 1
|
|
|
|
FROM
|
|
|
|
community
|
|
|
|
WHERE
|
|
|
|
community.id = community_id
|
|
|
|
AND community.local
|
|
|
|
AND community_id = NEW.community_id;
|
|
|
|
ELSIF (TG_OP = 'DELETE') THEN
|
|
|
|
UPDATE
|
|
|
|
community_aggregates
|
|
|
|
SET
|
|
|
|
subscribers = subscribers - 1,
|
|
|
|
local_subscribers = local_subscribers - 1
|
|
|
|
FROM
|
|
|
|
community
|
|
|
|
WHERE
|
|
|
|
community.id = community_id
|
|
|
|
AND community.local
|
|
|
|
AND community_id = OLD.community_id;
|
|
|
|
END IF;
|
|
|
|
RETURN NULL;
|
|
|
|
END
|
|
|
|
$$;
|
|
|
|
|