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;