From 75e35d741fc832ee89ddcd700afe020cacacc094 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Sun, 15 Jan 2012 17:50:46 +0000 Subject: [PATCH] Make AddTopoGeometryColumn less sequence-number-eager, regress-test git-svn-id: http://svn.osgeo.org/postgis/trunk@8821 b70326c6-7e19-0410-871a-916f4a2858ee --- topology/test/Makefile | 1 + .../test/regress/addtopogeometrycolumn.sql | 19 ++++++++++ .../regress/addtopogeometrycolumn_expected | 6 ++++ topology/topology.sql.in.c | 36 +++++++++---------- 4 files changed, 43 insertions(+), 19 deletions(-) create mode 100644 topology/test/regress/addtopogeometrycolumn.sql create mode 100644 topology/test/regress/addtopogeometrycolumn_expected diff --git a/topology/test/Makefile b/topology/test/Makefile index fc2867eef..3dc48fb61 100644 --- a/topology/test/Makefile +++ b/topology/test/Makefile @@ -27,6 +27,7 @@ TESTS = regress/legacy_validate.sql regress/legacy_predicate.sql \ regress/legacy_query.sql regress/addnode.sql \ regress/addedge.sql regress/addface.sql \ regress/addface2.5d.sql \ + regress/addtopogeometrycolumn.sql \ regress/polygonize.sql \ regress/st_addisoedge.sql \ regress/st_addisonode.sql \ diff --git a/topology/test/regress/addtopogeometrycolumn.sql b/topology/test/regress/addtopogeometrycolumn.sql new file mode 100644 index 000000000..c1606ace8 --- /dev/null +++ b/topology/test/regress/addtopogeometrycolumn.sql @@ -0,0 +1,19 @@ +set client_min_messages to WARNING; +\set VERBOSITY terse + +select createtopology('tt') > 0; +select addtopogeometrycolumn('tt','public','feature','tg','POINT'); -- fail +create table feature(id integer); +select addtopogeometrycolumn('tt','public','feature','tg','BOGUS'); -- fail + +-- Expect first good call returning 1 +select 'good', addtopogeometrycolumn('tt','public','feature','tg','POINT'); + +select l.layer_id, l.schema_name, l.table_name, l.feature_column, + l.feature_type, l.level, l.child_id +from topology.layer l, topology.topology t +where l.topology_id = t.id and t.name = 'tt' +order by l.layer_id; + +drop table feature; +select droptopology('tt'); diff --git a/topology/test/regress/addtopogeometrycolumn_expected b/topology/test/regress/addtopogeometrycolumn_expected new file mode 100644 index 000000000..9f67abeee --- /dev/null +++ b/topology/test/regress/addtopogeometrycolumn_expected @@ -0,0 +1,6 @@ +t +ERROR: relation "public.feature" does not exist +ERROR: Layer type must be one of POINT,LINE,POLYGON,COLLECTION +good|1 +1|public|feature|tg|1|0| +Topology 'tt' dropped diff --git a/topology/topology.sql.in.c b/topology/topology.sql.in.c index a44b64620..2fd81aef7 100644 --- a/topology/topology.sql.in.c +++ b/topology/topology.sql.in.c @@ -560,17 +560,6 @@ BEGIN RAISE EXCEPTION 'Topology % does not exist', toponame; END IF; - -- - -- Get new layer id from sequence - -- - FOR rec IN EXECUTE 'SELECT nextval(' || - quote_literal( - quote_ident(toponame) || '.layer_id_seq' - ) || ')' - LOOP - layer_id = rec.nextval; - END LOOP; - IF ltype = 'POINT' THEN intltype = 1; ELSIF ltype = 'LINE' THEN @@ -583,6 +572,23 @@ BEGIN RAISE EXCEPTION 'Layer type must be one of POINT,LINE,POLYGON,COLLECTION'; END IF; + -- + -- Add new TopoGeometry column in schema.table + -- + EXECUTE 'ALTER TABLE ' || quote_ident(schema) + || '.' || quote_ident(tbl) + || ' ADD COLUMN ' || quote_ident(col) + || ' topology.TopoGeometry;'; + + + -- + -- Get new layer id from sequence + -- + EXECUTE 'SELECT nextval(' || + quote_literal( + quote_ident(toponame) || '.layer_id_seq' + ) || ')' INTO STRICT layer_id; + -- -- See if child id exists and extract its level -- @@ -626,14 +632,6 @@ BEGIN EXECUTE 'CREATE SEQUENCE ' || quote_ident(toponame) || '.topogeo_s_' || layer_id; - -- - -- Add new TopoGeometry column in schema.table - -- - EXECUTE 'ALTER TABLE ' || quote_ident(schema) - || '.' || quote_ident(tbl) - || ' ADD COLUMN ' || quote_ident(col) - || ' topology.TopoGeometry;'; - -- -- Add constraints on TopoGeom column -- -- 2.50.1