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,135 @@
|
|||
-- Complete the dialog_light/channel_base dependency closure for cached dialog
|
||||
-- top-message projections. These triggers only bump read-model versions; they
|
||||
-- do not allocate PTS or mutate message/update facts.
|
||||
|
||||
CREATE OR REPLACE FUNCTION telesrv_notify_private_top_message_read_model()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM dialogs d
|
||||
WHERE d.user_id = NEW.owner_user_id
|
||||
AND d.peer_type = NEW.peer_type
|
||||
AND d.peer_id = NEW.peer_id
|
||||
AND d.top_message_id = NEW.box_id
|
||||
) THEN
|
||||
PERFORM telesrv_bump_dialog_light(NEW.owner_user_id, NEW.peer_type, NEW.peer_id);
|
||||
END IF;
|
||||
RETURN NULL;
|
||||
END;
|
||||
$$;
|
||||
|
||||
CREATE TRIGGER message_boxes_dialog_top_projection_changed
|
||||
AFTER UPDATE OF
|
||||
message_date, body, entities, deleted, edit_date, silent, noforwards,
|
||||
reply_to_msg_id, reply_to_peer_type, reply_to_peer_id, reply_to_top_id,
|
||||
reply_to_story_id, quote_text, quote_entities, quote_offset,
|
||||
fwd_from_peer_type, fwd_from_peer_id, fwd_from_name, fwd_date,
|
||||
fwd_saved_from_peer_type, fwd_saved_from_peer_id, fwd_saved_from_msg_id,
|
||||
media, media_unread, reaction_unread, ttl_period, expires_at, pinned,
|
||||
saved_peer_type, saved_peer_id, reply_markup, via_bot_id, rich_message,
|
||||
grouped_id, effect, hide_edited
|
||||
ON message_boxes
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION telesrv_notify_private_top_message_read_model();
|
||||
|
||||
CREATE OR REPLACE FUNCTION telesrv_notify_private_top_reactions_read_model()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
DECLARE
|
||||
changed_sender_id BIGINT;
|
||||
changed_message_id BIGINT;
|
||||
BEGIN
|
||||
IF TG_OP = 'DELETE' THEN
|
||||
changed_sender_id := OLD.message_sender_id;
|
||||
changed_message_id := OLD.private_message_id;
|
||||
ELSE
|
||||
changed_sender_id := NEW.message_sender_id;
|
||||
changed_message_id := NEW.private_message_id;
|
||||
END IF;
|
||||
|
||||
PERFORM telesrv_bump_dialog_light(b.owner_user_id, b.peer_type, b.peer_id)
|
||||
FROM message_boxes b
|
||||
JOIN dialogs d
|
||||
ON d.user_id = b.owner_user_id
|
||||
AND d.peer_type = b.peer_type
|
||||
AND d.peer_id = b.peer_id
|
||||
AND d.top_message_id = b.box_id
|
||||
WHERE b.message_sender_id = changed_sender_id
|
||||
AND b.private_message_id = changed_message_id
|
||||
AND NOT b.deleted;
|
||||
RETURN NULL;
|
||||
END;
|
||||
$$;
|
||||
|
||||
CREATE TRIGGER private_message_reactions_dialog_top_projection_changed
|
||||
AFTER INSERT OR DELETE OR UPDATE
|
||||
ON private_message_reactions
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION telesrv_notify_private_top_reactions_read_model();
|
||||
|
||||
CREATE OR REPLACE FUNCTION telesrv_notify_channel_top_message_read_model()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM channels c
|
||||
WHERE c.id = NEW.channel_id
|
||||
AND c.top_message_id = NEW.id
|
||||
) THEN
|
||||
PERFORM telesrv_bump_read_model_version('channel_base', 0, 'channel', NEW.channel_id);
|
||||
END IF;
|
||||
RETURN NULL;
|
||||
END;
|
||||
$$;
|
||||
|
||||
CREATE TRIGGER channel_messages_dialog_top_projection_changed
|
||||
AFTER UPDATE OF
|
||||
sender_user_id, from_peer_type, from_peer_id, send_as_peer_type, send_as_peer_id,
|
||||
message_date, edit_date, post, silent, noforwards, body, entities, reply_to,
|
||||
reply_to_msg_id, reply_to_peer_type, reply_to_peer_id, reply_to_top_id, fwd_from,
|
||||
discussion_channel_id, discussion_message_id, action, deleted, views_count, media,
|
||||
ttl_period, expires_at, post_author, pinned, via_bot_id, reply_markup,
|
||||
from_boosts_applied, rich_message
|
||||
ON channel_messages
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION telesrv_notify_channel_top_message_read_model();
|
||||
|
||||
CREATE OR REPLACE FUNCTION telesrv_notify_channel_top_reactions_read_model()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
DECLARE
|
||||
changed_channel_id BIGINT;
|
||||
changed_message_id INTEGER;
|
||||
BEGIN
|
||||
IF TG_OP = 'DELETE' THEN
|
||||
changed_channel_id := OLD.channel_id;
|
||||
changed_message_id := OLD.message_id;
|
||||
ELSE
|
||||
changed_channel_id := NEW.channel_id;
|
||||
changed_message_id := NEW.message_id;
|
||||
END IF;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM channels c
|
||||
WHERE c.id = changed_channel_id
|
||||
AND c.top_message_id = changed_message_id
|
||||
) THEN
|
||||
PERFORM telesrv_bump_read_model_version('channel_base', 0, 'channel', changed_channel_id);
|
||||
END IF;
|
||||
RETURN NULL;
|
||||
END;
|
||||
$$;
|
||||
|
||||
CREATE TRIGGER channel_message_reactions_dialog_top_projection_changed
|
||||
AFTER INSERT OR DELETE OR UPDATE
|
||||
ON channel_message_reactions
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION telesrv_notify_channel_top_reactions_read_model();
|
||||
Loading…
Add table
Add a link
Reference in a new issue