regress/topo2.5d.sql \
regress/totopogeom.sql \
regress/droptopology.sql \
+ regress/droptopogeometrycolumn.sql \
regress/copytopology.sql \
regress/createtopogeom.sql \
regress/createtopology.sql \
--- /dev/null
+set client_min_messages to ERROR;
+-- Drop corrupted topology (with missing layer tables)
+-- See http://trac.osgeo.org/postgis/ticket/3016
+SELECT topology.CreateTopology('t1') > 0;
+CREATE TABLE t1f (id int);
+SELECT topology.AddTopoGeometryColumn('t1', 'public', 't1f', 'geom_t1', 'LINE') > 0;
+DROP TABLE t1.relation;
+SELECT topology.DropTopoGeometryColumn('public','t1f','geom_t1');
+DROP TABLE t1f;
+SELECT topology.DropTopology('t1');
END IF;
-- Check if any record in the relation table references this layer
- FOR rec IN SELECT * FROM pg_namespace
- WHERE text(nspname) = toponame
+ FOR rec IN SELECT c.oid FROM pg_namespace n, pg_class c
+ WHERE text(n.nspname) = toponame AND c.relnamespace = n.oid
+ AND c.relname = 'relation'
LOOP
query = 'SELECT * '
|| ' FROM ' || quote_ident(toponame)
END IF;
-- Clean up the topology schema
- FOR rec IN SELECT * FROM pg_namespace
- WHERE text(nspname) = lyrinfo.toponame
- LOOP
+ BEGIN
-- Cleanup the relation table
EXECUTE 'DELETE FROM ' || quote_ident(lyrinfo.toponame)
|| '.relation '
-- Drop the sequence for topogeoms in this layer
EXECUTE 'DROP SEQUENCE ' || quote_ident(lyrinfo.toponame)
|| '.topogeo_s_' || lyrinfo.layer_id;
-
- END LOOP;
+ EXCEPTION
+ WHEN UNDEFINED_TABLE THEN
+ RAISE NOTICE '%', SQLERRM;
+ WHEN OTHERS THEN
+ RAISE EXCEPTION 'Got % (%)', SQLERRM, SQLSTATE;
+ END;
ok = false;
FOR rec IN SELECT * FROM pg_namespace n, pg_class c, pg_attribute a