[SCM] PostGIS branch master updated. 3.7.0alpha1-79-g63de00830

git at osgeo.org git at osgeo.org
Wed Jul 8 14:10:49 PDT 2026


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, master has been updated
       via  63de00830dc7afb6102a095cb1a41514e9064c1f (commit)
      from  dc565b619633d15b2ccd262ca70b00c1f5ee6c4d (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 63de00830dc7afb6102a095cb1a41514e9064c1f
Author: Paul Ramsey <pramsey at cleverelephant.ca>
Date:   Wed Jul 8 14:10:37 2026 -0700

    Fix non-topology regression tests for GEOS >= 3.15

diff --git a/liblwgeom/cunit/cu_wrapx.c b/liblwgeom/cunit/cu_wrapx.c
index a5ca09a28..79e707238 100644
--- a/liblwgeom/cunit/cu_wrapx.c
+++ b/liblwgeom/cunit/cu_wrapx.c
@@ -83,9 +83,11 @@ static void test_lwgeom_wrapx(void)
 	lwgeom_free(tmp);
 	CU_ASSERT_FATAL(ret != NULL);
 	obt_wkt = lwgeom_to_ewkt(ret);
-	tmp = lwgeom_from_wkt(
-					"MULTILINESTRING((0 0,8 0),(-2 0,0 0))",
-					LW_PARSER_CHECK_NONE);
+#if POSTGIS_GEOS_VERSION < 31500
+	tmp = lwgeom_from_wkt("MULTILINESTRING((0 0,8 0),(-2 0,0 0))",LW_PARSER_CHECK_NONE);
+#else
+	tmp = lwgeom_from_wkt("LINESTRING(-2 0,0 0,8 0)",LW_PARSER_CHECK_NONE);
+#endif
 	tmp2 = lwgeom_normalize(tmp);
 	lwgeom_free(tmp);
 	exp_wkt = lwgeom_to_ewkt(tmp2);
diff --git a/regress/core/fixedoverlay.sql b/regress/core/fixedoverlay.sql
index 45d3b8979..2377f5667 100644
--- a/regress/core/fixedoverlay.sql
+++ b/regress/core/fixedoverlay.sql
@@ -1,3 +1,9 @@
+CREATE OR REPLACE FUNCTION geos_version()
+RETURNS integer AS $$
+    SELECT (matches[1]::integer * 100) + matches[2]::integer
+    FROM regexp_match(postgis_geos_version(), E'^([0-9]+)]\\.([0-9]+)') AS matches;
+$$ LANGUAGE 'sql' IMMUTABLE;
+
 SELECT 'intersection', ST_AsText(ST_Intersection(
 	'LINESTRING(0 0, 9 0)'::geometry,
 	'LINESTRING(7 0, 13.2 0)'::geometry,
@@ -13,14 +19,7 @@ SELECT 'symdifference', ST_AsText(ST_SymDifference(
 	'LINESTRING(7 0, 13.2 0)'::geometry,
 2));
 
-SELECT 'union', ST_AsText(ST_Union(
-	'LINESTRING(0.5 0, 9 0)'::geometry,
-	'LINESTRING(7 0, 13.2 0)'::geometry,
- 2));
 
-SELECT 'unaryunion', ST_AsText(ST_UnaryUnion(
-	'GEOMETRYCOLLECTION(LINESTRING(0.5 0, 9 0), LINESTRING(7 0, 13.2 0))'::geometry,
-2));
 
 WITH n AS (SELECT geom
 FROM ST_Subdivide(
@@ -28,3 +27,6 @@ FROM ST_Subdivide(
 6, 1) AS geom)
 SELECT 'subdivide', count(geom), ST_AsText(ST_Normalize(ST_Union(geom)))
 FROM n;
+
+
+DROP FUNCTION geos_version();
diff --git a/regress/core/fixedoverlay_expected b/regress/core/fixedoverlay_expected
index 4f03bb27b..835d8b92c 100644
--- a/regress/core/fixedoverlay_expected
+++ b/regress/core/fixedoverlay_expected
@@ -1,6 +1,4 @@
 intersection|LINESTRING(8 0,10 0)
 difference|LINESTRING(0 0,8 0)
 symdifference|MULTILINESTRING((0 0,8 0),(10 0,14 0))
-union|MULTILINESTRING((0 0,8 0),(8 0,10 0),(10 0,14 0))
-unaryunion|MULTILINESTRING((0 0,8 0),(8 0,10 0),(10 0,14 0))
 subdivide|3|MULTIPOLYGON(((0 0,0 10,10 10,10 6,100 5,10 5,10 0,0 0)),((100 0,100 5,100 10,110 10,110 0,100 0)))
diff --git a/regress/core/geos315.sql b/regress/core/geos315.sql
index b30f0657a..5391bc22f 100644
--- a/regress/core/geos315.sql
+++ b/regress/core/geos315.sql
@@ -3,43 +3,43 @@
 
 -- Connected graph (all one cluster)
 SELECT 'connected', id, ST_MinimumSpanningTree(geom) OVER (ORDER BY id) FROM (VALUES
-    (1, 'LINESTRING(0 0,1 0)'::geometry),
-    (2, 'LINESTRING(0 0,0 1)'::geometry),
-    (3, 'LINESTRING(1 1,0 1)'::geometry),
-    (4, 'LINESTRING(1 1,1 0)'::geometry),
-    (5, 'LINESTRING(0 0,1 1)'::geometry),
-    (6, 'LINESTRING(1 0,0 1)'::geometry)
+	(1, 'LINESTRING(0 0,1 0)'::geometry),
+	(2, 'LINESTRING(0 0,0 1)'::geometry),
+	(3, 'LINESTRING(1 1,0 1)'::geometry),
+	(4, 'LINESTRING(1 1,1 0)'::geometry),
+	(5, 'LINESTRING(0 0,1 1)'::geometry),
+	(6, 'LINESTRING(1 0,0 1)'::geometry)
 ) AS t(id, geom);
 
 -- Disconnected graph (two clusters)
 SELECT 'disconnected', id, ST_MinimumSpanningTree(geom) OVER (ORDER BY id) FROM (VALUES
-    (1, 'LINESTRING(0 0,1 0)'::geometry),
-    (2, 'LINESTRING(0 0,0 1)'::geometry),
-    (3, 'LINESTRING(1 1,0 1)'::geometry),
-    (4, 'LINESTRING(11 11,11 10)'::geometry),
-    (5, 'LINESTRING(10 10,11 11)'::geometry),
-    (6, 'LINESTRING(11 10,10 11)'::geometry)
+	(1, 'LINESTRING(0 0,1 0)'::geometry),
+	(2, 'LINESTRING(0 0,0 1)'::geometry),
+	(3, 'LINESTRING(1 1,0 1)'::geometry),
+	(4, 'LINESTRING(11 11,11 10)'::geometry),
+	(5, 'LINESTRING(10 10,11 11)'::geometry),
+	(6, 'LINESTRING(11 10,10 11)'::geometry)
 ) AS t(id, geom);
 
 
 -- NULL handling
 SELECT 'nulls', id, ST_MinimumSpanningTree(geom) OVER (ORDER BY id), ST_AsText(geom) FROM (VALUES
-    (1, 'LINESTRING(0 0,1 0)'::geometry),
-    (2, 'LINESTRING(0 0,0 1)'::geometry),
-    (3, NULL::geometry),
-    (4, 'LINESTRING(1 1,1 0)'::geometry),
-    (5, 'LINESTRING(0 0,1 1)'::geometry),
-    (6, 'LINESTRING(1 0,0 1)'::geometry)
+	(1, 'LINESTRING(0 0,1 0)'::geometry),
+	(2, 'LINESTRING(0 0,0 1)'::geometry),
+	(3, NULL::geometry),
+	(4, 'LINESTRING(1 1,1 0)'::geometry),
+	(5, 'LINESTRING(0 0,1 1)'::geometry),
+	(6, 'LINESTRING(1 0,0 1)'::geometry)
 ) AS t(id, geom);
 
 -- Empty geometry handling
 SELECT 'empty', id, ST_MinimumSpanningTree(geom) OVER (ORDER BY id), ST_AsText(geom) FROM (VALUES
-    (1, 'LINESTRING(0 0,1 0)'::geometry),
-    (2, 'LINESTRING EMPTY'::geometry),
-    (3, 'LINESTRING EMPTY'::geometry),
-    (4, 'LINESTRING(1 1,1 0)'::geometry),
-    (5, 'LINESTRING(0 0,1 1)'::geometry),
-    (6, 'LINESTRING(1 0,0 1)'::geometry)
+	(1, 'LINESTRING(0 0,1 0)'::geometry),
+	(2, 'LINESTRING EMPTY'::geometry),
+	(3, 'LINESTRING EMPTY'::geometry),
+	(4, 'LINESTRING(1 1,1 0)'::geometry),
+	(5, 'LINESTRING(0 0,1 1)'::geometry),
+	(6, 'LINESTRING(1 0,0 1)'::geometry)
 ) AS t(id, geom);
 
 -- ST_CoverageEdges
@@ -67,3 +67,14 @@ SELECT 'coverage edges array' AS test,
 FROM coverage_edges WHERE id = 6;
 
 DROP TABLE coverage_edges;
+
+
+-- FROM fixedoverlay
+SELECT 'union', ST_AsText(ST_Union(
+	'LINESTRING(0.5 0, 9 0)'::geometry,
+	'LINESTRING(7 0, 13.2 0)'::geometry,
+ 2));
+
+SELECT 'unaryunion', ST_AsText(ST_UnaryUnion(
+	'GEOMETRYCOLLECTION(LINESTRING(0.5 0, 9 0), LINESTRING(7 0, 13.2 0))'::geometry,
+2));
diff --git a/regress/core/geos315_expected b/regress/core/geos315_expected
index 9eae3c024..8df98e9fb 100644
--- a/regress/core/geos315_expected
+++ b/regress/core/geos315_expected
@@ -26,3 +26,5 @@ coverage edges all|MULTILINESTRING((10 10,10 0),(10 0,0 0,0 10,10 10),(10 10,20
 coverage edges exterior|MULTILINESTRING((10 0,0 0,0 10,10 10),(10 10,20 10,20 0,10 0))
 coverage edges interior|MULTILINESTRING((10 10,10 0))
 coverage edges array|MULTILINESTRING((10 10,10 0),(10 0,0 0,0 10,10 10),(10 10,20 10,20 0,10 0))
+union|LINESTRING(0 0,8 0,10 0,14 0)
+unaryunion|LINESTRING(0 0,8 0,10 0,14 0)
diff --git a/regress/core/wrapx.sql b/regress/core/wrapx.sql
index d08dc9c9c..321958d52 100644
--- a/regress/core/wrapx.sql
+++ b/regress/core/wrapx.sql
@@ -1,94 +1,112 @@
-CREATE FUNCTION test(geom geometry, wrap float8, amount float8, exp geometry)
+CREATE FUNCTION test_wrapx(geom geometry, wrap float8, amount float8, exp geometry)
 RETURNS text AS $$
 DECLARE
-  obt geometry;
+	obt geometry;
 BEGIN
-  obt = ST_Normalize(ST_WrapX(geom, wrap, amount));
-  IF ST_OrderingEquals(obt, exp) THEN
-    RETURN 'OK';
-  ELSE
-    RETURN 'KO:' || ST_AsEWKT(obt) || ' != ' || ST_AsEWKT(exp);
-  END IF;
+	obt = ST_Normalize(ST_WrapX(geom, wrap, amount));
+	IF ST_OrderingEquals(obt, exp) THEN
+		RETURN 'OK';
+	ELSE
+		RETURN 'KO:' || ST_AsEWKT(obt) || ' != ' || ST_AsEWKT(exp);
+	END IF;
 END
-$$ LANGUAGE plpgsql;
+$$ LANGUAGE 'plpgsql';
 
-SELECT 'P1', test(
-  'POINT(0 0)', 2, 10,
-  'POINT(10 0)');
+CREATE OR REPLACE FUNCTION geos_version()
+RETURNS integer AS $$
+    SELECT (matches[1]::integer * 100) + matches[2]::integer
+    FROM regexp_match(postgis_geos_version(), E'^([0-9]+)]\\.([0-9]+)') AS matches;
+$$ LANGUAGE 'sql' IMMUTABLE;
 
-SELECT 'P2', test(
-  'POINT(0 0)', 2, -10,
-  'POINT(0 0)');
 
-SELECT 'P3', test(
-  'POINT(0 0)', -2, -10,
-  'POINT(-10 0)');
+SELECT 'P1', test_wrapx(
+	'POINT(0 0)', 2, 10,
+	'POINT(10 0)');
 
-SELECT 'L1', test(
-  'LINESTRING(0 0,10 0)', 2, 10,
-  --'LINESTRING(2 0,12 0)');
-  'MULTILINESTRING((10 0,12 0),(2 0,10 0))');
+SELECT 'P2', test_wrapx(
+	'POINT(0 0)', 2, -10,
+	'POINT(0 0)');
 
-SELECT 'L2', test(
-  'LINESTRING(0 0,10 0)', 8, -10,
-  'MULTILINESTRING((0 0,8 0),(-2 0,0 0))');
+SELECT 'P3', test_wrapx(
+	'POINT(0 0)', -2, -10,
+	'POINT(-10 0)');
 
-SELECT 'L3', test(
-  'LINESTRING(0 0,10 0)', 0, 10,
-  'LINESTRING(0 0,10 0)');
+SELECT 'L1', test_wrapx(
+	'LINESTRING(0 0,10 0)', 2, 10,
+	CASE WHEN geos_version() >= 315
+	  THEN 'LINESTRING(2 0,10 0,12 0)'
+	  ELSE 'MULTILINESTRING((10 0,12 0),(2 0,10 0))'
+	END);
 
-SELECT 'L4', test(
-  'LINESTRING(0 0,10 0)', 10, -10,
-  'LINESTRING(0 0,10 0)');
+SELECT 'L2', test_wrapx(
+	'LINESTRING(0 0,10 0)', 8, -10,
+	CASE WHEN geos_version() >= 315
+	  THEN 'LINESTRING(-2 0,0 0,8 0)'
+	  ELSE 'MULTILINESTRING((0 0,8 0),(-2 0,0 0))'
+	END);
 
-SELECT 'ML1', test(
-  'MULTILINESTRING((-10 0,0 0),(0 0,10 0))', 0, 20,
-  'MULTILINESTRING((10 0,20 0),(0 0,10 0))');
+SELECT 'L3', test_wrapx(
+	'LINESTRING(0 0,10 0)', 0, 10,
+	'LINESTRING(0 0,10 0)');
 
-SELECT 'ML2', test(
-  'MULTILINESTRING((-10 0,0 0),(0 0,10 0))', 0, -20,
-  'MULTILINESTRING((-10 0,0 0),(-20 0,-10 0))');
+SELECT 'L4', test_wrapx(
+	'LINESTRING(0 0,10 0)', 10, -10,
+	'LINESTRING(0 0,10 0)');
 
-SELECT 'ML3', test(
-  'MULTILINESTRING((10 0,5 0),(-10 0,0 0),(0 0,5 0))', 0, -20,
-  'MULTILINESTRING((-10 0,0 0),(-15 0,-10 0),(-20 0,-15 0))');
+SELECT 'ML1', test_wrapx(
+	'MULTILINESTRING((-10 0,0 0),(0 0,10 0))', 0, 20,
+	'MULTILINESTRING((10 0,20 0),(0 0,10 0))');
 
-SELECT 'A1', test(
-  'POLYGON((0 0,10 0,10 10,0 10,0 0),
-           (1 2,3 2,3 4,1 4,1 2),
-           (4 2,6 2,6 4,4 4,4 2),
-           (7 2,9 2,9 4,7 4,7 2))', 5, 10,
-  'POLYGON((5 0,5 2,6 2,6 4,5 4,5 10,10 10,15 10,15 4,14 4,14 2,15 2,15 0,10 0,5 0),
-           (11 2,13 2,13 4,11 4,11 2),
-           (7 2,9 2,9 4,7 4,7 2))');
+SELECT 'ML2', test_wrapx(
+	'MULTILINESTRING((-10 0,0 0),(0 0,10 0))', 0, -20,
+	'MULTILINESTRING((-10 0,0 0),(-20 0,-10 0))');
 
-SELECT 'A2', test(
-  'POLYGON((0 0,10 0,10 10,0 10,0 0),
-           (1 2,3 2,3 4,1 4,1 2),
-           (4 2,6 2,6 4,4 4,4 2),
-           (7 2,9 2,9 4,7 4,7 2))', 5, -10,
-  'POLYGON((-5 0,-5 2,-4 2,-4 4,-5 4,-5 10,0 10,5 10,5 4,4 4,4 2,5 2,5 0,0 0,-5 0),
-           (1 2,3 2,3 4,1 4,1 2),
-           (-3 2,-1 2,-1 4,-3 4,-3 2))');
+SELECT 'ML3', test_wrapx(
+	'MULTILINESTRING((10 0,5 0),(-10 0,0 0),(0 0,5 0))', 0, -20,
+	'MULTILINESTRING((-10 0,0 0),(-15 0,-10 0),(-20 0,-15 0))');
 
-SELECT 'C1', test(
-  'GEOMETRYCOLLECTION(
-    POLYGON((0 0,10 0,10 10,0 10,0 0),
-            (1 2,3 2,3 4,1 4,1 2),
-            (4 2,6 2,6 4,4 4,4 2),
-            (7 2,9 2,9 4,7 4,7 2)),
-    POINT(2 20),
-    POINT(7 -20),
-    LINESTRING(0 40,10 40)
-  )',
-  5, -10,
-  'GEOMETRYCOLLECTION(
-    POLYGON((-5 0,-5 2,-4 2,-4 4,-5 4,-5 10,0 10,5 10,5 4,4 4,4 2,5 2,5 0,0 0,-5 0),
-            (1 2,3 2,3 4,1 4,1 2),
-            (-3 2,-1 2,-1 4,-3 4,-3 2)),
-    MULTILINESTRING((0 40,5 40),(-5 40,0 40)),
-    POINT(2 20),
-    POINT(-3 -20)
-  )');
+SELECT 'A1', test_wrapx(
+	'POLYGON((0 0,10 0,10 10,0 10,0 0),
+					 (1 2,3 2,3 4,1 4,1 2),
+					 (4 2,6 2,6 4,4 4,4 2),
+					 (7 2,9 2,9 4,7 4,7 2))', 5, 10,
+	'POLYGON((5 0,5 2,6 2,6 4,5 4,5 10,10 10,15 10,15 4,14 4,14 2,15 2,15 0,10 0,5 0),
+					 (11 2,13 2,13 4,11 4,11 2),
+					 (7 2,9 2,9 4,7 4,7 2))');
 
-DROP FUNCTION test(geometry, float8, float8, geometry);
+SELECT 'A2', test_wrapx(
+	'POLYGON((0 0,10 0,10 10,0 10,0 0),
+					 (1 2,3 2,3 4,1 4,1 2),
+					 (4 2,6 2,6 4,4 4,4 2),
+					 (7 2,9 2,9 4,7 4,7 2))', 5, -10,
+	'POLYGON((-5 0,-5 2,-4 2,-4 4,-5 4,-5 10,0 10,5 10,5 4,4 4,4 2,5 2,5 0,0 0,-5 0),
+					 (1 2,3 2,3 4,1 4,1 2),
+					 (-3 2,-1 2,-1 4,-3 4,-3 2))');
+
+SELECT 'C1', test_wrapx(
+	'GEOMETRYCOLLECTION(
+		POLYGON((0 0,10 0,10 10,0 10,0 0),
+						(1 2,3 2,3 4,1 4,1 2),
+						(4 2,6 2,6 4,4 4,4 2),
+						(7 2,9 2,9 4,7 4,7 2)),
+		POINT(2 20),
+		POINT(7 -20),
+		LINESTRING(0 40,10 40)
+	)',
+	5, -10,
+	CASE WHEN geos_version() >= 315
+	  THEN 'GEOMETRYCOLLECTION(POLYGON((-5 0,-5 2,-4 2,-4 4,-5 4,-5 10,0 10,5 10,5 4,4 4,4 2,5 2,5 0,0 0,-5 0),(1 2,3 2,3 4,1 4,1 2),(-3 2,-1 2,-1 4,-3 4,-3 2)),LINESTRING(-5 40,0 40,5 40),POINT(2 20),POINT(-3 -20))'
+	  ELSE 'GEOMETRYCOLLECTION(
+		POLYGON((-5 0,-5 2,-4 2,-4 4,-5 4,-5 10,0 10,5 10,5 4,4 4,4 2,5 2,5 0,0 0,-5 0),
+						(1 2,3 2,3 4,1 4,1 2),
+						(-3 2,-1 2,-1 4,-3 4,-3 2)),
+		MULTILINESTRING((0 40,5 40),(-5 40,0 40)),
+		POINT(2 20),
+		POINT(-3 -20)
+	)'
+	END);
+
+
+
+DROP FUNCTION geos_version();
+DROP FUNCTION test_wrapx(geometry, float8, float8, geometry);

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

Summary of changes:
 liblwgeom/cunit/cu_wrapx.c         |   8 +-
 regress/core/fixedoverlay.sql      |  16 +--
 regress/core/fixedoverlay_expected |   2 -
 regress/core/geos315.sql           |  59 ++++++-----
 regress/core/geos315_expected      |   2 +
 regress/core/wrapx.sql             | 198 ++++++++++++++++++++-----------------
 6 files changed, 159 insertions(+), 126 deletions(-)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list