liquid_feedback_core

changeset 136:d5f30a515864

Minor code-cleanup in calculation of "promising" attribute in function "close_voting"
author jbe
date Sat May 28 03:34:20 2011 +0200 (2011-05-28)
parents 4c3a5d0c4c82
children 8766ddbd9b40
files core.sql
line diff
     1.1 --- a/core.sql	Wed May 25 09:24:25 2011 +0200
     1.2 +++ b/core.sql	Sat May 28 03:34:20 2011 +0200
     1.3 @@ -3687,7 +3687,6 @@
     1.4        "done_v"            INTEGER;
     1.5        "winners_ary"       INTEGER[];
     1.6        "initiative_id_v"   "initiative"."id"%TYPE;
     1.7 -      "promising_added_v" BOOLEAN;
     1.8      BEGIN
     1.9        PERFORM NULL FROM "issue" WHERE "id" = "issue_id_p" FOR UPDATE;
    1.10        SELECT count(1) INTO "dimension_v"
    1.11 @@ -3836,45 +3835,44 @@
    1.12          -- determine promising initiatives:
    1.13          LOOP
    1.14            -- NOTE: non-straightened ranks are used
    1.15 -          SELECT "new_initiative"."id" INTO "initiative_id_v"
    1.16 -            FROM "issue"
    1.17 -            JOIN "policy" ON "issue"."policy_id" = "policy"."id"
    1.18 -            JOIN "initiative" "old_initiative"
    1.19 -              ON "old_initiative"."issue_id" = "issue_id_p"
    1.20 -              AND "old_initiative"."admitted"
    1.21 -              AND ("old_initiative"."winner" OR "old_initiative"."promising")
    1.22 -            JOIN "initiative" "new_initiative"
    1.23 -              ON "new_initiative"."issue_id" = "issue_id_p"
    1.24 -              AND "new_initiative"."admitted"
    1.25 -              AND "new_initiative"."favored"
    1.26 -              AND NOT ("new_initiative"."winner" OR "new_initiative"."promising")
    1.27 -            JOIN "battle" "battle_win"
    1.28 -              ON "battle_win"."issue_id" = "issue_id_p"
    1.29 -              AND "battle_win"."winning_initiative_id" = "new_initiative"."id"
    1.30 -              AND "battle_win"."losing_initiative_id" = "old_initiative"."id"
    1.31 -            JOIN "battle" "battle_lose"
    1.32 -              ON "battle_lose"."issue_id" = "issue_id_p"
    1.33 -              AND "battle_lose"."losing_initiative_id" = "new_initiative"."id"
    1.34 -              AND "battle_lose"."winning_initiative_id" = "old_initiative"."id"
    1.35 -            WHERE "issue"."id" = "issue_id_p"
    1.36 -            AND "new_initiative"."rank" < "old_initiative"."rank"
    1.37 -            AND CASE WHEN "policy"."majority_strict" THEN
    1.38 -              "battle_win"."count" * "policy"."majority_den" >
    1.39 -              "policy"."majority_num" *
    1.40 -              ("battle_win"."count"+"battle_lose"."count")
    1.41 -            ELSE
    1.42 -              "battle_win"."count" * "policy"."majority_den" >=
    1.43 -              "policy"."majority_num" *
    1.44 -              ("battle_win"."count"+"battle_lose"."count")
    1.45 -            END
    1.46 -            ORDER BY "new_initiative"."rank"
    1.47 -            LIMIT 1;
    1.48 -          IF FOUND THEN
    1.49 -            UPDATE "initiative" SET "promising" = TRUE
    1.50 -              WHERE "id" = "initiative_id_v";
    1.51 -          ELSE
    1.52 -            EXIT;
    1.53 -          END IF;
    1.54 +          UPDATE "initiative" SET "promising" = TRUE
    1.55 +            FROM (
    1.56 +              SELECT "new_initiative"."id" AS "initiative_id"
    1.57 +              FROM "issue"
    1.58 +              JOIN "policy" ON "issue"."policy_id" = "policy"."id"
    1.59 +              JOIN "initiative" "old_initiative"
    1.60 +                ON "old_initiative"."issue_id" = "issue_id_p"
    1.61 +                AND "old_initiative"."admitted"
    1.62 +                AND ("old_initiative"."winner" OR "old_initiative"."promising")
    1.63 +              JOIN "initiative" "new_initiative"
    1.64 +                ON "new_initiative"."issue_id" = "issue_id_p"
    1.65 +                AND "new_initiative"."admitted"
    1.66 +                AND "new_initiative"."favored"
    1.67 +                AND NOT ("new_initiative"."winner" OR "new_initiative"."promising")
    1.68 +              JOIN "battle" "battle_win"
    1.69 +                ON "battle_win"."issue_id" = "issue_id_p"
    1.70 +                AND "battle_win"."winning_initiative_id" = "new_initiative"."id"
    1.71 +                AND "battle_win"."losing_initiative_id" = "old_initiative"."id"
    1.72 +              JOIN "battle" "battle_lose"
    1.73 +                ON "battle_lose"."issue_id" = "issue_id_p"
    1.74 +                AND "battle_lose"."losing_initiative_id" = "new_initiative"."id"
    1.75 +                AND "battle_lose"."winning_initiative_id" = "old_initiative"."id"
    1.76 +              WHERE "issue"."id" = "issue_id_p"
    1.77 +              AND "new_initiative"."rank" < "old_initiative"."rank"
    1.78 +              AND CASE WHEN "policy"."majority_strict" THEN
    1.79 +                "battle_win"."count" * "policy"."majority_den" >
    1.80 +                "policy"."majority_num" *
    1.81 +                ("battle_win"."count"+"battle_lose"."count")
    1.82 +              ELSE
    1.83 +                "battle_win"."count" * "policy"."majority_den" >=
    1.84 +                "policy"."majority_num" *
    1.85 +                ("battle_win"."count"+"battle_lose"."count")
    1.86 +              END
    1.87 +              ORDER BY "new_initiative"."rank"
    1.88 +              LIMIT 1
    1.89 +            ) AS "subquery"
    1.90 +            WHERE "id" = "subquery"."initiative_id";
    1.91 +          EXIT WHEN NOT FOUND;
    1.92          END LOOP;
    1.93          -- straighten ranks (start counting with 1, no equal ranks):
    1.94          "rank_v" := 1;

Impressum / About Us