# HG changeset patch # User jbe # Date 1506343475 -7200 # Node ID fc09088587b27e26b64ec1165394396345c522f6 # Parent c3931054bb554f9bbfaebbff16ecea0174b3b7de Bugfix regarding locking when logging initiative revocation (cannot combine DISTINCT with FOR SHARE) diff -r c3931054bb55 -r fc09088587b2 core.sql --- a/core.sql Mon Sep 25 14:30:02 2017 +0200 +++ b/core.sql Mon Sep 25 14:44:35 2017 +0200 @@ -1945,12 +1945,16 @@ "draft_id_v" "draft"."id"%TYPE; BEGIN IF OLD."revoked" ISNULL AND NEW."revoked" NOTNULL THEN + -- NOTE: lock for primary key update to avoid new drafts + SELECT NULL FROM "initiative" WHERE "id" = NEW."id" FOR UPDATE; SELECT * INTO "issue_row" FROM "issue" WHERE "id" = NEW."issue_id" FOR SHARE; SELECT * INTO "area_row" FROM "area" WHERE "id" = "issue_row"."area_id" FOR SHARE; + -- NOTE: FOR SHARE cannot be used with DISTINCT in view "current_draft" + SELECT NULL FROM "draft" WHERE "initiative_id" = NEW."id" FOR SHARE; SELECT "id" INTO "draft_id_v" FROM "current_draft" - WHERE "initiative_id" = NEW."id" FOR SHARE; + WHERE "initiative_id" = NEW."id"; INSERT INTO "event" ( "event", "member_id", "unit_id", "area_id", "policy_id", "issue_id", "state", diff -r c3931054bb55 -r fc09088587b2 update/core-update.v3.2.2-v4.0.0.sql --- a/update/core-update.v3.2.2-v4.0.0.sql Mon Sep 25 14:30:02 2017 +0200 +++ b/update/core-update.v3.2.2-v4.0.0.sql Mon Sep 25 14:44:35 2017 +0200 @@ -1200,12 +1200,16 @@ "draft_id_v" "draft"."id"%TYPE; BEGIN IF OLD."revoked" ISNULL AND NEW."revoked" NOTNULL THEN + -- NOTE: lock for primary key update to avoid new drafts + SELECT NULL FROM "initiative" WHERE "id" = NEW."id" FOR UPDATE; SELECT * INTO "issue_row" FROM "issue" WHERE "id" = NEW."issue_id" FOR SHARE; SELECT * INTO "area_row" FROM "area" WHERE "id" = "issue_row"."area_id" FOR SHARE; + -- NOTE: FOR SHARE cannot be used with DISTINCT in view "current_draft" + SELECT NULL FROM "draft" WHERE "initiative_id" = NEW."id" FOR SHARE; SELECT "id" INTO "draft_id_v" FROM "current_draft" - WHERE "initiative_id" = NEW."id" FOR SHARE; + WHERE "initiative_id" = NEW."id"; INSERT INTO "event" ( "event", "member_id", "unit_id", "area_id", "policy_id", "issue_id", "state",