Repository navigation
Conversation
Oracle stores a DESC key as a hidden virtual column (SYS_NC...$). The index then references a column the table does not list, so the schema comparison of every later migration fails with "There is no column with name ...". Oracle scans an ascending index backwards for ORDER BY id DESC, so use the schema API as on MySQL. Fresh installs only run changeSchema, so the test drives the migration through the upgrade path on Oracle. Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: James Manuel <moodyjmz@users.noreply.github.com>
Assert the index exists after install instead of skipping the drop when it is missing, and keep the class constant untyped so the test backports to PHP 8.1 and 8.2. Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: James Manuel <moodyjmz@users.noreply.github.com>
An Oracle instance with text_steps_doc_id_id_index created as "id" DESC cannot run any later migration that changes the schema. Drop that index and recreate it ascending. This only helps when no schema-changing step runs before it. Core migrations run before app migrations, so on a major upgrade an instance with the descending index still needs it replaced by hand. Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: James Manuel <moodyjmz@users.noreply.github.com>
Fresh installs on PostgreSQL and SQLite, and Oracle installs that ran the migration before it created the index, have no text_steps_doc_id_id_index. Let occ db:add-missing-indices add it, and let the schema check treat it as optional. Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: James Manuel <moodyjmz@users.noreply.github.com>
Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: James Manuel <moodyjmz@users.noreply.github.com>
Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: James Manuel <moodyjmz@users.noreply.github.com>
Rector requires typed class constants on main, which stable32 to 34 cannot parse, so use the literal as the migrations do. Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: James Manuel <moodyjmz@users.noreply.github.com>
This branch has not been deployed
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.
📝 Summary
On Oracle, a
DESCkey is stored as a hidden virtual column, which makes the schema comparison of every later migration fail. This createstext_steps_doc_id_id_indexascending on Oracle through the schema API, as on MySQL. Oracle scans it backwards forORDER BY id DESC, at the same plan cost (numbers in #9439). A repair step replaces an existing descending index, and the index is registered forocc db:add-missing-indices.Details
Version080000Date20260331132113: Oracle takes theaddIndex()path instead of the rawCREATE INDEX ... DESC. Fresh Oracle installs now get the index too.Version080000Date20261020120000: Oracle only. If the index references a column the table doesn't list, it drops the index with raw SQL inpreSchemaChange(the schema API can't, because the comparison is what fails), then re-adds it ascending inchangeSchema. It throws if the hidden column is still there. It is numbered080000so the same class sorts directly after the step it repairs on every branch.AddMissingIndicesListener: registerstext_steps_doc_id_id_index. Fresh PostgreSQL and SQLite installs, and Oracle installs set up before this change, never got the index, because fresh installs skippostSchemaChange.occ db:add-missing-indicescan now add it, and the schema check treats it as optional.TextStepsIndexOracleTest: fresh installs only runchangeSchema, so CI never ran the old statement. The tests check the index after install, drive both steps throughexecuteStep(), and assert an ascending index and a working dry-run schema comparison. The repair test first asserts that the comparison fails while the descending index exists.Backports: stable32–35, the same as #9393. They need merging before the next maintenance releases, which would otherwise ship the descending index from #9393's backports. Each branch needs its own version bump.
🖼️ Screenshots
No UI change.
🏁 Checklist
npm run lint/npm run stylelint/composer run cs:check)🤖 AI (if applicable)