merged from gramsrv upstream
This commit is contained in:
parent
79c64ee916
commit
21a0856587
651 changed files with 54774 additions and 4590 deletions
|
|
@ -0,0 +1,62 @@
|
|||
CREATE OR REPLACE FUNCTION public.telesrv_bump_channel_membership_read_models(
|
||||
p_channel_id bigint,
|
||||
p_user_ids bigint[]
|
||||
)
|
||||
RETURNS void
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
DECLARE
|
||||
changed record;
|
||||
BEGIN
|
||||
IF COALESCE(p_channel_id, 0) <= 0 OR COALESCE(cardinality(p_user_ids), 0) = 0 THEN
|
||||
RETURN;
|
||||
END IF;
|
||||
|
||||
FOR changed IN
|
||||
WITH requested AS MATERIALIZED (
|
||||
SELECT DISTINCT user_id
|
||||
FROM unnest(p_user_ids) AS input(user_id)
|
||||
WHERE user_id > 0
|
||||
), keys AS MATERIALIZED (
|
||||
SELECT 'channel_participants'::text AS model, 0::bigint AS owner_user_id,
|
||||
'channel'::text AS peer_type, p_channel_id AS peer_id
|
||||
UNION
|
||||
SELECT 'channel_member', user_id, 'channel', p_channel_id FROM requested
|
||||
UNION
|
||||
SELECT 'dialog_light', user_id, 'channel', p_channel_id FROM requested
|
||||
UNION
|
||||
SELECT 'dialog_owner', user_id, 'user', user_id FROM requested
|
||||
UNION
|
||||
SELECT 'channel_active_memberships', user_id, 'user', user_id FROM requested
|
||||
), bumped AS (
|
||||
INSERT INTO public.read_model_versions (
|
||||
model, owner_user_id, peer_type, peer_id, version, hash, updated_at
|
||||
)
|
||||
SELECT model, owner_user_id, peer_type, peer_id, 1,
|
||||
public.telesrv_random_read_model_hash(), now()
|
||||
FROM keys
|
||||
ORDER BY model, owner_user_id, peer_type, peer_id
|
||||
ON CONFLICT (model, owner_user_id, peer_type, peer_id) DO UPDATE SET
|
||||
version = public.read_model_versions.version + 1,
|
||||
hash = public.telesrv_random_read_model_hash(),
|
||||
updated_at = EXCLUDED.updated_at
|
||||
RETURNING model, owner_user_id, peer_type, peer_id, version, hash
|
||||
)
|
||||
SELECT model, owner_user_id, peer_type, peer_id, version, hash
|
||||
FROM bumped
|
||||
ORDER BY model, owner_user_id, peer_type, peer_id
|
||||
LOOP
|
||||
PERFORM pg_notify(
|
||||
'telesrv_read_model_changed',
|
||||
json_build_object(
|
||||
'model', changed.model,
|
||||
'owner_user_id', changed.owner_user_id,
|
||||
'peer_type', changed.peer_type,
|
||||
'peer_id', changed.peer_id,
|
||||
'version', changed.version,
|
||||
'hash', changed.hash
|
||||
)::text
|
||||
);
|
||||
END LOOP;
|
||||
END;
|
||||
$$;
|
||||
Loading…
Add table
Add a link
Reference in a new issue