-- {
-- Get tolerance for a given topology
--- and if zero the min for a given topology
+-- and if zero the minimum for the given geometry
--
-- }{
CREATE OR REPLACE FUNCTION topology._st_mintolerance(atopology varchar, ageom Geometry)
RETURNS float8
AS $$
+DECLARE
+ ret FLOAT8;
+BEGIN
SELECT COALESCE(
NULLIF(precision, 0),
topology._st_mintolerance($2))
FROM topology.topology
- WHERE name = $1;
-$$ LANGUAGE 'sql' STABLE STRICT;
+ WHERE name = $1 INTO ret;
+ IF NOT FOUND THEN
+ RAISE EXCEPTION
+ 'No topology with name "%" in topology.topology', atopology;
+ END IF;
+ return ret;
+END;
+$$ LANGUAGE 'plpgsql' STABLE STRICT;
-- }
--{
-- Invalid calls
SELECT 'invalid', TopoGeo_addLineString('city_data', 'MULTILINESTRING((36 26, 38 30))');
SELECT 'invalid', TopoGeo_addLineString('city_data', 'POINT(36 26)');
+SELECT 'invalid', TopoGeo_addLineString('invalid', 'LINESTRING(36 26, 0 0)');
-- Isolated edge in universal face
SELECT 'iso_uni', TopoGeo_addLineString('city_data', 'LINESTRING(36 26, 38 30)');
max|edge|26
ERROR: Invalid geometry type (MULTILINESTRING) passed to TopoGeo_AddLinestring, expected LINESTRING
ERROR: Invalid geometry type (POINT) passed to TopoGeo_AddLinestring, expected LINESTRING
+ERROR: No topology with name "invalid" in topology.topology
iso_uni|27
N|23||POINT(36 26)
N|24||POINT(38 30)
-- Invalid calls
SELECT 'invalid', TopoGeo_addPoint('city_data', 'LINESTRING(36 26, 38 30)');
SELECT 'invalid', TopoGeo_addPoint('city_data', 'MULTIPOINT((36 26))');
+SELECT 'invalid', TopoGeo_addPoint('invalid', 'POINT(36 26)');
-- Save max node id
select 'node'::text as what, max(node_id) INTO city_data.limits FROM city_data.node;
COMMIT
ERROR: Invalid geometry type (LINESTRING) passed to TopoGeo_AddPoint, expected POINT
ERROR: Invalid geometry type (MULTIPOINT) passed to TopoGeo_AddPoint, expected POINT
+ERROR: No topology with name "invalid" in topology.topology
iso_uni|23
iso_f3|24
iso_ex|23
-- Invalid calls
SELECT 'invalid', TopoGeo_addPolygon('city_data', 'MULTILINESTRING((36 26, 38 30))');
SELECT 'invalid', TopoGeo_addPolygon('city_data', 'POINT(36 26)');
+SELECT 'invalid', TopoGeo_addPolygon('invalid', 'POLYGON((36 26, 40 24, 40 30, 36 26))');
-- Isolated face in universal face
SELECT 'iso_uni', TopoGeo_addPolygon('city_data', 'POLYGON((36 26, 38 30, 43 26, 36 26))');
max|face|9
ERROR: Invalid geometry type (MULTILINESTRING) passed to TopoGeo_AddPolygon, expected POLYGON
ERROR: Invalid geometry type (POINT) passed to TopoGeo_AddPolygon, expected POLYGON
+ERROR: No topology with name "invalid" in topology.topology
iso_uni|10
N|23||POINT(36 26)
E|27|sn23|en23