1set client_min_messages to WARNING;
2
3--
4-- ST_InitTopoGeo
5--
6
7SELECT regexp_replace(ST_InitTopoGeo('sqlmm_topology'), 'id:[0-9]*', 'id:x');
8
9-------------------------------------------------------------
10-- ST_AddIsoNode (1)
11-------------------------------------------------------------
12
13SELECT '-- ST_AddIsoNode ------------------------';
14
15-- null input
16SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, NULL);
17SELECT topology.ST_AddIsoNode(NULL, NULL, 'POINT(0 0)');
18SELECT topology.ST_AddIsoNode(NULL, 1, NULL);
19
20-- good nodes on the 'world' face
21SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(0 0)');
22SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(10 0)');
23SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(5 0)');
24SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(5 10)');
25SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(10 10)');
26SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(20 10)');
27
28-- existing nodes
29SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(0 0)');
30SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(10 0)');
31
32-- other good ones (add another 0 to be detected as coincident)
33SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(10.000000000000001 0)');
34SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(7 10)');
35
36-- non-existent face specification
37SELECT topology.ST_AddIsoNode('sqlmm_topology', 1, 'POINT(20 0)');
38
39-- using other then point
40SELECT topology.ST_AddIsoNode('sqlmm_topology', 1, 'MULTIPOINT(20 0)');
41
42-- coincident nodes
43SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(10.000000000000001 0)');
44SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(0 0)');
45SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(10 0)');
46
47-- ST_AddIsoNode not within face (TODO when ST_GetFaceGeometry is done)
48
49------------------------------------------
50-- ST_AddIsoEdge (1)
51------------------------------------------
52
53SELECT '-- ST_AddIsoEdge ------------------------';
54
55-- null input
56SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, NULL);
57SELECT topology.ST_AddIsoEdge(NULL, 1, 2, 'LINESTRING(0 0, 1 1)');
58SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, NULL, 'LINESTRING(0 0, 1 1)');
59SELECT topology.ST_AddIsoEdge('sqlmm_topology', NULL, 2, 'LINESTRING(0 0, 1 1)');
60
61-- invalid curve
62SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, 'POINT(0 0)');
63
64-- non-simple curve
65SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, 'LINESTRING(0 0, 10 0, 5 5, 5 -5)');
66
67-- non-existing nodes
68SELECT topology.ST_AddIsoEdge('sqlmm_topology', 10000, 2, 'LINESTRING(0 0, 1 1)');
69
70-- Curve endpoints mismatch
71SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, 'LINESTRING(0 0, 1 1)');
72SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, 'LINESTRING(0 1, 10 0)');
73
74-- Node crossing
75SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, 'LINESTRING(0 0, 10 0)');
76
77-- Good ones
78SELECT topology.ST_AddIsoEdge('sqlmm_topology', 4, 5, 'LINESTRING(5 10, 5 9, 10 10)');
79SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, 'LINESTRING(0 0, 2 1, 10 5, 10 0)');
80
81-- Not isolated edge (shares endpoint with previous)
82SELECT topology.ST_AddIsoEdge('sqlmm_topology', 4, 6, 'LINESTRING(5 10, 10 9, 20 10)');
83SELECT topology.ST_AddIsoEdge('sqlmm_topology', 5, 6, 'LINESTRING(10 10, 20 10)');
84
85-- Edge intersection (geometry intersects an edge)
86SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, 'LINESTRING(0 0, 2 20, 10 0)');
87
88-- on different faces (TODO req. nodes contained in face)
89
90-------------------------------------------------------------
91-- ST_AddIsoNode (2)
92-------------------------------------------------------------
93
94SELECT '-- ST_AddIsoNode(2) ------------------------';
95
96-- ST_AddIsoNode edge-crossing node
97SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(5 9.5)');
98
99-------------------------------------------------------------
100-- ST_RemoveIsoEdge
101-------------------------------------------------------------
102SELECT '-- ST_RemoveIsoEdge ---------------------';
103
104CREATE TEMP TABLE edge1_endnodes AS
105  WITH edge AS (
106    SELECT start_node,end_node
107    FROM sqlmm_topology.edge_data
108    WHERE edge_id = 1
109  )
110  SELECT start_node id FROM edge UNION
111  SELECT end_node FROM edge;
112SELECT '#3351.1', node_id, containing_face
113 FROM sqlmm_topology.node where node_id in (
114    SELECT id FROM edge1_endnodes
115  )
116 ORDER BY node_id;
117SELECT topology.ST_RemoveIsoEdge('sqlmm_topology', 1);
118SELECT '#3351.2', node_id, containing_face
119 FROM sqlmm_topology.node where node_id in (
120    SELECT id FROM edge1_endnodes
121  )
122 ORDER BY node_id;
123DROP TABLE edge1_endnodes;
124
125-------------------------------------------------------------
126-- ST_NewEdgesSplit
127-------------------------------------------------------------
128
129SELECT '-- ST_NewEdgesSplit  ---------------------';
130SELECT topology.ST_NewEdgesSplit('sqlmm_topology', 2, 'POINT(10 2)');
131
132SELECT topology.DropTopology('sqlmm_topology');
133