activerecord 7.1.5.2 → 8.1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +567 -2443
- data/README.rdoc +16 -16
- data/examples/performance.rb +2 -2
- data/lib/active_record/association_relation.rb +3 -2
- data/lib/active_record/associations/alias_tracker.rb +31 -23
- data/lib/active_record/associations/association.rb +43 -12
- data/lib/active_record/associations/belongs_to_association.rb +31 -8
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +3 -2
- data/lib/active_record/associations/builder/association.rb +23 -11
- data/lib/active_record/associations/builder/belongs_to.rb +18 -4
- data/lib/active_record/associations/builder/collection_association.rb +7 -3
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +2 -2
- data/lib/active_record/associations/builder/has_many.rb +3 -4
- data/lib/active_record/associations/builder/has_one.rb +3 -4
- data/lib/active_record/associations/builder/singular_association.rb +33 -5
- data/lib/active_record/associations/collection_association.rb +17 -9
- data/lib/active_record/associations/collection_proxy.rb +36 -5
- data/lib/active_record/associations/deprecation.rb +88 -0
- data/lib/active_record/associations/disable_joins_association_scope.rb +1 -1
- data/lib/active_record/associations/errors.rb +268 -0
- data/lib/active_record/associations/has_many_association.rb +1 -1
- data/lib/active_record/associations/has_many_through_association.rb +10 -3
- data/lib/active_record/associations/join_dependency/join_association.rb +1 -1
- data/lib/active_record/associations/join_dependency.rb +4 -2
- data/lib/active_record/associations/nested_error.rb +47 -0
- data/lib/active_record/associations/preloader/association.rb +4 -3
- data/lib/active_record/associations/preloader/batch.rb +7 -1
- data/lib/active_record/associations/preloader/branch.rb +8 -1
- data/lib/active_record/associations/preloader/through_association.rb +1 -3
- data/lib/active_record/associations/singular_association.rb +14 -3
- data/lib/active_record/associations/through_association.rb +1 -1
- data/lib/active_record/associations.rb +250 -315
- data/lib/active_record/asynchronous_queries_tracker.rb +28 -24
- data/lib/active_record/attribute_assignment.rb +0 -2
- data/lib/active_record/attribute_methods/composite_primary_key.rb +84 -0
- data/lib/active_record/attribute_methods/primary_key.rb +25 -61
- data/lib/active_record/attribute_methods/query.rb +34 -0
- data/lib/active_record/attribute_methods/read.rb +1 -13
- data/lib/active_record/attribute_methods/serialization.rb +20 -27
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +19 -20
- data/lib/active_record/attribute_methods.rb +71 -75
- data/lib/active_record/attributes.rb +96 -68
- data/lib/active_record/autosave_association.rb +93 -58
- data/lib/active_record/base.rb +5 -7
- data/lib/active_record/callbacks.rb +1 -1
- data/lib/active_record/coders/json.rb +14 -5
- data/lib/active_record/connection_adapters/abstract/connection_handler.rb +50 -126
- data/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb +16 -4
- data/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb +52 -13
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +681 -135
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +165 -86
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +226 -78
- data/lib/active_record/connection_adapters/abstract/quoting.rb +79 -114
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +11 -7
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +37 -36
- data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +2 -1
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +136 -34
- data/lib/active_record/connection_adapters/abstract/transaction.rb +163 -68
- data/lib/active_record/connection_adapters/abstract_adapter.rb +197 -129
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +112 -63
- data/lib/active_record/connection_adapters/column.rb +17 -4
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +11 -3
- data/lib/active_record/connection_adapters/mysql/quoting.rb +50 -57
- data/lib/active_record/connection_adapters/mysql/schema_creation.rb +2 -0
- data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +41 -10
- data/lib/active_record/connection_adapters/mysql/schema_statements.rb +79 -46
- data/lib/active_record/connection_adapters/mysql2/database_statements.rb +97 -101
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +14 -33
- data/lib/active_record/connection_adapters/pool_config.rb +14 -13
- data/lib/active_record/connection_adapters/postgresql/column.rb +4 -0
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +98 -44
- data/lib/active_record/connection_adapters/postgresql/oid/array.rb +3 -3
- data/lib/active_record/connection_adapters/postgresql/oid/interval.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/point.rb +10 -0
- data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +14 -4
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +79 -68
- data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +2 -4
- data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +9 -17
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +44 -41
- data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +69 -32
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +155 -75
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +104 -121
- data/lib/active_record/connection_adapters/schema_cache.rb +126 -133
- data/lib/active_record/connection_adapters/sqlite3/column.rb +14 -1
- data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +91 -95
- data/lib/active_record/connection_adapters/sqlite3/quoting.rb +57 -54
- data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +16 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +13 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +43 -2
- data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +38 -15
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +231 -111
- data/lib/active_record/connection_adapters/statement_pool.rb +4 -2
- data/lib/active_record/connection_adapters/trilogy/database_statements.rb +40 -69
- data/lib/active_record/connection_adapters/trilogy_adapter.rb +19 -65
- data/lib/active_record/connection_adapters.rb +66 -0
- data/lib/active_record/connection_handling.rb +88 -46
- data/lib/active_record/core.rb +142 -58
- data/lib/active_record/counter_cache.rb +52 -18
- data/lib/active_record/database_configurations/connection_url_resolver.rb +9 -2
- data/lib/active_record/database_configurations/database_config.rb +28 -5
- data/lib/active_record/database_configurations/hash_config.rb +103 -41
- data/lib/active_record/database_configurations/url_config.rb +30 -1
- data/lib/active_record/database_configurations.rb +8 -4
- data/lib/active_record/delegated_type.rb +43 -19
- data/lib/active_record/dynamic_matchers.rb +56 -71
- data/lib/active_record/encryption/config.rb +3 -1
- data/lib/active_record/encryption/encryptable_record.rb +12 -12
- data/lib/active_record/encryption/encrypted_attribute_type.rb +35 -6
- data/lib/active_record/encryption/encryptor.rb +58 -22
- data/lib/active_record/encryption/extended_deterministic_queries.rb +4 -2
- data/lib/active_record/encryption/key_provider.rb +1 -1
- data/lib/active_record/encryption/message_pack_message_serializer.rb +76 -0
- data/lib/active_record/encryption/message_serializer.rb +4 -0
- data/lib/active_record/encryption/null_encryptor.rb +4 -0
- data/lib/active_record/encryption/read_only_null_encryptor.rb +4 -0
- data/lib/active_record/encryption/scheme.rb +9 -2
- data/lib/active_record/enum.rb +57 -36
- data/lib/active_record/errors.rb +76 -26
- data/lib/active_record/explain.rb +14 -25
- data/lib/active_record/explain_registry.rb +51 -2
- data/lib/active_record/filter_attribute_handler.rb +73 -0
- data/lib/active_record/fixture_set/table_row.rb +19 -2
- data/lib/active_record/fixtures.rb +39 -35
- data/lib/active_record/future_result.rb +21 -13
- data/lib/active_record/gem_version.rb +3 -3
- data/lib/active_record/inheritance.rb +5 -3
- data/lib/active_record/insert_all.rb +28 -20
- data/lib/active_record/integration.rb +4 -1
- data/lib/active_record/internal_metadata.rb +48 -34
- data/lib/active_record/locking/optimistic.rb +15 -7
- data/lib/active_record/locking/pessimistic.rb +5 -0
- data/lib/active_record/log_subscriber.rb +3 -34
- data/lib/active_record/message_pack.rb +1 -1
- data/lib/active_record/middleware/shard_selector.rb +34 -17
- data/lib/active_record/migration/command_recorder.rb +46 -14
- data/lib/active_record/migration/compatibility.rb +40 -25
- data/lib/active_record/migration/default_schema_versions_formatter.rb +30 -0
- data/lib/active_record/migration/default_strategy.rb +4 -5
- data/lib/active_record/migration/pending_migration_connection.rb +2 -2
- data/lib/active_record/migration.rb +119 -103
- data/lib/active_record/model_schema.rb +66 -78
- data/lib/active_record/nested_attributes.rb +17 -9
- data/lib/active_record/persistence.rb +161 -454
- data/lib/active_record/query_cache.rb +33 -15
- data/lib/active_record/query_logs.rb +106 -39
- data/lib/active_record/query_logs_formatter.rb +17 -28
- data/lib/active_record/querying.rb +28 -16
- data/lib/active_record/railtie.rb +61 -74
- data/lib/active_record/railties/controller_runtime.rb +19 -5
- data/lib/active_record/railties/databases.rake +64 -78
- data/lib/active_record/railties/job_checkpoints.rb +15 -0
- data/lib/active_record/railties/job_runtime.rb +10 -11
- data/lib/active_record/reflection.rb +147 -53
- data/lib/active_record/relation/batches/batch_enumerator.rb +19 -5
- data/lib/active_record/relation/batches.rb +153 -73
- data/lib/active_record/relation/calculations.rb +146 -96
- data/lib/active_record/relation/delegation.rb +30 -23
- data/lib/active_record/relation/finder_methods.rb +64 -34
- data/lib/active_record/relation/merger.rb +12 -14
- data/lib/active_record/relation/predicate_builder/array_handler.rb +2 -2
- data/lib/active_record/relation/predicate_builder/association_query_value.rb +19 -11
- data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +8 -8
- data/lib/active_record/relation/predicate_builder/relation_handler.rb +4 -3
- data/lib/active_record/relation/predicate_builder.rb +25 -10
- data/lib/active_record/relation/query_attribute.rb +4 -2
- data/lib/active_record/relation/query_methods.rb +351 -124
- data/lib/active_record/relation/spawn_methods.rb +9 -25
- data/lib/active_record/relation/where_clause.rb +17 -30
- data/lib/active_record/relation.rb +590 -124
- data/lib/active_record/result.rb +131 -59
- data/lib/active_record/runtime_registry.rb +44 -21
- data/lib/active_record/sanitization.rb +33 -25
- data/lib/active_record/schema.rb +8 -6
- data/lib/active_record/schema_dumper.rb +66 -31
- data/lib/active_record/schema_migration.rb +31 -14
- data/lib/active_record/scoping/named.rb +6 -2
- data/lib/active_record/scoping.rb +0 -1
- data/lib/active_record/secure_token.rb +3 -3
- data/lib/active_record/signed_id.rb +68 -20
- data/lib/active_record/statement_cache.rb +29 -25
- data/lib/active_record/store.rb +51 -22
- data/lib/active_record/structured_event_subscriber.rb +85 -0
- data/lib/active_record/table_metadata.rb +7 -33
- data/lib/active_record/tasks/abstract_tasks.rb +76 -0
- data/lib/active_record/tasks/database_tasks.rb +118 -90
- data/lib/active_record/tasks/mysql_database_tasks.rb +3 -42
- data/lib/active_record/tasks/postgresql_database_tasks.rb +14 -40
- data/lib/active_record/tasks/sqlite_database_tasks.rb +17 -28
- data/lib/active_record/test_databases.rb +14 -4
- data/lib/active_record/test_fixtures.rb +123 -89
- data/lib/active_record/testing/query_assertions.rb +127 -0
- data/lib/active_record/timestamp.rb +6 -4
- data/lib/active_record/token_for.rb +22 -12
- data/lib/active_record/touch_later.rb +1 -1
- data/lib/active_record/transaction.rb +129 -0
- data/lib/active_record/transactions.rb +97 -18
- data/lib/active_record/translation.rb +0 -2
- data/lib/active_record/type/hash_lookup_type_map.rb +2 -1
- data/lib/active_record/type/internal/timezone.rb +7 -0
- data/lib/active_record/type/json.rb +15 -2
- data/lib/active_record/type/serialized.rb +12 -7
- data/lib/active_record/type/type_map.rb +1 -1
- data/lib/active_record/type_caster/connection.rb +5 -4
- data/lib/active_record/validations/associated.rb +10 -4
- data/lib/active_record/validations/uniqueness.rb +23 -18
- data/lib/active_record/validations.rb +4 -1
- data/lib/active_record.rb +203 -59
- data/lib/arel/alias_predication.rb +3 -1
- data/lib/arel/collectors/bind.rb +4 -2
- data/lib/arel/collectors/composite.rb +7 -0
- data/lib/arel/collectors/sql_string.rb +2 -2
- data/lib/arel/collectors/substitute_binds.rb +3 -3
- data/lib/arel/crud.rb +8 -11
- data/lib/arel/delete_manager.rb +5 -0
- data/lib/arel/nodes/binary.rb +1 -7
- data/lib/arel/nodes/bound_sql_literal.rb +9 -5
- data/lib/arel/nodes/count.rb +2 -2
- data/lib/arel/nodes/delete_statement.rb +4 -2
- data/lib/arel/nodes/function.rb +4 -10
- data/lib/arel/nodes/named_function.rb +2 -2
- data/lib/arel/nodes/{and.rb → nary.rb} +5 -2
- data/lib/arel/nodes/node.rb +6 -5
- data/lib/arel/nodes/sql_literal.rb +8 -1
- data/lib/arel/nodes/update_statement.rb +4 -2
- data/lib/arel/nodes.rb +2 -4
- data/lib/arel/predications.rb +1 -1
- data/lib/arel/select_manager.rb +14 -5
- data/lib/arel/table.rb +3 -7
- data/lib/arel/tree_manager.rb +3 -2
- data/lib/arel/update_manager.rb +7 -1
- data/lib/arel/visitors/dot.rb +3 -3
- data/lib/arel/visitors/mysql.rb +9 -4
- data/lib/arel/visitors/postgresql.rb +56 -12
- data/lib/arel/visitors/sqlite.rb +80 -8
- data/lib/arel/visitors/to_sql.rb +34 -37
- data/lib/arel.rb +10 -4
- data/lib/rails/generators/active_record/application_record/USAGE +1 -1
- data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +4 -1
- metadata +23 -14
- data/lib/active_record/explain_subscriber.rb +0 -34
- data/lib/active_record/normalization.rb +0 -167
- data/lib/active_record/relation/record_fetch_warning.rb +0 -49
|
@@ -22,10 +22,12 @@ module ActiveRecord
|
|
|
22
22
|
# * change_table_comment (must supply a +:from+ and +:to+ option)
|
|
23
23
|
# * create_enum
|
|
24
24
|
# * create_join_table
|
|
25
|
+
# * create_virtual_table
|
|
25
26
|
# * create_table
|
|
26
27
|
# * disable_extension
|
|
27
28
|
# * drop_enum (must supply a list of values)
|
|
28
29
|
# * drop_join_table
|
|
30
|
+
# * drop_virtual_table (must supply options)
|
|
29
31
|
# * drop_table (must supply a block)
|
|
30
32
|
# * enable_extension
|
|
31
33
|
# * remove_column (must supply a type)
|
|
@@ -38,10 +40,12 @@ module ActiveRecord
|
|
|
38
40
|
# * remove_reference
|
|
39
41
|
# * remove_timestamps
|
|
40
42
|
# * rename_column
|
|
41
|
-
# * rename_enum
|
|
43
|
+
# * rename_enum
|
|
42
44
|
# * rename_enum_value (must supply a +:from+ and +:to+ option)
|
|
43
45
|
# * rename_index
|
|
44
46
|
# * rename_table
|
|
47
|
+
# * enable_index
|
|
48
|
+
# * disable_index
|
|
45
49
|
class CommandRecorder
|
|
46
50
|
ReversibleAndIrreversibleMethods = [
|
|
47
51
|
:create_table, :create_join_table, :rename_table, :add_column, :remove_column,
|
|
@@ -55,6 +59,9 @@ module ActiveRecord
|
|
|
55
59
|
:add_exclusion_constraint, :remove_exclusion_constraint,
|
|
56
60
|
:add_unique_constraint, :remove_unique_constraint,
|
|
57
61
|
:create_enum, :drop_enum, :rename_enum, :add_enum_value, :rename_enum_value,
|
|
62
|
+
:create_schema, :drop_schema,
|
|
63
|
+
:create_virtual_table, :drop_virtual_table,
|
|
64
|
+
:enable_index, :disable_index
|
|
58
65
|
]
|
|
59
66
|
include JoinTable
|
|
60
67
|
|
|
@@ -163,7 +170,9 @@ module ActiveRecord
|
|
|
163
170
|
add_exclusion_constraint: :remove_exclusion_constraint,
|
|
164
171
|
add_unique_constraint: :remove_unique_constraint,
|
|
165
172
|
enable_extension: :disable_extension,
|
|
166
|
-
create_enum: :drop_enum
|
|
173
|
+
create_enum: :drop_enum,
|
|
174
|
+
create_schema: :drop_schema,
|
|
175
|
+
create_virtual_table: :drop_virtual_table
|
|
167
176
|
}.each do |cmd, inv|
|
|
168
177
|
[[inv, cmd], [cmd, inv]].uniq.each do |method, inverse|
|
|
169
178
|
class_eval <<-EOV, __FILE__, __LINE__ + 1
|
|
@@ -177,6 +186,16 @@ module ActiveRecord
|
|
|
177
186
|
|
|
178
187
|
include StraightReversions
|
|
179
188
|
|
|
189
|
+
def invert_enable_index(args)
|
|
190
|
+
table_name, index_name = args
|
|
191
|
+
[:disable_index, [table_name, index_name]]
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def invert_disable_index(args)
|
|
195
|
+
table_name, index_name = args
|
|
196
|
+
[:enable_index, [table_name, index_name]]
|
|
197
|
+
end
|
|
198
|
+
|
|
180
199
|
def invert_transaction(args, &block)
|
|
181
200
|
sub_recorder = CommandRecorder.new(delegate)
|
|
182
201
|
sub_recorder.revert(&block)
|
|
@@ -196,13 +215,20 @@ module ActiveRecord
|
|
|
196
215
|
end
|
|
197
216
|
|
|
198
217
|
def invert_drop_table(args, &block)
|
|
199
|
-
|
|
200
|
-
|
|
218
|
+
options = args.extract_options!
|
|
219
|
+
options.delete(:if_exists)
|
|
220
|
+
|
|
221
|
+
if args.size > 1
|
|
222
|
+
raise ActiveRecord::IrreversibleMigration, "To avoid mistakes, drop_table is only reversible if given a single table name."
|
|
201
223
|
end
|
|
202
|
-
|
|
224
|
+
|
|
225
|
+
if args.size == 1 && options == {} && block == nil
|
|
203
226
|
raise ActiveRecord::IrreversibleMigration, "To avoid mistakes, drop_table is only reversible if given options or a block (can be empty)."
|
|
204
227
|
end
|
|
205
|
-
|
|
228
|
+
|
|
229
|
+
args << options unless options.empty?
|
|
230
|
+
|
|
231
|
+
super(args, &block)
|
|
206
232
|
end
|
|
207
233
|
|
|
208
234
|
def invert_rename_table(args)
|
|
@@ -353,13 +379,13 @@ module ActiveRecord
|
|
|
353
379
|
end
|
|
354
380
|
|
|
355
381
|
def invert_rename_enum(args)
|
|
356
|
-
name,
|
|
382
|
+
name, new_name, = args
|
|
357
383
|
|
|
358
|
-
|
|
359
|
-
|
|
384
|
+
if new_name.is_a?(Hash) && new_name.key?(:to)
|
|
385
|
+
new_name = new_name[:to]
|
|
360
386
|
end
|
|
361
387
|
|
|
362
|
-
[:rename_enum, [
|
|
388
|
+
[:rename_enum, [new_name, name]]
|
|
363
389
|
end
|
|
364
390
|
|
|
365
391
|
def invert_rename_enum_value(args)
|
|
@@ -369,7 +395,14 @@ module ActiveRecord
|
|
|
369
395
|
raise ActiveRecord::IrreversibleMigration, "rename_enum_value is only reversible if given a :from and :to option."
|
|
370
396
|
end
|
|
371
397
|
|
|
372
|
-
[:
|
|
398
|
+
options[:to], options[:from] = options[:from], options[:to]
|
|
399
|
+
[:rename_enum_value, [type_name, options]]
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
def invert_drop_virtual_table(args)
|
|
403
|
+
_enum, values = args.dup.tap(&:extract_options!)
|
|
404
|
+
raise ActiveRecord::IrreversibleMigration, "drop_virtual_table is only reversible if given options." unless values
|
|
405
|
+
super
|
|
373
406
|
end
|
|
374
407
|
|
|
375
408
|
def respond_to_missing?(method, _)
|
|
@@ -377,14 +410,13 @@ module ActiveRecord
|
|
|
377
410
|
end
|
|
378
411
|
|
|
379
412
|
# Forwards any missing method call to the \target.
|
|
380
|
-
def method_missing(method,
|
|
413
|
+
def method_missing(method, ...)
|
|
381
414
|
if delegate.respond_to?(method)
|
|
382
|
-
delegate.public_send(method,
|
|
415
|
+
delegate.public_send(method, ...)
|
|
383
416
|
else
|
|
384
417
|
super
|
|
385
418
|
end
|
|
386
419
|
end
|
|
387
|
-
ruby2_keywords(:method_missing)
|
|
388
420
|
end
|
|
389
421
|
end
|
|
390
422
|
end
|
|
@@ -21,8 +21,7 @@ module ActiveRecord
|
|
|
21
21
|
# New migration functionality that will never be backward compatible should be added directly to `ActiveRecord::Migration`.
|
|
22
22
|
#
|
|
23
23
|
# There are classes for each prior Rails version. Each class descends from the *next* Rails version, so:
|
|
24
|
-
# 7.0 < 7.1
|
|
25
|
-
# 5.2 < 6.0 < 6.1 < 7.0 < 7.1
|
|
24
|
+
# 5.2 < 6.0 < 6.1 < 7.0 < 7.1 < 7.2 < 8.0 < 8.1
|
|
26
25
|
#
|
|
27
26
|
# If you are introducing new migration functionality that should only apply from Rails 7 onward, then you should
|
|
28
27
|
# find the class that immediately precedes it (6.1), and override the relevant migration methods to undo your changes.
|
|
@@ -30,7 +29,37 @@ module ActiveRecord
|
|
|
30
29
|
# For example, Rails 6 added a default value for the `precision` option on datetime columns. So in this file, the `V5_2`
|
|
31
30
|
# class sets the value of `precision` to `nil` if it's not explicitly provided. This way, the default value will not apply
|
|
32
31
|
# for migrations written for 5.2, but will for migrations written for 6.0.
|
|
33
|
-
|
|
32
|
+
V8_1 = Current
|
|
33
|
+
|
|
34
|
+
class V8_0 < V8_1
|
|
35
|
+
module RemoveForeignKeyColumnMatch
|
|
36
|
+
def remove_foreign_key(*args, **options)
|
|
37
|
+
options[:_skip_column_match] = true
|
|
38
|
+
super
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
module TableDefinition
|
|
43
|
+
def remove_foreign_key(to_table = nil, **options)
|
|
44
|
+
options[:_skip_column_match] = true
|
|
45
|
+
super
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
include RemoveForeignKeyColumnMatch
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
def compatible_table_definition(t)
|
|
53
|
+
t.singleton_class.prepend(TableDefinition)
|
|
54
|
+
super
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
class V7_2 < V8_0
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
class V7_1 < V7_2
|
|
62
|
+
end
|
|
34
63
|
|
|
35
64
|
class V7_0 < V7_1
|
|
36
65
|
module LegacyIndexName
|
|
@@ -149,9 +178,7 @@ module ActiveRecord
|
|
|
149
178
|
|
|
150
179
|
private
|
|
151
180
|
def compatible_table_definition(t)
|
|
152
|
-
|
|
153
|
-
prepend TableDefinition
|
|
154
|
-
end
|
|
181
|
+
t.singleton_class.prepend(TableDefinition)
|
|
155
182
|
super
|
|
156
183
|
end
|
|
157
184
|
end
|
|
@@ -212,9 +239,7 @@ module ActiveRecord
|
|
|
212
239
|
|
|
213
240
|
private
|
|
214
241
|
def compatible_table_definition(t)
|
|
215
|
-
|
|
216
|
-
prepend TableDefinition
|
|
217
|
-
end
|
|
242
|
+
t.singleton_class.prepend(TableDefinition)
|
|
218
243
|
super
|
|
219
244
|
end
|
|
220
245
|
end
|
|
@@ -255,9 +280,7 @@ module ActiveRecord
|
|
|
255
280
|
|
|
256
281
|
private
|
|
257
282
|
def compatible_table_definition(t)
|
|
258
|
-
|
|
259
|
-
prepend TableDefinition
|
|
260
|
-
end
|
|
283
|
+
t.singleton_class.prepend(TableDefinition)
|
|
261
284
|
super
|
|
262
285
|
end
|
|
263
286
|
end
|
|
@@ -303,17 +326,13 @@ module ActiveRecord
|
|
|
303
326
|
|
|
304
327
|
private
|
|
305
328
|
def compatible_table_definition(t)
|
|
306
|
-
|
|
307
|
-
prepend TableDefinition
|
|
308
|
-
end
|
|
329
|
+
t.singleton_class.prepend(TableDefinition)
|
|
309
330
|
super
|
|
310
331
|
end
|
|
311
332
|
|
|
312
333
|
def command_recorder
|
|
313
334
|
recorder = super
|
|
314
|
-
|
|
315
|
-
prepend CommandRecorder
|
|
316
|
-
end
|
|
335
|
+
recorder.singleton_class.prepend(CommandRecorder)
|
|
317
336
|
recorder
|
|
318
337
|
end
|
|
319
338
|
end
|
|
@@ -401,9 +420,7 @@ module ActiveRecord
|
|
|
401
420
|
|
|
402
421
|
private
|
|
403
422
|
def compatible_table_definition(t)
|
|
404
|
-
|
|
405
|
-
prepend TableDefinition
|
|
406
|
-
end
|
|
423
|
+
t.singleton_class.prepend(TableDefinition)
|
|
407
424
|
super
|
|
408
425
|
end
|
|
409
426
|
end
|
|
@@ -437,7 +454,7 @@ module ActiveRecord
|
|
|
437
454
|
super
|
|
438
455
|
end
|
|
439
456
|
|
|
440
|
-
def index_exists?(table_name, column_name, **options)
|
|
457
|
+
def index_exists?(table_name, column_name = nil, **options)
|
|
441
458
|
column_names = Array(column_name).map(&:to_s)
|
|
442
459
|
options[:name] =
|
|
443
460
|
if options[:name].present?
|
|
@@ -455,9 +472,7 @@ module ActiveRecord
|
|
|
455
472
|
|
|
456
473
|
private
|
|
457
474
|
def compatible_table_definition(t)
|
|
458
|
-
|
|
459
|
-
prepend TableDefinition
|
|
460
|
-
end
|
|
475
|
+
t.singleton_class.prepend(TableDefinition)
|
|
461
476
|
super
|
|
462
477
|
end
|
|
463
478
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ActiveRecord
|
|
4
|
+
class Migration
|
|
5
|
+
# This class is used by the schema dumper to format versions information.
|
|
6
|
+
#
|
|
7
|
+
# The class receives the current +connection+ when initialized.
|
|
8
|
+
class DefaultSchemaVersionsFormatter # :nodoc:
|
|
9
|
+
def initialize(connection)
|
|
10
|
+
@connection = connection
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def format(versions)
|
|
14
|
+
sm_table = connection.quote_table_name(connection.pool.schema_migration.table_name)
|
|
15
|
+
|
|
16
|
+
if versions.is_a?(Array)
|
|
17
|
+
sql = +"INSERT INTO #{sm_table} (version) VALUES\n"
|
|
18
|
+
sql << versions.reverse.map { |v| "(#{connection.quote(v)})" }.join(",\n")
|
|
19
|
+
sql << ";"
|
|
20
|
+
sql
|
|
21
|
+
else
|
|
22
|
+
"INSERT INTO #{sm_table} (version) VALUES (#{connection.quote(versions)});"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
attr_reader :connection
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -6,13 +6,12 @@ module ActiveRecord
|
|
|
6
6
|
# to the connection adapter.
|
|
7
7
|
class DefaultStrategy < ExecutionStrategy # :nodoc:
|
|
8
8
|
private
|
|
9
|
-
def method_missing(method,
|
|
10
|
-
connection.send(method,
|
|
9
|
+
def method_missing(method, ...)
|
|
10
|
+
connection.send(method, ...)
|
|
11
11
|
end
|
|
12
|
-
ruby2_keywords(:method_missing)
|
|
13
12
|
|
|
14
|
-
def respond_to_missing?(method,
|
|
15
|
-
connection.respond_to?(method) || super
|
|
13
|
+
def respond_to_missing?(method, include_private = false)
|
|
14
|
+
connection.respond_to?(method, include_private) || super
|
|
16
15
|
end
|
|
17
16
|
|
|
18
17
|
def connection
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
module ActiveRecord
|
|
4
4
|
class PendingMigrationConnection # :nodoc:
|
|
5
|
-
def self.
|
|
5
|
+
def self.with_temporary_pool(db_config, &block)
|
|
6
6
|
pool = ActiveRecord::Base.connection_handler.establish_connection(db_config, owner_name: self)
|
|
7
7
|
|
|
8
|
-
yield pool
|
|
8
|
+
yield pool
|
|
9
9
|
ensure
|
|
10
10
|
ActiveRecord::Base.connection_handler.remove_connection_pool(self.name)
|
|
11
11
|
end
|