# HG changeset patch # User jbe # Date 1362856848 -3600 # Node ID a5d4df7f4e22432209d30737ee6adbf7667de6f7 # Parent c6e59e0db6ce8c322d9a1029bb8ad4763459d998 Bugfix for calculation of harmonic_weight, when there are initiatives without supporters diff -r c6e59e0db6ce -r a5d4df7f4e22 core.sql --- a/core.sql Sat Mar 09 16:36:04 2013 +0100 +++ b/core.sql Sat Mar 09 20:20:48 2013 +0100 @@ -2876,6 +2876,19 @@ COMMENT ON VIEW "remaining_harmonic_initiative_weight_summands" IS 'Helper view for function "set_harmonic_initiative_weights"'; +CREATE VIEW "remaining_harmonic_initiative_weight_dummies" AS + SELECT + "issue_id", + "id" AS "initiative_id", + "admitted", + 0 AS "weight_num", + 1 AS "weight_den" + FROM "initiative" + WHERE "harmonic_weight" ISNULL; + +COMMENT ON VIEW "remaining_harmonic_initiative_weight_dummies" IS 'Helper view for function "set_harmonic_initiative_weights" providing dummy weights of zero value, which are needed for corner cases where there are no supporters for an initiative at all'; + + CREATE FUNCTION "set_harmonic_initiative_weights" ( "issue_id_p" "issue"."id"%TYPE ) RETURNS VOID @@ -2907,6 +2920,17 @@ AND coalesce("admitted", FALSE) = FALSE ) ) + UNION ALL -- needed for corner cases + SELECT * FROM "remaining_harmonic_initiative_weight_dummies" + WHERE "issue_id" = "issue_id_p" + AND ( + coalesce("admitted", FALSE) = FALSE OR NOT EXISTS ( + SELECT NULL FROM "initiative" + WHERE "issue_id" = "issue_id_p" + AND "harmonic_weight" ISNULL + AND coalesce("admitted", FALSE) = FALSE + ) + ) ORDER BY "initiative_id" DESC, "weight_den" DESC -- NOTE: non-admitted initiatives placed first (at last positions), -- latest initiatives treated worse in case of tie diff -r c6e59e0db6ce -r a5d4df7f4e22 update/core-update.v2.1.0-v2.2.0.sql --- a/update/core-update.v2.1.0-v2.2.0.sql Sat Mar 09 16:36:04 2013 +0100 +++ b/update/core-update.v2.1.0-v2.2.0.sql Sat Mar 09 20:20:48 2013 +0100 @@ -447,6 +447,17 @@ "remaining_harmonic_supporter_weight"."weight_den"; COMMENT ON VIEW "remaining_harmonic_initiative_weight_summands" IS 'Helper view for function "set_harmonic_initiative_weights"'; +CREATE VIEW "remaining_harmonic_initiative_weight_dummies" AS + SELECT + "issue_id", + "id" AS "initiative_id", + "admitted", + 0 AS "weight_num", + 1 AS "weight_den" + FROM "initiative" + WHERE "harmonic_weight" ISNULL; +COMMENT ON VIEW "remaining_harmonic_initiative_weight_dummies" IS 'Helper view for function "set_harmonic_initiative_weights" providing dummy weights of zero value, which are needed for corner cases where there are no supporters for an initiative at all'; + CREATE FUNCTION "set_harmonic_initiative_weights" ( "issue_id_p" "issue"."id"%TYPE ) RETURNS VOID @@ -478,6 +489,17 @@ AND coalesce("admitted", FALSE) = FALSE ) ) + UNION ALL -- needed for corner cases + SELECT * FROM "remaining_harmonic_initiative_weight_dummies" + WHERE "issue_id" = "issue_id_p" + AND ( + coalesce("admitted", FALSE) = FALSE OR NOT EXISTS ( + SELECT NULL FROM "initiative" + WHERE "issue_id" = "issue_id_p" + AND "harmonic_weight" ISNULL + AND coalesce("admitted", FALSE) = FALSE + ) + ) ORDER BY "initiative_id" DESC, "weight_den" DESC -- NOTE: non-admitted initiatives placed first (at last positions), -- latest initiatives treated worse in case of tie