Skip to content

Define MySQL named-column retirement contract - #27

Draft
alexstandiford wants to merge 15 commits into
mainfrom
packet/table-column-retirement-mysql
Draft

alexstandiford wants to merge 15 commits into
mainfrom
packet/table-column-retirement-mysql

Conversation

@alexstandiford

@alexstandiford alexstandiford commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

Implements the optional named-column retirement capability for the MySQL adapter while preserving the existing public/protected TableUpdateStrategy API and additive default synchronization. The package Bootstrapper/Container resolves both base and retirement interfaces to the same configured strategy. Requested and declared names are compared under the backend metadata identifier collation even when a declared column is not physically present; requested aliases deduplicate to one persisted target. Full preflight validates the complete batch, rejects malformed metadata, refuses declared columns, indexed columns, unresolved functional-index metadata, and foreign keys before DDL, and preserves unrelated schema/data.

Persisted MySQL 8.0.45 fixtures cover active-schema scoping, absent declared ASCII/Unicode case variants, the distinct legacy/légacy accent boundary, additive sync, mixed present/absent retirement, deduplication and retry idempotence, invalid-batch atomicity, quoted identifiers, and independent dependency guards. The repository contains no explicit older-MySQL/MariaDB support claim; this PR does not extrapolate the demonstrated identifier-collation behavior to untested backends. The approved unit fixture now honors COLUMN_NAME predicates and explicit identifier comparisons rather than returning all fixture columns; assertions were not weakened.

Temporary stacked dependency: composer.json and composer.lock resolve phpnomad/db#38 at commit 406843bc0eefeeadc6fecb847f6e9f3b596458a5 through dev-packet/table-column-retirement-contract as 2.2.x-dev over HTTPS; all other locked packages remain unchanged. Release sequence: approve and merge DB #38, publish its compatible DB release, replace this temporary branch alias with that released constraint and refresh only phpnomad/db in the lock, then merge/release this adapter. This PR does not create a package tag or release.

Architecture: Named Table Column Retirement Contract (Source 9972)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant