You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add extension upgrade template regression test (#2364)
Note: This PR was created with AI tools and a human.
Add a version-agnostic regression test (age_upgrade) that validates the
upgrade template (age--<VER>--y.y.y.sql) works correctly by simulating a
full extension version upgrade within "make installcheck".
Add full upgrade scripts to the install path (DATA) in the Makefile,
excluding template upgrade files. This enables the install to copy all
version upgrade files into the PG AGE install. This is needed for
ALTER EXTENSION
Adjusted installcheck.yaml to allow git commit history for this test.
Makefile infrastructure:
- Build the install SQL (age--<CURR>.sql) from the initial version-bump
commit in git history, so CREATE EXTENSION installs "day-one" SQL while
the .so comes from current HEAD — implicitly testing backward compat.
- Build a synthetic "next" version (age--<NEXT>.sql) from HEAD and stamp
the upgrade template to produce age--<CURR>--<NEXT>.sql.
- Add an installcheck prerequisite that temporarily installs both synthetic
files into the PG extension directory; a generated cleanup script removes
them at the end of the test via \! shell escape. EXTRA_CLEAN catches
stragglers on "make clean".
- Skip the test automatically when: (a) no git history (tarball builds),
(b) no upgrade template exists, or (c) a real upgrade script from the
current version is already committed (detected via git ls-files).o
Regression test (regress/sql/age_upgrade.sql):
- Creates 3 graphs (company, network, routes) with 8 vertex labels,
8 edge labels, 23 vertices, 28 edges, and 4 GIN indexes.
- Records integrity checksums (agtype sums), vertex/edge counts, and
label counts before the upgrade; repeats all checks after ALTER
EXTENSION UPDATE to the synthetic next version.
- Verifies structural queries: VLE management chains, circular follow
chains, flight distances with edge properties.
- Verifies all 4 GIN indexes survive the upgrade via pg_indexes.
- Uses ORDER BY on all multi-row queries for deterministic output.
- Returns agtype natively (no ::numeric casts) for portability.
- Avoids version-dependent output (checks boolean IS NOT NULL instead
of printing the version string).
- Uses JOIN-based label counts to avoid NULL comparison bugs with the
internal _ag_catalog graph.
- Cleans up all 3 graphs and restores the default AGE version.
modified: Makefile
new file: regress/expected/age_upgrade.out
new file: regress/sql/age_upgrade.sql
modified: .github/workflows/installcheck.yaml
0 commit comments