liquid_feedback_core

changeset 328:16803f8dfcf0

Stub (no implementation yet) for "phase_finished" field, allowing calculations to take more time without database locking
author jbe
date Sun Feb 10 23:23:17 2013 +0100 (2013-02-10)
parents ae0da58a9858
children b9e625add823
files core.sql
line diff
     1.1 --- a/core.sql	Sun Feb 10 19:14:29 2013 +0100
     1.2 +++ b/core.sql	Sun Feb 10 23:23:17 2013 +0100
     1.3 @@ -491,7 +491,6 @@
     1.4          'canceled_issue_not_accepted',
     1.5          'canceled_after_revocation_during_discussion',
     1.6          'canceled_after_revocation_during_verification',
     1.7 -        'calculation',
     1.8          'canceled_no_initiative_admitted',
     1.9          'finished_without_winner', 'finished_with_winner');
    1.10  
    1.11 @@ -503,12 +502,12 @@
    1.12          "area_id"               INT4            NOT NULL REFERENCES "area" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
    1.13          "policy_id"             INT4            NOT NULL REFERENCES "policy" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
    1.14          "state"                 "issue_state"   NOT NULL DEFAULT 'admission',
    1.15 +        "phase_finished"        TIMESTAMPTZ,
    1.16          "created"               TIMESTAMPTZ     NOT NULL DEFAULT now(),
    1.17          "accepted"              TIMESTAMPTZ,
    1.18          "half_frozen"           TIMESTAMPTZ,
    1.19          "fully_frozen"          TIMESTAMPTZ,
    1.20          "closed"                TIMESTAMPTZ,
    1.21 -        "ranks_available"       BOOLEAN         NOT NULL DEFAULT FALSE,
    1.22          "cleaned"               TIMESTAMPTZ,
    1.23          "admission_time"        INTERVAL,
    1.24          "discussion_time"       INTERVAL        NOT NULL,
    1.25 @@ -522,15 +521,10 @@
    1.26          CONSTRAINT "admission_time_not_null_unless_instantly_accepted" CHECK (
    1.27            "admission_time" NOTNULL OR ("accepted" NOTNULL AND "accepted" = "created") ),
    1.28          CONSTRAINT "valid_state" CHECK ((
    1.29 -          ("accepted" ISNULL  AND "half_frozen" ISNULL  AND "fully_frozen" ISNULL  AND "closed" ISNULL  AND "ranks_available" = FALSE) OR
    1.30 -          ("accepted" ISNULL  AND "half_frozen" ISNULL  AND "fully_frozen" ISNULL  AND "closed" NOTNULL AND "ranks_available" = FALSE) OR
    1.31 -          ("accepted" NOTNULL AND "half_frozen" ISNULL  AND "fully_frozen" ISNULL  AND "closed" ISNULL  AND "ranks_available" = FALSE) OR
    1.32 -          ("accepted" NOTNULL AND "half_frozen" ISNULL  AND "fully_frozen" ISNULL  AND "closed" NOTNULL AND "ranks_available" = FALSE) OR
    1.33 -          ("accepted" NOTNULL AND "half_frozen" NOTNULL AND "fully_frozen" ISNULL  AND "closed" ISNULL  AND "ranks_available" = FALSE) OR
    1.34 -          ("accepted" NOTNULL AND "half_frozen" NOTNULL AND "fully_frozen" ISNULL  AND "closed" NOTNULL AND "ranks_available" = FALSE) OR
    1.35 -          ("accepted" NOTNULL AND "half_frozen" NOTNULL AND "fully_frozen" NOTNULL AND "closed" ISNULL  AND "ranks_available" = FALSE) OR
    1.36 -          ("accepted" NOTNULL AND "half_frozen" NOTNULL AND "fully_frozen" NOTNULL AND "closed" NOTNULL AND "ranks_available" = FALSE) OR
    1.37 -          ("accepted" NOTNULL AND "half_frozen" NOTNULL AND "fully_frozen" NOTNULL AND "closed" NOTNULL AND "ranks_available" = TRUE)) AND (
    1.38 +          ("accepted" ISNULL  AND "half_frozen" ISNULL  AND "fully_frozen" ISNULL ) OR
    1.39 +          ("accepted" NOTNULL AND "half_frozen" ISNULL  AND "fully_frozen" ISNULL ) OR
    1.40 +          ("accepted" NOTNULL AND "half_frozen" NOTNULL AND "fully_frozen" ISNULL ) OR
    1.41 +          ("accepted" NOTNULL AND "half_frozen" NOTNULL AND "fully_frozen" NOTNULL)) AND (
    1.42            ("state" = 'admission'    AND "closed" ISNULL AND "accepted" ISNULL) OR
    1.43            ("state" = 'discussion'   AND "closed" ISNULL AND "accepted" NOTNULL AND "half_frozen" ISNULL) OR
    1.44            ("state" = 'verification' AND "closed" ISNULL AND "half_frozen" NOTNULL AND "fully_frozen" ISNULL) OR
    1.45 @@ -539,11 +533,12 @@
    1.46            ("state" = 'canceled_issue_not_accepted'                   AND "closed" NOTNULL AND "accepted" ISNULL) OR
    1.47            ("state" = 'canceled_after_revocation_during_discussion'   AND "closed" NOTNULL AND "half_frozen"  ISNULL) OR
    1.48            ("state" = 'canceled_after_revocation_during_verification' AND "closed" NOTNULL AND "fully_frozen" ISNULL) OR
    1.49 -          ("state" = 'calculation'                     AND "closed" NOTNULL AND "fully_frozen" NOTNULL AND "ranks_available" = FALSE) OR
    1.50 -          ("state" = 'canceled_no_initiative_admitted' AND "closed" NOTNULL AND "fully_frozen" NOTNULL AND "ranks_available" = TRUE) OR
    1.51 -          ("state" = 'finished_without_winner'         AND "closed" NOTNULL AND "fully_frozen" NOTNULL AND "ranks_available" = TRUE) OR
    1.52 -          ("state" = 'finished_with_winner'            AND "closed" NOTNULL AND "fully_frozen" NOTNULL AND "ranks_available" = TRUE)
    1.53 +          ("state" = 'canceled_no_initiative_admitted' AND "closed" NOTNULL AND "fully_frozen" NOTNULL AND "closed" = "fully_frozen") OR
    1.54 +          ("state" = 'finished_without_winner'         AND "closed" NOTNULL AND "fully_frozen" NOTNULL AND "closed" != "fully_frozen") OR
    1.55 +          ("state" = 'finished_with_winner'            AND "closed" NOTNULL AND "fully_frozen" NOTNULL AND "closed" != "fully_frozen")
    1.56            )),
    1.57 +        CONSTRAINT "phase_finished_only_when_not_closed" CHECK (
    1.58 +          "phase_finished" ISNULL OR "closed" ISNULL ),
    1.59          CONSTRAINT "state_change_order" CHECK (
    1.60            "created"      <= "accepted" AND
    1.61            "accepted"     <= "half_frozen" AND
    1.62 @@ -569,11 +564,11 @@
    1.63  
    1.64  COMMENT ON TABLE "issue" IS 'Groups of initiatives';
    1.65  
    1.66 +COMMENT ON COLUMN "issue"."phase_finished"          IS 'Set to a value NOTNULL, if the current phase has finished, but calculations are pending; No changes in this issue shall be made by the frontend or API when this value is set';
    1.67  COMMENT ON COLUMN "issue"."accepted"                IS 'Point in time, when one initiative of issue reached the "issue_quorum"';
    1.68  COMMENT ON COLUMN "issue"."half_frozen"             IS 'Point in time, when "discussion_time" has elapsed; Frontends must ensure that for half_frozen issues a) initiatives are not revoked, b) no new drafts are created, c) no initiators are added or removed.';
    1.69  COMMENT ON COLUMN "issue"."fully_frozen"            IS 'Point in time, when "verification_time" has elapsed and voting has started; Frontends must ensure that for fully_frozen issues additionally to the restrictions for half_frozen issues a) initiatives are not created, b) no interest is created or removed, c) no supporters are added or removed, d) no opinions are created, changed or deleted.';
    1.70  COMMENT ON COLUMN "issue"."closed"                  IS 'Point in time, when "admission_time" or "voting_time" have elapsed, and issue is no longer active; Frontends must ensure that for closed issues additionally to the restrictions for half_frozen and fully_frozen issues a) no voter is added or removed to/from the direct_voter table, b) no votes are added, modified or removed.';
    1.71 -COMMENT ON COLUMN "issue"."ranks_available"         IS 'TRUE = ranks have been calculated';
    1.72  COMMENT ON COLUMN "issue"."cleaned"                 IS 'Point in time, when discussion data and votes had been deleted';
    1.73  COMMENT ON COLUMN "issue"."admission_time"          IS 'Copied from "policy" table at creation of issue';
    1.74  COMMENT ON COLUMN "issue"."discussion_time"         IS 'Copied from "policy" table at creation of issue';
    1.75 @@ -1112,7 +1107,7 @@
    1.76          "event"                 "event_type"    NOT NULL,
    1.77          "member_id"             INT4            REFERENCES "member" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
    1.78          "issue_id"              INT4            REFERENCES "issue" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
    1.79 -        "state"                 "issue_state"   CHECK ("state" != 'calculation'),
    1.80 +        "state"                 "issue_state",
    1.81          "initiative_id"         INT4,
    1.82          "draft_id"              INT8,
    1.83          "suggestion_id"         INT8,
    1.84 @@ -1207,7 +1202,7 @@
    1.85    RETURNS TRIGGER
    1.86    LANGUAGE 'plpgsql' VOLATILE AS $$
    1.87      BEGIN
    1.88 -      IF NEW."state" != OLD."state" AND NEW."state" != 'calculation' THEN
    1.89 +      IF NEW."state" != OLD."state" THEN
    1.90          INSERT INTO "event" ("event", "issue_id", "state")
    1.91            VALUES ('issue_state_changed', NEW."id", NEW."state");
    1.92        END IF;
    1.93 @@ -2057,7 +2052,8 @@
    1.94    LEFT JOIN "vote" AS "worse_vote"
    1.95      ON "direct_voter"."member_id" = "worse_vote"."member_id"
    1.96      AND "losing_initiative"."id" = "worse_vote"."initiative_id"
    1.97 -  WHERE "issue"."closed" NOTNULL
    1.98 +  WHERE "issue"."state" = 'voting'
    1.99 +  AND "issue"."phase_finished" NOTNULL
   1.100    AND "issue"."cleaned" ISNULL
   1.101    AND (
   1.102      "winning_initiative"."id" != "losing_initiative"."id" OR
   1.103 @@ -2087,15 +2083,6 @@
   1.104  COMMENT ON VIEW "open_issue" IS 'All open issues';
   1.105  
   1.106  
   1.107 -CREATE VIEW "issue_with_ranks_missing" AS
   1.108 -  SELECT * FROM "issue"
   1.109 -  WHERE "fully_frozen" NOTNULL
   1.110 -  AND "closed" NOTNULL
   1.111 -  AND "ranks_available" = FALSE;
   1.112 -
   1.113 -COMMENT ON VIEW "issue_with_ranks_missing" IS 'Issues where voting was finished, but no ranks have been calculated yet';
   1.114 -
   1.115 -
   1.116  CREATE VIEW "member_contingent" AS
   1.117    SELECT
   1.118      "member"."id" AS "member_id",

Impressum / About Us