Commit cca3385
Phase 2: flip add_index unique: true default in Migration[8.2]+
Closes rsim#2702 (Phase 2). Depends on Rails core extension yahonda/rails
branch:per-adapter-migration-compatibility (`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:per-adapter-migration-compatibility` 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 429aa95 commit cca3385
9 files changed
Lines changed: 262 additions & 52 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 | |
|---|---|---|---|
| |||
309 | 309 | | |
310 | 310 | | |
311 | 311 | | |
312 | | - | |
| 312 | + | |
313 | 313 | | |
314 | 314 | | |
315 | 315 | | |
| |||
1232 | 1232 | | |
1233 | 1233 | | |
1234 | 1234 | | |
1235 | | - | |
| 1235 | + | |
1236 | 1236 | | |
1237 | 1237 | | |
1238 | 1238 | | |
1239 | 1239 | | |
1240 | 1240 | | |
1241 | 1241 | | |
| 1242 | + | |
| 1243 | + | |
| 1244 | + | |
| 1245 | + | |
| 1246 | + | |
| 1247 | + | |
| 1248 | + | |
| 1249 | + | |
| 1250 | + | |
| 1251 | + | |
| 1252 | + | |
| 1253 | + | |
| 1254 | + | |
| 1255 | + | |
| 1256 | + | |
| 1257 | + | |
| 1258 | + | |
1242 | 1259 | | |
1243 | 1260 | | |
1244 | 1261 | | |
| |||
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 | | |
| |||
567 | 575 | | |
568 | 576 | | |
569 | 577 | | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
570 | 582 | | |
571 | 583 | | |
572 | 584 | | |
| |||
Lines changed: 8 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
230 | 230 | | |
231 | 231 | | |
232 | 232 | | |
233 | | - | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
234 | 241 | | |
235 | 242 | | |
236 | 243 | | |
| |||
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 | |
|---|---|---|---|
| |||
724 | 724 | | |
725 | 725 | | |
726 | 726 | | |
727 | | - | |
| 727 | + | |
728 | 728 | | |
729 | 729 | | |
730 | 730 | | |
| |||
0 commit comments