From: Sandro Santilli Date: Wed, 9 Mar 2011 10:19:15 +0000 (+0000) Subject: Ticket #855: topology.TopologySummary() X-Git-Tag: 2.0.0alpha1~1915 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=74cfd01d5460044904646d545a197d7976b4e54b;p=postgis Ticket #855: topology.TopologySummary() git-svn-id: http://svn.osgeo.org/postgis/trunk@6886 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/topology/Makefile.in b/topology/Makefile.in index 5193f5270..a0ec01b47 100644 --- a/topology/Makefile.in +++ b/topology/Makefile.in @@ -42,7 +42,7 @@ endif $(SQL_OBJS): %.in: %.in.c $(CPP) -traditional-cpp $< | grep -v '^#' > $@ -topology.sql.in: sql/sqlmm.sql sql/populate.sql sql/gml.sql sql/query/getnodebypoint.sql sql/query/getedgebypoint.sql +topology.sql.in: sql/sqlmm.sql sql/populate.sql sql/gml.sql sql/query/getnodebypoint.sql sql/query/getedgebypoint.sql sql/manage/TopologySummary.sql check: topology.sql $(MAKE) -C test $@ diff --git a/topology/sql/manage/TopologySummary.sql b/topology/sql/manage/TopologySummary.sql new file mode 100644 index 000000000..9c5f4c269 --- /dev/null +++ b/topology/sql/manage/TopologySummary.sql @@ -0,0 +1,101 @@ +-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +-- +-- PostGIS - Spatial Types for PostgreSQL +-- http://postgis.refractions.net +-- +-- Copyright (C) 2011 Sandro Santilli +-- +-- This is free software; you can redistribute and/or modify it under +-- the terms of the GNU General Public Licence. See the COPYING file. +-- +-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +--{ +-- TopologySummary(name) +-- +-- Print an overview about a topology +-- +CREATE OR REPLACE FUNCTION topology.TopologySummary(atopology varchar) +RETURNS text +AS +$$ +DECLARE + rec RECORD; + rec2 RECORD; + topology_id integer; + n int4; + ret text; +BEGIN + + SELECT * FROM topology.topology WHERE name = atopology INTO STRICT rec; + -- TODO: catch to give a nice error message + topology_id := rec.id; + + ret := 'Topology ' || quote_ident(atopology) + || ' (' || rec.id || '), '; + ret := ret || 'SRID ' || rec.srid || ', ' + || 'precision: ' || rec.precision || E'\n'; + + EXECUTE 'SELECT count(node_id) FROM ' || quote_ident(atopology) + || '.node ' INTO STRICT n; + ret = ret || n || ' nodes, '; + + EXECUTE 'SELECT count(edge_id) FROM ' || quote_ident(atopology) + || '.edge_data ' INTO STRICT n; + ret = ret || n || ' edges, '; + + EXECUTE 'SELECT count(face_id) FROM ' || quote_ident(atopology) + || '.face ' INTO STRICT n; + ret = ret || n || ' faces, '; + + EXECUTE 'SELECT count(*) FROM (SELECT DISTINCT layer_id,topogeo_id FROM ' + || quote_ident(atopology) || '.relation ) foo ' INTO STRICT n; + ret = ret || n || ' topogeoms in '; + + EXECUTE 'SELECT count(*) FROM (SELECT DISTINCT layer_id FROM ' + || quote_ident(atopology) || '.relation ) foo ' INTO STRICT n; + ret = ret || n || ' layers' || E'\n'; + + -- TODO: print informations about layers + FOR rec IN SELECT * FROM topology.layer l + WHERE l.topology_id = topology_id + ORDER by layer_id + LOOP + ret = ret || 'Layer ' || rec.layer_id || ', type '; + CASE + WHEN rec.feature_type = 1 THEN + ret = ret || 'Puntal'; + WHEN rec.feature_type = 2 THEN + ret = ret || 'Lineal'; + WHEN rec.feature_type = 3 THEN + ret = ret || 'Polygonal'; + ELSE + ret = ret || '???'; + END CASE; + + EXECUTE 'SELECT count(*) FROM ( SELECT DISTINCT topogeo_id FROM ' + || quote_ident(atopology) + || '.relation r WHERE r.layer_id = ' || rec.layer_id + || ' ) foo ' INTO STRICT n; + + ret = ret || ' (' || rec.feature_type || E'), ' + || n || ' topogeoms' || E'\n'; + + IF rec.level > 0 THEN + ret = ret || ' Hierarchy level ' || rec.level + || ', child layer ' || rec.child_id || E'\n'; + END IF; + + ret = ret || ' Deploy: ' + || quote_ident(rec.schema_name) || '.' + || quote_ident(rec.table_name) || '.' + || quote_ident(rec.feature_column) + || E'\n'; + END LOOP; + + RETURN ret; +END +$$ +LANGUAGE 'plpgsql' VOLATILE STRICT; + +--} TopologySummary diff --git a/topology/topology.sql.in.c b/topology/topology.sql.in.c index 7ff49c6ae..518e346a9 100644 --- a/topology/topology.sql.in.c +++ b/topology/topology.sql.in.c @@ -1907,6 +1907,8 @@ END LANGUAGE 'plpgsql' VOLATILE STRICT; --} DropTopology +#include "sql/manage/TopologySummary.sql" + --={ ---------------------------------------------------------------- -- POSTGIS-SPECIFIC topology predicates --