# HG changeset patch # User jbe # Date 1405522207 -7200 # Node ID eb12a069063c02166290ecda0f950d46c58bc3b4 # Parent 34cc98defa8bf0fb8792afb6f9d6b0275441f77d Improved previous fix of "close_voting" function diff -r 34cc98defa8b -r eb12a069063c core.sql --- a/core.sql Wed Jul 16 16:28:35 2014 +0200 +++ b/core.sql Wed Jul 16 16:50:07 2014 +0200 @@ -3804,9 +3804,23 @@ FROM "direct_voter" WHERE "issue_id" = "issue_id_p" ) WHERE "id" = "issue_id_p"; + -- copy "positive_votes" and "negative_votes" from "battle" table: + -- NOTE: "first_preference_votes" is set to a default of 0 at this step + UPDATE "initiative" SET + "first_preference_votes" = 0, + "positive_votes" = "battle_win"."count", + "negative_votes" = "battle_lose"."count" + FROM "battle" AS "battle_win", "battle" AS "battle_lose" + WHERE + "battle_win"."issue_id" = "issue_id_p" AND + "battle_win"."winning_initiative_id" = "initiative"."id" AND + "battle_win"."losing_initiative_id" ISNULL AND + "battle_lose"."issue_id" = "issue_id_p" AND + "battle_lose"."losing_initiative_id" = "initiative"."id" AND + "battle_lose"."winning_initiative_id" ISNULL; -- calculate "first_preference_votes": - UPDATE "initiative" - SET "first_preference_votes" = "subquery"."sum" + -- NOTE: will only set values not equal to zero + UPDATE "initiative" SET "first_preference_votes" = "subquery"."sum" FROM ( SELECT "vote"."initiative_id", sum("direct_voter"."weight") FROM "vote" JOIN "direct_voter" @@ -3818,22 +3832,6 @@ WHERE "initiative"."issue_id" = "issue_id_p" AND "initiative"."admitted" AND "initiative"."id" = "subquery"."initiative_id"; - UPDATE "initiative" SET "first_preference_votes" = 0 - WHERE "issue_id" = "issue_id_p" - AND "initiative"."admitted" - AND "first_preference_votes" ISNULL; - -- copy "positive_votes" and "negative_votes" from "battle" table: - UPDATE "initiative" SET - "positive_votes" = "battle_win"."count", - "negative_votes" = "battle_lose"."count" - FROM "battle" AS "battle_win", "battle" AS "battle_lose" - WHERE - "battle_win"."issue_id" = "issue_id_p" AND - "battle_win"."winning_initiative_id" = "initiative"."id" AND - "battle_win"."losing_initiative_id" ISNULL AND - "battle_lose"."issue_id" = "issue_id_p" AND - "battle_lose"."losing_initiative_id" = "initiative"."id" AND - "battle_lose"."winning_initiative_id" ISNULL; END; $$; diff -r 34cc98defa8b -r eb12a069063c update/core-update.v3.0.2-v3.0.3.sql --- a/update/core-update.v3.0.2-v3.0.3.sql Wed Jul 16 16:28:35 2014 +0200 +++ b/update/core-update.v3.0.2-v3.0.3.sql Wed Jul 16 16:50:07 2014 +0200 @@ -239,9 +239,23 @@ FROM "direct_voter" WHERE "issue_id" = "issue_id_p" ) WHERE "id" = "issue_id_p"; + -- copy "positive_votes" and "negative_votes" from "battle" table: + -- NOTE: "first_preference_votes" is set to a default of 0 at this step + UPDATE "initiative" SET + "first_preference_votes" = 0, + "positive_votes" = "battle_win"."count", + "negative_votes" = "battle_lose"."count" + FROM "battle" AS "battle_win", "battle" AS "battle_lose" + WHERE + "battle_win"."issue_id" = "issue_id_p" AND + "battle_win"."winning_initiative_id" = "initiative"."id" AND + "battle_win"."losing_initiative_id" ISNULL AND + "battle_lose"."issue_id" = "issue_id_p" AND + "battle_lose"."losing_initiative_id" = "initiative"."id" AND + "battle_lose"."winning_initiative_id" ISNULL; -- calculate "first_preference_votes": - UPDATE "initiative" - SET "first_preference_votes" = "subquery"."sum" + -- NOTE: will only set values not equal to zero + UPDATE "initiative" SET "first_preference_votes" = "subquery"."sum" FROM ( SELECT "vote"."initiative_id", sum("direct_voter"."weight") FROM "vote" JOIN "direct_voter" @@ -253,22 +267,6 @@ WHERE "initiative"."issue_id" = "issue_id_p" AND "initiative"."admitted" AND "initiative"."id" = "subquery"."initiative_id"; - UPDATE "initiative" SET "first_preference_votes" = 0 - WHERE "issue_id" = "issue_id_p" - AND "initiative"."admitted" - AND "first_preference_votes" ISNULL; - -- copy "positive_votes" and "negative_votes" from "battle" table: - UPDATE "initiative" SET - "positive_votes" = "battle_win"."count", - "negative_votes" = "battle_lose"."count" - FROM "battle" AS "battle_win", "battle" AS "battle_lose" - WHERE - "battle_win"."issue_id" = "issue_id_p" AND - "battle_win"."winning_initiative_id" = "initiative"."id" AND - "battle_win"."losing_initiative_id" ISNULL AND - "battle_lose"."issue_id" = "issue_id_p" AND - "battle_lose"."losing_initiative_id" = "initiative"."id" AND - "battle_lose"."winning_initiative_id" ISNULL; END; $$;