# HG changeset patch # User jbe # Date 1294106101 -3600 # Node ID 2daa8ce3d743f11534802580e9df115f07e1c635 # Parent 9b18ee4682c73cf7b826617ccbfb436486237612 Update script added diff -r 9b18ee4682c7 -r 2daa8ce3d743 update/core-update.v1.3.0-v1.3.1.sql --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/update/core-update.v1.3.0-v1.3.1.sql Tue Jan 04 02:55:01 2011 +0100 @@ -0,0 +1,83 @@ +BEGIN; + +CREATE OR REPLACE VIEW "liquid_feedback_version" AS + SELECT * FROM (VALUES ('1.3.1', 1, 3, 1)) + AS "subquery"("string", "major", "minor", "revision"); + +ALTER TABLE "member" ADD COLUMN "locked" BOOLEAN NOT NULL DEFAULT FALSE; + +COMMENT ON COLUMN "member"."locked" IS 'Locked members can not log in.'; +COMMENT ON COLUMN "member"."active" IS 'Memberships, support and votes are taken into account when corresponding members are marked as active. When the user does not log in for an extended period of time, this flag may be set to FALSE. If the user is not locked, he/she may reset the active flag by logging in.'; + +CREATE OR REPLACE FUNCTION "create_interest_snapshot" + ( "issue_id_p" "issue"."id"%TYPE ) + RETURNS VOID + LANGUAGE 'plpgsql' VOLATILE AS $$ + DECLARE + "member_id_v" "member"."id"%TYPE; + BEGIN + DELETE FROM "direct_interest_snapshot" + WHERE "issue_id" = "issue_id_p" + AND "event" = 'periodic'; + DELETE FROM "delegating_interest_snapshot" + WHERE "issue_id" = "issue_id_p" + AND "event" = 'periodic'; + DELETE FROM "direct_supporter_snapshot" + WHERE "issue_id" = "issue_id_p" + AND "event" = 'periodic'; + INSERT INTO "direct_interest_snapshot" + ("issue_id", "event", "member_id", "voting_requested") + SELECT + "issue_id_p" AS "issue_id", + 'periodic' AS "event", + "member"."id" AS "member_id", + "interest"."voting_requested" + FROM "interest" JOIN "member" + ON "interest"."member_id" = "member"."id" + WHERE "interest"."issue_id" = "issue_id_p" + AND "member"."active"; + FOR "member_id_v" IN + SELECT "member_id" FROM "direct_interest_snapshot" + WHERE "issue_id" = "issue_id_p" + AND "event" = 'periodic' + LOOP + UPDATE "direct_interest_snapshot" SET + "weight" = 1 + + "weight_of_added_delegations_for_interest_snapshot"( + "issue_id_p", + "member_id_v", + '{}' + ) + WHERE "issue_id" = "issue_id_p" + AND "event" = 'periodic' + AND "member_id" = "member_id_v"; + END LOOP; + INSERT INTO "direct_supporter_snapshot" + ( "issue_id", "initiative_id", "event", "member_id", + "informed", "satisfied" ) + SELECT + "issue_id_p" AS "issue_id", + "initiative"."id" AS "initiative_id", + 'periodic' AS "event", + "supporter"."member_id" AS "member_id", + "supporter"."draft_id" = "current_draft"."id" AS "informed", + NOT EXISTS ( + SELECT NULL FROM "critical_opinion" + WHERE "initiative_id" = "initiative"."id" + AND "member_id" = "supporter"."member_id" + ) AS "satisfied" + FROM "initiative" + JOIN "supporter" + ON "supporter"."initiative_id" = "initiative"."id" + JOIN "current_draft" + ON "initiative"."id" = "current_draft"."initiative_id" + JOIN "direct_interest_snapshot" + ON "supporter"."member_id" = "direct_interest_snapshot"."member_id" + AND "initiative"."issue_id" = "direct_interest_snapshot"."issue_id" + AND "event" = 'periodic' + WHERE "initiative"."issue_id" = "issue_id_p"; + RETURN; + END; + $$; + +COMMIT;