liquid_feedback_core

diff update/core-update.v1.2.0-v1.2.1.sql @ 59:fdd1729d7e2a

New function clean_issue(issue.id), which deletes all discussion data and votes of an issue
author jbe
date Mon Jul 19 22:52:01 2010 +0200 (2010-07-19)
parents
children
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/update/core-update.v1.2.0-v1.2.1.sql	Mon Jul 19 22:52:01 2010 +0200
     1.3 @@ -0,0 +1,61 @@
     1.4 +BEGIN;
     1.5 +
     1.6 +CREATE OR REPLACE VIEW "liquid_feedback_version" AS
     1.7 +  SELECT * FROM (VALUES ('1.2.1', 1, 2, 1))
     1.8 +  AS "subquery"("string", "major", "minor", "revision");
     1.9 +
    1.10 +ALTER TABLE "issue" ADD COLUMN "cleaned" TIMESTAMPTZ;
    1.11 +ALTER TABLE "issue" ADD CONSTRAINT "clean_restriction"
    1.12 +  CHECK (
    1.13 +    "cleaned" ISNULL OR (
    1.14 +      "closed" NOTNULL AND (
    1.15 +        "fully_frozen" ISNULL OR "ranks_available"
    1.16 +      )
    1.17 +    )
    1.18 +  );
    1.19 +
    1.20 +COMMENT ON COLUMN "issue"."cleaned" IS 'Point in time, when discussion data and votes had been deleted';
    1.21 +
    1.22 +CREATE FUNCTION "clean_issue"("issue_id_p" "issue"."id"%TYPE)
    1.23 +  RETURNS VOID
    1.24 +  LANGUAGE 'plpgsql' VOLATILE AS $$
    1.25 +    DECLARE
    1.26 +      "issue_row" "issue"%ROWTYPE;
    1.27 +    BEGIN
    1.28 +      SELECT * INTO "issue_row"
    1.29 +        FROM "issue" WHERE "id" = "issue_id_p"
    1.30 +        FOR UPDATE;
    1.31 +      IF "issue_row"."cleaned" ISNULL THEN
    1.32 +        UPDATE "issue" SET
    1.33 +          "closed" = NULL,
    1.34 +          "ranks_available" = FALSE
    1.35 +          WHERE "id" = "issue_id_p";
    1.36 +        DELETE FROM "delegating_voter"
    1.37 +          WHERE "issue_id" = "issue_id_p";
    1.38 +        DELETE FROM "direct_voter"
    1.39 +          WHERE "issue_id" = "issue_id_p";
    1.40 +        DELETE FROM "delegating_interest_snapshot"
    1.41 +          WHERE "issue_id" = "issue_id_p";
    1.42 +        DELETE FROM "direct_interest_snapshot"
    1.43 +          WHERE "issue_id" = "issue_id_p";
    1.44 +        DELETE FROM "delegating_population_snapshot"
    1.45 +          WHERE "issue_id" = "issue_id_p";
    1.46 +        DELETE FROM "direct_population_snapshot"
    1.47 +          WHERE "issue_id" = "issue_id_p";
    1.48 +        DELETE FROM "delegation"
    1.49 +          WHERE "issue_id" = "issue_id_p";
    1.50 +        DELETE FROM "supporter"
    1.51 +          WHERE "issue_id" = "issue_id_p";
    1.52 +        UPDATE "issue" SET
    1.53 +          "closed"          = "issue_row"."closed",
    1.54 +          "ranks_available" = "issue_row"."ranks_available",
    1.55 +          "cleaned"         = now()
    1.56 +          WHERE "id" = "issue_id_p";
    1.57 +      END IF;
    1.58 +      RETURN;
    1.59 +    END;
    1.60 +  $$;
    1.61 +
    1.62 +COMMENT ON FUNCTION "clean_issue"("issue"."id"%TYPE) IS 'Delete discussion data and votes belonging to an issue';
    1.63 +
    1.64 +COMMIT;

Impressum / About Us