liquid_feedback_core
changeset 458:fae00a5c1c71
Absolute first supporter quorum (in addition to admission_rule/holdoff_time mechanism)
author | jbe |
---|---|
date | Sat Dec 12 11:53:36 2015 +0100 (2015-12-12) |
parents | ca21a3f49e4c |
children | 003b4cc8e9ef |
files | core.sql test.sql |
line diff
1.1 --- a/core.sql Fri Dec 11 23:44:02 2015 +0100 1.2 +++ b/core.sql Sat Dec 12 11:53:36 2015 +0100 1.3 @@ -366,6 +366,7 @@ 1.4 "discussion_time" INTERVAL, 1.5 "verification_time" INTERVAL, 1.6 "voting_time" INTERVAL, 1.7 + "issue_quorum" INT4 NOT NULL, 1.8 "initiative_quorum_num" INT4 NOT NULL, 1.9 "initiative_quorum_den" INT4 NOT NULL, 1.10 "defeat_strength" "defeat_strength" NOT NULL DEFAULT 'tuple', 1.11 @@ -382,6 +383,8 @@ 1.12 "indirect_majority_non_negative" INT4 NOT NULL DEFAULT 0, 1.13 "no_reverse_beat_path" BOOLEAN NOT NULL DEFAULT FALSE, 1.14 "no_multistage_majority" BOOLEAN NOT NULL DEFAULT FALSE, 1.15 + CONSTRAINT "issue_quorum_if_and_only_if_not_polling" CHECK ( 1.16 + "polling" = ("issue_quorum" ISNULL) ), 1.17 CONSTRAINT "timing" CHECK ( 1.18 ( "polling" = FALSE AND 1.19 "min_admission_time" NOTNULL AND "max_admission_time" NOTNULL AND 1.20 @@ -414,7 +417,8 @@ 1.21 COMMENT ON COLUMN "policy"."discussion_time" IS 'Duration of issue state ''discussion''; Regular time until an issue is "half_frozen" after being "accepted"'; 1.22 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"'; 1.23 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'')'; 1.24 -COMMENT ON COLUMN "policy"."initiative_quorum_num" IS 'Numerator of satisfied supporter quorum to be reached by an initiative to be "admitted" for voting'; 1.25 +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")'; 1.26 +COMMENT ON COLUMN "policy"."initiative_quorum_num" IS 'Numerator of satisfied supporter quorum to be reached by an initiative to be "admitted" for voting'; 1.27 COMMENT ON COLUMN "policy"."initiative_quorum_den" IS 'Denominator of satisfied supporter quorum to be reached by an initiative to be "admitted" for voting'; 1.28 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'; 1.29 COMMENT ON COLUMN "policy"."tie_breaking" IS 'Tie-breaker for the Schulze method; see type "tie_breaking"; ''variant1'' or ''variant2'' are recommended'; 1.30 @@ -4628,16 +4632,12 @@ 1.31 FROM "policy" WHERE "id" = "issue_row"."policy_id"; 1.32 IF 1.33 ( now() >= 1.34 - "issue_row"."created" + "issue_row"."min_admission_time" ) --AND 1.35 + "issue_row"."created" + "issue_row"."min_admission_time" ) AND 1.36 -- TODO: implement new mechanism for issue admission 1.37 - -- 1.38 - --EXISTS ( 1.39 - -- SELECT NULL FROM "initiative" 1.40 - -- WHERE "issue_id" = "issue_id_p" 1.41 - -- AND "supporter_count" > 0 1.42 - -- AND "supporter_count" * "policy_row"."issue_quorum_den" 1.43 - -- >= "issue_row"."population" * "policy_row"."issue_quorum_num" 1.44 - --) 1.45 + EXISTS ( 1.46 + SELECT NULL FROM "initiative" WHERE "issue_id" = "issue_id_p" 1.47 + AND "supporter_count" >= "policy_row"."issue_quorum" 1.48 + ) 1.49 THEN 1.50 UPDATE "issue" SET 1.51 "state" = 'discussion',
2.1 --- a/test.sql Fri Dec 11 23:44:02 2015 +0100 2.2 +++ b/test.sql Sat Dec 12 11:53:36 2015 +0100 2.3 @@ -42,6 +42,7 @@ 2.4 "discussion_time", 2.5 "verification_time", 2.6 "voting_time", 2.7 + "issue_quorum", 2.8 "initiative_quorum_num", "initiative_quorum_den", 2.9 "direct_majority_num", "direct_majority_den", "direct_majority_strict", 2.10 "no_reverse_beat_path", "no_multistage_majority" 2.11 @@ -49,6 +50,7 @@ 2.12 1, 2.13 'Default policy', 2.14 '0', '1 hour', '1 hour', '1 hour', '1 hour', 2.15 + 3, 2.16 20, 100, 2.17 1, 2, TRUE, 2.18 TRUE, FALSE ); 2.19 @@ -420,6 +422,7 @@ 2.20 "discussion_time", 2.21 "verification_time", 2.22 "voting_time", 2.23 + "issue_quorum", 2.24 "initiative_quorum_num", 2.25 "initiative_quorum_den" 2.26 ) VALUES ( 2.27 @@ -432,6 +435,7 @@ 2.28 '1 second', 2.29 '1 second', 2.30 '1 second', 2.31 + 1, 2.32 0, 100 2.33 ), ( 2.34 1, 2.35 @@ -443,6 +447,7 @@ 2.36 '2 days', 2.37 '1 second', 2.38 '1 second', 2.39 + 1, 2.40 0, 100 2.41 ), ( 2.42 1, 2.43 @@ -454,6 +459,7 @@ 2.44 '5 minutes', 2.45 '2 days', 2.46 '1 second', 2.47 + 1, 2.48 0, 100 2.49 ), ( 2.50 1, 2.51 @@ -465,6 +471,7 @@ 2.52 '5 minutes', 2.53 '1 second', 2.54 '2 days', 2.55 + 1, 2.56 0, 100 2.57 ); 2.58