activerecord 7.0.0 → 7.1.0
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 +1607 -1040
- data/MIT-LICENSE +1 -1
- data/README.rdoc +17 -18
- data/lib/active_record/aggregations.rb +16 -13
- data/lib/active_record/association_relation.rb +1 -1
- data/lib/active_record/associations/association.rb +18 -3
- data/lib/active_record/associations/association_scope.rb +16 -9
- data/lib/active_record/associations/belongs_to_association.rb +14 -6
- data/lib/active_record/associations/builder/association.rb +3 -3
- data/lib/active_record/associations/builder/belongs_to.rb +21 -8
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +1 -5
- data/lib/active_record/associations/builder/singular_association.rb +4 -0
- data/lib/active_record/associations/collection_association.rb +17 -12
- data/lib/active_record/associations/collection_proxy.rb +22 -12
- data/lib/active_record/associations/foreign_association.rb +10 -3
- data/lib/active_record/associations/has_many_association.rb +27 -17
- 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.rb +20 -14
- data/lib/active_record/associations/preloader/association.rb +27 -6
- data/lib/active_record/associations/preloader/through_association.rb +1 -1
- data/lib/active_record/associations/preloader.rb +13 -10
- data/lib/active_record/associations/singular_association.rb +1 -1
- data/lib/active_record/associations/through_association.rb +22 -11
- data/lib/active_record/associations.rb +345 -219
- data/lib/active_record/attribute_assignment.rb +0 -2
- data/lib/active_record/attribute_methods/before_type_cast.rb +17 -0
- data/lib/active_record/attribute_methods/dirty.rb +40 -26
- data/lib/active_record/attribute_methods/primary_key.rb +76 -24
- data/lib/active_record/attribute_methods/query.rb +28 -16
- data/lib/active_record/attribute_methods/read.rb +18 -5
- data/lib/active_record/attribute_methods/serialization.rb +172 -69
- data/lib/active_record/attribute_methods/write.rb +3 -3
- data/lib/active_record/attribute_methods.rb +110 -28
- data/lib/active_record/attributes.rb +3 -3
- data/lib/active_record/autosave_association.rb +56 -10
- data/lib/active_record/base.rb +10 -5
- 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 +164 -89
- data/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb +2 -0
- data/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb +3 -1
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +63 -43
- data/lib/active_record/connection_adapters/abstract/database_limits.rb +5 -0
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +128 -32
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +60 -22
- data/lib/active_record/connection_adapters/abstract/quoting.rb +52 -8
- 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 +302 -129
- data/lib/active_record/connection_adapters/abstract/transaction.rb +287 -58
- data/lib/active_record/connection_adapters/abstract_adapter.rb +504 -106
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +217 -104
- 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 +23 -144
- data/lib/active_record/connection_adapters/mysql/quoting.rb +29 -12
- 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 +38 -14
- data/lib/active_record/connection_adapters/mysql2/database_statements.rb +148 -0
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +98 -53
- data/lib/active_record/connection_adapters/pool_config.rb +14 -5
- data/lib/active_record/connection_adapters/pool_manager.rb +19 -9
- data/lib/active_record/connection_adapters/postgresql/column.rb +3 -2
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +72 -45
- data/lib/active_record/connection_adapters/postgresql/oid/array.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +2 -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 +3 -1
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +41 -8
- 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 +131 -2
- data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +53 -0
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +358 -57
- data/lib/active_record/connection_adapters/postgresql/utils.rb +9 -10
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +343 -181
- data/lib/active_record/connection_adapters/schema_cache.rb +287 -59
- data/lib/active_record/connection_adapters/sqlite3/column.rb +49 -0
- data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +45 -39
- data/lib/active_record/connection_adapters/sqlite3/quoting.rb +22 -5
- data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +7 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +41 -22
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +242 -81
- data/lib/active_record/connection_adapters/statement_pool.rb +7 -0
- data/lib/active_record/connection_adapters/trilogy/database_statements.rb +98 -0
- data/lib/active_record/connection_adapters/trilogy_adapter.rb +254 -0
- data/lib/active_record/connection_adapters.rb +3 -1
- data/lib/active_record/connection_handling.rb +73 -96
- data/lib/active_record/core.rb +136 -148
- data/lib/active_record/counter_cache.rb +46 -25
- data/lib/active_record/database_configurations/connection_url_resolver.rb +1 -0
- data/lib/active_record/database_configurations/database_config.rb +9 -3
- data/lib/active_record/database_configurations/hash_config.rb +22 -12
- data/lib/active_record/database_configurations/url_config.rb +17 -11
- data/lib/active_record/database_configurations.rb +87 -34
- data/lib/active_record/delegated_type.rb +9 -4
- data/lib/active_record/deprecator.rb +7 -0
- data/lib/active_record/destroy_association_async_job.rb +2 -0
- data/lib/active_record/disable_joins_association_relation.rb +1 -1
- 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 +38 -22
- data/lib/active_record/encryption/encrypted_attribute_type.rb +19 -8
- data/lib/active_record/encryption/encryptor.rb +7 -7
- data/lib/active_record/encryption/envelope_encryption_key_provider.rb +3 -3
- data/lib/active_record/encryption/extended_deterministic_queries.rb +83 -71
- 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_serializer.rb +2 -0
- data/lib/active_record/encryption/properties.rb +4 -4
- data/lib/active_record/encryption/scheme.rb +20 -23
- data/lib/active_record/encryption.rb +1 -0
- data/lib/active_record/enum.rb +114 -27
- data/lib/active_record/errors.rb +108 -15
- data/lib/active_record/explain.rb +23 -3
- 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 +121 -73
- data/lib/active_record/future_result.rb +30 -5
- data/lib/active_record/gem_version.rb +2 -2
- data/lib/active_record/inheritance.rb +30 -16
- data/lib/active_record/insert_all.rb +55 -8
- data/lib/active_record/integration.rb +10 -10
- data/lib/active_record/internal_metadata.rb +118 -30
- data/lib/active_record/locking/optimistic.rb +32 -18
- data/lib/active_record/locking/pessimistic.rb +8 -5
- data/lib/active_record/log_subscriber.rb +39 -17
- 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 +104 -9
- data/lib/active_record/migration/compatibility.rb +158 -64
- data/lib/active_record/migration/default_strategy.rb +23 -0
- data/lib/active_record/migration/execution_strategy.rb +19 -0
- data/lib/active_record/migration.rb +271 -117
- data/lib/active_record/model_schema.rb +82 -50
- data/lib/active_record/nested_attributes.rb +23 -3
- data/lib/active_record/normalization.rb +159 -0
- data/lib/active_record/persistence.rb +200 -47
- data/lib/active_record/promise.rb +84 -0
- data/lib/active_record/query_cache.rb +3 -21
- data/lib/active_record/query_logs.rb +87 -51
- data/lib/active_record/query_logs_formatter.rb +41 -0
- data/lib/active_record/querying.rb +16 -3
- data/lib/active_record/railtie.rb +127 -61
- data/lib/active_record/railties/controller_runtime.rb +12 -8
- data/lib/active_record/railties/databases.rake +142 -143
- 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 +177 -45
- data/lib/active_record/relation/batches/batch_enumerator.rb +5 -3
- data/lib/active_record/relation/batches.rb +190 -61
- data/lib/active_record/relation/calculations.rb +200 -83
- data/lib/active_record/relation/delegation.rb +23 -9
- data/lib/active_record/relation/finder_methods.rb +77 -16
- data/lib/active_record/relation/merger.rb +2 -0
- data/lib/active_record/relation/predicate_builder/association_query_value.rb +31 -3
- data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +4 -6
- data/lib/active_record/relation/predicate_builder/relation_handler.rb +5 -1
- data/lib/active_record/relation/predicate_builder.rb +26 -14
- data/lib/active_record/relation/query_attribute.rb +25 -1
- data/lib/active_record/relation/query_methods.rb +429 -76
- data/lib/active_record/relation/spawn_methods.rb +18 -1
- data/lib/active_record/relation.rb +98 -41
- data/lib/active_record/result.rb +25 -9
- data/lib/active_record/runtime_registry.rb +10 -1
- data/lib/active_record/sanitization.rb +57 -16
- data/lib/active_record/schema.rb +36 -22
- data/lib/active_record/schema_dumper.rb +65 -23
- data/lib/active_record/schema_migration.rb +68 -33
- data/lib/active_record/scoping/default.rb +20 -12
- data/lib/active_record/scoping/named.rb +2 -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 +9 -7
- data/lib/active_record/store.rb +16 -11
- data/lib/active_record/suppressor.rb +3 -1
- data/lib/active_record/table_metadata.rb +16 -3
- data/lib/active_record/tasks/database_tasks.rb +138 -107
- 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 +15 -7
- data/lib/active_record/test_fixtures.rb +123 -99
- data/lib/active_record/timestamp.rb +26 -14
- data/lib/active_record/token_for.rb +113 -0
- data/lib/active_record/touch_later.rb +11 -6
- data/lib/active_record/transactions.rb +39 -13
- data/lib/active_record/translation.rb +1 -1
- 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 +8 -4
- data/lib/active_record/type/time.rb +4 -0
- data/lib/active_record/validations/absence.rb +1 -1
- data/lib/active_record/validations/associated.rb +3 -3
- 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 +50 -5
- data/lib/active_record/validations.rb +8 -4
- data/lib/active_record/version.rb +1 -1
- data/lib/active_record.rb +143 -16
- 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/and.rb +4 -0
- data/lib/arel/nodes/binary.rb +6 -1
- data/lib/arel/nodes/bound_sql_literal.rb +61 -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 +0 -8
- data/lib/arel/nodes/leading_join.rb +8 -0
- data/lib/arel/nodes/node.rb +111 -2
- data/lib/arel/nodes/sql_literal.rb +6 -0
- data/lib/arel/nodes/table_alias.rb +4 -0
- data/lib/arel/nodes.rb +4 -0
- data/lib/arel/predications.rb +2 -0
- data/lib/arel/table.rb +9 -5
- data/lib/arel/visitors/mysql.rb +8 -1
- data/lib/arel/visitors/to_sql.rb +81 -17
- data/lib/arel/visitors/visitor.rb +2 -2
- data/lib/arel.rb +16 -2
- data/lib/rails/generators/active_record/application_record/USAGE +8 -0
- 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 +50 -15
- data/lib/active_record/connection_adapters/legacy_pool_manager.rb +0 -35
- data/lib/active_record/null_relation.rb +0 -63
@@ -21,8 +21,8 @@ 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
|
-
#
|
25
|
-
# 5.2 < 6.0 < 6.1 < 7.0
|
24
|
+
# 7.0 < 7.1
|
25
|
+
# 5.2 < 6.0 < 6.1 < 7.0 < 7.1
|
26
26
|
#
|
27
27
|
# If you are introducing new migration functionality that should only apply from Rails 7 onward, then you should
|
28
28
|
# find the class that immediately precedes it (6.1), and override the relevant migration methods to undo your changes.
|
@@ -30,7 +30,117 @@ module ActiveRecord
|
|
30
30
|
# For example, Rails 6 added a default value for the `precision` option on datetime columns. So in this file, the `V5_2`
|
31
31
|
# class sets the value of `precision` to `nil` if it's not explicitly provided. This way, the default value will not apply
|
32
32
|
# for migrations written for 5.2, but will for migrations written for 6.0.
|
33
|
-
|
33
|
+
V7_1 = Current
|
34
|
+
|
35
|
+
class V7_0 < V7_1
|
36
|
+
module LegacyIndexName
|
37
|
+
private
|
38
|
+
def legacy_index_name(table_name, options)
|
39
|
+
if Hash === options
|
40
|
+
if options[:column]
|
41
|
+
"index_#{table_name}_on_#{Array(options[:column]) * '_and_'}"
|
42
|
+
elsif options[:name]
|
43
|
+
options[:name]
|
44
|
+
else
|
45
|
+
raise ArgumentError, "You must specify the index name"
|
46
|
+
end
|
47
|
+
else
|
48
|
+
legacy_index_name(table_name, index_name_options(options))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def index_name_options(column_names)
|
53
|
+
if expression_column_name?(column_names)
|
54
|
+
column_names = column_names.scan(/\w+/).join("_")
|
55
|
+
end
|
56
|
+
|
57
|
+
{ column: column_names }
|
58
|
+
end
|
59
|
+
|
60
|
+
def expression_column_name?(column_name)
|
61
|
+
column_name.is_a?(String) && /\W/.match?(column_name)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
module TableDefinition
|
65
|
+
include LegacyIndexName
|
66
|
+
def column(name, type, **options)
|
67
|
+
options[:_skip_validate_options] = true
|
68
|
+
super
|
69
|
+
end
|
70
|
+
|
71
|
+
def change(name, type, **options)
|
72
|
+
options[:_skip_validate_options] = true
|
73
|
+
super
|
74
|
+
end
|
75
|
+
|
76
|
+
def index(column_name, **options)
|
77
|
+
options[:name] = legacy_index_name(name, column_name) if options[:name].nil?
|
78
|
+
super
|
79
|
+
end
|
80
|
+
|
81
|
+
private
|
82
|
+
def raise_on_if_exist_options(options)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
include LegacyIndexName
|
87
|
+
|
88
|
+
def add_column(table_name, column_name, type, **options)
|
89
|
+
options[:_skip_validate_options] = true
|
90
|
+
super
|
91
|
+
end
|
92
|
+
|
93
|
+
def add_index(table_name, column_name, **options)
|
94
|
+
options[:name] = legacy_index_name(table_name, column_name) if options[:name].nil?
|
95
|
+
super
|
96
|
+
end
|
97
|
+
|
98
|
+
def create_table(table_name, **options)
|
99
|
+
options[:_uses_legacy_table_name] = true
|
100
|
+
options[:_skip_validate_options] = true
|
101
|
+
|
102
|
+
super
|
103
|
+
end
|
104
|
+
|
105
|
+
def rename_table(table_name, new_name, **options)
|
106
|
+
options[:_uses_legacy_table_name] = true
|
107
|
+
super
|
108
|
+
end
|
109
|
+
|
110
|
+
def change_column(table_name, column_name, type, **options)
|
111
|
+
options[:_skip_validate_options] = true
|
112
|
+
if connection.adapter_name == "Mysql2" || connection.adapter_name == "Trilogy"
|
113
|
+
options[:collation] ||= :no_collation
|
114
|
+
end
|
115
|
+
super
|
116
|
+
end
|
117
|
+
|
118
|
+
def change_column_null(table_name, column_name, null, default = nil)
|
119
|
+
super(table_name, column_name, !!null, default)
|
120
|
+
end
|
121
|
+
|
122
|
+
def disable_extension(name, **options)
|
123
|
+
if connection.adapter_name == "PostgreSQL"
|
124
|
+
options[:force] = :cascade
|
125
|
+
end
|
126
|
+
super
|
127
|
+
end
|
128
|
+
|
129
|
+
def add_foreign_key(from_table, to_table, **options)
|
130
|
+
if connection.adapter_name == "PostgreSQL" && options[:deferrable] == true
|
131
|
+
options[:deferrable] = :immediate
|
132
|
+
end
|
133
|
+
super
|
134
|
+
end
|
135
|
+
|
136
|
+
private
|
137
|
+
def compatible_table_definition(t)
|
138
|
+
class << t
|
139
|
+
prepend TableDefinition
|
140
|
+
end
|
141
|
+
super
|
142
|
+
end
|
143
|
+
end
|
34
144
|
|
35
145
|
class V6_1 < V7_0
|
36
146
|
class PostgreSQLCompat
|
@@ -56,12 +166,13 @@ module ActiveRecord
|
|
56
166
|
super
|
57
167
|
end
|
58
168
|
|
59
|
-
def
|
60
|
-
if
|
61
|
-
|
62
|
-
else
|
63
|
-
super
|
169
|
+
def change_column(table_name, column_name, type, **options)
|
170
|
+
if type == :datetime
|
171
|
+
options[:precision] ||= nil
|
64
172
|
end
|
173
|
+
|
174
|
+
type = PostgreSQLCompat.compatible_timestamp_type(type, connection)
|
175
|
+
super
|
65
176
|
end
|
66
177
|
|
67
178
|
module TableDefinition
|
@@ -70,10 +181,19 @@ module ActiveRecord
|
|
70
181
|
super
|
71
182
|
end
|
72
183
|
|
184
|
+
def change(name, type, index: nil, **options)
|
185
|
+
options[:precision] ||= nil
|
186
|
+
super
|
187
|
+
end
|
188
|
+
|
73
189
|
def column(name, type, index: nil, **options)
|
74
190
|
options[:precision] ||= nil
|
75
191
|
super
|
76
192
|
end
|
193
|
+
|
194
|
+
private
|
195
|
+
def raise_on_if_exist_options(options)
|
196
|
+
end
|
77
197
|
end
|
78
198
|
|
79
199
|
private
|
@@ -81,7 +201,7 @@ module ActiveRecord
|
|
81
201
|
class << t
|
82
202
|
prepend TableDefinition
|
83
203
|
end
|
84
|
-
|
204
|
+
super
|
85
205
|
end
|
86
206
|
end
|
87
207
|
|
@@ -94,9 +214,8 @@ module ActiveRecord
|
|
94
214
|
|
95
215
|
module TableDefinition
|
96
216
|
def references(*args, **options)
|
97
|
-
|
98
|
-
|
99
|
-
end
|
217
|
+
options[:_uses_legacy_reference_index_name] = true
|
218
|
+
super
|
100
219
|
end
|
101
220
|
alias :belongs_to :references
|
102
221
|
|
@@ -104,35 +223,19 @@ module ActiveRecord
|
|
104
223
|
options[:precision] ||= nil
|
105
224
|
super
|
106
225
|
end
|
107
|
-
end
|
108
226
|
|
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
|
227
|
+
private
|
228
|
+
def raise_on_if_exist_options(options)
|
229
|
+
end
|
123
230
|
end
|
124
231
|
|
125
|
-
def
|
126
|
-
if
|
127
|
-
|
128
|
-
else
|
129
|
-
super
|
232
|
+
def add_reference(table_name, ref_name, **options)
|
233
|
+
if connection.adapter_name == "SQLite"
|
234
|
+
options[:type] = :integer
|
130
235
|
end
|
131
|
-
end
|
132
236
|
|
133
|
-
|
134
|
-
|
135
|
-
.add_to(connection.update_table_definition(table_name, self))
|
237
|
+
options[:_uses_legacy_reference_index_name] = true
|
238
|
+
super
|
136
239
|
end
|
137
240
|
alias :add_belongs_to :add_reference
|
138
241
|
|
@@ -141,7 +244,7 @@ module ActiveRecord
|
|
141
244
|
class << t
|
142
245
|
prepend TableDefinition
|
143
246
|
end
|
144
|
-
|
247
|
+
super
|
145
248
|
end
|
146
249
|
end
|
147
250
|
|
@@ -156,6 +259,13 @@ module ActiveRecord
|
|
156
259
|
options[:precision] ||= nil
|
157
260
|
super
|
158
261
|
end
|
262
|
+
|
263
|
+
private
|
264
|
+
def raise_on_if_exist_options(options)
|
265
|
+
end
|
266
|
+
|
267
|
+
def raise_on_duplicate_column(name)
|
268
|
+
end
|
159
269
|
end
|
160
270
|
|
161
271
|
module CommandRecorder
|
@@ -172,30 +282,6 @@ module ActiveRecord
|
|
172
282
|
end
|
173
283
|
end
|
174
284
|
|
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
285
|
def add_timestamps(table_name, **options)
|
200
286
|
options[:precision] ||= nil
|
201
287
|
super
|
@@ -206,7 +292,7 @@ module ActiveRecord
|
|
206
292
|
class << t
|
207
293
|
prepend TableDefinition
|
208
294
|
end
|
209
|
-
|
295
|
+
super
|
210
296
|
end
|
211
297
|
|
212
298
|
def command_recorder
|
@@ -231,7 +317,7 @@ module ActiveRecord
|
|
231
317
|
end
|
232
318
|
|
233
319
|
def create_table(table_name, **options)
|
234
|
-
if connection.adapter_name == "Mysql2"
|
320
|
+
if connection.adapter_name == "Mysql2" || connection.adapter_name == "Trilogy"
|
235
321
|
super(table_name, options: "ENGINE=InnoDB", **options)
|
236
322
|
else
|
237
323
|
super
|
@@ -250,6 +336,10 @@ module ActiveRecord
|
|
250
336
|
super(*args, type: :integer, **options)
|
251
337
|
end
|
252
338
|
alias :belongs_to :references
|
339
|
+
|
340
|
+
private
|
341
|
+
def raise_on_if_exist_options(options)
|
342
|
+
end
|
253
343
|
end
|
254
344
|
|
255
345
|
def create_table(table_name, **options)
|
@@ -259,7 +349,7 @@ module ActiveRecord
|
|
259
349
|
end
|
260
350
|
end
|
261
351
|
|
262
|
-
unless connection.adapter_name
|
352
|
+
unless ["Mysql2", "Trilogy"].include?(connection.adapter_name) && options[:id] == :bigint
|
263
353
|
if [:integer, :bigint].include?(options[:id]) && !options.key?(:default)
|
264
354
|
options[:default] = nil
|
265
355
|
end
|
@@ -316,6 +406,10 @@ module ActiveRecord
|
|
316
406
|
options[:null] = true if options[:null].nil?
|
317
407
|
super
|
318
408
|
end
|
409
|
+
|
410
|
+
private
|
411
|
+
def raise_on_if_exist_options(options)
|
412
|
+
end
|
319
413
|
end
|
320
414
|
|
321
415
|
def add_reference(table_name, ref_name, **options)
|
@@ -0,0 +1,23 @@
|
|
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, *arguments, &block)
|
10
|
+
connection.send(method, *arguments, &block)
|
11
|
+
end
|
12
|
+
ruby2_keywords(:method_missing)
|
13
|
+
|
14
|
+
def respond_to_missing?(method, *)
|
15
|
+
connection.respond_to?(method) || super
|
16
|
+
end
|
17
|
+
|
18
|
+
def connection
|
19
|
+
migration.connection
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
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
|