# HG changeset patch # User Tom Gottfried # Date 1584555549 -3600 # Node ID 8c590ef35280ebc35472af359233000028a58406 # Parent 737d7859dd865676e5adc626c6e3773b623f9a38 Improve feedback if geometry cannot be stored This is also a backout of rev. 36a3dce20232 diff -r 737d7859dd86 -r 8c590ef35280 pkg/imports/fd.go --- a/pkg/imports/fd.go Wed Mar 18 18:42:30 2020 +0100 +++ b/pkg/imports/fd.go Wed Mar 18 19:19:09 2020 +0100 @@ -158,8 +158,7 @@ min_depth, date_info, source_organization) -SELECT dmp.geom, $3, $4, $5, $6, $7, $8 - FROM ST_GeomFromWKB($1, $2::integer) AS new_fd (new_fd), +SELECT ST_Multi(ST_CollectionExtract(ST_MakeValid(ST_Transform( CASE WHEN pg_has_role('sys_admin', 'MEMBER') THEN new_fd @@ -167,8 +166,12 @@ (SELECT ST_Buffer(a, -0.0001) FROM resp), ST_MakeValid(ST_Transform(new_fd, (SELECT ST_SRID(a) FROM resp)))) END, - 4326)), 3)) AS dmp (geom) - WHERE NOT ST_IsEmpty(dmp.geom) + 4326)), 3)), + $3, $4, $5, $6, $7, $8 + FROM ST_GeomFromWKB($1, $2::integer) AS new_fd (new_fd) + WHERE pg_has_role('sys_admin', 'MEMBER') + OR ST_Intersects((SELECT a FROM resp), + ST_MakeValid(ST_Transform(new_fd, (SELECT ST_SRID(a) FROM resp)))) RETURNING id, ST_X(ST_Centroid(area::geometry)), ST_Y(ST_Centroid(area::geometry)) @@ -340,9 +343,7 @@ } if outside > 0 { - feedback.Info( - "Features outside responsibility area or no valid polygon: %d", - outside) + feedback.Info("Features outside responsibility area: %d", outside) } if features == 0 { diff -r 737d7859dd86 -r 8c590ef35280 pkg/pgxutils/errors.go --- a/pkg/pgxutils/errors.go Wed Mar 18 18:42:30 2020 +0100 +++ b/pkg/pgxutils/errors.go Wed Mar 18 19:19:09 2020 +0100 @@ -158,6 +158,12 @@ c = http.StatusConflict return } + case "fairway_dimensions": + switch err.ConstraintName { + case "fairway_dimensions_area_check": + m = "Geometry could not be stored as valid, non-empty polygon" + return + } } case "internal": switch err.TableName { diff -r 737d7859dd86 -r 8c590ef35280 schema/gemma.sql --- a/schema/gemma.sql Wed Mar 18 18:42:30 2020 +0100 +++ b/schema/gemma.sql Wed Mar 18 19:19:09 2020 +0100 @@ -708,7 +708,8 @@ CREATE TABLE fairway_dimensions ( id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, area geography(MULTIPOLYGON, 4326) NOT NULL - CHECK(ST_IsValid(CAST(area AS geometry))), + CHECK(ST_IsValid(CAST(area AS geometry)) + AND NOT ST_IsEmpty(CAST(area AS geometry))), level_of_service smallint NOT NULL REFERENCES levels_of_service, min_width smallint NOT NULL, max_width smallint NOT NULL, diff -r 737d7859dd86 -r 8c590ef35280 schema/updates/1429/01.disallow_empty_fairway_dimensions.sql --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/updates/1429/01.disallow_empty_fairway_dimensions.sql Wed Mar 18 19:19:09 2020 +0100 @@ -0,0 +1,4 @@ +ALTER TABLE waterway.fairway_dimensions + DROP CONSTRAINT fairway_dimensions_area_check, + ADD CHECK(ST_IsValid(CAST(area AS geometry)) + AND NOT ST_IsEmpty(CAST(area AS geometry))) diff -r 737d7859dd86 -r 8c590ef35280 schema/version.sql --- a/schema/version.sql Wed Mar 18 18:42:30 2020 +0100 +++ b/schema/version.sql Wed Mar 18 19:19:09 2020 +0100 @@ -1,1 +1,1 @@ -INSERT INTO gemma_schema_version(version) VALUES (1428); +INSERT INTO gemma_schema_version(version) VALUES (1429);