lemmy/migrations/2023-11-15-200123_community_aggregates_add_local_subscribers/up.sql
İsmail Karslı fc0b7a9638
sql format
2023-11-16 00:06:25 +03:00

57 lines
1.5 KiB
PL/PgSQL

-- 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
local));
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
$$;