activerecord 5.2.6 → 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +609 -622
- data/MIT-LICENSE +3 -1
- data/README.rdoc +4 -2
- data/examples/performance.rb +1 -1
- data/lib/active_record/aggregations.rb +4 -2
- data/lib/active_record/associations/association.rb +52 -19
- data/lib/active_record/associations/association_scope.rb +4 -6
- data/lib/active_record/associations/belongs_to_association.rb +36 -42
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +0 -4
- data/lib/active_record/associations/builder/association.rb +14 -18
- data/lib/active_record/associations/builder/belongs_to.rb +19 -52
- data/lib/active_record/associations/builder/collection_association.rb +3 -13
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +17 -38
- data/lib/active_record/associations/builder/has_many.rb +2 -0
- data/lib/active_record/associations/builder/has_one.rb +35 -1
- data/lib/active_record/associations/builder/singular_association.rb +2 -0
- data/lib/active_record/associations/collection_association.rb +6 -21
- data/lib/active_record/associations/collection_proxy.rb +12 -15
- data/lib/active_record/associations/foreign_association.rb +7 -0
- data/lib/active_record/associations/has_many_association.rb +2 -10
- data/lib/active_record/associations/has_many_through_association.rb +14 -14
- data/lib/active_record/associations/has_one_association.rb +28 -30
- data/lib/active_record/associations/has_one_through_association.rb +5 -5
- data/lib/active_record/associations/join_dependency/join_association.rb +9 -10
- data/lib/active_record/associations/join_dependency/join_part.rb +2 -2
- data/lib/active_record/associations/join_dependency.rb +24 -28
- data/lib/active_record/associations/preloader/association.rb +38 -36
- data/lib/active_record/associations/preloader/through_association.rb +48 -39
- data/lib/active_record/associations/preloader.rb +40 -32
- data/lib/active_record/associations/singular_association.rb +2 -16
- data/lib/active_record/associations.rb +19 -14
- data/lib/active_record/attribute_assignment.rb +7 -10
- data/lib/active_record/attribute_methods/before_type_cast.rb +4 -1
- data/lib/active_record/attribute_methods/dirty.rb +111 -40
- data/lib/active_record/attribute_methods/primary_key.rb +15 -22
- data/lib/active_record/attribute_methods/query.rb +2 -3
- data/lib/active_record/attribute_methods/read.rb +15 -53
- data/lib/active_record/attribute_methods/serialization.rb +1 -1
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +1 -1
- data/lib/active_record/attribute_methods/write.rb +17 -24
- data/lib/active_record/attribute_methods.rb +28 -100
- data/lib/active_record/attributes.rb +13 -0
- data/lib/active_record/autosave_association.rb +5 -9
- data/lib/active_record/base.rb +2 -3
- data/lib/active_record/callbacks.rb +5 -19
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +94 -16
- data/lib/active_record/connection_adapters/abstract/database_limits.rb +17 -4
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +95 -123
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +17 -8
- data/lib/active_record/connection_adapters/abstract/quoting.rb +68 -17
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +19 -12
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +76 -48
- data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +1 -3
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +132 -53
- data/lib/active_record/connection_adapters/abstract/transaction.rb +96 -56
- data/lib/active_record/connection_adapters/abstract_adapter.rb +180 -47
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +128 -194
- data/lib/active_record/connection_adapters/column.rb +17 -13
- data/lib/active_record/connection_adapters/connection_specification.rb +52 -42
- data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +6 -10
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +73 -13
- data/lib/active_record/connection_adapters/mysql/quoting.rb +44 -7
- data/lib/active_record/connection_adapters/mysql/schema_creation.rb +3 -4
- data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +40 -32
- data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +14 -6
- data/lib/active_record/connection_adapters/mysql/schema_statements.rb +129 -13
- data/lib/active_record/connection_adapters/mysql/type_metadata.rb +6 -10
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +26 -9
- data/lib/active_record/connection_adapters/postgresql/column.rb +17 -31
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +20 -1
- data/lib/active_record/connection_adapters/postgresql/oid/array.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +1 -4
- data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/money.rb +2 -2
- data/lib/active_record/connection_adapters/postgresql/oid/point.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/range.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +9 -7
- data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +6 -3
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +44 -7
- data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +12 -1
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +107 -91
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +55 -53
- data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +24 -27
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +160 -74
- data/lib/active_record/connection_adapters/schema_cache.rb +37 -14
- data/lib/active_record/connection_adapters/sql_type_metadata.rb +11 -8
- data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +118 -0
- data/lib/active_record/connection_adapters/sqlite3/quoting.rb +42 -6
- data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +42 -11
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +125 -141
- data/lib/active_record/connection_handling.rb +149 -27
- data/lib/active_record/core.rb +100 -60
- data/lib/active_record/counter_cache.rb +4 -29
- data/lib/active_record/database_configurations/database_config.rb +37 -0
- data/lib/active_record/database_configurations/hash_config.rb +50 -0
- data/lib/active_record/database_configurations/url_config.rb +79 -0
- data/lib/active_record/database_configurations.rb +233 -0
- data/lib/active_record/dynamic_matchers.rb +1 -1
- data/lib/active_record/enum.rb +37 -7
- data/lib/active_record/errors.rb +15 -7
- data/lib/active_record/explain.rb +1 -1
- data/lib/active_record/fixture_set/model_metadata.rb +33 -0
- data/lib/active_record/fixture_set/render_context.rb +17 -0
- data/lib/active_record/fixture_set/table_row.rb +153 -0
- data/lib/active_record/fixture_set/table_rows.rb +47 -0
- data/lib/active_record/fixtures.rb +145 -472
- data/lib/active_record/gem_version.rb +3 -3
- data/lib/active_record/inheritance.rb +13 -3
- data/lib/active_record/insert_all.rb +179 -0
- data/lib/active_record/integration.rb +68 -16
- data/lib/active_record/internal_metadata.rb +10 -2
- data/lib/active_record/locking/optimistic.rb +5 -6
- data/lib/active_record/locking/pessimistic.rb +3 -3
- data/lib/active_record/log_subscriber.rb +7 -26
- data/lib/active_record/middleware/database_selector/resolver/session.rb +45 -0
- data/lib/active_record/middleware/database_selector/resolver.rb +92 -0
- data/lib/active_record/middleware/database_selector.rb +75 -0
- data/lib/active_record/migration/command_recorder.rb +50 -6
- data/lib/active_record/migration/compatibility.rb +76 -49
- data/lib/active_record/migration.rb +100 -81
- data/lib/active_record/model_schema.rb +30 -9
- data/lib/active_record/nested_attributes.rb +2 -2
- data/lib/active_record/no_touching.rb +7 -0
- data/lib/active_record/persistence.rb +228 -24
- data/lib/active_record/query_cache.rb +11 -4
- data/lib/active_record/querying.rb +32 -20
- data/lib/active_record/railtie.rb +80 -43
- data/lib/active_record/railties/collection_cache_association_loading.rb +34 -0
- data/lib/active_record/railties/controller_runtime.rb +30 -35
- data/lib/active_record/railties/databases.rake +196 -46
- data/lib/active_record/reflection.rb +32 -30
- data/lib/active_record/relation/batches.rb +13 -10
- data/lib/active_record/relation/calculations.rb +53 -47
- data/lib/active_record/relation/delegation.rb +26 -43
- data/lib/active_record/relation/finder_methods.rb +13 -26
- data/lib/active_record/relation/merger.rb +11 -20
- data/lib/active_record/relation/predicate_builder/array_handler.rb +5 -4
- data/lib/active_record/relation/predicate_builder/association_query_value.rb +1 -4
- data/lib/active_record/relation/predicate_builder/base_handler.rb +1 -2
- data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +1 -2
- data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +1 -4
- data/lib/active_record/relation/predicate_builder/range_handler.rb +3 -23
- data/lib/active_record/relation/predicate_builder.rb +4 -6
- data/lib/active_record/relation/query_attribute.rb +13 -8
- data/lib/active_record/relation/query_methods.rb +189 -63
- data/lib/active_record/relation/spawn_methods.rb +1 -1
- data/lib/active_record/relation/where_clause.rb +14 -10
- data/lib/active_record/relation/where_clause_factory.rb +1 -2
- data/lib/active_record/relation.rb +310 -80
- data/lib/active_record/result.rb +30 -11
- data/lib/active_record/sanitization.rb +32 -40
- data/lib/active_record/schema.rb +2 -11
- data/lib/active_record/schema_dumper.rb +22 -7
- data/lib/active_record/schema_migration.rb +5 -1
- data/lib/active_record/scoping/default.rb +4 -5
- data/lib/active_record/scoping/named.rb +19 -15
- data/lib/active_record/scoping.rb +8 -8
- data/lib/active_record/statement_cache.rb +30 -3
- data/lib/active_record/store.rb +87 -8
- data/lib/active_record/table_metadata.rb +10 -17
- data/lib/active_record/tasks/database_tasks.rb +194 -25
- data/lib/active_record/tasks/mysql_database_tasks.rb +5 -5
- data/lib/active_record/tasks/postgresql_database_tasks.rb +5 -7
- data/lib/active_record/tasks/sqlite_database_tasks.rb +2 -8
- data/lib/active_record/test_databases.rb +23 -0
- data/lib/active_record/test_fixtures.rb +224 -0
- data/lib/active_record/timestamp.rb +39 -25
- data/lib/active_record/touch_later.rb +4 -2
- data/lib/active_record/transactions.rb +57 -66
- data/lib/active_record/translation.rb +1 -1
- data/lib/active_record/type/adapter_specific_registry.rb +1 -8
- data/lib/active_record/type.rb +3 -4
- data/lib/active_record/type_caster/connection.rb +15 -14
- data/lib/active_record/type_caster/map.rb +1 -4
- data/lib/active_record/validations/uniqueness.rb +15 -27
- data/lib/active_record/validations.rb +1 -0
- data/lib/active_record.rb +9 -2
- data/lib/arel/alias_predication.rb +9 -0
- data/lib/arel/attributes/attribute.rb +37 -0
- data/lib/arel/attributes.rb +22 -0
- data/lib/arel/collectors/bind.rb +24 -0
- data/lib/arel/collectors/composite.rb +31 -0
- data/lib/arel/collectors/plain_string.rb +20 -0
- data/lib/arel/collectors/sql_string.rb +20 -0
- data/lib/arel/collectors/substitute_binds.rb +28 -0
- data/lib/arel/crud.rb +42 -0
- data/lib/arel/delete_manager.rb +18 -0
- data/lib/arel/errors.rb +9 -0
- data/lib/arel/expressions.rb +29 -0
- data/lib/arel/factory_methods.rb +49 -0
- data/lib/arel/insert_manager.rb +49 -0
- data/lib/arel/math.rb +45 -0
- data/lib/arel/nodes/and.rb +32 -0
- data/lib/arel/nodes/ascending.rb +23 -0
- data/lib/arel/nodes/binary.rb +52 -0
- data/lib/arel/nodes/bind_param.rb +36 -0
- data/lib/arel/nodes/case.rb +55 -0
- data/lib/arel/nodes/casted.rb +50 -0
- data/lib/arel/nodes/comment.rb +29 -0
- data/lib/arel/nodes/count.rb +12 -0
- data/lib/arel/nodes/delete_statement.rb +45 -0
- data/lib/arel/nodes/descending.rb +23 -0
- data/lib/arel/nodes/equality.rb +18 -0
- data/lib/arel/nodes/extract.rb +24 -0
- data/lib/arel/nodes/false.rb +16 -0
- data/lib/arel/nodes/full_outer_join.rb +8 -0
- data/lib/arel/nodes/function.rb +44 -0
- data/lib/arel/nodes/grouping.rb +8 -0
- data/lib/arel/nodes/in.rb +8 -0
- data/lib/arel/nodes/infix_operation.rb +80 -0
- data/lib/arel/nodes/inner_join.rb +8 -0
- data/lib/arel/nodes/insert_statement.rb +37 -0
- data/lib/arel/nodes/join_source.rb +20 -0
- data/lib/arel/nodes/matches.rb +18 -0
- data/lib/arel/nodes/named_function.rb +23 -0
- data/lib/arel/nodes/node.rb +50 -0
- data/lib/arel/nodes/node_expression.rb +13 -0
- data/lib/arel/nodes/outer_join.rb +8 -0
- data/lib/arel/nodes/over.rb +15 -0
- data/lib/arel/nodes/regexp.rb +16 -0
- data/lib/arel/nodes/right_outer_join.rb +8 -0
- data/lib/arel/nodes/select_core.rb +67 -0
- data/lib/arel/nodes/select_statement.rb +41 -0
- data/lib/arel/nodes/sql_literal.rb +16 -0
- data/lib/arel/nodes/string_join.rb +11 -0
- data/lib/arel/nodes/table_alias.rb +27 -0
- data/lib/arel/nodes/terminal.rb +16 -0
- data/lib/arel/nodes/true.rb +16 -0
- data/lib/arel/nodes/unary.rb +45 -0
- data/lib/arel/nodes/unary_operation.rb +20 -0
- data/lib/arel/nodes/unqualified_column.rb +22 -0
- data/lib/arel/nodes/update_statement.rb +41 -0
- data/lib/arel/nodes/values_list.rb +9 -0
- data/lib/arel/nodes/window.rb +126 -0
- data/lib/arel/nodes/with.rb +11 -0
- data/lib/arel/nodes.rb +68 -0
- data/lib/arel/order_predications.rb +13 -0
- data/lib/arel/predications.rb +257 -0
- data/lib/arel/select_manager.rb +271 -0
- data/lib/arel/table.rb +110 -0
- data/lib/arel/tree_manager.rb +72 -0
- data/lib/arel/update_manager.rb +34 -0
- data/lib/arel/visitors/depth_first.rb +204 -0
- data/lib/arel/visitors/dot.rb +297 -0
- data/lib/arel/visitors/ibm_db.rb +34 -0
- data/lib/arel/visitors/informix.rb +62 -0
- data/lib/arel/visitors/mssql.rb +157 -0
- data/lib/arel/visitors/mysql.rb +83 -0
- data/lib/arel/visitors/oracle.rb +159 -0
- data/lib/arel/visitors/oracle12.rb +66 -0
- data/lib/arel/visitors/postgresql.rb +110 -0
- data/lib/arel/visitors/sqlite.rb +39 -0
- data/lib/arel/visitors/to_sql.rb +889 -0
- data/lib/arel/visitors/visitor.rb +46 -0
- data/lib/arel/visitors/where_sql.rb +23 -0
- data/lib/arel/visitors.rb +20 -0
- data/lib/arel/window_predications.rb +9 -0
- data/lib/arel.rb +51 -0
- data/lib/rails/generators/active_record/migration/migration_generator.rb +2 -5
- data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +1 -1
- data/lib/rails/generators/active_record/migration/templates/migration.rb.tt +4 -2
- data/lib/rails/generators/active_record/migration.rb +14 -1
- data/lib/rails/generators/active_record/model/model_generator.rb +1 -0
- data/lib/rails/generators/active_record/model/templates/model.rb.tt +10 -1
- metadata +108 -26
- data/lib/active_record/collection_cache_key.rb +0 -53
@@ -77,6 +77,10 @@ module ActiveRecord
|
|
77
77
|
ActiveSupport.on_load(:active_record) { self.logger ||= ::Rails.logger }
|
78
78
|
end
|
79
79
|
|
80
|
+
initializer "active_record.backtrace_cleaner" do
|
81
|
+
ActiveSupport.on_load(:active_record) { LogSubscriber.backtrace_cleaner = ::Rails.backtrace_cleaner }
|
82
|
+
end
|
83
|
+
|
80
84
|
initializer "active_record.migration_error" do
|
81
85
|
if config.active_record.delete(:migration_error) == :page_load
|
82
86
|
config.app_middleware.insert_after ::ActionDispatch::Callbacks,
|
@@ -84,6 +88,39 @@ module ActiveRecord
|
|
84
88
|
end
|
85
89
|
end
|
86
90
|
|
91
|
+
initializer "active_record.database_selector" do
|
92
|
+
if options = config.active_record.delete(:database_selector)
|
93
|
+
resolver = config.active_record.delete(:database_resolver)
|
94
|
+
operations = config.active_record.delete(:database_resolver_context)
|
95
|
+
config.app_middleware.use ActiveRecord::Middleware::DatabaseSelector, resolver, operations, options
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
initializer "Check for cache versioning support" do
|
100
|
+
config.after_initialize do |app|
|
101
|
+
ActiveSupport.on_load(:active_record) do
|
102
|
+
if app.config.active_record.cache_versioning && Rails.cache
|
103
|
+
unless Rails.cache.class.try(:supports_cache_versioning?)
|
104
|
+
raise <<-end_error
|
105
|
+
|
106
|
+
You're using a cache store that doesn't support native cache versioning.
|
107
|
+
Your best option is to upgrade to a newer version of #{Rails.cache.class}
|
108
|
+
that supports cache versioning (#{Rails.cache.class}.supports_cache_versioning? #=> true).
|
109
|
+
|
110
|
+
Next best, switch to a different cache store that does support cache versioning:
|
111
|
+
https://guides.rubyonrails.org/caching_with_rails.html#cache-stores.
|
112
|
+
|
113
|
+
To keep using the current cache store, you can turn off cache versioning entirely:
|
114
|
+
|
115
|
+
config.active_record.cache_versioning = false
|
116
|
+
|
117
|
+
end_error
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
87
124
|
initializer "active_record.check_schema_cache_dump" do
|
88
125
|
if config.active_record.delete(:use_schema_cache_dump)
|
89
126
|
config.after_initialize do |app|
|
@@ -97,7 +134,6 @@ module ActiveRecord
|
|
97
134
|
|
98
135
|
cache = YAML.load(File.read(filename))
|
99
136
|
if cache.version == current_version
|
100
|
-
connection.schema_cache = cache
|
101
137
|
connection_pool.schema_cache = cache.dup
|
102
138
|
else
|
103
139
|
warn "Ignoring db/schema_cache.yml because it has expired. The current schema version is #{current_version}, but the one in the cache is #{cache.version}."
|
@@ -108,6 +144,26 @@ module ActiveRecord
|
|
108
144
|
end
|
109
145
|
end
|
110
146
|
|
147
|
+
initializer "active_record.define_attribute_methods" do |app|
|
148
|
+
config.after_initialize do
|
149
|
+
ActiveSupport.on_load(:active_record) do
|
150
|
+
if app.config.eager_load
|
151
|
+
descendants.each do |model|
|
152
|
+
# SchemaMigration and InternalMetadata both override `table_exists?`
|
153
|
+
# to bypass the schema cache, so skip them to avoid the extra queries.
|
154
|
+
next if model._internal?
|
155
|
+
|
156
|
+
# If there's no connection yet, or the schema cache doesn't have the columns
|
157
|
+
# hash for the model cached, `define_attribute_methods` would trigger a query.
|
158
|
+
next unless model.connected? && model.connection.schema_cache.columns_hash?(model.table_name)
|
159
|
+
|
160
|
+
model.define_attribute_methods
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
111
167
|
initializer "active_record.warn_on_records_fetched_greater_than" do
|
112
168
|
if config.active_record.warn_on_records_fetched_greater_than
|
113
169
|
ActiveSupport.on_load(:active_record) do
|
@@ -118,8 +174,18 @@ module ActiveRecord
|
|
118
174
|
|
119
175
|
initializer "active_record.set_configs" do |app|
|
120
176
|
ActiveSupport.on_load(:active_record) do
|
121
|
-
configs = app.config.active_record
|
177
|
+
configs = app.config.active_record
|
178
|
+
|
179
|
+
represent_boolean_as_integer = configs.sqlite3.delete(:represent_boolean_as_integer)
|
180
|
+
|
181
|
+
unless represent_boolean_as_integer.nil?
|
182
|
+
ActiveSupport.on_load(:active_record_sqlite3adapter) do
|
183
|
+
ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer = represent_boolean_as_integer
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
122
187
|
configs.delete(:sqlite3)
|
188
|
+
|
123
189
|
configs.each do |k, v|
|
124
190
|
send "#{k}=", v
|
125
191
|
end
|
@@ -130,22 +196,9 @@ module ActiveRecord
|
|
130
196
|
# and then establishes the connection.
|
131
197
|
initializer "active_record.initialize_database" do
|
132
198
|
ActiveSupport.on_load(:active_record) do
|
199
|
+
self.connection_handlers = { writing_role => ActiveRecord::Base.default_connection_handler }
|
133
200
|
self.configurations = Rails.application.config.database_configuration
|
134
|
-
|
135
|
-
begin
|
136
|
-
establish_connection
|
137
|
-
rescue ActiveRecord::NoDatabaseError
|
138
|
-
warn <<-end_warning
|
139
|
-
Oops - You have a database configured, but it doesn't exist yet!
|
140
|
-
|
141
|
-
Here's how to get started:
|
142
|
-
|
143
|
-
1. Configure your database in config/database.yml.
|
144
|
-
2. Run `bin/rails db:create` to create the database.
|
145
|
-
3. Run `bin/rails db:setup` to load your database schema.
|
146
|
-
end_warning
|
147
|
-
raise
|
148
|
-
end
|
201
|
+
establish_connection
|
149
202
|
end
|
150
203
|
end
|
151
204
|
|
@@ -157,6 +210,13 @@ end_warning
|
|
157
210
|
end
|
158
211
|
end
|
159
212
|
|
213
|
+
initializer "active_record.collection_cache_association_loading" do
|
214
|
+
require "active_record/railties/collection_cache_association_loading"
|
215
|
+
ActiveSupport.on_load(:action_view) do
|
216
|
+
ActionView::PartialRenderer.prepend(ActiveRecord::Railties::CollectionCacheAssociationLoading)
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
160
220
|
initializer "active_record.set_reloader_hooks" do
|
161
221
|
ActiveSupport.on_load(:active_record) do
|
162
222
|
ActiveSupport::Reloader.before_class_unload do
|
@@ -194,32 +254,9 @@ end_warning
|
|
194
254
|
end
|
195
255
|
end
|
196
256
|
|
197
|
-
initializer "active_record.
|
198
|
-
|
199
|
-
|
200
|
-
represent_boolean_as_integer = Rails.application.config.active_record.sqlite3.delete(:represent_boolean_as_integer)
|
201
|
-
unless represent_boolean_as_integer.nil?
|
202
|
-
ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer = represent_boolean_as_integer
|
203
|
-
end
|
204
|
-
|
205
|
-
unless ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer
|
206
|
-
ActiveSupport::Deprecation.warn <<-MSG
|
207
|
-
Leaving `ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer`
|
208
|
-
set to false is deprecated. SQLite databases have used 't' and 'f' to serialize
|
209
|
-
boolean values and must have old data converted to 1 and 0 (its native boolean
|
210
|
-
serialization) before setting this flag to true. Conversion can be accomplished
|
211
|
-
by setting up a rake task which runs
|
212
|
-
|
213
|
-
ExampleModel.where("boolean_column = 't'").update_all(boolean_column: 1)
|
214
|
-
ExampleModel.where("boolean_column = 'f'").update_all(boolean_column: 0)
|
215
|
-
|
216
|
-
for all models and all boolean columns, after which the flag must be set to
|
217
|
-
true by adding the following to your application.rb file:
|
218
|
-
|
219
|
-
Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true
|
220
|
-
MSG
|
221
|
-
end
|
222
|
-
end
|
257
|
+
initializer "active_record.set_filter_attributes" do
|
258
|
+
ActiveSupport.on_load(:active_record) do
|
259
|
+
self.filter_attributes += Rails.application.config.filter_parameters
|
223
260
|
end
|
224
261
|
end
|
225
262
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module Railties # :nodoc:
|
5
|
+
module CollectionCacheAssociationLoading #:nodoc:
|
6
|
+
def setup(context, options, as, block)
|
7
|
+
@relation = relation_from_options(options)
|
8
|
+
|
9
|
+
super
|
10
|
+
end
|
11
|
+
|
12
|
+
def relation_from_options(cached: nil, partial: nil, collection: nil, **_)
|
13
|
+
return unless cached
|
14
|
+
|
15
|
+
relation = partial if partial.is_a?(ActiveRecord::Relation)
|
16
|
+
relation ||= collection if collection.is_a?(ActiveRecord::Relation)
|
17
|
+
|
18
|
+
if relation && !relation.loaded?
|
19
|
+
relation.skip_preloading!
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def collection_without_template(*)
|
24
|
+
@relation.preload_associations(@collection) if @relation
|
25
|
+
super
|
26
|
+
end
|
27
|
+
|
28
|
+
def collection_with_template(*)
|
29
|
+
@relation.preload_associations(@collection) if @relation
|
30
|
+
super
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -8,49 +8,44 @@ module ActiveRecord
|
|
8
8
|
module ControllerRuntime #:nodoc:
|
9
9
|
extend ActiveSupport::Concern
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def process_action(action, *args)
|
20
|
-
# We also need to reset the runtime before each action
|
21
|
-
# because of queries in middleware or in cases we are streaming
|
22
|
-
# and it won't be cleaned up by the method below.
|
23
|
-
ActiveRecord::LogSubscriber.reset_runtime
|
24
|
-
super
|
11
|
+
module ClassMethods # :nodoc:
|
12
|
+
def log_process_action(payload)
|
13
|
+
messages, db_runtime = super, payload[:db_runtime]
|
14
|
+
messages << ("ActiveRecord: %.1fms" % db_runtime.to_f) if db_runtime
|
15
|
+
messages
|
16
|
+
end
|
25
17
|
end
|
26
18
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
runtime
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
else
|
19
|
+
private
|
20
|
+
attr_internal :db_runtime
|
21
|
+
|
22
|
+
def process_action(action, *args)
|
23
|
+
# We also need to reset the runtime before each action
|
24
|
+
# because of queries in middleware or in cases we are streaming
|
25
|
+
# and it won't be cleaned up by the method below.
|
26
|
+
ActiveRecord::LogSubscriber.reset_runtime
|
36
27
|
super
|
37
28
|
end
|
38
|
-
end
|
39
29
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
30
|
+
def cleanup_view_runtime
|
31
|
+
if logger && logger.info? && ActiveRecord::Base.connected?
|
32
|
+
db_rt_before_render = ActiveRecord::LogSubscriber.reset_runtime
|
33
|
+
self.db_runtime = (db_runtime || 0) + db_rt_before_render
|
34
|
+
runtime = super
|
35
|
+
db_rt_after_render = ActiveRecord::LogSubscriber.reset_runtime
|
36
|
+
self.db_runtime += db_rt_after_render
|
37
|
+
runtime - db_rt_after_render
|
38
|
+
else
|
39
|
+
super
|
40
|
+
end
|
44
41
|
end
|
45
|
-
end
|
46
42
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
43
|
+
def append_info_to_payload(payload)
|
44
|
+
super
|
45
|
+
if ActiveRecord::Base.connected?
|
46
|
+
payload[:db_runtime] = (db_runtime || 0) + ActiveRecord::LogSubscriber.reset_runtime
|
47
|
+
end
|
52
48
|
end
|
53
|
-
end
|
54
49
|
end
|
55
50
|
end
|
56
51
|
end
|