| rev | 
   line source | 
| 
jbe@517
 | 
     1 BEGIN;
 | 
| 
jbe@517
 | 
     2 
 | 
| 
jbe@517
 | 
     3 CREATE OR REPLACE VIEW "liquid_feedback_version" AS
 | 
| 
jbe@517
 | 
     4   SELECT * FROM (VALUES ('3.2.1', 3, 2, 1))
 | 
| 
jbe@517
 | 
     5   AS "subquery"("string", "major", "minor", "revision");
 | 
| 
jbe@517
 | 
     6 
 | 
| 
jbe@517
 | 
     7 CREATE OR REPLACE FUNCTION "get_initiatives_for_notification"
 | 
| 
jbe@517
 | 
     8   ( "recipient_id_p" "member"."id"%TYPE )
 | 
| 
jbe@517
 | 
     9   RETURNS SETOF "initiative_for_notification"
 | 
| 
jbe@517
 | 
    10   LANGUAGE 'plpgsql' VOLATILE AS $$
 | 
| 
jbe@517
 | 
    11     DECLARE
 | 
| 
jbe@517
 | 
    12       "result_row"           "initiative_for_notification"%ROWTYPE;
 | 
| 
jbe@517
 | 
    13       "last_draft_id_v"      "draft"."id"%TYPE;
 | 
| 
jbe@517
 | 
    14       "last_suggestion_id_v" "suggestion"."id"%TYPE;
 | 
| 
jbe@517
 | 
    15     BEGIN
 | 
| 
jbe@517
 | 
    16       PERFORM "require_transaction_isolation"();
 | 
| 
jbe@517
 | 
    17       PERFORM NULL FROM "member" WHERE "id" = "recipient_id_p" FOR UPDATE;
 | 
| 
jbe@517
 | 
    18       FOR "result_row" IN
 | 
| 
jbe@517
 | 
    19         SELECT * FROM "initiative_for_notification"
 | 
| 
jbe@517
 | 
    20         WHERE "recipient_id" = "recipient_id_p"
 | 
| 
jbe@517
 | 
    21       LOOP
 | 
| 
jbe@517
 | 
    22         SELECT "id" INTO "last_draft_id_v" FROM "draft"
 | 
| 
jbe@517
 | 
    23           WHERE "draft"."initiative_id" = "result_row"."initiative_id"
 | 
| 
jbe@517
 | 
    24           ORDER BY "id" DESC LIMIT 1;
 | 
| 
jbe@517
 | 
    25         SELECT "id" INTO "last_suggestion_id_v" FROM "suggestion"
 | 
| 
jbe@517
 | 
    26           WHERE "suggestion"."initiative_id" = "result_row"."initiative_id"
 | 
| 
jbe@517
 | 
    27           ORDER BY "id" DESC LIMIT 1;
 | 
| 
jbe@517
 | 
    28         /* compatibility with PostgreSQL 9.1 */
 | 
| 
jbe@517
 | 
    29         DELETE FROM "notification_initiative_sent"
 | 
| 
jbe@517
 | 
    30           WHERE "member_id" = "recipient_id_p"
 | 
| 
jbe@517
 | 
    31           AND "initiative_id" = "result_row"."initiative_id";
 | 
| 
jbe@517
 | 
    32         INSERT INTO "notification_initiative_sent"
 | 
| 
jbe@517
 | 
    33           ("member_id", "initiative_id", "last_draft_id", "last_suggestion_id")
 | 
| 
jbe@517
 | 
    34           VALUES (
 | 
| 
jbe@517
 | 
    35             "recipient_id_p",
 | 
| 
jbe@517
 | 
    36             "result_row"."initiative_id",
 | 
| 
jbe@517
 | 
    37             "last_draft_id_v",
 | 
| 
jbe@517
 | 
    38             "last_suggestion_id_v" );
 | 
| 
jbe@517
 | 
    39         /* TODO: use alternative code below, requires PostgreSQL 9.5 or higher
 | 
| 
jbe@517
 | 
    40         INSERT INTO "notification_initiative_sent"
 | 
| 
jbe@517
 | 
    41           ("member_id", "initiative_id", "last_draft_id", "last_suggestion_id")
 | 
| 
jbe@517
 | 
    42           VALUES (
 | 
| 
jbe@517
 | 
    43             "recipient_id_p",
 | 
| 
jbe@517
 | 
    44             "result_row"."initiative_id",
 | 
| 
jbe@517
 | 
    45             "last_draft_id_v",
 | 
| 
jbe@517
 | 
    46             "last_suggestion_id_v" )
 | 
| 
jbe@517
 | 
    47           ON CONFLICT ("member_id", "initiative_id") DO UPDATE SET
 | 
| 
jbe@517
 | 
    48             "last_draft_id" = "last_draft_id_v",
 | 
| 
jbe@517
 | 
    49             "last_suggestion_id" = "last_suggestion_id_v";
 | 
| 
jbe@517
 | 
    50         */
 | 
| 
jbe@517
 | 
    51         RETURN NEXT "result_row";
 | 
| 
jbe@517
 | 
    52       END LOOP;
 | 
| 
jbe@517
 | 
    53       DELETE FROM "notification_initiative_sent"
 | 
| 
jbe@517
 | 
    54         USING "initiative", "issue"
 | 
| 
jbe@517
 | 
    55         WHERE "notification_initiative_sent"."member_id" = "recipient_id_p"
 | 
| 
jbe@517
 | 
    56         AND "initiative"."id" = "notification_initiative_sent"."initiative_id"
 | 
| 
jbe@517
 | 
    57         AND "issue"."id" = "initiative"."issue_id"
 | 
| 
jbe@517
 | 
    58         AND ( "issue"."closed" NOTNULL OR "issue"."fully_frozen" NOTNULL );
 | 
| 
jbe@517
 | 
    59       UPDATE "member" SET
 | 
| 
jbe@517
 | 
    60         "notification_counter" = "notification_counter" + 1,
 | 
| 
jbe@517
 | 
    61         "notification_sent" = now()
 | 
| 
jbe@517
 | 
    62         WHERE "id" = "recipient_id_p";
 | 
| 
jbe@517
 | 
    63       RETURN;
 | 
| 
jbe@517
 | 
    64     END;
 | 
| 
jbe@517
 | 
    65   $$;
 | 
| 
jbe@517
 | 
    66 
 | 
| 
jbe@517
 | 
    67 COMMIT;
 |