Fix SQL update logic (patch from 3.6.2)

This commit is contained in:
jirik
2017-07-12 16:06:15 +02:00
committed by Jiri Kozel
parent 3bb8a4bdde
commit 893918761c
33 changed files with 481 additions and 221 deletions

View File

@@ -1,4 +1,7 @@
DO $$
BEGIN
update osm_waterway_linestring SET tags = slice_language_tags(tags) || get_basic_names(tags, geometry);
update osm_waterway_linestring_gen1 SET tags = slice_language_tags(tags) || get_basic_names(tags, geometry);
update osm_waterway_linestring_gen2 SET tags = slice_language_tags(tags) || get_basic_names(tags, geometry);
update osm_waterway_linestring_gen3 SET tags = slice_language_tags(tags) || get_basic_names(tags, geometry);
END $$;

View File

@@ -1,5 +1,5 @@
DROP TRIGGER IF EXISTS trigger_flag ON osm_waterway_linestring;
DROP TRIGGER IF EXISTS trigger_refresh ON waterway.updates;
DROP TRIGGER IF EXISTS trigger_refresh ON waterway_important.updates;
-- We merge the waterways by name like the highways
-- This helps to drop not important rivers (since they do not have a name)
@@ -60,17 +60,17 @@ CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen3_geometry_idx O
-- Handle updates
CREATE SCHEMA IF NOT EXISTS waterway;
CREATE SCHEMA IF NOT EXISTS waterway_important;
CREATE TABLE IF NOT EXISTS waterway.updates(id serial primary key, t text, unique (t));
CREATE OR REPLACE FUNCTION waterway.flag() RETURNS trigger AS $$
CREATE TABLE IF NOT EXISTS waterway_important.updates(id serial primary key, t text, unique (t));
CREATE OR REPLACE FUNCTION waterway_important.flag() RETURNS trigger AS $$
BEGIN
INSERT INTO waterway.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING;
INSERT INTO waterway_important.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING;
RETURN null;
END;
$$ language plpgsql;
CREATE OR REPLACE FUNCTION waterway.refresh() RETURNS trigger AS
CREATE OR REPLACE FUNCTION waterway_important.refresh() RETURNS trigger AS
$BODY$
BEGIN
RAISE LOG 'Refresh waterway';
@@ -78,7 +78,7 @@ CREATE OR REPLACE FUNCTION waterway.refresh() RETURNS trigger AS
REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen1;
REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen2;
REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen3;
DELETE FROM waterway.updates;
DELETE FROM waterway_important.updates;
RETURN null;
END;
$BODY$
@@ -87,10 +87,10 @@ language plpgsql;
CREATE TRIGGER trigger_flag
AFTER INSERT OR UPDATE OR DELETE ON osm_waterway_linestring
FOR EACH STATEMENT
EXECUTE PROCEDURE waterway.flag();
EXECUTE PROCEDURE waterway_important.flag();
CREATE CONSTRAINT TRIGGER trigger_refresh
AFTER INSERT ON waterway.updates
AFTER INSERT ON waterway_important.updates
INITIALLY DEFERRED
FOR EACH ROW
EXECUTE PROCEDURE waterway.refresh();
EXECUTE PROCEDURE waterway_important.refresh();

View File

@@ -0,0 +1,28 @@
DROP TRIGGER IF EXISTS trigger_refresh ON osm_waterway_linestring;
DO $$
BEGIN
update osm_waterway_linestring SET tags = slice_language_tags(tags) || get_basic_names(tags, geometry);
update osm_waterway_linestring_gen1 SET tags = slice_language_tags(tags) || get_basic_names(tags, geometry);
update osm_waterway_linestring_gen2 SET tags = slice_language_tags(tags) || get_basic_names(tags, geometry);
update osm_waterway_linestring_gen3 SET tags = slice_language_tags(tags) || get_basic_names(tags, geometry);
END $$;
-- Handle updates
CREATE SCHEMA IF NOT EXISTS waterway_linestring;
CREATE OR REPLACE FUNCTION waterway_linestring.refresh() RETURNS trigger AS
$BODY$
BEGIN
RAISE NOTICE 'Refresh waterway_linestring %', NEW.osm_id;
NEW.tags = slice_language_tags(NEW.tags) || get_basic_names(NEW.tags, NEW.geometry);
RETURN NEW;
END;
$BODY$
language plpgsql;
CREATE TRIGGER trigger_refresh
BEFORE INSERT OR UPDATE ON osm_waterway_linestring
FOR EACH ROW
EXECUTE PROCEDURE waterway_linestring.refresh();

View File

@@ -26,7 +26,8 @@ layer:
query: (SELECT geometry, name, name_en, name_de, {name_languages}, class FROM layer_waterway(!bbox!, z(!scale_denominator!))) AS t
schema:
- ./name.sql
- ./merge_waterway.sql
- ./update_waterway_linestring.sql
- ./update_important_waterway.sql
- ./waterway.sql
datasources:
- type: imposm3