1\set VERBOSITY terse
2set client_min_messages to ERROR;
3
4SELECT topology.CreateTopology('MiX') > 0;
5
6-- Fails due to missing layer 1
7SELECT topology.CreateTopoGeom(
8    'MiX', -- Topology name
9    3, -- Topology geometry type (polygon/multipolygon)
10    1, -- TG_LAYER_ID for this topology (from topology.layer)
11    '{{3,3},{6,3}}'); -- face_id:3 face_id:6
12
13CREATE TABLE "MiX".poi (id int);
14SELECT 'l1', topology.AddTopoGeometryColumn('MiX', 'MiX', 'poi', 'feat', 'POINT');
15
16-- A Layer of type 1 (POINT) cannot contain a TopoGeometry of type 2 (LINE)
17SELECT topology.CreateTopoGeom( 'MiX', 2, 1, '{{12,2}}');
18-- A Layer of type 1 (POINT) cannot contain a TopoGeometry of type 3 (POLY)
19SELECT topology.CreateTopoGeom( 'MiX', 3, 1, '{{13,3}}');
20-- A Layer of type 1 (POINT) cannot contain a TopoGeometry of type 4 (COLL.)
21SELECT topology.CreateTopoGeom( 'MiX', 4, 1, '{{12,2}}');
22
23-- Node 78 does not exist in topology MiX (trigger on "relation" table)
24SELECT topology.CreateTopoGeom( 'MiX', 1, 1, '{{78,1}}');
25
26SELECT 'n1',  topology.addNode('MiX', 'POINT(0 0)');
27
28-- Success !
29SELECT layer_id(tg), id(tg), type(tg) FROM (
30 SELECT topology.CreateTopoGeom( 'MiX', 1, 1, '{{1,1}}') as tg
31) foo;
32
33-- Invalid TopoGeometry type (out of range)
34SELECT CreateTopoGeom( 'MiX', 5, 1, '{{1,1}}');
35SELECT CreateTopoGeom( 'MiX', 0, 1, '{{1,1}}');
36
37CREATE TABLE "MiX".f_lineal (id int);
38SELECT 'l2', AddTopoGeometryColumn('MiX', 'MiX', 'f_lineal', 'feat', 'LINE');
39
40SELECT 'n2', addNode('MiX', 'POINT(10 0)');
41SELECT 'e1', addEdge('MiX', 'LINESTRING(0 0, 10 0)');
42
43SELECT CreateTopoGeom( 'MiX', 2, 2, '{{1,1}}'); -- wrong prim. type
44SELECT 'L1', ST_AsText(CreateTopoGeom( 'MiX', 2, 2, '{{1,2}}')); -- fine
45
46CREATE TABLE "MiX".f_areal (id int);
47SELECT 'l3', AddTopoGeometryColumn('MiX', 'MiX', 'f_areal', 'feat', 'POLYGON');
48
49SELECT 'e2', addEdge('MiX', 'LINESTRING(10 0, 5 5, 0 0)');
50SELECT 'f1', addFace('MiX', 'POLYGON((0 0, 10 0, 5 5, 0 0))');
51
52SELECT 'A1', CreateTopoGeom( 'MiX', 2, 3, '{{1,3}}'); -- wrong tg type
53SELECT 'A1', CreateTopoGeom( 'MiX', 3, 3, '{{1,2}}'); -- wrong prim. type
54SELECT 'A1', ST_AsText(CreateTopoGeom( 'MiX', 3, 3, '{{1,3}}')); -- fine
55
56CREATE TABLE "MiX".f_mix (id int);
57SELECT 'l4', AddTopoGeometryColumn('MiX', 'MiX', 'f_mix', 'feat', 'COLLECTION');
58SELECT 'MP', ST_AsText(CreateTopoGeom( 'MiX', 1, 4, '{{1,1}}')); -- fine point
59SELECT 'ML', ST_AsText(CreateTopoGeom( 'MiX', 2, 4, '{{1,2}}')); -- fine line
60SELECT 'MA', ST_AsText(CreateTopoGeom( 'MiX', 3, 4, '{{1,3}}')); -- fine area
61SELECT 'MM', ST_AsText(CreateTopoGeom( 'MiX', 4, 4, '{{1,3},{1,2},{1,1}}')); -- fine mix
62
63-- Test emptyness {
64SELECT 'POINT EMPTY', ST_AsEWKT( CreateTopoGeom( 'MiX', 1, 4, '{{0,0}}' ) );
65SELECT 'LINESTRING EMPTY', ST_AsEWKT( CreateTopoGeom( 'MiX', 2, 4, '{{0,0}}' ) );
66SELECT 'POLYGON EMPTY', ST_AsEWKT( CreateTopoGeom( 'MiX', 3, 4, '{{0,0}}' ) );
67SELECT 'GEOMETRYCOLLECTION EMPTY', ST_AsEWKT( CreateTopoGeom( 'MiX', 4, 4, '{{0,0}}' ) );
68-- } Test emptyness
69
70SELECT DropTopology('MiX');
71