liquid_feedback_core
annotate geoindex_install.sql @ 624:82387194519b
Added code to suppress compiler warning (writing one byte into region of size 0)
author | jbe |
---|---|
date | Fri Feb 05 13:50:45 2021 +0100 (2021-02-05) |
parents | 5b7c4082d7b3 |
children |
rev | line source |
---|---|
jbe@622 | 1 BEGIN; |
jbe@622 | 2 |
jbe@622 | 3 |
jbe@622 | 4 CREATE EXTENSION IF NOT EXISTS latlon; |
jbe@622 | 5 |
jbe@622 | 6 |
jbe@622 | 7 ------------------------ |
jbe@622 | 8 -- Geospatial indices -- |
jbe@622 | 9 ------------------------ |
jbe@622 | 10 |
jbe@622 | 11 CREATE INDEX IF NOT EXISTS "member_location_idx" |
jbe@622 | 12 ON "member" |
jbe@622 | 13 USING gist ((GeoJSON_to_ecluster("location"))); |
jbe@622 | 14 CREATE INDEX IF NOT EXISTS "unit_location_idx" |
jbe@622 | 15 ON "unit" |
jbe@622 | 16 USING gist ((GeoJSON_to_ecluster("location"))); |
jbe@622 | 17 CREATE INDEX IF NOT EXISTS "area_location_idx" |
jbe@622 | 18 ON "area" |
jbe@622 | 19 USING gist ((GeoJSON_to_ecluster("location"))); |
jbe@622 | 20 CREATE INDEX IF NOT EXISTS "initiative_location_idx" |
jbe@622 | 21 ON "initiative" |
jbe@622 | 22 USING gist ((GeoJSON_to_ecluster("location"))); |
jbe@622 | 23 CREATE INDEX IF NOT EXISTS "draft_location_idx" |
jbe@622 | 24 ON "draft" |
jbe@622 | 25 USING gist ((GeoJSON_to_ecluster("location"))); |
jbe@622 | 26 CREATE INDEX IF NOT EXISTS "suggestion_location_idx" |
jbe@622 | 27 ON "suggestion" |
jbe@622 | 28 USING gist ((GeoJSON_to_ecluster("location"))); |
jbe@622 | 29 |
jbe@622 | 30 |
jbe@622 | 31 ------------------------ |
jbe@622 | 32 -- Geospatial lookups -- |
jbe@622 | 33 ------------------------ |
jbe@622 | 34 |
jbe@622 | 35 /* |
jbe@622 | 36 CREATE OR REPLACE FUNCTION "closed_initiatives_in_bounding_box" |
jbe@622 | 37 ( "bounding_box_p" EBOX, |
jbe@622 | 38 "limit_p" INT4 ) |
jbe@622 | 39 RETURNS SETOF "initiative" |
jbe@622 | 40 LANGUAGE 'plpgsql' STABLE AS $$ |
jbe@622 | 41 DECLARE |
jbe@622 | 42 "limit_v" INT4; |
jbe@622 | 43 "count_v" INT4; |
jbe@622 | 44 BEGIN |
jbe@622 | 45 "limit_v" := "limit_p" + 1; |
jbe@622 | 46 LOOP |
jbe@622 | 47 SELECT count(1) INTO "count_v" |
jbe@622 | 48 FROM "initiative" |
jbe@622 | 49 JOIN "issue" ON "issue"."id" = "initiative"."issue_id" |
jbe@622 | 50 WHERE "issue"."closed" NOTNULL |
jbe@622 | 51 AND GeoJSON_to_ecluster("initiative"."location") && "bounding_box_p" |
jbe@622 | 52 LIMIT "limit_v"; |
jbe@622 | 53 IF "count_v" < "limit_v" THEN |
jbe@622 | 54 RETURN QUERY SELECT "initiative".* |
jbe@622 | 55 FROM ( |
jbe@622 | 56 SELECT |
jbe@622 | 57 "initiative"."id" AS "initiative_id", |
jbe@622 | 58 "issue"."closed" |
jbe@622 | 59 FROM "initiative" |
jbe@622 | 60 JOIN "issue" ON "issue"."id" = "initiative"."issue_id" |
jbe@622 | 61 WHERE "issue"."closed" NOTNULL |
jbe@622 | 62 AND GeoJSON_to_ecluster("initiative"."location") && "bounding_box_p" |
jbe@622 | 63 ) AS "subquery" |
jbe@622 | 64 JOIN "initiative" ON "initiative"."id" = "subquery"."initiative_id" |
jbe@622 | 65 ORDER BY "subquery"."closed" DESC |
jbe@622 | 66 LIMIT "limit_p"; |
jbe@622 | 67 RETURN; |
jbe@622 | 68 END IF; |
jbe@622 | 69 SELECT count(1) INTO "count_v" |
jbe@622 | 70 FROM ( |
jbe@622 | 71 SELECT "initiative"."id" AS "initiative_id" |
jbe@622 | 72 FROM "initiative" |
jbe@622 | 73 JOIN "issue" ON "issue"."id" = "initiative"."issue_id" |
jbe@622 | 74 WHERE "issue"."closed" NOTNULL |
jbe@622 | 75 ORDER BY "closed" DESC |
jbe@622 | 76 LIMIT "limit_v" |
jbe@622 | 77 ) AS "subquery" |
jbe@622 | 78 JOIN "initiative" ON "initiative"."id" = "subquery"."initiative_id" |
jbe@622 | 79 WHERE GeoJSON_to_ecluster("initiative"."location") && "bounding_box_p" |
jbe@622 | 80 LIMIT "limit_p"; |
jbe@622 | 81 IF "count_v" >= "limit_p" THEN |
jbe@622 | 82 RETURN QUERY SELECT "initiative".* |
jbe@622 | 83 FROM ( |
jbe@622 | 84 SELECT |
jbe@622 | 85 "initiative"."id" AS "initiative_id", |
jbe@622 | 86 "issue"."closed" |
jbe@622 | 87 FROM "initiative" |
jbe@622 | 88 JOIN "issue" ON "issue"."id" = "initiative"."issue_id" |
jbe@622 | 89 WHERE "issue"."closed" NOTNULL |
jbe@622 | 90 ORDER BY "closed" DESC |
jbe@622 | 91 LIMIT "limit_v" |
jbe@622 | 92 ) AS "subquery" |
jbe@622 | 93 JOIN "initiative" ON "initiative"."id" = "subquery"."initiative_id" |
jbe@622 | 94 WHERE GeoJSON_to_ecluster("initiative"."location") && "bounding_box_p" |
jbe@622 | 95 ORDER BY "subquery"."closed" DESC |
jbe@622 | 96 LIMIT "limit_p"; |
jbe@622 | 97 RETURN; |
jbe@622 | 98 END IF; |
jbe@622 | 99 "limit_v" := "limit_v" * 2; |
jbe@622 | 100 END LOOP; |
jbe@622 | 101 END; |
jbe@622 | 102 $$; |
jbe@622 | 103 |
jbe@622 | 104 COMMENT ON FUNCTION "closed_initiatives_in_bounding_box" |
jbe@622 | 105 ( EBOX, INT4 ) |
jbe@622 | 106 IS 'TODO'; |
jbe@622 | 107 */ |
jbe@622 | 108 |
jbe@622 | 109 |
jbe@622 | 110 COMMIT; |