| rev | 
   line source | 
| 
jbe@36
 | 
     1 BEGIN;
 | 
| 
jbe@36
 | 
     2 
 | 
| 
jbe@36
 | 
     3 CREATE OR REPLACE VIEW "liquid_feedback_version" AS
 | 
| 
jbe@36
 | 
     4   SELECT * FROM (VALUES ('beta23', NULL, NULL, NULL))
 | 
| 
jbe@36
 | 
     5   AS "subquery"("string", "major", "minor", "revision");
 | 
| 
jbe@36
 | 
     6 
 | 
| 
jbe@36
 | 
     7 CREATE OR REPLACE FUNCTION "create_snapshot"
 | 
| 
jbe@36
 | 
     8   ( "issue_id_p" "issue"."id"%TYPE )
 | 
| 
jbe@36
 | 
     9   RETURNS VOID
 | 
| 
jbe@36
 | 
    10   LANGUAGE 'plpgsql' VOLATILE AS $$
 | 
| 
jbe@36
 | 
    11     DECLARE
 | 
| 
jbe@36
 | 
    12       "initiative_id_v"    "initiative"."id"%TYPE;
 | 
| 
jbe@36
 | 
    13       "suggestion_id_v"    "suggestion"."id"%TYPE;
 | 
| 
jbe@36
 | 
    14     BEGIN
 | 
| 
jbe@36
 | 
    15       PERFORM "global_lock"();
 | 
| 
jbe@36
 | 
    16       PERFORM "create_population_snapshot"("issue_id_p");
 | 
| 
jbe@36
 | 
    17       PERFORM "create_interest_snapshot"("issue_id_p");
 | 
| 
jbe@36
 | 
    18       UPDATE "issue" SET
 | 
| 
jbe@36
 | 
    19         "snapshot" = now(),
 | 
| 
jbe@36
 | 
    20         "latest_snapshot_event" = 'periodic',
 | 
| 
jbe@36
 | 
    21         "population" = (
 | 
| 
jbe@36
 | 
    22           SELECT coalesce(sum("weight"), 0)
 | 
| 
jbe@36
 | 
    23           FROM "direct_population_snapshot"
 | 
| 
jbe@36
 | 
    24           WHERE "issue_id" = "issue_id_p"
 | 
| 
jbe@36
 | 
    25           AND "event" = 'periodic'
 | 
| 
jbe@36
 | 
    26         ),
 | 
| 
jbe@36
 | 
    27         "vote_now" = (
 | 
| 
jbe@36
 | 
    28           SELECT coalesce(sum("weight"), 0)
 | 
| 
jbe@36
 | 
    29           FROM "direct_interest_snapshot"
 | 
| 
jbe@36
 | 
    30           WHERE "issue_id" = "issue_id_p"
 | 
| 
jbe@36
 | 
    31           AND "event" = 'periodic'
 | 
| 
jbe@36
 | 
    32           AND "voting_requested" = TRUE
 | 
| 
jbe@36
 | 
    33         ),
 | 
| 
jbe@36
 | 
    34         "vote_later" = (
 | 
| 
jbe@36
 | 
    35           SELECT coalesce(sum("weight"), 0)
 | 
| 
jbe@36
 | 
    36           FROM "direct_interest_snapshot"
 | 
| 
jbe@36
 | 
    37           WHERE "issue_id" = "issue_id_p"
 | 
| 
jbe@36
 | 
    38           AND "event" = 'periodic'
 | 
| 
jbe@36
 | 
    39           AND "voting_requested" = FALSE
 | 
| 
jbe@36
 | 
    40         )
 | 
| 
jbe@36
 | 
    41         WHERE "id" = "issue_id_p";
 | 
| 
jbe@36
 | 
    42       FOR "initiative_id_v" IN
 | 
| 
jbe@36
 | 
    43         SELECT "id" FROM "initiative" WHERE "issue_id" = "issue_id_p"
 | 
| 
jbe@36
 | 
    44       LOOP
 | 
| 
jbe@36
 | 
    45         UPDATE "initiative" SET
 | 
| 
jbe@36
 | 
    46           "supporter_count" = (
 | 
| 
jbe@36
 | 
    47             SELECT coalesce(sum("di"."weight"), 0)
 | 
| 
jbe@36
 | 
    48             FROM "direct_interest_snapshot" AS "di"
 | 
| 
jbe@36
 | 
    49             JOIN "direct_supporter_snapshot" AS "ds"
 | 
| 
jbe@36
 | 
    50             ON "di"."member_id" = "ds"."member_id"
 | 
| 
jbe@36
 | 
    51             WHERE "di"."issue_id" = "issue_id_p"
 | 
| 
jbe@36
 | 
    52             AND "di"."event" = 'periodic'
 | 
| 
jbe@36
 | 
    53             AND "ds"."initiative_id" = "initiative_id_v"
 | 
| 
jbe@36
 | 
    54             AND "ds"."event" = 'periodic'
 | 
| 
jbe@36
 | 
    55           ),
 | 
| 
jbe@36
 | 
    56           "informed_supporter_count" = (
 | 
| 
jbe@36
 | 
    57             SELECT coalesce(sum("di"."weight"), 0)
 | 
| 
jbe@36
 | 
    58             FROM "direct_interest_snapshot" AS "di"
 | 
| 
jbe@36
 | 
    59             JOIN "direct_supporter_snapshot" AS "ds"
 | 
| 
jbe@36
 | 
    60             ON "di"."member_id" = "ds"."member_id"
 | 
| 
jbe@36
 | 
    61             WHERE "di"."issue_id" = "issue_id_p"
 | 
| 
jbe@36
 | 
    62             AND "di"."event" = 'periodic'
 | 
| 
jbe@36
 | 
    63             AND "ds"."initiative_id" = "initiative_id_v"
 | 
| 
jbe@36
 | 
    64             AND "ds"."event" = 'periodic'
 | 
| 
jbe@36
 | 
    65             AND "ds"."informed"
 | 
| 
jbe@36
 | 
    66           ),
 | 
| 
jbe@36
 | 
    67           "satisfied_supporter_count" = (
 | 
| 
jbe@36
 | 
    68             SELECT coalesce(sum("di"."weight"), 0)
 | 
| 
jbe@36
 | 
    69             FROM "direct_interest_snapshot" AS "di"
 | 
| 
jbe@36
 | 
    70             JOIN "direct_supporter_snapshot" AS "ds"
 | 
| 
jbe@36
 | 
    71             ON "di"."member_id" = "ds"."member_id"
 | 
| 
jbe@36
 | 
    72             WHERE "di"."issue_id" = "issue_id_p"
 | 
| 
jbe@36
 | 
    73             AND "di"."event" = 'periodic'
 | 
| 
jbe@36
 | 
    74             AND "ds"."initiative_id" = "initiative_id_v"
 | 
| 
jbe@36
 | 
    75             AND "ds"."event" = 'periodic'
 | 
| 
jbe@36
 | 
    76             AND "ds"."satisfied"
 | 
| 
jbe@36
 | 
    77           ),
 | 
| 
jbe@36
 | 
    78           "satisfied_informed_supporter_count" = (
 | 
| 
jbe@36
 | 
    79             SELECT coalesce(sum("di"."weight"), 0)
 | 
| 
jbe@36
 | 
    80             FROM "direct_interest_snapshot" AS "di"
 | 
| 
jbe@36
 | 
    81             JOIN "direct_supporter_snapshot" AS "ds"
 | 
| 
jbe@36
 | 
    82             ON "di"."member_id" = "ds"."member_id"
 | 
| 
jbe@36
 | 
    83             WHERE "di"."issue_id" = "issue_id_p"
 | 
| 
jbe@36
 | 
    84             AND "di"."event" = 'periodic'
 | 
| 
jbe@36
 | 
    85             AND "ds"."initiative_id" = "initiative_id_v"
 | 
| 
jbe@36
 | 
    86             AND "ds"."event" = 'periodic'
 | 
| 
jbe@36
 | 
    87             AND "ds"."informed"
 | 
| 
jbe@36
 | 
    88             AND "ds"."satisfied"
 | 
| 
jbe@36
 | 
    89           )
 | 
| 
jbe@36
 | 
    90           WHERE "id" = "initiative_id_v";
 | 
| 
jbe@36
 | 
    91         FOR "suggestion_id_v" IN
 | 
| 
jbe@36
 | 
    92           SELECT "id" FROM "suggestion"
 | 
| 
jbe@36
 | 
    93           WHERE "initiative_id" = "initiative_id_v"
 | 
| 
jbe@36
 | 
    94         LOOP
 | 
| 
jbe@36
 | 
    95           UPDATE "suggestion" SET
 | 
| 
jbe@36
 | 
    96             "minus2_unfulfilled_count" = (
 | 
| 
jbe@36
 | 
    97               SELECT coalesce(sum("snapshot"."weight"), 0)
 | 
| 
jbe@36
 | 
    98               FROM "issue" CROSS JOIN "opinion"
 | 
| 
jbe@36
 | 
    99               JOIN "direct_interest_snapshot" AS "snapshot"
 | 
| 
jbe@36
 | 
   100               ON "snapshot"."issue_id" = "issue"."id"
 | 
| 
jbe@36
 | 
   101               AND "snapshot"."event" = "issue"."latest_snapshot_event"
 | 
| 
jbe@36
 | 
   102               AND "snapshot"."member_id" = "opinion"."member_id"
 | 
| 
jbe@36
 | 
   103               WHERE "issue"."id" = "issue_id_p"
 | 
| 
jbe@36
 | 
   104               AND "opinion"."suggestion_id" = "suggestion_id_v"
 | 
| 
jbe@36
 | 
   105               AND "opinion"."degree" = -2
 | 
| 
jbe@36
 | 
   106               AND "opinion"."fulfilled" = FALSE
 | 
| 
jbe@36
 | 
   107             ),
 | 
| 
jbe@36
 | 
   108             "minus2_fulfilled_count" = (
 | 
| 
jbe@36
 | 
   109               SELECT coalesce(sum("snapshot"."weight"), 0)
 | 
| 
jbe@36
 | 
   110               FROM "issue" CROSS JOIN "opinion"
 | 
| 
jbe@36
 | 
   111               JOIN "direct_interest_snapshot" AS "snapshot"
 | 
| 
jbe@36
 | 
   112               ON "snapshot"."issue_id" = "issue"."id"
 | 
| 
jbe@36
 | 
   113               AND "snapshot"."event" = "issue"."latest_snapshot_event"
 | 
| 
jbe@36
 | 
   114               AND "snapshot"."member_id" = "opinion"."member_id"
 | 
| 
jbe@36
 | 
   115               WHERE "issue"."id" = "issue_id_p"
 | 
| 
jbe@36
 | 
   116               AND "opinion"."suggestion_id" = "suggestion_id_v"
 | 
| 
jbe@36
 | 
   117               AND "opinion"."degree" = -2
 | 
| 
jbe@36
 | 
   118               AND "opinion"."fulfilled" = TRUE
 | 
| 
jbe@36
 | 
   119             ),
 | 
| 
jbe@36
 | 
   120             "minus1_unfulfilled_count" = (
 | 
| 
jbe@36
 | 
   121               SELECT coalesce(sum("snapshot"."weight"), 0)
 | 
| 
jbe@36
 | 
   122               FROM "issue" CROSS JOIN "opinion"
 | 
| 
jbe@36
 | 
   123               JOIN "direct_interest_snapshot" AS "snapshot"
 | 
| 
jbe@36
 | 
   124               ON "snapshot"."issue_id" = "issue"."id"
 | 
| 
jbe@36
 | 
   125               AND "snapshot"."event" = "issue"."latest_snapshot_event"
 | 
| 
jbe@36
 | 
   126               AND "snapshot"."member_id" = "opinion"."member_id"
 | 
| 
jbe@36
 | 
   127               WHERE "issue"."id" = "issue_id_p"
 | 
| 
jbe@36
 | 
   128               AND "opinion"."suggestion_id" = "suggestion_id_v"
 | 
| 
jbe@36
 | 
   129               AND "opinion"."degree" = -1
 | 
| 
jbe@36
 | 
   130               AND "opinion"."fulfilled" = FALSE
 | 
| 
jbe@36
 | 
   131             ),
 | 
| 
jbe@36
 | 
   132             "minus1_fulfilled_count" = (
 | 
| 
jbe@36
 | 
   133               SELECT coalesce(sum("snapshot"."weight"), 0)
 | 
| 
jbe@36
 | 
   134               FROM "issue" CROSS JOIN "opinion"
 | 
| 
jbe@36
 | 
   135               JOIN "direct_interest_snapshot" AS "snapshot"
 | 
| 
jbe@36
 | 
   136               ON "snapshot"."issue_id" = "issue"."id"
 | 
| 
jbe@36
 | 
   137               AND "snapshot"."event" = "issue"."latest_snapshot_event"
 | 
| 
jbe@36
 | 
   138               AND "snapshot"."member_id" = "opinion"."member_id"
 | 
| 
jbe@36
 | 
   139               WHERE "issue"."id" = "issue_id_p"
 | 
| 
jbe@36
 | 
   140               AND "opinion"."suggestion_id" = "suggestion_id_v"
 | 
| 
jbe@36
 | 
   141               AND "opinion"."degree" = -1
 | 
| 
jbe@36
 | 
   142               AND "opinion"."fulfilled" = TRUE
 | 
| 
jbe@36
 | 
   143             ),
 | 
| 
jbe@36
 | 
   144             "plus1_unfulfilled_count" = (
 | 
| 
jbe@36
 | 
   145               SELECT coalesce(sum("snapshot"."weight"), 0)
 | 
| 
jbe@36
 | 
   146               FROM "issue" CROSS JOIN "opinion"
 | 
| 
jbe@36
 | 
   147               JOIN "direct_interest_snapshot" AS "snapshot"
 | 
| 
jbe@36
 | 
   148               ON "snapshot"."issue_id" = "issue"."id"
 | 
| 
jbe@36
 | 
   149               AND "snapshot"."event" = "issue"."latest_snapshot_event"
 | 
| 
jbe@36
 | 
   150               AND "snapshot"."member_id" = "opinion"."member_id"
 | 
| 
jbe@36
 | 
   151               WHERE "issue"."id" = "issue_id_p"
 | 
| 
jbe@36
 | 
   152               AND "opinion"."suggestion_id" = "suggestion_id_v"
 | 
| 
jbe@36
 | 
   153               AND "opinion"."degree" = 1
 | 
| 
jbe@36
 | 
   154               AND "opinion"."fulfilled" = FALSE
 | 
| 
jbe@36
 | 
   155             ),
 | 
| 
jbe@36
 | 
   156             "plus1_fulfilled_count" = (
 | 
| 
jbe@36
 | 
   157               SELECT coalesce(sum("snapshot"."weight"), 0)
 | 
| 
jbe@36
 | 
   158               FROM "issue" CROSS JOIN "opinion"
 | 
| 
jbe@36
 | 
   159               JOIN "direct_interest_snapshot" AS "snapshot"
 | 
| 
jbe@36
 | 
   160               ON "snapshot"."issue_id" = "issue"."id"
 | 
| 
jbe@36
 | 
   161               AND "snapshot"."event" = "issue"."latest_snapshot_event"
 | 
| 
jbe@36
 | 
   162               AND "snapshot"."member_id" = "opinion"."member_id"
 | 
| 
jbe@36
 | 
   163               WHERE "issue"."id" = "issue_id_p"
 | 
| 
jbe@36
 | 
   164               AND "opinion"."suggestion_id" = "suggestion_id_v"
 | 
| 
jbe@36
 | 
   165               AND "opinion"."degree" = 1
 | 
| 
jbe@36
 | 
   166               AND "opinion"."fulfilled" = TRUE
 | 
| 
jbe@36
 | 
   167             ),
 | 
| 
jbe@36
 | 
   168             "plus2_unfulfilled_count" = (
 | 
| 
jbe@36
 | 
   169               SELECT coalesce(sum("snapshot"."weight"), 0)
 | 
| 
jbe@36
 | 
   170               FROM "issue" CROSS JOIN "opinion"
 | 
| 
jbe@36
 | 
   171               JOIN "direct_interest_snapshot" AS "snapshot"
 | 
| 
jbe@36
 | 
   172               ON "snapshot"."issue_id" = "issue"."id"
 | 
| 
jbe@36
 | 
   173               AND "snapshot"."event" = "issue"."latest_snapshot_event"
 | 
| 
jbe@36
 | 
   174               AND "snapshot"."member_id" = "opinion"."member_id"
 | 
| 
jbe@36
 | 
   175               WHERE "issue"."id" = "issue_id_p"
 | 
| 
jbe@36
 | 
   176               AND "opinion"."suggestion_id" = "suggestion_id_v"
 | 
| 
jbe@36
 | 
   177               AND "opinion"."degree" = 2
 | 
| 
jbe@36
 | 
   178               AND "opinion"."fulfilled" = FALSE
 | 
| 
jbe@36
 | 
   179             ),
 | 
| 
jbe@36
 | 
   180             "plus2_fulfilled_count" = (
 | 
| 
jbe@36
 | 
   181               SELECT coalesce(sum("snapshot"."weight"), 0)
 | 
| 
jbe@36
 | 
   182               FROM "issue" CROSS JOIN "opinion"
 | 
| 
jbe@36
 | 
   183               JOIN "direct_interest_snapshot" AS "snapshot"
 | 
| 
jbe@36
 | 
   184               ON "snapshot"."issue_id" = "issue"."id"
 | 
| 
jbe@36
 | 
   185               AND "snapshot"."event" = "issue"."latest_snapshot_event"
 | 
| 
jbe@36
 | 
   186               AND "snapshot"."member_id" = "opinion"."member_id"
 | 
| 
jbe@36
 | 
   187               WHERE "issue"."id" = "issue_id_p"
 | 
| 
jbe@36
 | 
   188               AND "opinion"."suggestion_id" = "suggestion_id_v"
 | 
| 
jbe@36
 | 
   189               AND "opinion"."degree" = 2
 | 
| 
jbe@36
 | 
   190               AND "opinion"."fulfilled" = TRUE
 | 
| 
jbe@36
 | 
   191             )
 | 
| 
jbe@36
 | 
   192             WHERE "suggestion"."id" = "suggestion_id_v";
 | 
| 
jbe@36
 | 
   193         END LOOP;
 | 
| 
jbe@36
 | 
   194       END LOOP;
 | 
| 
jbe@36
 | 
   195       RETURN;
 | 
| 
jbe@36
 | 
   196     END;
 | 
| 
jbe@36
 | 
   197   $$;
 | 
| 
jbe@36
 | 
   198 
 | 
| 
jbe@36
 | 
   199 COMMIT;
 |