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;