| rev | 
   line source | 
| 
jbe@59
 | 
     1 BEGIN;
 | 
| 
jbe@59
 | 
     2 
 | 
| 
jbe@59
 | 
     3 CREATE OR REPLACE VIEW "liquid_feedback_version" AS
 | 
| 
jbe@59
 | 
     4   SELECT * FROM (VALUES ('1.2.1', 1, 2, 1))
 | 
| 
jbe@59
 | 
     5   AS "subquery"("string", "major", "minor", "revision");
 | 
| 
jbe@59
 | 
     6 
 | 
| 
jbe@59
 | 
     7 ALTER TABLE "issue" ADD COLUMN "cleaned" TIMESTAMPTZ;
 | 
| 
jbe@59
 | 
     8 ALTER TABLE "issue" ADD CONSTRAINT "clean_restriction"
 | 
| 
jbe@59
 | 
     9   CHECK (
 | 
| 
jbe@59
 | 
    10     "cleaned" ISNULL OR (
 | 
| 
jbe@59
 | 
    11       "closed" NOTNULL AND (
 | 
| 
jbe@59
 | 
    12         "fully_frozen" ISNULL OR "ranks_available"
 | 
| 
jbe@59
 | 
    13       )
 | 
| 
jbe@59
 | 
    14     )
 | 
| 
jbe@59
 | 
    15   );
 | 
| 
jbe@59
 | 
    16 
 | 
| 
jbe@59
 | 
    17 COMMENT ON COLUMN "issue"."cleaned" IS 'Point in time, when discussion data and votes had been deleted';
 | 
| 
jbe@59
 | 
    18 
 | 
| 
jbe@59
 | 
    19 CREATE FUNCTION "clean_issue"("issue_id_p" "issue"."id"%TYPE)
 | 
| 
jbe@59
 | 
    20   RETURNS VOID
 | 
| 
jbe@59
 | 
    21   LANGUAGE 'plpgsql' VOLATILE AS $$
 | 
| 
jbe@59
 | 
    22     DECLARE
 | 
| 
jbe@59
 | 
    23       "issue_row" "issue"%ROWTYPE;
 | 
| 
jbe@59
 | 
    24     BEGIN
 | 
| 
jbe@59
 | 
    25       SELECT * INTO "issue_row"
 | 
| 
jbe@59
 | 
    26         FROM "issue" WHERE "id" = "issue_id_p"
 | 
| 
jbe@59
 | 
    27         FOR UPDATE;
 | 
| 
jbe@59
 | 
    28       IF "issue_row"."cleaned" ISNULL THEN
 | 
| 
jbe@59
 | 
    29         UPDATE "issue" SET
 | 
| 
jbe@59
 | 
    30           "closed" = NULL,
 | 
| 
jbe@59
 | 
    31           "ranks_available" = FALSE
 | 
| 
jbe@59
 | 
    32           WHERE "id" = "issue_id_p";
 | 
| 
jbe@59
 | 
    33         DELETE FROM "delegating_voter"
 | 
| 
jbe@59
 | 
    34           WHERE "issue_id" = "issue_id_p";
 | 
| 
jbe@59
 | 
    35         DELETE FROM "direct_voter"
 | 
| 
jbe@59
 | 
    36           WHERE "issue_id" = "issue_id_p";
 | 
| 
jbe@59
 | 
    37         DELETE FROM "delegating_interest_snapshot"
 | 
| 
jbe@59
 | 
    38           WHERE "issue_id" = "issue_id_p";
 | 
| 
jbe@59
 | 
    39         DELETE FROM "direct_interest_snapshot"
 | 
| 
jbe@59
 | 
    40           WHERE "issue_id" = "issue_id_p";
 | 
| 
jbe@59
 | 
    41         DELETE FROM "delegating_population_snapshot"
 | 
| 
jbe@59
 | 
    42           WHERE "issue_id" = "issue_id_p";
 | 
| 
jbe@59
 | 
    43         DELETE FROM "direct_population_snapshot"
 | 
| 
jbe@59
 | 
    44           WHERE "issue_id" = "issue_id_p";
 | 
| 
jbe@59
 | 
    45         DELETE FROM "delegation"
 | 
| 
jbe@59
 | 
    46           WHERE "issue_id" = "issue_id_p";
 | 
| 
jbe@59
 | 
    47         DELETE FROM "supporter"
 | 
| 
jbe@59
 | 
    48           WHERE "issue_id" = "issue_id_p";
 | 
| 
jbe@59
 | 
    49         UPDATE "issue" SET
 | 
| 
jbe@59
 | 
    50           "closed"          = "issue_row"."closed",
 | 
| 
jbe@59
 | 
    51           "ranks_available" = "issue_row"."ranks_available",
 | 
| 
jbe@59
 | 
    52           "cleaned"         = now()
 | 
| 
jbe@59
 | 
    53           WHERE "id" = "issue_id_p";
 | 
| 
jbe@59
 | 
    54       END IF;
 | 
| 
jbe@59
 | 
    55       RETURN;
 | 
| 
jbe@59
 | 
    56     END;
 | 
| 
jbe@59
 | 
    57   $$;
 | 
| 
jbe@59
 | 
    58 
 | 
| 
jbe@59
 | 
    59 COMMENT ON FUNCTION "clean_issue"("issue"."id"%TYPE) IS 'Delete discussion data and votes belonging to an issue';
 | 
| 
jbe@59
 | 
    60 
 | 
| 
jbe@59
 | 
    61 COMMIT;
 |