activerecord 7.0.0 → 7.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 +515 -1268
- data/MIT-LICENSE +1 -1
- data/README.rdoc +31 -31
- data/examples/performance.rb +2 -2
- data/lib/active_record/aggregations.rb +16 -13
- data/lib/active_record/association_relation.rb +2 -2
- data/lib/active_record/associations/alias_tracker.rb +25 -19
- data/lib/active_record/associations/association.rb +35 -12
- data/lib/active_record/associations/association_scope.rb +16 -9
- data/lib/active_record/associations/belongs_to_association.rb +23 -8
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +3 -2
- data/lib/active_record/associations/builder/association.rb +3 -3
- data/lib/active_record/associations/builder/belongs_to.rb +22 -8
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +3 -7
- 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 +4 -0
- data/lib/active_record/associations/collection_association.rb +28 -17
- data/lib/active_record/associations/collection_proxy.rb +36 -13
- data/lib/active_record/associations/errors.rb +265 -0
- data/lib/active_record/associations/foreign_association.rb +10 -3
- data/lib/active_record/associations/has_many_association.rb +28 -18
- data/lib/active_record/associations/has_many_through_association.rb +10 -6
- data/lib/active_record/associations/has_one_association.rb +10 -3
- data/lib/active_record/associations/join_dependency/join_association.rb +27 -25
- data/lib/active_record/associations/join_dependency.rb +18 -14
- data/lib/active_record/associations/nested_error.rb +47 -0
- data/lib/active_record/associations/preloader/association.rb +33 -8
- data/lib/active_record/associations/preloader/branch.rb +7 -1
- data/lib/active_record/associations/preloader/through_association.rb +2 -4
- data/lib/active_record/associations/preloader.rb +13 -10
- data/lib/active_record/associations/singular_association.rb +7 -1
- data/lib/active_record/associations/through_association.rb +22 -11
- data/lib/active_record/associations.rb +378 -491
- data/lib/active_record/attribute_assignment.rb +1 -13
- data/lib/active_record/attribute_methods/before_type_cast.rb +17 -0
- data/lib/active_record/attribute_methods/composite_primary_key.rb +84 -0
- data/lib/active_record/attribute_methods/dirty.rb +53 -35
- data/lib/active_record/attribute_methods/primary_key.rb +45 -25
- data/lib/active_record/attribute_methods/query.rb +28 -16
- data/lib/active_record/attribute_methods/read.rb +8 -7
- data/lib/active_record/attribute_methods/serialization.rb +153 -70
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +7 -6
- data/lib/active_record/attribute_methods/write.rb +6 -6
- data/lib/active_record/attribute_methods.rb +153 -40
- data/lib/active_record/attributes.rb +63 -48
- data/lib/active_record/autosave_association.rb +70 -38
- data/lib/active_record/base.rb +12 -8
- data/lib/active_record/callbacks.rb +16 -32
- data/lib/active_record/coders/column_serializer.rb +61 -0
- data/lib/active_record/coders/json.rb +1 -1
- data/lib/active_record/coders/yaml_column.rb +70 -34
- data/lib/active_record/connection_adapters/abstract/connection_handler.rb +124 -132
- data/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb +2 -0
- data/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb +4 -1
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +297 -88
- data/lib/active_record/connection_adapters/abstract/database_limits.rb +5 -0
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +160 -45
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +215 -63
- data/lib/active_record/connection_adapters/abstract/quoting.rb +83 -65
- data/lib/active_record/connection_adapters/abstract/savepoints.rb +4 -3
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +18 -4
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +163 -29
- data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +14 -1
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +319 -135
- data/lib/active_record/connection_adapters/abstract/transaction.rb +367 -75
- data/lib/active_record/connection_adapters/abstract_adapter.rb +512 -126
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +282 -119
- data/lib/active_record/connection_adapters/column.rb +9 -0
- data/lib/active_record/connection_adapters/mysql/column.rb +1 -0
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +27 -140
- data/lib/active_record/connection_adapters/mysql/quoting.rb +64 -52
- data/lib/active_record/connection_adapters/mysql/schema_creation.rb +9 -0
- data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +10 -1
- data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +8 -2
- data/lib/active_record/connection_adapters/mysql/schema_statements.rb +45 -14
- data/lib/active_record/connection_adapters/mysql2/database_statements.rb +152 -0
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +101 -68
- data/lib/active_record/connection_adapters/pool_config.rb +20 -10
- data/lib/active_record/connection_adapters/pool_manager.rb +19 -9
- data/lib/active_record/connection_adapters/postgresql/column.rb +16 -3
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +101 -48
- data/lib/active_record/connection_adapters/postgresql/oid/array.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +6 -0
- data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +2 -2
- data/lib/active_record/connection_adapters/postgresql/oid/interval.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/money.rb +3 -2
- data/lib/active_record/connection_adapters/postgresql/oid/range.rb +11 -2
- data/lib/active_record/connection_adapters/postgresql/oid/timestamp_with_time_zone.rb +4 -2
- data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +14 -4
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +94 -61
- data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +6 -10
- data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +76 -6
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +151 -2
- data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +53 -0
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +379 -66
- data/lib/active_record/connection_adapters/postgresql/utils.rb +9 -10
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +370 -203
- data/lib/active_record/connection_adapters/schema_cache.rb +302 -79
- data/lib/active_record/connection_adapters/sqlite3/column.rb +62 -0
- data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +60 -43
- data/lib/active_record/connection_adapters/sqlite3/quoting.rb +61 -46
- data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +22 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +20 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +16 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +64 -22
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +321 -110
- data/lib/active_record/connection_adapters/statement_pool.rb +7 -0
- data/lib/active_record/connection_adapters/trilogy/database_statements.rb +99 -0
- data/lib/active_record/connection_adapters/trilogy_adapter.rb +229 -0
- data/lib/active_record/connection_adapters.rb +124 -1
- data/lib/active_record/connection_handling.rb +98 -106
- data/lib/active_record/core.rb +220 -177
- data/lib/active_record/counter_cache.rb +68 -34
- data/lib/active_record/database_configurations/connection_url_resolver.rb +8 -2
- data/lib/active_record/database_configurations/database_config.rb +26 -5
- data/lib/active_record/database_configurations/hash_config.rb +52 -34
- data/lib/active_record/database_configurations/url_config.rb +37 -12
- data/lib/active_record/database_configurations.rb +88 -35
- data/lib/active_record/delegated_type.rb +40 -11
- data/lib/active_record/deprecator.rb +7 -0
- data/lib/active_record/destroy_association_async_job.rb +3 -1
- data/lib/active_record/disable_joins_association_relation.rb +1 -1
- data/lib/active_record/dynamic_matchers.rb +2 -2
- data/lib/active_record/encryption/auto_filtered_parameters.rb +66 -0
- data/lib/active_record/encryption/cipher/aes256_gcm.rb +4 -1
- data/lib/active_record/encryption/config.rb +25 -1
- data/lib/active_record/encryption/configurable.rb +13 -14
- data/lib/active_record/encryption/context.rb +10 -3
- data/lib/active_record/encryption/contexts.rb +8 -4
- data/lib/active_record/encryption/derived_secret_key_provider.rb +9 -3
- data/lib/active_record/encryption/deterministic_key_provider.rb +1 -1
- data/lib/active_record/encryption/encryptable_record.rb +47 -25
- data/lib/active_record/encryption/encrypted_attribute_type.rb +49 -14
- data/lib/active_record/encryption/encryptor.rb +25 -10
- data/lib/active_record/encryption/envelope_encryption_key_provider.rb +3 -3
- data/lib/active_record/encryption/extended_deterministic_queries.rb +83 -86
- data/lib/active_record/encryption/extended_deterministic_uniqueness_validator.rb +3 -3
- data/lib/active_record/encryption/key_generator.rb +12 -1
- data/lib/active_record/encryption/message.rb +1 -1
- data/lib/active_record/encryption/message_pack_message_serializer.rb +76 -0
- data/lib/active_record/encryption/message_serializer.rb +6 -0
- data/lib/active_record/encryption/null_encryptor.rb +4 -0
- data/lib/active_record/encryption/properties.rb +4 -4
- data/lib/active_record/encryption/read_only_null_encryptor.rb +4 -0
- data/lib/active_record/encryption/scheme.rb +23 -22
- data/lib/active_record/encryption.rb +1 -0
- data/lib/active_record/enum.rb +131 -27
- data/lib/active_record/errors.rb +151 -31
- data/lib/active_record/explain.rb +21 -12
- data/lib/active_record/explain_subscriber.rb +1 -1
- data/lib/active_record/fixture_set/model_metadata.rb +14 -4
- data/lib/active_record/fixture_set/render_context.rb +2 -0
- data/lib/active_record/fixture_set/table_row.rb +29 -8
- data/lib/active_record/fixtures.rb +169 -99
- data/lib/active_record/future_result.rb +47 -8
- data/lib/active_record/gem_version.rb +3 -3
- data/lib/active_record/inheritance.rb +34 -18
- data/lib/active_record/insert_all.rb +72 -22
- data/lib/active_record/integration.rb +13 -10
- data/lib/active_record/internal_metadata.rb +124 -20
- data/lib/active_record/locking/optimistic.rb +39 -24
- data/lib/active_record/locking/pessimistic.rb +8 -5
- data/lib/active_record/log_subscriber.rb +28 -27
- data/lib/active_record/marshalling.rb +56 -0
- data/lib/active_record/message_pack.rb +124 -0
- data/lib/active_record/middleware/database_selector/resolver.rb +4 -0
- data/lib/active_record/middleware/database_selector.rb +18 -13
- data/lib/active_record/middleware/shard_selector.rb +7 -5
- data/lib/active_record/migration/command_recorder.rb +110 -13
- data/lib/active_record/migration/compatibility.rb +174 -64
- data/lib/active_record/migration/default_strategy.rb +22 -0
- data/lib/active_record/migration/execution_strategy.rb +19 -0
- data/lib/active_record/migration/pending_migration_connection.rb +21 -0
- data/lib/active_record/migration.rb +292 -125
- data/lib/active_record/model_schema.rb +113 -112
- data/lib/active_record/nested_attributes.rb +35 -9
- data/lib/active_record/normalization.rb +163 -0
- data/lib/active_record/persistence.rb +177 -345
- data/lib/active_record/promise.rb +84 -0
- data/lib/active_record/query_cache.rb +19 -25
- data/lib/active_record/query_logs.rb +102 -51
- data/lib/active_record/query_logs_formatter.rb +41 -0
- data/lib/active_record/querying.rb +34 -9
- data/lib/active_record/railtie.rb +153 -100
- data/lib/active_record/railties/controller_runtime.rb +24 -10
- data/lib/active_record/railties/databases.rake +148 -152
- data/lib/active_record/railties/job_runtime.rb +23 -0
- data/lib/active_record/readonly_attributes.rb +32 -5
- data/lib/active_record/reflection.rb +278 -69
- data/lib/active_record/relation/batches/batch_enumerator.rb +20 -5
- data/lib/active_record/relation/batches.rb +198 -63
- data/lib/active_record/relation/calculations.rb +293 -108
- data/lib/active_record/relation/delegation.rb +31 -20
- data/lib/active_record/relation/finder_methods.rb +93 -18
- data/lib/active_record/relation/merger.rb +6 -6
- data/lib/active_record/relation/predicate_builder/array_handler.rb +2 -2
- data/lib/active_record/relation/predicate_builder/association_query_value.rb +38 -4
- data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +10 -7
- data/lib/active_record/relation/predicate_builder/relation_handler.rb +5 -1
- data/lib/active_record/relation/predicate_builder.rb +28 -16
- data/lib/active_record/relation/query_attribute.rb +25 -1
- data/lib/active_record/relation/query_methods.rb +625 -107
- data/lib/active_record/relation/record_fetch_warning.rb +3 -0
- data/lib/active_record/relation/spawn_methods.rb +5 -4
- data/lib/active_record/relation/where_clause.rb +7 -19
- data/lib/active_record/relation.rb +602 -96
- data/lib/active_record/result.rb +55 -52
- data/lib/active_record/runtime_registry.rb +63 -1
- data/lib/active_record/sanitization.rb +76 -30
- data/lib/active_record/schema.rb +39 -23
- data/lib/active_record/schema_dumper.rb +82 -30
- data/lib/active_record/schema_migration.rb +75 -24
- data/lib/active_record/scoping/default.rb +20 -12
- data/lib/active_record/scoping/named.rb +3 -2
- data/lib/active_record/scoping.rb +2 -1
- data/lib/active_record/secure_password.rb +60 -0
- data/lib/active_record/secure_token.rb +21 -3
- data/lib/active_record/serialization.rb +5 -0
- data/lib/active_record/signed_id.rb +29 -8
- data/lib/active_record/statement_cache.rb +7 -7
- data/lib/active_record/store.rb +16 -11
- data/lib/active_record/suppressor.rb +3 -1
- data/lib/active_record/table_metadata.rb +7 -3
- data/lib/active_record/tasks/database_tasks.rb +191 -121
- data/lib/active_record/tasks/mysql_database_tasks.rb +15 -6
- data/lib/active_record/tasks/postgresql_database_tasks.rb +17 -15
- data/lib/active_record/tasks/sqlite_database_tasks.rb +16 -7
- data/lib/active_record/test_fixtures.rb +174 -152
- data/lib/active_record/testing/query_assertions.rb +121 -0
- data/lib/active_record/timestamp.rb +31 -17
- data/lib/active_record/token_for.rb +123 -0
- data/lib/active_record/touch_later.rb +12 -7
- data/lib/active_record/transaction.rb +132 -0
- data/lib/active_record/transactions.rb +109 -27
- data/lib/active_record/translation.rb +1 -3
- data/lib/active_record/type/adapter_specific_registry.rb +1 -8
- data/lib/active_record/type/internal/timezone.rb +7 -2
- data/lib/active_record/type/serialized.rb +9 -7
- data/lib/active_record/type/time.rb +4 -0
- data/lib/active_record/type_caster/connection.rb +4 -4
- data/lib/active_record/validations/absence.rb +1 -1
- data/lib/active_record/validations/associated.rb +12 -6
- data/lib/active_record/validations/numericality.rb +5 -4
- data/lib/active_record/validations/presence.rb +5 -28
- data/lib/active_record/validations/uniqueness.rb +63 -14
- data/lib/active_record/validations.rb +12 -5
- data/lib/active_record/version.rb +1 -1
- data/lib/active_record.rb +266 -30
- data/lib/arel/alias_predication.rb +1 -1
- data/lib/arel/collectors/bind.rb +2 -0
- data/lib/arel/collectors/composite.rb +7 -0
- data/lib/arel/collectors/sql_string.rb +1 -1
- data/lib/arel/collectors/substitute_binds.rb +1 -1
- data/lib/arel/errors.rb +10 -0
- data/lib/arel/factory_methods.rb +4 -0
- data/lib/arel/filter_predications.rb +1 -1
- data/lib/arel/nodes/binary.rb +6 -7
- data/lib/arel/nodes/bound_sql_literal.rb +65 -0
- data/lib/arel/nodes/cte.rb +36 -0
- data/lib/arel/nodes/filter.rb +1 -1
- data/lib/arel/nodes/fragments.rb +35 -0
- data/lib/arel/nodes/homogeneous_in.rb +1 -9
- data/lib/arel/nodes/leading_join.rb +8 -0
- data/lib/arel/nodes/{and.rb → nary.rb} +9 -2
- data/lib/arel/nodes/node.rb +115 -5
- data/lib/arel/nodes/sql_literal.rb +13 -0
- data/lib/arel/nodes/table_alias.rb +4 -0
- data/lib/arel/nodes.rb +6 -2
- data/lib/arel/predications.rb +3 -1
- data/lib/arel/select_manager.rb +1 -1
- data/lib/arel/table.rb +9 -5
- data/lib/arel/tree_manager.rb +8 -3
- data/lib/arel/update_manager.rb +2 -1
- data/lib/arel/visitors/dot.rb +1 -0
- data/lib/arel/visitors/mysql.rb +17 -5
- data/lib/arel/visitors/postgresql.rb +1 -12
- data/lib/arel/visitors/to_sql.rb +112 -34
- data/lib/arel/visitors/visitor.rb +2 -2
- data/lib/arel.rb +21 -3
- data/lib/rails/generators/active_record/application_record/USAGE +8 -0
- data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +4 -1
- data/lib/rails/generators/active_record/migration.rb +3 -1
- data/lib/rails/generators/active_record/model/USAGE +113 -0
- data/lib/rails/generators/active_record/model/model_generator.rb +15 -6
- metadata +59 -17
- data/lib/active_record/connection_adapters/legacy_pool_manager.rb +0 -35
- data/lib/active_record/null_relation.rb +0 -63
|
@@ -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
|
-
# 6.1 < 7.0
|
|
25
|
-
# 5.2 < 6.0 < 6.1 < 7.0
|
|
24
|
+
# 5.2 < 6.0 < 6.1 < 7.0 < 7.1 < 7.2
|
|
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,134 @@ 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
|
+
V7_2 = Current
|
|
33
|
+
|
|
34
|
+
class V7_1 < V7_2
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class V7_0 < V7_1
|
|
38
|
+
module LegacyIndexName
|
|
39
|
+
private
|
|
40
|
+
def legacy_index_name(table_name, options)
|
|
41
|
+
if Hash === options
|
|
42
|
+
if options[:column]
|
|
43
|
+
"index_#{table_name}_on_#{Array(options[:column]) * '_and_'}"
|
|
44
|
+
elsif options[:name]
|
|
45
|
+
options[:name]
|
|
46
|
+
else
|
|
47
|
+
raise ArgumentError, "You must specify the index name"
|
|
48
|
+
end
|
|
49
|
+
else
|
|
50
|
+
legacy_index_name(table_name, index_name_options(options))
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def index_name_options(column_names)
|
|
55
|
+
if expression_column_name?(column_names)
|
|
56
|
+
column_names = column_names.scan(/\w+/).join("_")
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
{ column: column_names }
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def expression_column_name?(column_name)
|
|
63
|
+
column_name.is_a?(String) && /\W/.match?(column_name)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
module TableDefinition
|
|
68
|
+
include LegacyIndexName
|
|
69
|
+
|
|
70
|
+
def column(name, type, **options)
|
|
71
|
+
options[:_skip_validate_options] = true
|
|
72
|
+
super
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def change(name, type, **options)
|
|
76
|
+
options[:_skip_validate_options] = true
|
|
77
|
+
super
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def index(column_name, **options)
|
|
81
|
+
options[:name] = legacy_index_name(name, column_name) if options[:name].nil?
|
|
82
|
+
super
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def references(*args, **options)
|
|
86
|
+
options[:_skip_validate_options] = true
|
|
87
|
+
super
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
private
|
|
91
|
+
def raise_on_if_exist_options(options)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
include LegacyIndexName
|
|
96
|
+
|
|
97
|
+
def add_column(table_name, column_name, type, **options)
|
|
98
|
+
options[:_skip_validate_options] = true
|
|
99
|
+
super
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def add_index(table_name, column_name, **options)
|
|
103
|
+
options[:name] = legacy_index_name(table_name, column_name) if options[:name].nil?
|
|
104
|
+
super
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def add_reference(table_name, ref_name, **options)
|
|
108
|
+
options[:_skip_validate_options] = true
|
|
109
|
+
super
|
|
110
|
+
end
|
|
111
|
+
alias :add_belongs_to :add_reference
|
|
112
|
+
|
|
113
|
+
def create_table(table_name, **options)
|
|
114
|
+
options[:_uses_legacy_table_name] = true
|
|
115
|
+
options[:_skip_validate_options] = true
|
|
116
|
+
|
|
117
|
+
super
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def rename_table(table_name, new_name, **options)
|
|
121
|
+
options[:_uses_legacy_table_name] = true
|
|
122
|
+
options[:_uses_legacy_index_name] = true
|
|
123
|
+
super
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def change_column(table_name, column_name, type, **options)
|
|
127
|
+
options[:_skip_validate_options] = true
|
|
128
|
+
if connection.adapter_name == "Mysql2" || connection.adapter_name == "Trilogy"
|
|
129
|
+
options[:collation] ||= :no_collation
|
|
130
|
+
end
|
|
131
|
+
super
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def change_column_null(table_name, column_name, null, default = nil)
|
|
135
|
+
super(table_name, column_name, !!null, default)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def disable_extension(name, **options)
|
|
139
|
+
if connection.adapter_name == "PostgreSQL"
|
|
140
|
+
options[:force] = :cascade
|
|
141
|
+
end
|
|
142
|
+
super
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def add_foreign_key(from_table, to_table, **options)
|
|
146
|
+
if connection.adapter_name == "PostgreSQL" && options[:deferrable] == true
|
|
147
|
+
options[:deferrable] = :immediate
|
|
148
|
+
end
|
|
149
|
+
super
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
private
|
|
153
|
+
def compatible_table_definition(t)
|
|
154
|
+
class << t
|
|
155
|
+
prepend TableDefinition
|
|
156
|
+
end
|
|
157
|
+
super
|
|
158
|
+
end
|
|
159
|
+
end
|
|
34
160
|
|
|
35
161
|
class V6_1 < V7_0
|
|
36
162
|
class PostgreSQLCompat
|
|
@@ -56,12 +182,13 @@ module ActiveRecord
|
|
|
56
182
|
super
|
|
57
183
|
end
|
|
58
184
|
|
|
59
|
-
def
|
|
60
|
-
if
|
|
61
|
-
|
|
62
|
-
else
|
|
63
|
-
super
|
|
185
|
+
def change_column(table_name, column_name, type, **options)
|
|
186
|
+
if type == :datetime
|
|
187
|
+
options[:precision] ||= nil
|
|
64
188
|
end
|
|
189
|
+
|
|
190
|
+
type = PostgreSQLCompat.compatible_timestamp_type(type, connection)
|
|
191
|
+
super
|
|
65
192
|
end
|
|
66
193
|
|
|
67
194
|
module TableDefinition
|
|
@@ -70,10 +197,19 @@ module ActiveRecord
|
|
|
70
197
|
super
|
|
71
198
|
end
|
|
72
199
|
|
|
200
|
+
def change(name, type, index: nil, **options)
|
|
201
|
+
options[:precision] ||= nil
|
|
202
|
+
super
|
|
203
|
+
end
|
|
204
|
+
|
|
73
205
|
def column(name, type, index: nil, **options)
|
|
74
206
|
options[:precision] ||= nil
|
|
75
207
|
super
|
|
76
208
|
end
|
|
209
|
+
|
|
210
|
+
private
|
|
211
|
+
def raise_on_if_exist_options(options)
|
|
212
|
+
end
|
|
77
213
|
end
|
|
78
214
|
|
|
79
215
|
private
|
|
@@ -81,7 +217,7 @@ module ActiveRecord
|
|
|
81
217
|
class << t
|
|
82
218
|
prepend TableDefinition
|
|
83
219
|
end
|
|
84
|
-
|
|
220
|
+
super
|
|
85
221
|
end
|
|
86
222
|
end
|
|
87
223
|
|
|
@@ -94,9 +230,8 @@ module ActiveRecord
|
|
|
94
230
|
|
|
95
231
|
module TableDefinition
|
|
96
232
|
def references(*args, **options)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
end
|
|
233
|
+
options[:_uses_legacy_reference_index_name] = true
|
|
234
|
+
super
|
|
100
235
|
end
|
|
101
236
|
alias :belongs_to :references
|
|
102
237
|
|
|
@@ -104,35 +239,19 @@ module ActiveRecord
|
|
|
104
239
|
options[:precision] ||= nil
|
|
105
240
|
super
|
|
106
241
|
end
|
|
107
|
-
end
|
|
108
242
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
else
|
|
113
|
-
super
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
def change_table(table_name, **options)
|
|
118
|
-
if block_given?
|
|
119
|
-
super { |t| yield compatible_table_definition(t) }
|
|
120
|
-
else
|
|
121
|
-
super
|
|
122
|
-
end
|
|
243
|
+
private
|
|
244
|
+
def raise_on_if_exist_options(options)
|
|
245
|
+
end
|
|
123
246
|
end
|
|
124
247
|
|
|
125
|
-
def
|
|
126
|
-
if
|
|
127
|
-
|
|
128
|
-
else
|
|
129
|
-
super
|
|
248
|
+
def add_reference(table_name, ref_name, **options)
|
|
249
|
+
if connection.adapter_name == "SQLite"
|
|
250
|
+
options[:type] = :integer
|
|
130
251
|
end
|
|
131
|
-
end
|
|
132
252
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
.add_to(connection.update_table_definition(table_name, self))
|
|
253
|
+
options[:_uses_legacy_reference_index_name] = true
|
|
254
|
+
super
|
|
136
255
|
end
|
|
137
256
|
alias :add_belongs_to :add_reference
|
|
138
257
|
|
|
@@ -141,7 +260,7 @@ module ActiveRecord
|
|
|
141
260
|
class << t
|
|
142
261
|
prepend TableDefinition
|
|
143
262
|
end
|
|
144
|
-
|
|
263
|
+
super
|
|
145
264
|
end
|
|
146
265
|
end
|
|
147
266
|
|
|
@@ -156,6 +275,13 @@ module ActiveRecord
|
|
|
156
275
|
options[:precision] ||= nil
|
|
157
276
|
super
|
|
158
277
|
end
|
|
278
|
+
|
|
279
|
+
private
|
|
280
|
+
def raise_on_if_exist_options(options)
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
def raise_on_duplicate_column(name)
|
|
284
|
+
end
|
|
159
285
|
end
|
|
160
286
|
|
|
161
287
|
module CommandRecorder
|
|
@@ -172,30 +298,6 @@ module ActiveRecord
|
|
|
172
298
|
end
|
|
173
299
|
end
|
|
174
300
|
|
|
175
|
-
def create_table(table_name, **options)
|
|
176
|
-
if block_given?
|
|
177
|
-
super { |t| yield compatible_table_definition(t) }
|
|
178
|
-
else
|
|
179
|
-
super
|
|
180
|
-
end
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
def change_table(table_name, **options)
|
|
184
|
-
if block_given?
|
|
185
|
-
super { |t| yield compatible_table_definition(t) }
|
|
186
|
-
else
|
|
187
|
-
super
|
|
188
|
-
end
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
def create_join_table(table_1, table_2, **options)
|
|
192
|
-
if block_given?
|
|
193
|
-
super { |t| yield compatible_table_definition(t) }
|
|
194
|
-
else
|
|
195
|
-
super
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
|
|
199
301
|
def add_timestamps(table_name, **options)
|
|
200
302
|
options[:precision] ||= nil
|
|
201
303
|
super
|
|
@@ -206,7 +308,7 @@ module ActiveRecord
|
|
|
206
308
|
class << t
|
|
207
309
|
prepend TableDefinition
|
|
208
310
|
end
|
|
209
|
-
|
|
311
|
+
super
|
|
210
312
|
end
|
|
211
313
|
|
|
212
314
|
def command_recorder
|
|
@@ -231,7 +333,7 @@ module ActiveRecord
|
|
|
231
333
|
end
|
|
232
334
|
|
|
233
335
|
def create_table(table_name, **options)
|
|
234
|
-
if connection.adapter_name == "Mysql2"
|
|
336
|
+
if connection.adapter_name == "Mysql2" || connection.adapter_name == "Trilogy"
|
|
235
337
|
super(table_name, options: "ENGINE=InnoDB", **options)
|
|
236
338
|
else
|
|
237
339
|
super
|
|
@@ -250,6 +352,10 @@ module ActiveRecord
|
|
|
250
352
|
super(*args, type: :integer, **options)
|
|
251
353
|
end
|
|
252
354
|
alias :belongs_to :references
|
|
355
|
+
|
|
356
|
+
private
|
|
357
|
+
def raise_on_if_exist_options(options)
|
|
358
|
+
end
|
|
253
359
|
end
|
|
254
360
|
|
|
255
361
|
def create_table(table_name, **options)
|
|
@@ -259,7 +365,7 @@ module ActiveRecord
|
|
|
259
365
|
end
|
|
260
366
|
end
|
|
261
367
|
|
|
262
|
-
unless connection.adapter_name
|
|
368
|
+
unless ["Mysql2", "Trilogy"].include?(connection.adapter_name) && options[:id] == :bigint
|
|
263
369
|
if [:integer, :bigint].include?(options[:id]) && !options.key?(:default)
|
|
264
370
|
options[:default] = nil
|
|
265
371
|
end
|
|
@@ -316,6 +422,10 @@ module ActiveRecord
|
|
|
316
422
|
options[:null] = true if options[:null].nil?
|
|
317
423
|
super
|
|
318
424
|
end
|
|
425
|
+
|
|
426
|
+
private
|
|
427
|
+
def raise_on_if_exist_options(options)
|
|
428
|
+
end
|
|
319
429
|
end
|
|
320
430
|
|
|
321
431
|
def add_reference(table_name, ref_name, **options)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ActiveRecord
|
|
4
|
+
class Migration
|
|
5
|
+
# The default strategy for executing migrations. Delegates method calls
|
|
6
|
+
# to the connection adapter.
|
|
7
|
+
class DefaultStrategy < ExecutionStrategy # :nodoc:
|
|
8
|
+
private
|
|
9
|
+
def method_missing(method, ...)
|
|
10
|
+
connection.send(method, ...)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def respond_to_missing?(method, include_private = false)
|
|
14
|
+
connection.respond_to?(method, include_private) || super
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def connection
|
|
18
|
+
migration.connection
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ActiveRecord
|
|
4
|
+
class Migration
|
|
5
|
+
# ExecutionStrategy is used by the migration to respond to any method calls
|
|
6
|
+
# that the migration class does not implement directly. This is the base strategy.
|
|
7
|
+
# All strategies should inherit from this class.
|
|
8
|
+
#
|
|
9
|
+
# The ExecutionStrategy receives the current +migration+ when initialized.
|
|
10
|
+
class ExecutionStrategy # :nodoc:
|
|
11
|
+
def initialize(migration)
|
|
12
|
+
@migration = migration
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
attr_reader :migration
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ActiveRecord
|
|
4
|
+
class PendingMigrationConnection # :nodoc:
|
|
5
|
+
def self.with_temporary_pool(db_config, &block)
|
|
6
|
+
pool = ActiveRecord::Base.connection_handler.establish_connection(db_config, owner_name: self)
|
|
7
|
+
|
|
8
|
+
yield pool
|
|
9
|
+
ensure
|
|
10
|
+
ActiveRecord::Base.connection_handler.remove_connection_pool(self.name)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.primary_class?
|
|
14
|
+
false
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.current_preventing_writes
|
|
18
|
+
false
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|