# HG changeset patch # User jbe # Date 1459349544 -7200 # Node ID c463d280947c145c6fd6779a908a9cb4ab924005 # Parent ecac8ab6ca044b46a952f56cd06f85b5e25883a9 Function "featured_initiative" simplified diff -r ecac8ab6ca04 -r c463d280947c core.sql --- a/core.sql Wed Mar 30 11:46:52 2016 +0200 +++ b/core.sql Wed Mar 30 16:52:24 2016 +0200 @@ -2440,8 +2440,8 @@ ) AS "subquery" ORDER BY "seed" LOOP - FOR "result_row" IN - SELECT "initiative".* FROM "initiative" + SELECT "initiative".* INTO "result_row" + FROM "initiative" JOIN "issue" ON "issue"."id" = "initiative"."issue_id" JOIN "supporter" ON "supporter"."initiative_id" = "initiative"."id" LEFT JOIN "supporter" AS "self_support" ON @@ -2451,19 +2451,17 @@ AND "issue"."area_id" = "area_id_p" AND "issue"."state" IN ('admission', 'discussion', 'verification') AND "self_support"."member_id" ISNULL + AND NOT "initiative_id_ary" @> ARRAY["initiative"."id"] ORDER BY md5("seed_v" || '-' || "initiative"."id") - LOOP - IF NOT "initiative_id_ary" @> ARRAY["result_row"."id"] THEN - "match_v" := TRUE; - "initiative_id_ary" := "initiative_id_ary" || "result_row"."id"; - RETURN NEXT "result_row"; - IF array_length("initiative_id_ary", 1) >= "sample_size_v" THEN - RETURN; - ELSE - EXIT; - END IF; + LIMIT 1; + IF FOUND THEN + "match_v" := TRUE; + "initiative_id_ary" := "initiative_id_ary" || "result_row"."id"; + RETURN NEXT "result_row"; + IF array_length("initiative_id_ary", 1) >= "sample_size_v" THEN + RETURN; END IF; - END LOOP; + END IF; END LOOP; EXIT WHEN NOT "match_v"; END LOOP;