# HG changeset patch # User jbe # Date 1449917616 -3600 # Node ID fae00a5c1c7101df527acdc92b2a06d20c4fb6b5 # Parent ca21a3f49e4cb83e90e2645e85a028755628d91e Absolute first supporter quorum (in addition to admission_rule/holdoff_time mechanism) diff -r ca21a3f49e4c -r fae00a5c1c71 core.sql --- a/core.sql Fri Dec 11 23:44:02 2015 +0100 +++ b/core.sql Sat Dec 12 11:53:36 2015 +0100 @@ -366,6 +366,7 @@ "discussion_time" INTERVAL, "verification_time" INTERVAL, "voting_time" INTERVAL, + "issue_quorum" INT4 NOT NULL, "initiative_quorum_num" INT4 NOT NULL, "initiative_quorum_den" INT4 NOT NULL, "defeat_strength" "defeat_strength" NOT NULL DEFAULT 'tuple', @@ -382,6 +383,8 @@ "indirect_majority_non_negative" INT4 NOT NULL DEFAULT 0, "no_reverse_beat_path" BOOLEAN NOT NULL DEFAULT FALSE, "no_multistage_majority" BOOLEAN NOT NULL DEFAULT FALSE, + CONSTRAINT "issue_quorum_if_and_only_if_not_polling" CHECK ( + "polling" = ("issue_quorum" ISNULL) ), CONSTRAINT "timing" CHECK ( ( "polling" = FALSE AND "min_admission_time" NOTNULL AND "max_admission_time" NOTNULL AND @@ -414,7 +417,8 @@ COMMENT ON COLUMN "policy"."discussion_time" IS 'Duration of issue state ''discussion''; Regular time until an issue is "half_frozen" after being "accepted"'; COMMENT ON COLUMN "policy"."verification_time" IS 'Duration of issue state ''verification''; Regular time until an issue is "fully_frozen" (e.g. entering issue state ''voting'') after being "half_frozen"'; COMMENT ON COLUMN "policy"."voting_time" IS 'Duration of issue state ''voting''; Time after an issue is "fully_frozen" but not "closed" (duration of issue state ''voting'')'; -COMMENT ON COLUMN "policy"."initiative_quorum_num" IS 'Numerator of satisfied supporter quorum to be reached by an initiative to be "admitted" for voting'; +COMMENT ON COLUMN "policy"."issue_quorum" IS 'Minimum number of supporters needed for one initiative of an issue to allow the issue to pass from ''admission'' to ''discussion'' state (Note: further requirements apply, see tables "admission_rule" and "admission_rule_condition")'; +COMMENT ON COLUMN "policy"."initiative_quorum_num" IS 'Numerator of satisfied supporter quorum to be reached by an initiative to be "admitted" for voting'; COMMENT ON COLUMN "policy"."initiative_quorum_den" IS 'Denominator of satisfied supporter quorum to be reached by an initiative to be "admitted" for voting'; COMMENT ON COLUMN "policy"."defeat_strength" IS 'How pairwise defeats are measured for the Schulze method; see type "defeat_strength"; ''tuple'' is the recommended setting'; COMMENT ON COLUMN "policy"."tie_breaking" IS 'Tie-breaker for the Schulze method; see type "tie_breaking"; ''variant1'' or ''variant2'' are recommended'; @@ -4628,16 +4632,12 @@ FROM "policy" WHERE "id" = "issue_row"."policy_id"; IF ( now() >= - "issue_row"."created" + "issue_row"."min_admission_time" ) --AND + "issue_row"."created" + "issue_row"."min_admission_time" ) AND -- TODO: implement new mechanism for issue admission - -- - --EXISTS ( - -- SELECT NULL FROM "initiative" - -- WHERE "issue_id" = "issue_id_p" - -- AND "supporter_count" > 0 - -- AND "supporter_count" * "policy_row"."issue_quorum_den" - -- >= "issue_row"."population" * "policy_row"."issue_quorum_num" - --) + EXISTS ( + SELECT NULL FROM "initiative" WHERE "issue_id" = "issue_id_p" + AND "supporter_count" >= "policy_row"."issue_quorum" + ) THEN UPDATE "issue" SET "state" = 'discussion', diff -r ca21a3f49e4c -r fae00a5c1c71 test.sql --- a/test.sql Fri Dec 11 23:44:02 2015 +0100 +++ b/test.sql Sat Dec 12 11:53:36 2015 +0100 @@ -42,6 +42,7 @@ "discussion_time", "verification_time", "voting_time", + "issue_quorum", "initiative_quorum_num", "initiative_quorum_den", "direct_majority_num", "direct_majority_den", "direct_majority_strict", "no_reverse_beat_path", "no_multistage_majority" @@ -49,6 +50,7 @@ 1, 'Default policy', '0', '1 hour', '1 hour', '1 hour', '1 hour', + 3, 20, 100, 1, 2, TRUE, TRUE, FALSE ); @@ -420,6 +422,7 @@ "discussion_time", "verification_time", "voting_time", + "issue_quorum", "initiative_quorum_num", "initiative_quorum_den" ) VALUES ( @@ -432,6 +435,7 @@ '1 second', '1 second', '1 second', + 1, 0, 100 ), ( 1, @@ -443,6 +447,7 @@ '2 days', '1 second', '1 second', + 1, 0, 100 ), ( 1, @@ -454,6 +459,7 @@ '5 minutes', '2 days', '1 second', + 1, 0, 100 ), ( 1, @@ -465,6 +471,7 @@ '5 minutes', '1 second', '2 days', + 1, 0, 100 );