activerecord 7.1.1 → 7.1.5

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.

Potentially problematic release.


This version of activerecord might be problematic. Click here for more details.

Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +496 -0
  3. data/README.rdoc +1 -0
  4. data/lib/active_record/associations/association.rb +2 -1
  5. data/lib/active_record/associations/belongs_to_association.rb +4 -4
  6. data/lib/active_record/associations/collection_association.rb +4 -4
  7. data/lib/active_record/associations/has_many_association.rb +2 -2
  8. data/lib/active_record/associations/has_one_association.rb +2 -2
  9. data/lib/active_record/associations/join_dependency/join_association.rb +3 -2
  10. data/lib/active_record/associations/join_dependency.rb +10 -12
  11. data/lib/active_record/associations/preloader/association.rb +4 -1
  12. data/lib/active_record/associations.rb +21 -15
  13. data/lib/active_record/attribute_methods/before_type_cast.rb +1 -1
  14. data/lib/active_record/attribute_methods/dirty.rb +15 -11
  15. data/lib/active_record/attribute_methods/read.rb +3 -3
  16. data/lib/active_record/attribute_methods/time_zone_conversion.rb +4 -0
  17. data/lib/active_record/attribute_methods/write.rb +3 -3
  18. data/lib/active_record/attribute_methods.rb +47 -7
  19. data/lib/active_record/autosave_association.rb +5 -2
  20. data/lib/active_record/callbacks.rb +2 -2
  21. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +19 -9
  22. data/lib/active_record/connection_adapters/abstract/database_statements.rb +5 -3
  23. data/lib/active_record/connection_adapters/abstract/query_cache.rb +2 -1
  24. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +8 -4
  25. data/lib/active_record/connection_adapters/abstract_adapter.rb +27 -19
  26. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +37 -13
  27. data/lib/active_record/connection_adapters/mysql/schema_statements.rb +2 -1
  28. data/lib/active_record/connection_adapters/mysql2/database_statements.rb +3 -0
  29. data/lib/active_record/connection_adapters/mysql2_adapter.rb +16 -10
  30. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +4 -1
  31. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +6 -0
  32. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +3 -2
  33. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +15 -6
  34. data/lib/active_record/connection_adapters/postgresql_adapter.rb +32 -33
  35. data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +10 -3
  36. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +2 -2
  37. data/lib/active_record/connection_adapters/trilogy/database_statements.rb +1 -0
  38. data/lib/active_record/connection_adapters/trilogy_adapter.rb +25 -21
  39. data/lib/active_record/connection_handling.rb +1 -1
  40. data/lib/active_record/core.rb +49 -10
  41. data/lib/active_record/counter_cache.rb +7 -3
  42. data/lib/active_record/database_configurations/connection_url_resolver.rb +1 -1
  43. data/lib/active_record/database_configurations/hash_config.rb +6 -2
  44. data/lib/active_record/delegated_type.rb +7 -7
  45. data/lib/active_record/destroy_association_async_job.rb +1 -1
  46. data/lib/active_record/encryption/encryptable_record.rb +7 -1
  47. data/lib/active_record/encryption/encrypted_attribute_type.rb +6 -2
  48. data/lib/active_record/encryption/extended_deterministic_queries.rb +0 -15
  49. data/lib/active_record/encryption/scheme.rb +8 -4
  50. data/lib/active_record/encryption.rb +2 -0
  51. data/lib/active_record/enum.rb +6 -9
  52. data/lib/active_record/errors.rb +5 -4
  53. data/lib/active_record/fixtures.rb +16 -0
  54. data/lib/active_record/future_result.rb +10 -0
  55. data/lib/active_record/gem_version.rb +1 -1
  56. data/lib/active_record/insert_all.rb +3 -3
  57. data/lib/active_record/internal_metadata.rb +1 -1
  58. data/lib/active_record/locking/optimistic.rb +1 -1
  59. data/lib/active_record/marshalling.rb +4 -1
  60. data/lib/active_record/message_pack.rb +1 -1
  61. data/lib/active_record/middleware/database_selector.rb +1 -1
  62. data/lib/active_record/migration/compatibility.rb +14 -0
  63. data/lib/active_record/migration/pending_migration_connection.rb +21 -0
  64. data/lib/active_record/migration.rb +9 -5
  65. data/lib/active_record/model_schema.rb +12 -7
  66. data/lib/active_record/nested_attributes.rb +16 -5
  67. data/lib/active_record/normalization.rb +8 -0
  68. data/lib/active_record/persistence.rb +6 -5
  69. data/lib/active_record/promise.rb +1 -1
  70. data/lib/active_record/query_cache.rb +1 -1
  71. data/lib/active_record/query_logs_formatter.rb +1 -1
  72. data/lib/active_record/railtie.rb +14 -14
  73. data/lib/active_record/railties/controller_runtime.rb +2 -1
  74. data/lib/active_record/railties/databases.rake +7 -7
  75. data/lib/active_record/reflection.rb +21 -3
  76. data/lib/active_record/relation/calculations.rb +28 -1
  77. data/lib/active_record/relation/delegation.rb +1 -1
  78. data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +6 -1
  79. data/lib/active_record/relation/query_methods.rb +21 -7
  80. data/lib/active_record/relation.rb +30 -5
  81. data/lib/active_record/result.rb +1 -1
  82. data/lib/active_record/runtime_registry.rb +15 -1
  83. data/lib/active_record/schema_migration.rb +1 -1
  84. data/lib/active_record/secure_token.rb +1 -1
  85. data/lib/active_record/tasks/database_tasks.rb +35 -13
  86. data/lib/active_record/test_fixtures.rb +1 -0
  87. data/lib/active_record/timestamp.rb +3 -1
  88. data/lib/active_record.rb +2 -2
  89. data/lib/arel/nodes/homogeneous_in.rb +1 -1
  90. data/lib/arel/tree_manager.rb +5 -1
  91. data/lib/arel/visitors/to_sql.rb +2 -1
  92. metadata +14 -13
@@ -125,11 +125,11 @@ module ActiveRecord
125
125
  end
126
126
 
127
127
  def create_all
128
- db_config = migration_connection.pool.db_config
129
-
130
- each_local_configuration { |db_config| create(db_config) }
131
-
132
- migration_class.establish_connection(db_config)
128
+ each_local_configuration do |db_config|
129
+ with_temporary_connection(db_config) do
130
+ create(db_config)
131
+ end
132
+ end
133
133
  end
134
134
 
135
135
  def setup_initial_database_yaml # :nodoc:
@@ -175,6 +175,7 @@ module ActiveRecord
175
175
 
176
176
  def prepare_all
177
177
  seed = false
178
+ dump_db_configs = []
178
179
 
179
180
  each_current_configuration(env) do |db_config|
180
181
  with_temporary_pool(db_config) do
@@ -192,9 +193,27 @@ module ActiveRecord
192
193
 
193
194
  seed = true
194
195
  end
196
+ end
197
+ end
198
+
199
+ each_current_environment(env) do |environment|
200
+ db_configs_with_versions(environment).sort.each do |version, db_configs|
201
+ dump_db_configs |= db_configs
195
202
 
196
- migrate
197
- dump_schema(db_config) if ActiveRecord.dump_schema_after_migration
203
+ db_configs.each do |db_config|
204
+ with_temporary_pool(db_config) do
205
+ migrate(version)
206
+ end
207
+ end
208
+ end
209
+ end
210
+
211
+ # Dump schema for databases that were migrated.
212
+ if ActiveRecord.dump_schema_after_migration
213
+ dump_db_configs.each do |db_config|
214
+ with_temporary_pool(db_config) do
215
+ dump_schema(db_config)
216
+ end
198
217
  end
199
218
  end
200
219
 
@@ -255,10 +274,10 @@ module ActiveRecord
255
274
  Migration.verbose = verbose_was
256
275
  end
257
276
 
258
- def db_configs_with_versions(db_configs) # :nodoc:
277
+ def db_configs_with_versions(environment = env) # :nodoc:
259
278
  db_configs_with_versions = Hash.new { |h, k| h[k] = [] }
260
279
 
261
- with_temporary_connection_for_each do |conn|
280
+ with_temporary_connection_for_each(env: environment) do |conn|
262
281
  db_config = conn.pool.db_config
263
282
  versions_to_run = conn.migration_context.pending_migration_versions
264
283
  target_version = ActiveRecord::Tasks::DatabaseTasks.target_version
@@ -552,10 +571,7 @@ module ActiveRecord
552
571
  end
553
572
 
554
573
  def each_current_configuration(environment, name = nil)
555
- environments = [environment]
556
- environments << "test" if environment == "development" && !ENV["SKIP_TEST_DATABASE"] && !ENV["DATABASE_URL"]
557
-
558
- environments.each do |env|
574
+ each_current_environment(environment) do |env|
559
575
  configs_for(env_name: env).each do |db_config|
560
576
  next if name && name != db_config.name
561
577
 
@@ -564,6 +580,12 @@ module ActiveRecord
564
580
  end
565
581
  end
566
582
 
583
+ def each_current_environment(environment, &block)
584
+ environments = [environment]
585
+ environments << "test" if environment == "development" && !ENV["SKIP_TEST_DATABASE"] && !ENV["DATABASE_URL"]
586
+ environments.each(&block)
587
+ end
588
+
567
589
  def each_local_configuration
568
590
  configs_for.each do |db_config|
569
591
  next unless db_config.database
@@ -13,6 +13,7 @@ module ActiveRecord
13
13
 
14
14
  def after_teardown # :nodoc:
15
15
  super
16
+ ensure
16
17
  teardown_fixtures
17
18
  end
18
19
 
@@ -54,8 +54,10 @@ module ActiveRecord
54
54
 
55
55
  module ClassMethods # :nodoc:
56
56
  def touch_attributes_with_time(*names, time: nil)
57
+ names = names.map(&:to_s)
58
+ names = names.map { |name| attribute_aliases[name] || name }
57
59
  attribute_names = timestamp_attributes_for_update_in_model
58
- attribute_names |= names.map(&:to_s)
60
+ attribute_names |= names
59
61
  attribute_names.index_with(time || current_time_from_proper_timezone)
60
62
  end
61
63
 
data/lib/active_record.rb CHANGED
@@ -34,7 +34,7 @@ require "active_record/deprecator"
34
34
  require "active_model/attribute_set"
35
35
  require "active_record/errors"
36
36
 
37
- # :include: activerecord/README.rdoc
37
+ # :include: ../README.rdoc
38
38
  module ActiveRecord
39
39
  extend ActiveSupport::Autoload
40
40
 
@@ -277,7 +277,7 @@ module ActiveRecord
277
277
  # with the global thread pool async query executor.
278
278
  def self.global_executor_concurrency=(global_executor_concurrency)
279
279
  if self.async_query_executor.nil? || self.async_query_executor == :multi_thread_pool
280
- raise ArgumentError, "`global_executor_concurrency` cannot be set when using the executor is nil or set to multi_thead_pool. For multiple thread pools, please set the concurrency in your database configuration."
280
+ raise ArgumentError, "`global_executor_concurrency` cannot be set when the executor is nil or set to `:multi_thread_pool`. For multiple thread pools, please set the concurrency in your database configuration."
281
281
  end
282
282
 
283
283
  @global_executor_concurrency = global_executor_concurrency
@@ -48,7 +48,7 @@ module Arel # :nodoc: all
48
48
  end
49
49
 
50
50
  def proc_for_binds
51
- -> value { ActiveModel::Attribute.with_cast_value(attribute.name, value, attribute.type_caster) }
51
+ -> value { ActiveModel::Attribute.with_cast_value(attribute.name, value, ActiveModel::Type.default_value) }
52
52
  end
53
53
 
54
54
  def fetch_attribute(&block)
@@ -21,7 +21,11 @@ module Arel # :nodoc: all
21
21
  end
22
22
 
23
23
  def key=(key)
24
- @ast.key = Nodes.build_quoted(key)
24
+ @ast.key = if key.is_a?(Array)
25
+ key.map { |k| Nodes.build_quoted(k) }
26
+ else
27
+ Nodes.build_quoted(key)
28
+ end
25
29
  end
26
30
 
27
31
  def key
@@ -930,7 +930,8 @@ module Arel # :nodoc: all
930
930
  stmt.limit = nil
931
931
  stmt.offset = nil
932
932
  stmt.orders = []
933
- stmt.wheres = [Nodes::In.new(o.key, [build_subselect(o.key, o)])]
933
+ columns = Arel::Nodes::Grouping.new(o.key)
934
+ stmt.wheres = [Nodes::In.new(columns, [build_subselect(o.key, o)])]
934
935
  stmt.relation = o.relation.left if has_join_sources?(o)
935
936
  stmt.groups = o.groups unless o.groups.empty?
936
937
  stmt.havings = o.havings unless o.havings.empty?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.1.1
4
+ version: 7.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-11 00:00:00.000000000 Z
11
+ date: 2024-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 7.1.1
19
+ version: 7.1.5
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 7.1.1
26
+ version: 7.1.5
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activemodel
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 7.1.1
33
+ version: 7.1.5
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 7.1.1
40
+ version: 7.1.5
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: timeout
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -279,6 +279,7 @@ files:
279
279
  - lib/active_record/migration/default_strategy.rb
280
280
  - lib/active_record/migration/execution_strategy.rb
281
281
  - lib/active_record/migration/join_table.rb
282
+ - lib/active_record/migration/pending_migration_connection.rb
282
283
  - lib/active_record/model_schema.rb
283
284
  - lib/active_record/nested_attributes.rb
284
285
  - lib/active_record/no_touching.rb
@@ -469,12 +470,12 @@ licenses:
469
470
  - MIT
470
471
  metadata:
471
472
  bug_tracker_uri: https://github.com/rails/rails/issues
472
- changelog_uri: https://github.com/rails/rails/blob/v7.1.1/activerecord/CHANGELOG.md
473
- documentation_uri: https://api.rubyonrails.org/v7.1.1/
473
+ changelog_uri: https://github.com/rails/rails/blob/v7.1.5/activerecord/CHANGELOG.md
474
+ documentation_uri: https://api.rubyonrails.org/v7.1.5/
474
475
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
475
- source_code_uri: https://github.com/rails/rails/tree/v7.1.1/activerecord
476
+ source_code_uri: https://github.com/rails/rails/tree/v7.1.5/activerecord
476
477
  rubygems_mfa_required: 'true'
477
- post_install_message:
478
+ post_install_message:
478
479
  rdoc_options:
479
480
  - "--main"
480
481
  - README.rdoc
@@ -491,8 +492,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
491
492
  - !ruby/object:Gem::Version
492
493
  version: '0'
493
494
  requirements: []
494
- rubygems_version: 3.4.18
495
- signing_key:
495
+ rubygems_version: 3.5.16
496
+ signing_key:
496
497
  specification_version: 4
497
498
  summary: Object-relational mapper framework (part of Rails).
498
499
  test_files: []