liquid_feedback_core

diff update/core-update.beta22-beta23.sql @ 36:c3b72b644cc8

Critical bugfix in function "create_snapshot": Fixed incorrect calculation of opinion count for suggestions
author jbe
date Thu Mar 04 00:42:47 2010 +0100 (2010-03-04)
parents
children
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/update/core-update.beta22-beta23.sql	Thu Mar 04 00:42:47 2010 +0100
     1.3 @@ -0,0 +1,199 @@
     1.4 +BEGIN;
     1.5 +
     1.6 +CREATE OR REPLACE VIEW "liquid_feedback_version" AS
     1.7 +  SELECT * FROM (VALUES ('beta23', NULL, NULL, NULL))
     1.8 +  AS "subquery"("string", "major", "minor", "revision");
     1.9 +
    1.10 +CREATE OR REPLACE FUNCTION "create_snapshot"
    1.11 +  ( "issue_id_p" "issue"."id"%TYPE )
    1.12 +  RETURNS VOID
    1.13 +  LANGUAGE 'plpgsql' VOLATILE AS $$
    1.14 +    DECLARE
    1.15 +      "initiative_id_v"    "initiative"."id"%TYPE;
    1.16 +      "suggestion_id_v"    "suggestion"."id"%TYPE;
    1.17 +    BEGIN
    1.18 +      PERFORM "global_lock"();
    1.19 +      PERFORM "create_population_snapshot"("issue_id_p");
    1.20 +      PERFORM "create_interest_snapshot"("issue_id_p");
    1.21 +      UPDATE "issue" SET
    1.22 +        "snapshot" = now(),
    1.23 +        "latest_snapshot_event" = 'periodic',
    1.24 +        "population" = (
    1.25 +          SELECT coalesce(sum("weight"), 0)
    1.26 +          FROM "direct_population_snapshot"
    1.27 +          WHERE "issue_id" = "issue_id_p"
    1.28 +          AND "event" = 'periodic'
    1.29 +        ),
    1.30 +        "vote_now" = (
    1.31 +          SELECT coalesce(sum("weight"), 0)
    1.32 +          FROM "direct_interest_snapshot"
    1.33 +          WHERE "issue_id" = "issue_id_p"
    1.34 +          AND "event" = 'periodic'
    1.35 +          AND "voting_requested" = TRUE
    1.36 +        ),
    1.37 +        "vote_later" = (
    1.38 +          SELECT coalesce(sum("weight"), 0)
    1.39 +          FROM "direct_interest_snapshot"
    1.40 +          WHERE "issue_id" = "issue_id_p"
    1.41 +          AND "event" = 'periodic'
    1.42 +          AND "voting_requested" = FALSE
    1.43 +        )
    1.44 +        WHERE "id" = "issue_id_p";
    1.45 +      FOR "initiative_id_v" IN
    1.46 +        SELECT "id" FROM "initiative" WHERE "issue_id" = "issue_id_p"
    1.47 +      LOOP
    1.48 +        UPDATE "initiative" SET
    1.49 +          "supporter_count" = (
    1.50 +            SELECT coalesce(sum("di"."weight"), 0)
    1.51 +            FROM "direct_interest_snapshot" AS "di"
    1.52 +            JOIN "direct_supporter_snapshot" AS "ds"
    1.53 +            ON "di"."member_id" = "ds"."member_id"
    1.54 +            WHERE "di"."issue_id" = "issue_id_p"
    1.55 +            AND "di"."event" = 'periodic'
    1.56 +            AND "ds"."initiative_id" = "initiative_id_v"
    1.57 +            AND "ds"."event" = 'periodic'
    1.58 +          ),
    1.59 +          "informed_supporter_count" = (
    1.60 +            SELECT coalesce(sum("di"."weight"), 0)
    1.61 +            FROM "direct_interest_snapshot" AS "di"
    1.62 +            JOIN "direct_supporter_snapshot" AS "ds"
    1.63 +            ON "di"."member_id" = "ds"."member_id"
    1.64 +            WHERE "di"."issue_id" = "issue_id_p"
    1.65 +            AND "di"."event" = 'periodic'
    1.66 +            AND "ds"."initiative_id" = "initiative_id_v"
    1.67 +            AND "ds"."event" = 'periodic'
    1.68 +            AND "ds"."informed"
    1.69 +          ),
    1.70 +          "satisfied_supporter_count" = (
    1.71 +            SELECT coalesce(sum("di"."weight"), 0)
    1.72 +            FROM "direct_interest_snapshot" AS "di"
    1.73 +            JOIN "direct_supporter_snapshot" AS "ds"
    1.74 +            ON "di"."member_id" = "ds"."member_id"
    1.75 +            WHERE "di"."issue_id" = "issue_id_p"
    1.76 +            AND "di"."event" = 'periodic'
    1.77 +            AND "ds"."initiative_id" = "initiative_id_v"
    1.78 +            AND "ds"."event" = 'periodic'
    1.79 +            AND "ds"."satisfied"
    1.80 +          ),
    1.81 +          "satisfied_informed_supporter_count" = (
    1.82 +            SELECT coalesce(sum("di"."weight"), 0)
    1.83 +            FROM "direct_interest_snapshot" AS "di"
    1.84 +            JOIN "direct_supporter_snapshot" AS "ds"
    1.85 +            ON "di"."member_id" = "ds"."member_id"
    1.86 +            WHERE "di"."issue_id" = "issue_id_p"
    1.87 +            AND "di"."event" = 'periodic'
    1.88 +            AND "ds"."initiative_id" = "initiative_id_v"
    1.89 +            AND "ds"."event" = 'periodic'
    1.90 +            AND "ds"."informed"
    1.91 +            AND "ds"."satisfied"
    1.92 +          )
    1.93 +          WHERE "id" = "initiative_id_v";
    1.94 +        FOR "suggestion_id_v" IN
    1.95 +          SELECT "id" FROM "suggestion"
    1.96 +          WHERE "initiative_id" = "initiative_id_v"
    1.97 +        LOOP
    1.98 +          UPDATE "suggestion" SET
    1.99 +            "minus2_unfulfilled_count" = (
   1.100 +              SELECT coalesce(sum("snapshot"."weight"), 0)
   1.101 +              FROM "issue" CROSS JOIN "opinion"
   1.102 +              JOIN "direct_interest_snapshot" AS "snapshot"
   1.103 +              ON "snapshot"."issue_id" = "issue"."id"
   1.104 +              AND "snapshot"."event" = "issue"."latest_snapshot_event"
   1.105 +              AND "snapshot"."member_id" = "opinion"."member_id"
   1.106 +              WHERE "issue"."id" = "issue_id_p"
   1.107 +              AND "opinion"."suggestion_id" = "suggestion_id_v"
   1.108 +              AND "opinion"."degree" = -2
   1.109 +              AND "opinion"."fulfilled" = FALSE
   1.110 +            ),
   1.111 +            "minus2_fulfilled_count" = (
   1.112 +              SELECT coalesce(sum("snapshot"."weight"), 0)
   1.113 +              FROM "issue" CROSS JOIN "opinion"
   1.114 +              JOIN "direct_interest_snapshot" AS "snapshot"
   1.115 +              ON "snapshot"."issue_id" = "issue"."id"
   1.116 +              AND "snapshot"."event" = "issue"."latest_snapshot_event"
   1.117 +              AND "snapshot"."member_id" = "opinion"."member_id"
   1.118 +              WHERE "issue"."id" = "issue_id_p"
   1.119 +              AND "opinion"."suggestion_id" = "suggestion_id_v"
   1.120 +              AND "opinion"."degree" = -2
   1.121 +              AND "opinion"."fulfilled" = TRUE
   1.122 +            ),
   1.123 +            "minus1_unfulfilled_count" = (
   1.124 +              SELECT coalesce(sum("snapshot"."weight"), 0)
   1.125 +              FROM "issue" CROSS JOIN "opinion"
   1.126 +              JOIN "direct_interest_snapshot" AS "snapshot"
   1.127 +              ON "snapshot"."issue_id" = "issue"."id"
   1.128 +              AND "snapshot"."event" = "issue"."latest_snapshot_event"
   1.129 +              AND "snapshot"."member_id" = "opinion"."member_id"
   1.130 +              WHERE "issue"."id" = "issue_id_p"
   1.131 +              AND "opinion"."suggestion_id" = "suggestion_id_v"
   1.132 +              AND "opinion"."degree" = -1
   1.133 +              AND "opinion"."fulfilled" = FALSE
   1.134 +            ),
   1.135 +            "minus1_fulfilled_count" = (
   1.136 +              SELECT coalesce(sum("snapshot"."weight"), 0)
   1.137 +              FROM "issue" CROSS JOIN "opinion"
   1.138 +              JOIN "direct_interest_snapshot" AS "snapshot"
   1.139 +              ON "snapshot"."issue_id" = "issue"."id"
   1.140 +              AND "snapshot"."event" = "issue"."latest_snapshot_event"
   1.141 +              AND "snapshot"."member_id" = "opinion"."member_id"
   1.142 +              WHERE "issue"."id" = "issue_id_p"
   1.143 +              AND "opinion"."suggestion_id" = "suggestion_id_v"
   1.144 +              AND "opinion"."degree" = -1
   1.145 +              AND "opinion"."fulfilled" = TRUE
   1.146 +            ),
   1.147 +            "plus1_unfulfilled_count" = (
   1.148 +              SELECT coalesce(sum("snapshot"."weight"), 0)
   1.149 +              FROM "issue" CROSS JOIN "opinion"
   1.150 +              JOIN "direct_interest_snapshot" AS "snapshot"
   1.151 +              ON "snapshot"."issue_id" = "issue"."id"
   1.152 +              AND "snapshot"."event" = "issue"."latest_snapshot_event"
   1.153 +              AND "snapshot"."member_id" = "opinion"."member_id"
   1.154 +              WHERE "issue"."id" = "issue_id_p"
   1.155 +              AND "opinion"."suggestion_id" = "suggestion_id_v"
   1.156 +              AND "opinion"."degree" = 1
   1.157 +              AND "opinion"."fulfilled" = FALSE
   1.158 +            ),
   1.159 +            "plus1_fulfilled_count" = (
   1.160 +              SELECT coalesce(sum("snapshot"."weight"), 0)
   1.161 +              FROM "issue" CROSS JOIN "opinion"
   1.162 +              JOIN "direct_interest_snapshot" AS "snapshot"
   1.163 +              ON "snapshot"."issue_id" = "issue"."id"
   1.164 +              AND "snapshot"."event" = "issue"."latest_snapshot_event"
   1.165 +              AND "snapshot"."member_id" = "opinion"."member_id"
   1.166 +              WHERE "issue"."id" = "issue_id_p"
   1.167 +              AND "opinion"."suggestion_id" = "suggestion_id_v"
   1.168 +              AND "opinion"."degree" = 1
   1.169 +              AND "opinion"."fulfilled" = TRUE
   1.170 +            ),
   1.171 +            "plus2_unfulfilled_count" = (
   1.172 +              SELECT coalesce(sum("snapshot"."weight"), 0)
   1.173 +              FROM "issue" CROSS JOIN "opinion"
   1.174 +              JOIN "direct_interest_snapshot" AS "snapshot"
   1.175 +              ON "snapshot"."issue_id" = "issue"."id"
   1.176 +              AND "snapshot"."event" = "issue"."latest_snapshot_event"
   1.177 +              AND "snapshot"."member_id" = "opinion"."member_id"
   1.178 +              WHERE "issue"."id" = "issue_id_p"
   1.179 +              AND "opinion"."suggestion_id" = "suggestion_id_v"
   1.180 +              AND "opinion"."degree" = 2
   1.181 +              AND "opinion"."fulfilled" = FALSE
   1.182 +            ),
   1.183 +            "plus2_fulfilled_count" = (
   1.184 +              SELECT coalesce(sum("snapshot"."weight"), 0)
   1.185 +              FROM "issue" CROSS JOIN "opinion"
   1.186 +              JOIN "direct_interest_snapshot" AS "snapshot"
   1.187 +              ON "snapshot"."issue_id" = "issue"."id"
   1.188 +              AND "snapshot"."event" = "issue"."latest_snapshot_event"
   1.189 +              AND "snapshot"."member_id" = "opinion"."member_id"
   1.190 +              WHERE "issue"."id" = "issue_id_p"
   1.191 +              AND "opinion"."suggestion_id" = "suggestion_id_v"
   1.192 +              AND "opinion"."degree" = 2
   1.193 +              AND "opinion"."fulfilled" = TRUE
   1.194 +            )
   1.195 +            WHERE "suggestion"."id" = "suggestion_id_v";
   1.196 +        END LOOP;
   1.197 +      END LOOP;
   1.198 +      RETURN;
   1.199 +    END;
   1.200 +  $$;
   1.201 +
   1.202 +COMMIT;

Impressum / About Us