diff --git a/lib-sql/functions/partition-functions.sql b/lib-sql/functions/partition-functions.sql index 94ed26399..595e4a614 100644 --- a/lib-sql/functions/partition-functions.sql +++ b/lib-sql/functions/partition-functions.sql @@ -125,14 +125,16 @@ BEGIN IF in_rank_search <= 4 and not in_estimate THEN INSERT INTO location_area_country (place_id, country_code, geometry) - values (in_place_id, in_country_code, in_geometry); + (SELECT in_place_id, in_country_code, geom + FROM split_geometry(in_geometry) as geom); RETURN TRUE; END IF; {% for partition in db.partitions %} IF in_partition = {{ partition }} THEN INSERT INTO location_area_large_{{ partition }} (partition, place_id, country_code, keywords, rank_search, rank_address, isguess, postcode, centroid, geometry) - values (in_partition, in_place_id, in_country_code, in_keywords, in_rank_search, in_rank_address, in_estimate, postcode, in_centroid, in_geometry); + (SELECT in_partition, in_place_id, in_country_code, in_keywords, in_rank_search, in_rank_address, in_estimate, postcode, in_centroid, geom + FROM split_geometry(in_geometry) as geom); RETURN TRUE; END IF; {% endfor %} diff --git a/lib-sql/functions/utils.sql b/lib-sql/functions/utils.sql index df00f9167..6af2afd56 100644 --- a/lib-sql/functions/utils.sql +++ b/lib-sql/functions/utils.sql @@ -348,8 +348,6 @@ CREATE OR REPLACE FUNCTION add_location(place_id BIGINT, country_code varchar(2) RETURNS BOOLEAN AS $$ DECLARE - locationid INTEGER; - secgeo GEOMETRY; postcode TEXT; BEGIN PERFORM deleteLocationArea(partition, place_id, rank_search); @@ -360,18 +358,19 @@ BEGIN postcode := upper(trim (in_postcode)); END IF; - IF ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon') THEN - FOR secgeo IN select split_geometry(geometry) AS geom LOOP - PERFORM insertLocationAreaLarge(partition, place_id, country_code, keywords, rank_search, rank_address, false, postcode, centroid, secgeo); - END LOOP; - - ELSEIF ST_GeometryType(geometry) = 'ST_Point' THEN - secgeo := place_node_fuzzy_area(geometry, rank_search); - PERFORM insertLocationAreaLarge(partition, place_id, country_code, keywords, rank_search, rank_address, true, postcode, centroid, secgeo); + IF ST_Dimension(geometry) = 2 THEN + RETURN insertLocationAreaLarge(partition, place_id, country_code, keywords, + rank_search, rank_address, false, postcode, + centroid, geometry); + END IF; + IF ST_Dimension(geometry) = 0 THEN + RETURN insertLocationAreaLarge(partition, place_id, country_code, keywords, + rank_search, rank_address, true, postcode, + centroid, place_node_fuzzy_area(geometry, rank_search)); END IF; - RETURN true; + RETURN false; END; $$ LANGUAGE plpgsql;