Repository navigation
test(oracle): check pgvector, postgis and contrib extension types - #94
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
There was a problem hiding this comment.
ℹ️ No critical issues: one docs correction and one small simplification, both inline.
Reviewed changes
All five commits: the extension and multirange seed pools, the delimiter-aware array literals and NULL-element check, four new oracle cases, and the CI install.
- Seed pools:
scalarsgains literals for pgvector, PostGIS, cube/earth, seg, isn and multiranges (typtype = 'm'), and each is still filtered by the server throughtry_execute. - Array literals: the element is now quoted and escaped for array syntax, and it is separated from the NULL by the element type's
typdelim. The newaccepted_pooltakes as the element the first scalar that the element type (typmod included) accepts, and bothseedandbinduse it. - NULL-element check:
array_has_nullsplits on the type's own delimiter. It looks that up by the analysis'stype_name, which is the registry's typname (e.g._geometry), so it matches thedelimiters()map. - Cases:
pgvector_types,postgis_types,contrib_typesandmultirange_typesare blessed with every statement checked. - CI and docs: PGDG's
postgresql-18-pgvectorandpostgresql-18-postgis-3are installed for the oracle job, andAGENTS.mdnotes it.
claude-opus-5-5 | 𝕏
Each value is tried and dropped where the type or its typmod refuses it, so vectors of several dimensions share one pool. An array's element is the first value its element type accepts, quoted and separated by the type's own delimiter, and a NULL element is looked for between those delimiters.
colinhacks
force-pushed
the
test-oracle-extension-types
branch
from
October 23, 2026 22:27
443877d to
c4ab98e
Compare
Contributor
There was a problem hiding this comment.
✅ No new issues found. Both earlier findings are fixed.
Reviewed changes
Two commits landed since the last review. Each one fixes an earlier finding:
- Homebrew instructions:
AGENTS.mdnow saysbrew install pgvector postgis, because pgvector is its own formula and does not come withpostgresql@18. poolcovers scalars only:poolnow returnswith_casts(col, scalars(…)). This meansaccepted_poolis the only place an array pool gets built, and it always checks the element first. The array unit test callswith_casts(&vectors, arrays(…))directly. Production behavior does not change: outside tests,accepted_pool's non-array branch is the only caller ofpool.
claude-opus-5-5 | 𝕏
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

The soundness oracle had no seed value for most extension types, so a statement with a parameter of one was left unchecked and a column of one held only NULL, and CI's oracle job installed no pgvector or PostGIS, the two extensions Neon and Supabase databases install most. This covers both:
oracle/src/seed.rsfor pgvector'svector,halfvecandsparsevec, PostGIS'sgeometry,geography,box2dandbox3d,cube(andearth, a domain over it),seg, theisntypes, and every multirange, built-in ones included, which had none. Each is tried against the column and dropped where its type or typmod refuses it.vector(3)[]refuses'{"[1]"}'); the element is quoted and separated from a NULL by the type's owntypdelim('{"POINT(1 2)":NULL}'forgeometry[]), and the NULL-element check reads that delimiter too.pgvector_types(columns with typmods, arrays, the distance operators with a parameter,= any(:qs), inserts, documents),postgis_types(geometry with and without a typmod, geography, box2d,geometry[],ST_DWithin,ST_Dump's composite, GeoJSON inside documents),contrib_types(cube, earth, seg, the isn types, lo and oid, as columns, parameters and inside documents) andmultirange_types. Every statement in them is checked; none is listed unchecked.postgresql-18-pgvectorandpostgresql-18-postgis-3from PGDG besidepostgresql-18for the oracle job, andAGENTS.mdsays the two cases need them.The whole oracle passes with
--strict-coverageon Postgres 18 with both extensions (121 cases), and the four cases give the same result on Supabase's and Neon's Postgres 17 images. No existing case'sexpected.txtchanged.