Define MySQL named-column retirement contract - #27
Draft
alexstandiford wants to merge 15 commits into
Draft
alexstandiford wants to merge 15 commits into
alexstandiford wants to merge 15 commits into
Conversation
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.
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)