liquid_feedback_core

diff core.sql @ 61:598af132a6f9

Save battle data from calls of "clean_issue"("issue"."id")

Details:
- Calling "clean_issue" is also allowed before ranks are calculated
- View "battle" was renamed to "battle_view"
- "battle_view" only contains entries for closed issues
- New table "battle", which is filled when an issue is closed
- Version change to v1.2.2
- Update script to v1.2.2 materializes battles of existent (closed) issues
author jbe
date Tue Jul 20 00:53:30 2010 +0200 (2010-07-20)
parents fdd1729d7e2a
children 1af482e378a1
line diff
     1.1 --- a/core.sql	Mon Jul 19 22:52:21 2010 +0200
     1.2 +++ b/core.sql	Tue Jul 20 00:53:30 2010 +0200
     1.3 @@ -6,7 +6,7 @@
     1.4  BEGIN;
     1.5  
     1.6  CREATE VIEW "liquid_feedback_version" AS
     1.7 -  SELECT * FROM (VALUES ('1.2.1', 1, 2, 1))
     1.8 +  SELECT * FROM (VALUES ('1.2.2', 1, 2, 2))
     1.9    AS "subquery"("string", "major", "minor", "revision");
    1.10  
    1.11  
    1.12 @@ -367,12 +367,8 @@
    1.13            "accepted"     <= "half_frozen" AND
    1.14            "half_frozen"  <= "fully_frozen" AND
    1.15            "fully_frozen" <= "closed" ),
    1.16 -        CONSTRAINT "clean_restriction" CHECK (
    1.17 -          "cleaned" ISNULL OR (
    1.18 -            "closed" NOTNULL AND (
    1.19 -              "fully_frozen" ISNULL OR "ranks_available"
    1.20 -            )
    1.21 -          ) ),
    1.22 +        CONSTRAINT "only_closed_issues_may_be_cleaned" CHECK (
    1.23 +          "cleaned" ISNULL OR "closed" NOTNULL ),
    1.24          CONSTRAINT "last_snapshot_on_full_freeze"
    1.25            CHECK ("snapshot" = "fully_frozen"),  -- NOTE: snapshot can be set, while frozen is NULL yet
    1.26          CONSTRAINT "freeze_requires_snapshot"
    1.27 @@ -472,6 +468,18 @@
    1.28  COMMENT ON COLUMN "initiative"."rank"           IS 'Rank of approved initiatives (winner is 1), calculated from table "direct_voter"';
    1.29  
    1.30  
    1.31 +CREATE TABLE "battle" (
    1.32 +        PRIMARY KEY ("issue_id", "winning_initiative_id", "losing_initiative_id"),
    1.33 +        "issue_id"              INT4,
    1.34 +        "winning_initiative_id" INT4,
    1.35 +        FOREIGN KEY ("issue_id", "winning_initiative_id") REFERENCES "initiative" ("issue_id", "id") ON DELETE CASCADE ON UPDATE CASCADE,
    1.36 +        "losing_initiative_id"  INT4,
    1.37 +        FOREIGN KEY ("issue_id", "losing_initiative_id") REFERENCES "initiative" ("issue_id", "id") ON DELETE CASCADE ON UPDATE CASCADE,
    1.38 +        "count"                 INT4            NOT NULL);
    1.39 +
    1.40 +COMMENT ON TABLE "battle" IS 'Number of members preferring one initiative to another; Filled by "battle_view" when closing an issue';
    1.41 +
    1.42 +
    1.43  CREATE TABLE "initiative_setting" (
    1.44          PRIMARY KEY ("member_id", "key", "initiative_id"),
    1.45          "member_id"             INT4            REFERENCES "member" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
    1.46 @@ -1428,7 +1436,7 @@
    1.47  COMMENT ON VIEW "critical_opinion" IS 'Opinions currently causing dissatisfaction';
    1.48  
    1.49  
    1.50 -CREATE VIEW "battle" AS
    1.51 +CREATE VIEW "battle_view" AS
    1.52    SELECT
    1.53      "issue"."id" AS "issue_id",
    1.54      "winning_initiative"."id" AS "winning_initiative_id",
    1.55 @@ -1454,14 +1462,15 @@
    1.56    LEFT JOIN "vote" AS "worse_vote"
    1.57      ON "direct_voter"."member_id" = "worse_vote"."member_id"
    1.58      AND "losing_initiative"."id" = "worse_vote"."initiative_id"
    1.59 -  WHERE
    1.60 -    "winning_initiative"."id" != "losing_initiative"."id"
    1.61 +  WHERE "issue"."closed" NOTNULL
    1.62 +  AND "issue"."cleaned" ISNULL
    1.63 +  AND "winning_initiative"."id" != "losing_initiative"."id"
    1.64    GROUP BY
    1.65      "issue"."id",
    1.66      "winning_initiative"."id",
    1.67      "losing_initiative"."id";
    1.68  
    1.69 -COMMENT ON VIEW "battle" IS 'Number of members preferring one initiative over another';
    1.70 +COMMENT ON VIEW "battle_view" IS 'Number of members preferring one initiative to another; Used to fill "battle" table';
    1.71  
    1.72  
    1.73  CREATE VIEW "expired_session" AS
    1.74 @@ -2711,6 +2720,7 @@
    1.75        END LOOP;
    1.76        PERFORM "add_vote_delegations"("issue_id_p");
    1.77        UPDATE "issue" SET
    1.78 +        "closed" = now(),
    1.79          "voter_count" = (
    1.80            SELECT coalesce(sum("weight"), 0)
    1.81            FROM "direct_voter" WHERE "issue_id" = "issue_id_p"
    1.82 @@ -2760,7 +2770,17 @@
    1.83          WHERE "vote_counts"."initiative_id" = "initiative"."id"
    1.84          AND "issue"."id" = "initiative"."issue_id"
    1.85          AND "policy"."id" = "issue"."policy_id";
    1.86 -      UPDATE "issue" SET "closed" = now() WHERE "id" = "issue_id_p";
    1.87 +      -- NOTE: "closed" column of issue must be set at this point
    1.88 +      DELETE FROM "battle" WHERE "issue_id" = "issue_id_p";
    1.89 +      INSERT INTO "battle" (
    1.90 +        "issue_id",
    1.91 +        "winning_initiative_id", "losing_initiative_id",
    1.92 +        "count"
    1.93 +      ) SELECT
    1.94 +        "issue_id",
    1.95 +        "winning_initiative_id", "losing_initiative_id",
    1.96 +        "count"
    1.97 +        FROM "battle_view" WHERE "issue_id" = "issue_id_p";
    1.98      END;
    1.99    $$;
   1.100  

Impressum / About Us