Commit fd16113
Phase 2: flip add_index unique: true default in Migration[8.2]+
Closes #2702 (Phase 2). Depends on Rails core extension yahonda/rails
branch:another-33269 (`migration_compatibility_module_for`).
In Phase 2 of the implicit-UNIQUE-CONSTRAINT deprecation, the global
default flips from "implicit constraint + warning" (Phase 1) to "create
the unique index only", matching Rails-core PostgreSQL/MySQL/SQLite.
Existing migrations declared at `Migration[8.1]` or earlier opt back
into the legacy implicit-constraint behavior via a
`MigrationCompatibility::V8_1` module so they keep working unchanged.
* `OracleEnhancedAdapter.add_index_unique_creates_constraint` default
flips from `true` to `false`. Set to `true` explicitly to force the
legacy behavior project-wide.
* New `OracleEnhanced::MigrationCompatibility::V8_1` module overrides
`add_index` and `create_table` to set a private thread-local that the
adapter consults, opting old migrations back into the implicit-
constraint path. The thread-local is encapsulated as a private
constant of `MigrationCompatibility` so Phase 3 can remove the entire
module — key included — without leaving observable state behind in
`Thread.current`.
* New `migration_compatibility_module_for(migration_class)` on
`OracleEnhancedAdapter` wires the compat module into Rails' Migration
dispatch.
* Gemfile pins `activerecord` to `yahonda/rails branch:another-33269`
for the duration of Phase 2 (will be reverted to `rails/rails main`
once the branch is merged).
Specs:
* New `migration_compatibility_spec.rb` covering Migration[8.2] (no
implicit constraint, no warning), Migration[8.1] (implicit constraint
+ warning, both add_index and inline t.index paths), and explicit
global flag overriding the migration default.
* Existing legacy SQL emission specs in `schema_statements_spec.rb`
that assert on the implicit constraint output (`should add unique
constraint only to the index where it was defined`, `should emit
CREATE UNIQUE INDEX and ADD CONSTRAINT for inline t.index unique:
true`, `produces the same SQL whether unique index is defined inline
or via explicit add_index`) are wrapped in
`with_implicit_unique_constraint_enabled` and labeled "(legacy
implicit-constraint path)". The helper is a thin wrapper around the
global flag, defined in `spec/spec_helper.rb`.
* Orthogonal-feature specs in `schema_statements_spec.rb` and
`schema_dumper_spec.rb` that needed an index+constraint pair as
setup are migrated to `add_unique_constraint`. The remaining
remove_index spec that documents the legacy add_index → remove_index
pairing keeps the legacy setup via the helper.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent 303ba19 commit fd16113
8 files changed
Lines changed: 254 additions & 51 deletions
File tree
- lib/active_record/connection_adapters
- oracle_enhanced
- spec
- active_record/connection_adapters/oracle_enhanced
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| |||
Lines changed: 49 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
Lines changed: 19 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
287 | 287 | | |
288 | 288 | | |
289 | 289 | | |
290 | | - | |
| 290 | + | |
291 | 291 | | |
292 | 292 | | |
293 | 293 | | |
| |||
826 | 826 | | |
827 | 827 | | |
828 | 828 | | |
829 | | - | |
| 829 | + | |
830 | 830 | | |
831 | 831 | | |
832 | 832 | | |
833 | 833 | | |
834 | 834 | | |
835 | 835 | | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
| 841 | + | |
| 842 | + | |
| 843 | + | |
| 844 | + | |
| 845 | + | |
| 846 | + | |
| 847 | + | |
| 848 | + | |
| 849 | + | |
| 850 | + | |
| 851 | + | |
| 852 | + | |
836 | 853 | | |
837 | 854 | | |
838 | 855 | | |
| |||
Lines changed: 18 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
50 | 50 | | |
51 | 51 | | |
52 | 52 | | |
| 53 | + | |
53 | 54 | | |
54 | 55 | | |
55 | 56 | | |
| |||
244 | 245 | | |
245 | 246 | | |
246 | 247 | | |
247 | | - | |
248 | | - | |
| 248 | + | |
249 | 249 | | |
250 | | - | |
251 | | - | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
252 | 256 | | |
253 | | - | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
254 | 262 | | |
255 | | - | |
| 263 | + | |
256 | 264 | | |
257 | 265 | | |
258 | 266 | | |
| |||
515 | 523 | | |
516 | 524 | | |
517 | 525 | | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
518 | 530 | | |
519 | 531 | | |
520 | 532 | | |
| |||
Lines changed: 109 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
388 | 388 | | |
389 | 389 | | |
390 | 390 | | |
391 | | - | |
| 391 | + | |
392 | 392 | | |
393 | 393 | | |
394 | 394 | | |
| |||
0 commit comments