From: Sarah Hoffmann Date: Wed, 8 Jan 2020 10:22:23 +0000 (+0100) Subject: move postcode table triggers to own file X-Git-Tag: v3.5.0~105^2~1 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/827d7a9a62025eccb996aa3d7e5fdda691314756 move postcode table triggers to own file --- diff --git a/lib/setup/SetupClass.php b/lib/setup/SetupClass.php index 1dd30c81..51c247c1 100755 --- a/lib/setup/SetupClass.php +++ b/lib/setup/SetupClass.php @@ -656,6 +656,7 @@ class SetupFunctions $sTemplate .= file_get_contents($sBasePath.'interpolation.sql'); $sTemplate .= file_get_contents($sBasePath.'place_triggers.sql'); $sTemplate .= file_get_contents($sBasePath.'placex_triggers.sql'); + $sTemplate .= file_get_contents($sBasePath.'postcode_triggers.sql'); $sTemplate = str_replace('{modulepath}', $this->sModulePath, $sTemplate); if ($this->bEnableDiffUpdates) { $sTemplate = str_replace('RETURN NEW; -- %DIFFUPDATES%', '--', $sTemplate); diff --git a/sql/functions.sql b/sql/functions.sql index 21ec1689..828256ed 100644 --- a/sql/functions.sql +++ b/sql/functions.sql @@ -313,44 +313,6 @@ END; $$ LANGUAGE plpgsql; --- Trigger for updates of location_postcode --- --- Computes the parent object the postcode most likely refers to. --- This will be the place that determines the address displayed when --- searching for this postcode. -CREATE OR REPLACE FUNCTION postcode_update() RETURNS -TRIGGER - AS $$ -DECLARE - partition SMALLINT; - location RECORD; -BEGIN - IF NEW.indexed_status != 0 OR OLD.indexed_status = 0 THEN - RETURN NEW; - END IF; - - NEW.indexed_date = now(); - - partition := get_partition(NEW.country_code); - - SELECT * FROM get_postcode_rank(NEW.country_code, NEW.postcode) - INTO NEW.rank_search, NEW.rank_address; - - NEW.parent_place_id = 0; - FOR location IN - SELECT place_id - FROM getNearFeatures(partition, NEW.geometry, NEW.rank_search, '{}'::int[]) - WHERE NOT isguess ORDER BY rank_address DESC LIMIT 1 - LOOP - NEW.parent_place_id = location.place_id; - END LOOP; - - RETURN NEW; -END; -$$ -LANGUAGE plpgsql; - - CREATE OR REPLACE FUNCTION get_osm_rel_members(members TEXT[], member TEXT) RETURNS TEXT[] AS $$ DECLARE diff --git a/sql/functions/postcode_triggers.sql b/sql/functions/postcode_triggers.sql new file mode 100644 index 00000000..96788d65 --- /dev/null +++ b/sql/functions/postcode_triggers.sql @@ -0,0 +1,40 @@ +-- Trigger functions for location_postcode table. + + +-- Trigger for updates of location_postcode +-- +-- Computes the parent object the postcode most likely refers to. +-- This will be the place that determines the address displayed when +-- searching for this postcode. +CREATE OR REPLACE FUNCTION postcode_update() + RETURNS TRIGGER + AS $$ +DECLARE + partition SMALLINT; + location RECORD; +BEGIN + IF NEW.indexed_status != 0 OR OLD.indexed_status = 0 THEN + RETURN NEW; + END IF; + + NEW.indexed_date = now(); + + partition := get_partition(NEW.country_code); + + SELECT * FROM get_postcode_rank(NEW.country_code, NEW.postcode) + INTO NEW.rank_search, NEW.rank_address; + + NEW.parent_place_id = 0; + FOR location IN + SELECT place_id + FROM getNearFeatures(partition, NEW.geometry, NEW.rank_search, '{}'::int[]) + WHERE NOT isguess ORDER BY rank_address DESC LIMIT 1 + LOOP + NEW.parent_place_id = location.place_id; + END LOOP; + + RETURN NEW; +END; +$$ +LANGUAGE plpgsql; +