[postgis-tickets] [SCM] PostGIS branch main updated. 3.1.0rc1-349-g40b8e63

git at osgeo.org git at osgeo.org
Wed Jul 14 16:51:58 PDT 2021


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "PostGIS".

The branch, main has been updated
       via  40b8e63bdb055547d695727bc5c5df57f41c7d4d (commit)
       via  8a7069abdce03f0d17d276bd70036fb07c77dc72 (commit)
      from  48c9573e074d982f2afa85471ca38ddda307cd10 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 40b8e63bdb055547d695727bc5c5df57f41c7d4d
Author: Sandro Santilli <strk at kbt.io>
Date:   Thu Jul 15 01:48:09 2021 +0200

    More consideration of collection TopoGeometries in callbacks

diff --git a/NEWS b/NEWS
index df0063e..3d22927 100644
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,8 @@ PostGIS 3.2.0
   - #4933, topology.GetFaceByPoint will not work with topologies having invalid edge linking.
 
  * Enhancements *
+  - Consider collection TopoGeometries while editing topology primitives.
+           (Sandro Santilli)
   - #3248, Prevent removing isolated edges if used in a TopoGeometry
            (Sandro Santilli)
   - #3231, Prevent removing isolated nodes if used in a TopoGeometry
diff --git a/topology/postgis_topology.c b/topology/postgis_topology.c
index fc181e7..6b7fe3f 100644
--- a/topology/postgis_topology.c
+++ b/topology/postgis_topology.c
@@ -2812,8 +2812,10 @@ cb_updateTopoGeomFaceHeal ( const LWT_BE_TOPOLOGY* topo,
     initStringInfo(sql);
     /* this query can be optimized */
     appendStringInfo( sql, "DELETE FROM \"%s\".relation r "
-                      "USING topology.layer l WHERE l.level = 0 AND l.feature_type = 3"
+                      "USING topology.layer l WHERE l.level = 0"
+                      " AND l.feature_type IN (3,4)"
                       " AND l.topology_id = %d AND l.layer_id = r.layer_id "
+                      " AND r.element_type = 3"
                       " AND abs(r.element_id) IN ( %" LWTFMT_ELEMID ",%" LWTFMT_ELEMID ")"
                       " AND abs(r.element_id) != %" LWTFMT_ELEMID,
                       topo->name, topo->id, face1, face2, newface );
@@ -2835,8 +2837,10 @@ cb_updateTopoGeomFaceHeal ( const LWT_BE_TOPOLOGY* topo,
     initStringInfo(sql);
     /* delete face1 */
     appendStringInfo( sql, "DELETE FROM \"%s\".relation r "
-                      "USING topology.layer l WHERE l.level = 0 AND l.feature_type = 3"
+                      "USING topology.layer l WHERE l.level = 0"
+                      " AND l.feature_type IN (3,4)"
                       " AND l.topology_id = %d AND l.layer_id = r.layer_id "
+                      " AND r.element_type = 3"
                       " AND abs(r.element_id) = %" LWTFMT_ELEMID,
                       topo->name, topo->id, face1 );
     POSTGIS_DEBUGF(1, "cb_updateTopoGeomFaceHeal query 1: %s", sql->data);
@@ -2856,8 +2860,11 @@ cb_updateTopoGeomFaceHeal ( const LWT_BE_TOPOLOGY* topo,
     /* update face2 to newface */
     appendStringInfo( sql, "UPDATE \"%s\".relation r "
                       "SET element_id = %" LWTFMT_ELEMID " FROM topology.layer l "
-                      "WHERE l.level = 0 AND l.feature_type = 3 AND l.topology_id = %d"
-                      " AND l.layer_id = r.layer_id AND r.element_id = %" LWTFMT_ELEMID,
+                      "WHERE l.level = 0 AND l.feature_type IN (3,4)"
+                      " AND l.topology_id = %d"
+                      " AND l.layer_id = r.layer_id"
+                      " AND r.element_type = 3"
+                      " AND r.element_id = %" LWTFMT_ELEMID,
                       topo->name, newface, topo->id, face2 );
     POSTGIS_DEBUGF(1, "cb_updateTopoGeomFaceHeal query 2: %s", sql->data);
 
@@ -2893,8 +2900,10 @@ cb_updateTopoGeomEdgeHeal ( const LWT_BE_TOPOLOGY* topo,
     initStringInfo(sql);
     /* this query can be optimized */
     appendStringInfo( sql, "DELETE FROM \"%s\".relation r "
-                      "USING topology.layer l WHERE l.level = 0 AND l.feature_type = 2"
+                      "USING topology.layer l WHERE l.level = 0"
+                      " AND l.feature_type IN (2,4)"
                       " AND l.topology_id = %d AND l.layer_id = r.layer_id "
+                      " AND r.element_type = 2"
                       " AND abs(r.element_id) IN ( %" LWTFMT_ELEMID ",%" LWTFMT_ELEMID ")"
                       " AND abs(r.element_id) != %" LWTFMT_ELEMID,
                       topo->name, topo->id, edge1, edge2, newedge );
@@ -2916,8 +2925,10 @@ cb_updateTopoGeomEdgeHeal ( const LWT_BE_TOPOLOGY* topo,
     initStringInfo(sql);
     /* delete edge1 */
     appendStringInfo( sql, "DELETE FROM \"%s\".relation r "
-                      "USING topology.layer l WHERE l.level = 0 AND l.feature_type = 2"
+                      "USING topology.layer l WHERE l.level = 0"
+                      " AND l.feature_type IN ( 2, 4 )"
                       " AND l.topology_id = %d AND l.layer_id = r.layer_id "
+                      " AND r.element_type = 2"
                       " AND abs(r.element_id) = %" LWTFMT_ELEMID,
                       topo->name, topo->id, edge2 );
     POSTGIS_DEBUGF(1, "cb_updateTopoGeomEdgeHeal query 1: %s", sql->data);
@@ -2936,10 +2947,13 @@ cb_updateTopoGeomEdgeHeal ( const LWT_BE_TOPOLOGY* topo,
     initStringInfo(sql);
     /* update edge2 to newedge */
     appendStringInfo( sql, "UPDATE \"%s\".relation r "
-                      "SET element_id = %" LWTFMT_ELEMID " *(element_id/%" LWTFMT_ELEMID
+                      "SET element_id = %" LWTFMT_ELEMID
+                      " *(element_id/%" LWTFMT_ELEMID
                       ") FROM topology.layer l "
-                      "WHERE l.level = 0 AND l.feature_type = 2 AND l.topology_id = %d"
-                      " AND l.layer_id = r.layer_id AND abs(r.element_id) = %" LWTFMT_ELEMID,
+                      "WHERE l.level = 0 AND l.feature_type IN (2,4)"
+                      " AND l.topology_id = %d AND l.layer_id = r.layer_id"
+                      " AND r.element_type = 2"
+                      " AND abs(r.element_id) = %" LWTFMT_ELEMID,
                       topo->name, newedge, edge1, topo->id, edge1 );
     POSTGIS_DEBUGF(1, "cb_updateTopoGeomEdgeHeal query 2: %s", sql->data);
 

commit 8a7069abdce03f0d17d276bd70036fb07c77dc72
Author: Sandro Santilli <strk at kbt.io>
Date:   Thu Jul 15 01:33:59 2021 +0200

    Improve readability of edge heal tests

diff --git a/topology/test/regress/st_modedgeheal.sql b/topology/test/regress/st_modedgeheal.sql
index d827951..b00c87e 100644
--- a/topology/test/regress/st_modedgeheal.sql
+++ b/topology/test/regress/st_modedgeheal.sql
@@ -123,15 +123,17 @@ SELECT topology.ST_ModEdgeHeal('t', 100, 2);
 
 -- Now see how signed edges are updated
 
-SELECT 'E'||topology.AddEdge('t', 'LINESTRING(0 0, 5 0)');         -- 3
-SELECT 'E'||topology.AddEdge('t', 'LINESTRING(10 0, 5 0)');        -- 4
+SELECT 'tg-update', 'E'||topology.AddEdge('t', 'LINESTRING(0 0, 5 0)');         -- 3
+SELECT 'tg-update', 'E'||topology.AddEdge('t', 'LINESTRING(10 0, 5 0)');        -- 4
 
 INSERT INTO t.f_lin VALUES ('F+E3-E4',
   topology.CreateTopoGeom('t', 2, 1, '{{3,2},{-4,2}}'));
 INSERT INTO t.f_lin VALUES ('F-E3+E4',
   topology.CreateTopoGeom('t', 2, 1, '{{-3,2},{4,2}}'));
 
-SELECT r.topogeo_id, r.element_id
+SELECT
+  'tg-update', 'before',
+  r.topogeo_id, r.element_id
   FROM t.relation r, t.f_lin f WHERE
   r.layer_id = layer_id(f.g) AND r.topogeo_id = id(f.g)
   AND r.topogeo_id in (2,3)
@@ -139,17 +141,20 @@ SELECT r.topogeo_id, r.element_id
 
 -- This is fine, but will have to tweak definition of
 -- 'F+E3-E4' and 'F-E3+E4'
-SELECT 'MH(3,4)', topology.ST_ModEdgeHeal('t', 3, 4);
+SELECT 'tg-update', 'MH(3,4)', topology.ST_ModEdgeHeal('t', 3, 4);
 
--- This is for ticket #942
-SELECT topology.ST_ModEdgeHeal('t', 1, 3);
-
-SELECT r.topogeo_id, r.element_id
+SELECT
+  'tg-update', 'after',
+  r.topogeo_id, r.element_id
   FROM t.relation r, t.f_lin f WHERE
   r.layer_id = layer_id(f.g) AND r.topogeo_id = id(f.g)
   AND r.topogeo_id in (2,3)
   ORDER BY r.layer_id, r.topogeo_id, r.element_id;
 
+-- This is for ticket #942 (non-connected edges)
+SELECT '#942', topology.ST_ModEdgeHeal('t', 1, 3);
+
+
 SELECT topology.DropTopology('t');
 
 -------------------------------------------------------------------------
diff --git a/topology/test/regress/st_modedgeheal_expected b/topology/test/regress/st_modedgeheal_expected
index e13eb8e..9dd640b 100644
--- a/topology/test/regress/st_modedgeheal_expected
+++ b/topology/test/regress/st_modedgeheal_expected
@@ -112,16 +112,16 @@ ERROR:  TopoGeom 2 in layer 3 (t.f_mix.g) cannot be represented healing edges 1
 ERROR:  TopoGeom 2 in layer 3 (t.f_mix.g) cannot be represented healing edges 2 and 1
 ERROR:  SQL/MM Spatial exception - non-existent edge 200
 ERROR:  SQL/MM Spatial exception - non-existent edge 100
-E3
-E4
-2|-4
-2|3
-3|-3
-3|4
-MH(3,4)|5
+tg-update|E3
+tg-update|E4
+tg-update|before|2|-4
+tg-update|before|2|3
+tg-update|before|3|-3
+tg-update|before|3|4
+tg-update|MH(3,4)|5
+tg-update|after|2|3
+tg-update|after|3|-3
 ERROR:  SQL/MM Spatial exception - non-connected edges
-2|3
-3|-3
 Topology 't' dropped
 #1955|t
 #1955.1|E1
diff --git a/topology/test/regress/st_newedgeheal.sql b/topology/test/regress/st_newedgeheal.sql
index e162b78..51bf315 100644
--- a/topology/test/regress/st_newedgeheal.sql
+++ b/topology/test/regress/st_newedgeheal.sql
@@ -124,15 +124,17 @@ SELECT topology.ST_NewEdgeHeal('t', 100, 2);
 
 -- Now see how signed edges are updated
 
-SELECT 'E'||topology.AddEdge('t', 'LINESTRING(0 0, 5 0)');         -- 3
-SELECT 'E'||topology.AddEdge('t', 'LINESTRING(10 0, 5 0)');        -- 4
+SELECT 'tg-update', 'E'||topology.AddEdge('t', 'LINESTRING(0 0, 5 0)');         -- 3
+SELECT 'tg-update', 'E'||topology.AddEdge('t', 'LINESTRING(10 0, 5 0)');        -- 4
 
 INSERT INTO t.f_lin VALUES ('F+E3-E4',
   topology.CreateTopoGeom('t', 2, 1, '{{3,2},{-4,2}}'));
 INSERT INTO t.f_lin VALUES ('F-E3+E4',
   topology.CreateTopoGeom('t', 2, 1, '{{-3,2},{4,2}}'));
 
-SELECT r.topogeo_id, r.element_id
+SELECT
+  'tg-update', 'before',
+  r.topogeo_id, r.element_id
   FROM t.relation r, t.f_lin f WHERE
   r.layer_id = layer_id(f.g) AND r.topogeo_id = id(f.g)
   AND r.topogeo_id in (2,3)
@@ -140,17 +142,21 @@ SELECT r.topogeo_id, r.element_id
 
 -- This is fine, but will have to tweak definition of
 -- 'F+E3-E4' and 'F-E3+E4'
-SELECT 'MH(3,4)', topology.ST_NewEdgeHeal('t', 3, 4);
+SELECT 'tg-update', 'MH(3,4)', topology.ST_NewEdgeHeal('t', 3, 4);
 
--- This is for ticket #942
-SELECT topology.ST_NewEdgeHeal('t', 1, 5);
-
-SELECT r.topogeo_id, r.element_id
+SELECT
+  'tg-update', 'after',
+  r.topogeo_id, r.element_id
   FROM t.relation r, t.f_lin f WHERE
   r.layer_id = layer_id(f.g) AND r.topogeo_id = id(f.g)
   AND r.topogeo_id in (2,3)
   ORDER BY r.layer_id, r.topogeo_id, r.element_id;
 
+-- This is for ticket #942 (non-connected edges)
+SELECT '#942', topology.ST_NewEdgeHeal('t', 1, 5);
+
+
+
 SELECT topology.DropTopology('t');
 
 -------------------------------------------------------------------------
diff --git a/topology/test/regress/st_newedgeheal_expected b/topology/test/regress/st_newedgeheal_expected
index 973f00f..ebec20b 100644
--- a/topology/test/regress/st_newedgeheal_expected
+++ b/topology/test/regress/st_newedgeheal_expected
@@ -112,16 +112,16 @@ ERROR:  TopoGeom 2 in layer 3 (t.f_mix.g) cannot be represented healing edges 1
 ERROR:  TopoGeom 2 in layer 3 (t.f_mix.g) cannot be represented healing edges 2 and 1
 ERROR:  SQL/MM Spatial exception - non-existent edge 200
 ERROR:  SQL/MM Spatial exception - non-existent edge 100
-E3
-E4
-2|-4
-2|3
-3|-3
-3|4
-MH(3,4)|5
+tg-update|E3
+tg-update|E4
+tg-update|before|2|-4
+tg-update|before|2|3
+tg-update|before|3|-3
+tg-update|before|3|4
+tg-update|MH(3,4)|5
+tg-update|after|2|5
+tg-update|after|3|-5
 ERROR:  SQL/MM Spatial exception - non-connected edges
-2|5
-3|-5
 Topology 't' dropped
 #1955|t
 #1955.1|E1

-----------------------------------------------------------------------

Summary of changes:
 NEWS                                          |  2 ++
 topology/postgis_topology.c                   | 32 +++++++++++++++++++--------
 topology/test/regress/st_modedgeheal.sql      | 21 +++++++++++-------
 topology/test/regress/st_modedgeheal_expected | 18 +++++++--------
 topology/test/regress/st_newedgeheal.sql      | 22 +++++++++++-------
 topology/test/regress/st_newedgeheal_expected | 18 +++++++--------
 6 files changed, 70 insertions(+), 43 deletions(-)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list