This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
-- Re-association invalidates both owners; source writes and the durable invalidation are atomic.
|
||||
CREATE OR REPLACE FUNCTION home_mark_dirty() RETURNS trigger LANGUAGE plpgsql AS $$
|
||||
DECLARE mid TEXT; previous_mid TEXT;
|
||||
BEGIN
|
||||
IF TG_TABLE_NAME = 'SmsMessageRecord' THEN
|
||||
mid := COALESCE(NEW.id,OLD.id); previous_mid := OLD.id;
|
||||
ELSIF TG_TABLE_NAME = 'UpstreamReceiptInbox' THEN
|
||||
mid := COALESCE(NEW."matchedMessageRecordId",OLD."matchedMessageRecordId"); previous_mid := OLD."matchedMessageRecordId";
|
||||
ELSE
|
||||
mid := COALESCE(NEW."messageRecordId",OLD."messageRecordId"); previous_mid := OLD."messageRecordId";
|
||||
END IF;
|
||||
IF mid IS NOT NULL THEN
|
||||
INSERT INTO "HomeProjectionDirty"("messageRecordId") VALUES(mid)
|
||||
ON CONFLICT ("messageRecordId") DO UPDATE SET "enqueuedAt"=CURRENT_TIMESTAMP;
|
||||
END IF;
|
||||
IF previous_mid IS NOT NULL AND previous_mid IS DISTINCT FROM mid THEN
|
||||
INSERT INTO "HomeProjectionDirty"("messageRecordId") VALUES(previous_mid)
|
||||
ON CONFLICT ("messageRecordId") DO UPDATE SET "enqueuedAt"=CURRENT_TIMESTAMP;
|
||||
END IF;
|
||||
RETURN NULL;
|
||||
END $$;
|
||||
CREATE INDEX "HomeProjectionDirty_enqueuedAt_idx" ON "HomeProjectionDirty"("enqueuedAt");
|
||||
CREATE INDEX "HomeMessageFact_toVersion_idx" ON "HomeMessageFact"("toVersion");
|
||||
CREATE UNIQUE INDEX "HomeMessageFact_current_key" ON "HomeMessageFact"("messageRecordId") WHERE "toVersion" IS NULL;
|
||||
Reference in New Issue
Block a user