From 3b98bd6f461b371035658aaa59002505e5f834ce Mon Sep 17 00:00:00 2001 From: Zaid-edge Date: Mon, 20 Jul 2026 18:42:49 +0500 Subject: [PATCH 1/2] SPOCK-625: bump extension version to 2.6.0 The v2.6.0 tag was cut without bumping the extension version metadata: snowflake.control still declared default_version = '2.5.0' and no 2.6.0 SQL script existed, so the extension installed and reported itself as 2.5.0 even when built from the v2.6.0 tag. - snowflake.control: default_version 2.5.0 -> 2.6.0 - add snowflake--2.5.0--2.6.0.sql upgrade script (2.6.0 is the Postgres 19 port, a C/build change with no catalog changes) - Makefile: add the upgrade script to DATA - add test/t/snowflake_version.py regression guarding the version metadata, registered in the script_file schedule Co-Authored-By: Claude Opus 4.8 (1M context) --- Makefile | 3 +- snowflake--2.5.0--2.6.0.sql | 13 +++++ snowflake.control | 2 +- test/schedule_files/script_file | 1 + test/t/snowflake_version.py | 94 +++++++++++++++++++++++++++++++++ 5 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 snowflake--2.5.0--2.6.0.sql create mode 100644 test/t/snowflake_version.py diff --git a/Makefile b/Makefile index 3e5e28d..aadb129 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,8 @@ DATA = snowflake--1.0.sql \ snowflake--2.2--2.3.sql \ snowflake--2.3.sql \ snowflake--2.3--2.4.sql \ - snowflake--2.4--2.5.0.sql + snowflake--2.4--2.5.0.sql \ + snowflake--2.5.0--2.6.0.sql PGFILEDESC = "snowflake - snowflake style IDs for PostgreSQL" REGRESS = conversion maxvalue repair diff --git a/snowflake--2.5.0--2.6.0.sql b/snowflake--2.5.0--2.6.0.sql new file mode 100644 index 0000000..aa5af1e --- /dev/null +++ b/snowflake--2.5.0--2.6.0.sql @@ -0,0 +1,13 @@ +/* snowflake--2.5.0--2.6.0.sql */ + +-- complain if script is sourced in psql, rather than via ALTER EXTENSION +\echo Use "ALTER EXTENSION snowflake UPDATE TO '2.6.0'" to load this file. \quit + +-- ---------------------------------------------------------------------- +-- 2.5.0 -> 2.6.0 - add support for PostgreSQL 19. +-- +-- The 2.6.0 release is a build/C-level change (porting the extension to +-- the PostgreSQL 19 server API); there are no catalog objects to alter. +-- This upgrade script exists so that the extension version can be moved +-- to 2.6.0 via ALTER EXTENSION and so a 2.6.0 install is offered/reachable. +-- ---------------------------------------------------------------------- diff --git a/snowflake.control b/snowflake.control index 238706a..e08d9ce 100644 --- a/snowflake.control +++ b/snowflake.control @@ -1,6 +1,6 @@ # snowflake extension comment = 'Snowflake style IDs for PostgreSQL' -default_version = '2.5.0' +default_version = '2.6.0' module_pathname = '$libdir/snowflake' relocatable = false schema = snowflake diff --git a/test/schedule_files/script_file b/test/schedule_files/script_file index eaa7bcf..59adb90 100644 --- a/test/schedule_files/script_file +++ b/test/schedule_files/script_file @@ -1 +1,2 @@ test/t/temp.sh +test/t/snowflake_version.py diff --git a/test/t/snowflake_version.py b/test/t/snowflake_version.py new file mode 100644 index 0000000..98ed1eb --- /dev/null +++ b/test/t/snowflake_version.py @@ -0,0 +1,94 @@ +import sys, os, json, util_test, subprocess + +## Print Script +print(f"Starting - {os.path.basename(__file__)}") + +# +# snowflake_version.py - guard the extension version metadata. +# +# The v2.6.0 release was tagged, but the version metadata was never bumped: +# snowflake.control still carried default_version = '2.5.0' and no +# snowflake--2.6.0.sql (nor a snowflake--2.5.0--2.6.0.sql upgrade script) +# existed. As a result the extension installed and reported itself as 2.5.0 +# even when built from the v2.6.0 tag, so QA could not tell a real 2.6.0 +# install apart from 2.5.0. +# +# This test reads the on-disk metadata (which is exactly what the release +# forgot to bump) and, if the extension is installed, its reported version, +# and asserts everything says 2.6.0. +# + +EXPECTED_VERSION = "2.6.0" + +## Get Test Settings +util_test.set_env() + +port = int(os.getenv("EDGE_START_PORT", 6432)) +usr = os.getenv("EDGE_USERNAME", "lcusr") +pw = os.getenv("EDGE_PASSWORD", "password") +host = os.getenv("EDGE_HOST", "localhost") +dbname = os.getenv("EDGE_DB", "lcdb") + +failures = [] + +# ---------------------------------------------------------------------- +# 1. default_version in snowflake.control (read via pg_available_extensions). +# This is the field the release forgot to bump. +# ---------------------------------------------------------------------- +row = util_test.read_psql( + "SELECT default_version FROM pg_available_extensions WHERE name = 'snowflake'", + host, dbname, port, pw, usr) +print(row) +print("*" * 100) +available = json.loads(row) +if not available: + failures.append("snowflake is not listed in pg_available_extensions") +else: + default_version = available[0][0] + if default_version != EXPECTED_VERSION: + failures.append( + f"default_version is '{default_version}', expected '{EXPECTED_VERSION}'") + +# ---------------------------------------------------------------------- +# 2. A snowflake--2.6.0.sql install script must exist on disk, i.e. 2.6.0 +# must be an offered version. +# ---------------------------------------------------------------------- +row = util_test.read_psql( + "SELECT version FROM pg_available_extension_versions WHERE name = 'snowflake'", + host, dbname, port, pw, usr) +print(row) +print("*" * 100) +offered = [v[0] for v in json.loads(row)] +if EXPECTED_VERSION not in offered: + failures.append( + f"'{EXPECTED_VERSION}' is not an offered version (no snowflake--{EXPECTED_VERSION}.sql); " + f"offered: {offered}") + +# ---------------------------------------------------------------------- +# 3. If the extension is installed, its reported version must be 2.6.0. +# ---------------------------------------------------------------------- +row = util_test.read_psql( + "SELECT extversion FROM pg_extension WHERE extname = 'snowflake'", + host, dbname, port, pw, usr) +print(row) +print("*" * 100) +installed = json.loads(row) +if installed: + extversion = installed[0][0] + if extversion != EXPECTED_VERSION: + failures.append( + f"installed extension reports version '{extversion}', expected '{EXPECTED_VERSION}'") +else: + print("snowflake extension is not installed in this database; " + "skipping installed-version check") + +# ---------------------------------------------------------------------- +# Verdict +# ---------------------------------------------------------------------- +if failures: + for f in failures: + print(f"FAIL: {f}") + util_test.EXIT_FAIL() +else: + print(f"All version metadata reports {EXPECTED_VERSION}") + util_test.EXIT_PASS() From 2b793220b1caa351e91bddcfdfd9279099949ae4 Mon Sep 17 00:00:00 2001 From: Mason Sharp Date: Tue, 21 Jul 2026 11:27:28 -0700 Subject: [PATCH 2/2] Simplify 2.6.0 --- snowflake--2.5.0--2.6.0.sql | 9 ---- test/schedule_files/script_file | 1 - test/t/snowflake_version.py | 94 --------------------------------- 3 files changed, 104 deletions(-) delete mode 100644 test/t/snowflake_version.py diff --git a/snowflake--2.5.0--2.6.0.sql b/snowflake--2.5.0--2.6.0.sql index aa5af1e..40dcbc7 100644 --- a/snowflake--2.5.0--2.6.0.sql +++ b/snowflake--2.5.0--2.6.0.sql @@ -2,12 +2,3 @@ -- complain if script is sourced in psql, rather than via ALTER EXTENSION \echo Use "ALTER EXTENSION snowflake UPDATE TO '2.6.0'" to load this file. \quit - --- ---------------------------------------------------------------------- --- 2.5.0 -> 2.6.0 - add support for PostgreSQL 19. --- --- The 2.6.0 release is a build/C-level change (porting the extension to --- the PostgreSQL 19 server API); there are no catalog objects to alter. --- This upgrade script exists so that the extension version can be moved --- to 2.6.0 via ALTER EXTENSION and so a 2.6.0 install is offered/reachable. --- ---------------------------------------------------------------------- diff --git a/test/schedule_files/script_file b/test/schedule_files/script_file index 59adb90..eaa7bcf 100644 --- a/test/schedule_files/script_file +++ b/test/schedule_files/script_file @@ -1,2 +1 @@ test/t/temp.sh -test/t/snowflake_version.py diff --git a/test/t/snowflake_version.py b/test/t/snowflake_version.py deleted file mode 100644 index 98ed1eb..0000000 --- a/test/t/snowflake_version.py +++ /dev/null @@ -1,94 +0,0 @@ -import sys, os, json, util_test, subprocess - -## Print Script -print(f"Starting - {os.path.basename(__file__)}") - -# -# snowflake_version.py - guard the extension version metadata. -# -# The v2.6.0 release was tagged, but the version metadata was never bumped: -# snowflake.control still carried default_version = '2.5.0' and no -# snowflake--2.6.0.sql (nor a snowflake--2.5.0--2.6.0.sql upgrade script) -# existed. As a result the extension installed and reported itself as 2.5.0 -# even when built from the v2.6.0 tag, so QA could not tell a real 2.6.0 -# install apart from 2.5.0. -# -# This test reads the on-disk metadata (which is exactly what the release -# forgot to bump) and, if the extension is installed, its reported version, -# and asserts everything says 2.6.0. -# - -EXPECTED_VERSION = "2.6.0" - -## Get Test Settings -util_test.set_env() - -port = int(os.getenv("EDGE_START_PORT", 6432)) -usr = os.getenv("EDGE_USERNAME", "lcusr") -pw = os.getenv("EDGE_PASSWORD", "password") -host = os.getenv("EDGE_HOST", "localhost") -dbname = os.getenv("EDGE_DB", "lcdb") - -failures = [] - -# ---------------------------------------------------------------------- -# 1. default_version in snowflake.control (read via pg_available_extensions). -# This is the field the release forgot to bump. -# ---------------------------------------------------------------------- -row = util_test.read_psql( - "SELECT default_version FROM pg_available_extensions WHERE name = 'snowflake'", - host, dbname, port, pw, usr) -print(row) -print("*" * 100) -available = json.loads(row) -if not available: - failures.append("snowflake is not listed in pg_available_extensions") -else: - default_version = available[0][0] - if default_version != EXPECTED_VERSION: - failures.append( - f"default_version is '{default_version}', expected '{EXPECTED_VERSION}'") - -# ---------------------------------------------------------------------- -# 2. A snowflake--2.6.0.sql install script must exist on disk, i.e. 2.6.0 -# must be an offered version. -# ---------------------------------------------------------------------- -row = util_test.read_psql( - "SELECT version FROM pg_available_extension_versions WHERE name = 'snowflake'", - host, dbname, port, pw, usr) -print(row) -print("*" * 100) -offered = [v[0] for v in json.loads(row)] -if EXPECTED_VERSION not in offered: - failures.append( - f"'{EXPECTED_VERSION}' is not an offered version (no snowflake--{EXPECTED_VERSION}.sql); " - f"offered: {offered}") - -# ---------------------------------------------------------------------- -# 3. If the extension is installed, its reported version must be 2.6.0. -# ---------------------------------------------------------------------- -row = util_test.read_psql( - "SELECT extversion FROM pg_extension WHERE extname = 'snowflake'", - host, dbname, port, pw, usr) -print(row) -print("*" * 100) -installed = json.loads(row) -if installed: - extversion = installed[0][0] - if extversion != EXPECTED_VERSION: - failures.append( - f"installed extension reports version '{extversion}', expected '{EXPECTED_VERSION}'") -else: - print("snowflake extension is not installed in this database; " - "skipping installed-version check") - -# ---------------------------------------------------------------------- -# Verdict -# ---------------------------------------------------------------------- -if failures: - for f in failures: - print(f"FAIL: {f}") - util_test.EXIT_FAIL() -else: - print(f"All version metadata reports {EXPECTED_VERSION}") - util_test.EXIT_PASS()