[SCM] PostGIS branch master updated. 3.6.0rc2-640-gc94f62361

git at osgeo.org git at osgeo.org
Sun Jun 21 06:34:29 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  c94f62361826e4dc14b660b31e6614727db8deb3 (commit)
       via  f82a1015b8772b570e05ad552eed4029ff718dd5 (commit)
      from  0482d073a2d174a544428664fa7cebcd36b7d96a (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 c94f62361826e4dc14b660b31e6614727db8deb3
Author: Darafei Praliaskouski <me at komzpa.net>
Date:   Sun Jun 21 17:33:10 2026 +0400

    Use escape strings for version regexes
    
    Make the PostGIS script-version comparison helper and its regression checks independent of standard_conforming_strings. This avoids warnings during install when standard_conforming_strings is off, which the regression harness treats as load failure.\n\nCloses #2808

diff --git a/postgis/postgis.sql.in b/postgis/postgis.sql.in
index 8abfd90a2..027170b68 100644
--- a/postgis/postgis.sql.in
+++ b/postgis/postgis.sql.in
@@ -3161,7 +3161,7 @@ CREATE OR REPLACE FUNCTION _postgis_scripts_version_cmp_key(ver text)
 	BEGIN
 		ver_match := pg_catalog.regexp_match(
 			pg_catalog.lower(ver),
-			'^([0-9]+)\.([0-9]+)\.([0-9]+)(dev|alpha|beta|rc)?([0-9]*)([^0-9a-z].*)?$'
+			E'^([0-9]+)\\.([0-9]+)\\.([0-9]+)(dev|alpha|beta|rc)?([0-9]*)([^0-9a-z].*)?$'
 		);
 		IF ver_match IS NULL THEN
 			RETURN NULL;
diff --git a/regress/core/postgis_full_version.sql b/regress/core/postgis_full_version.sql
index 88e9a3c62..5cbc5d9ed 100644
--- a/regress/core/postgis_full_version.sql
+++ b/regress/core/postgis_full_version.sql
@@ -25,7 +25,7 @@ LANGUAGE 'sql' IMMUTABLE;
 -- Older component script versions still mean the installed procs need upgrade.
 SELECT 'topology_old_scripts',
 	postgis_full_version() ~
-		'TOPOLOGY \(topology procs from "1\.0\.0" need upgrade\)';
+		E'TOPOLOGY \\(topology procs from "1\\.0\\.0" need upgrade\\)';
 
 CREATE OR REPLACE FUNCTION topology.postgis_topology_scripts_installed()
 RETURNS text
@@ -52,17 +52,17 @@ LANGUAGE 'sql' IMMUTABLE;
 -- includes final releases newer than release candidates and later RCs.
 SELECT 'topology_newer_scripts',
 	postgis_full_version() ~
-		'TOPOLOGY \(topology procs from "3\.7\.0" are newer than core procs from "3\.7\.0rc1"\)';
+		E'TOPOLOGY \\(topology procs from "3\\.7\\.0" are newer than core procs from "3\\.7\\.0rc1"\\)';
 
 SELECT 'raster_newer_scripts',
 	postgis_full_version() ~
-		'\(raster procs from "3\.7\.0rc2" are newer than core procs from "3\.7\.0rc1"\)';
+		E'\\(raster procs from "3\\.7\\.0rc2" are newer than core procs from "3\\.7\\.0rc1"\\)';
 
 -- A prerelease older than the core prerelease is still reported as needing
 -- upgrade, even when its numeric major/minor/micro components match.
 SELECT 'sfcgal_older_prerelease',
 	postgis_full_version() ~
-		'\(sfcgal procs from "3\.7\.0beta1" need upgrade\)';
+		E'\\(sfcgal procs from "3\\.7\\.0beta1" need upgrade\\)';
 
 CREATE OR REPLACE FUNCTION postgis_sfcgal_scripts_installed()
 RETURNS text
@@ -71,6 +71,6 @@ LANGUAGE 'sql' IMMUTABLE;
 
 SELECT 'sfcgal_newer_scripts',
 	postgis_full_version() ~
-		'\(sfcgal procs from "3\.7\.0" are newer than core procs from "3\.7\.0rc1"\)';
+		E'\\(sfcgal procs from "3\\.7\\.0" are newer than core procs from "3\\.7\\.0rc1"\\)';
 
 ROLLBACK;

commit f82a1015b8772b570e05ad552eed4029ff718dd5
Author: Darafei Praliaskouski <me at komzpa.net>
Date:   Sun Jun 21 17:26:13 2026 +0400

    Fix red main CI failures

diff --git a/raster/rt_core/rt_warp.c b/raster/rt_core/rt_warp.c
index 2cdda3c1e..8058529ba 100644
--- a/raster/rt_core/rt_warp.c
+++ b/raster/rt_core/rt_warp.c
@@ -163,6 +163,12 @@ rt_raster rt_raster_gdal_warp(
 ) {
 	CPLErr cplerr;
 	char *dst_options[] = {"SUBCLASS=VRTWarpedDataset", NULL};
+	const char *init_dest_nodata_option = "INIT_DEST=NO_DATA";
+#if POSTGIS_GDAL_VERSION >= 30302
+	const char *unified_src_nodata_option = "UNIFIED_SRC_NODATA=PARTIAL";
+#else
+	const char *unified_src_nodata_option = "UNIFIED_SRC_NODATA=NO";
+#endif
 	_rti_warp_arg arg = NULL;
 
 	int nodata_count = 0;
@@ -197,6 +203,7 @@ rt_raster rt_raster_gdal_warp(
 	int numBands = 0;
 	int nodata_pos = 0;
 	int data_pos = 0;
+	int use_init_dest_nodata = 0;
 
 	int subspatial = 0;
 
@@ -865,17 +872,21 @@ rt_raster rt_raster_gdal_warp(
 	arg->wopts->hDstDS = arg->dst.ds;
 	arg->wopts->pfnTransformer = arg->transform.func;
 	arg->wopts->pTransformerArg = arg->transform.arg.transform;
-	arg->wopts->papszWarpOptions = (char **) CPLMalloc(sizeof(char *) * 3);
-	arg->wopts->papszWarpOptions[0] = (char *) CPLMalloc(sizeof(char) * (strlen("INIT_DEST=NO_DATA") + 1));
-	strcpy(arg->wopts->papszWarpOptions[0], "INIT_DEST=NO_DATA");
-#if POSTGIS_GDAL_VERSION >= 30302
-	arg->wopts->papszWarpOptions[1] = (char *) CPLMalloc(sizeof(char) * (strlen("UNIFIED_SRC_NODATA=PARTIAL") + 1));
-	strcpy(arg->wopts->papszWarpOptions[1], "UNIFIED_SRC_NODATA=PARTIAL");
-#else
-	arg->wopts->papszWarpOptions[1] = (char *) CPLMalloc(sizeof(char) * (strlen("UNIFIED_SRC_NODATA=NO") + 1));
-	strcpy(arg->wopts->papszWarpOptions[1], "UNIFIED_SRC_NODATA=NO");
-#endif
-	arg->wopts->papszWarpOptions[2] = NULL;
+	/*
+	 * GDAL 3.11 warns, and later treats as an error, when INIT_DEST=NO_DATA
+	 * is requested without destination nodata values for every band.
+	 */
+	use_init_dest_nodata = numBands > 0 && nodata_count == numBands;
+	arg->wopts->papszWarpOptions =
+	    (char **) CPLMalloc(sizeof(char *) * (use_init_dest_nodata ? 3 : 2));
+	i = 0;
+	if (use_init_dest_nodata) {
+		arg->wopts->papszWarpOptions[i] = (char *) CPLMalloc(sizeof(char) * (strlen(init_dest_nodata_option) + 1));
+		strcpy(arg->wopts->papszWarpOptions[i++], init_dest_nodata_option);
+	}
+	arg->wopts->papszWarpOptions[i] = (char *) CPLMalloc(sizeof(char) * (strlen(unified_src_nodata_option) + 1));
+	strcpy(arg->wopts->papszWarpOptions[i++], unified_src_nodata_option);
+	arg->wopts->papszWarpOptions[i] = NULL;
 
 	/* band mapping */
 	arg->wopts->nBandCount = numBands;
diff --git a/raster/test/regress/loader/LongMaintenance.opts b/raster/test/regress/loader/LongMaintenance.opts
index 0320409c5..e63937728 100644
--- a/raster/test/regress/loader/LongMaintenance.opts
+++ b/raster/test/regress/loader/LongMaintenance.opts
@@ -1,2 +1 @@
-# Exercise raster-only long maintenance actions and constraint creation.
 --add-constraints --vacuum --analyze
diff --git a/regress/loader/LongOptions.opts b/regress/loader/LongOptions.opts
index 098600e4b..dc46a9b2d 100644
--- a/regress/loader/LongOptions.opts
+++ b/regress/loader/LongOptions.opts
@@ -1,3 +1 @@
-# Exercise the public long action names as one loader invocation:
-# drop, create-if-missing, load, idempotent index, no transaction, and analyze.
---drop-table --create-table --load-data --create-index --if-not-exists --no-transaction --no-analyze --analyze
+--drop-table --create-table --load-data --create-index --if-not-exists --no-transaction --analyze

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

Summary of changes:
 postgis/postgis.sql.in                          |  2 +-
 raster/rt_core/rt_warp.c                        | 33 ++++++++++++++++---------
 raster/test/regress/loader/LongMaintenance.opts |  1 -
 regress/core/postgis_full_version.sql           | 10 ++++----
 regress/loader/LongOptions.opts                 |  4 +--
 5 files changed, 29 insertions(+), 21 deletions(-)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list