activerecord 7.1.3.4 → 7.2.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.
Files changed (196) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +652 -2032
  3. data/README.rdoc +15 -15
  4. data/examples/performance.rb +2 -2
  5. data/lib/active_record/association_relation.rb +1 -1
  6. data/lib/active_record/associations/alias_tracker.rb +25 -19
  7. data/lib/active_record/associations/association.rb +15 -8
  8. data/lib/active_record/associations/belongs_to_association.rb +18 -11
  9. data/lib/active_record/associations/belongs_to_polymorphic_association.rb +3 -2
  10. data/lib/active_record/associations/builder/belongs_to.rb +1 -0
  11. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +2 -2
  12. data/lib/active_record/associations/builder/has_many.rb +3 -4
  13. data/lib/active_record/associations/builder/has_one.rb +3 -4
  14. data/lib/active_record/associations/collection_association.rb +11 -5
  15. data/lib/active_record/associations/collection_proxy.rb +14 -1
  16. data/lib/active_record/associations/errors.rb +265 -0
  17. data/lib/active_record/associations/has_many_association.rb +3 -3
  18. data/lib/active_record/associations/has_many_through_association.rb +7 -1
  19. data/lib/active_record/associations/has_one_association.rb +2 -2
  20. data/lib/active_record/associations/join_dependency/join_association.rb +30 -27
  21. data/lib/active_record/associations/join_dependency.rb +10 -12
  22. data/lib/active_record/associations/nested_error.rb +47 -0
  23. data/lib/active_record/associations/preloader/association.rb +2 -1
  24. data/lib/active_record/associations/preloader/branch.rb +7 -1
  25. data/lib/active_record/associations/preloader/through_association.rb +1 -3
  26. data/lib/active_record/associations/singular_association.rb +6 -0
  27. data/lib/active_record/associations/through_association.rb +1 -1
  28. data/lib/active_record/associations.rb +62 -289
  29. data/lib/active_record/attribute_assignment.rb +0 -2
  30. data/lib/active_record/attribute_methods/composite_primary_key.rb +84 -0
  31. data/lib/active_record/attribute_methods/dirty.rb +2 -2
  32. data/lib/active_record/attribute_methods/primary_key.rb +23 -55
  33. data/lib/active_record/attribute_methods/read.rb +4 -16
  34. data/lib/active_record/attribute_methods/serialization.rb +4 -24
  35. data/lib/active_record/attribute_methods/time_zone_conversion.rb +11 -6
  36. data/lib/active_record/attribute_methods/write.rb +3 -3
  37. data/lib/active_record/attribute_methods.rb +89 -58
  38. data/lib/active_record/attributes.rb +61 -47
  39. data/lib/active_record/autosave_association.rb +17 -31
  40. data/lib/active_record/base.rb +2 -3
  41. data/lib/active_record/callbacks.rb +1 -1
  42. data/lib/active_record/connection_adapters/abstract/connection_handler.rb +24 -107
  43. data/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb +1 -0
  44. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +270 -58
  45. data/lib/active_record/connection_adapters/abstract/database_statements.rb +35 -18
  46. data/lib/active_record/connection_adapters/abstract/query_cache.rb +190 -75
  47. data/lib/active_record/connection_adapters/abstract/quoting.rb +65 -91
  48. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +1 -1
  49. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +23 -10
  50. data/lib/active_record/connection_adapters/abstract/transaction.rb +125 -62
  51. data/lib/active_record/connection_adapters/abstract_adapter.rb +38 -59
  52. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +73 -19
  53. data/lib/active_record/connection_adapters/mysql/database_statements.rb +9 -1
  54. data/lib/active_record/connection_adapters/mysql/quoting.rb +43 -48
  55. data/lib/active_record/connection_adapters/mysql/schema_statements.rb +8 -1
  56. data/lib/active_record/connection_adapters/mysql2/database_statements.rb +16 -15
  57. data/lib/active_record/connection_adapters/mysql2_adapter.rb +20 -32
  58. data/lib/active_record/connection_adapters/pool_config.rb +7 -6
  59. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +27 -4
  60. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +6 -0
  61. data/lib/active_record/connection_adapters/postgresql/oid/interval.rb +1 -1
  62. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +14 -4
  63. data/lib/active_record/connection_adapters/postgresql/quoting.rb +58 -58
  64. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +20 -0
  65. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +18 -12
  66. data/lib/active_record/connection_adapters/postgresql_adapter.rb +29 -24
  67. data/lib/active_record/connection_adapters/schema_cache.rb +123 -128
  68. data/lib/active_record/connection_adapters/sqlite3/column.rb +14 -1
  69. data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +10 -6
  70. data/lib/active_record/connection_adapters/sqlite3/quoting.rb +44 -46
  71. data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +22 -0
  72. data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +13 -0
  73. data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +16 -0
  74. data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +25 -2
  75. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +127 -77
  76. data/lib/active_record/connection_adapters/trilogy/database_statements.rb +15 -15
  77. data/lib/active_record/connection_adapters/trilogy_adapter.rb +32 -65
  78. data/lib/active_record/connection_adapters.rb +121 -0
  79. data/lib/active_record/connection_handling.rb +56 -41
  80. data/lib/active_record/core.rb +93 -40
  81. data/lib/active_record/counter_cache.rb +23 -10
  82. data/lib/active_record/database_configurations/connection_url_resolver.rb +8 -3
  83. data/lib/active_record/database_configurations/database_config.rb +19 -4
  84. data/lib/active_record/database_configurations/hash_config.rb +44 -36
  85. data/lib/active_record/database_configurations/url_config.rb +20 -1
  86. data/lib/active_record/database_configurations.rb +1 -1
  87. data/lib/active_record/delegated_type.rb +30 -6
  88. data/lib/active_record/destroy_association_async_job.rb +1 -1
  89. data/lib/active_record/dynamic_matchers.rb +2 -2
  90. data/lib/active_record/encryption/encryptable_record.rb +3 -3
  91. data/lib/active_record/encryption/encrypted_attribute_type.rb +26 -6
  92. data/lib/active_record/encryption/encryptor.rb +18 -3
  93. data/lib/active_record/encryption/key_provider.rb +1 -1
  94. data/lib/active_record/encryption/message_pack_message_serializer.rb +76 -0
  95. data/lib/active_record/encryption/message_serializer.rb +4 -0
  96. data/lib/active_record/encryption/null_encryptor.rb +4 -0
  97. data/lib/active_record/encryption/read_only_null_encryptor.rb +4 -0
  98. data/lib/active_record/encryption/scheme.rb +8 -4
  99. data/lib/active_record/encryption.rb +2 -0
  100. data/lib/active_record/enum.rb +19 -2
  101. data/lib/active_record/errors.rb +46 -20
  102. data/lib/active_record/explain.rb +13 -24
  103. data/lib/active_record/fixtures.rb +37 -31
  104. data/lib/active_record/future_result.rb +17 -4
  105. data/lib/active_record/gem_version.rb +3 -3
  106. data/lib/active_record/inheritance.rb +4 -2
  107. data/lib/active_record/insert_all.rb +18 -15
  108. data/lib/active_record/integration.rb +4 -1
  109. data/lib/active_record/internal_metadata.rb +48 -34
  110. data/lib/active_record/locking/optimistic.rb +8 -7
  111. data/lib/active_record/log_subscriber.rb +0 -21
  112. data/lib/active_record/marshalling.rb +4 -1
  113. data/lib/active_record/message_pack.rb +2 -2
  114. data/lib/active_record/migration/command_recorder.rb +2 -3
  115. data/lib/active_record/migration/compatibility.rb +11 -3
  116. data/lib/active_record/migration/default_strategy.rb +4 -5
  117. data/lib/active_record/migration/pending_migration_connection.rb +2 -2
  118. data/lib/active_record/migration.rb +85 -76
  119. data/lib/active_record/model_schema.rb +38 -70
  120. data/lib/active_record/nested_attributes.rb +24 -5
  121. data/lib/active_record/normalization.rb +3 -7
  122. data/lib/active_record/persistence.rb +32 -354
  123. data/lib/active_record/query_cache.rb +19 -8
  124. data/lib/active_record/query_logs.rb +15 -0
  125. data/lib/active_record/query_logs_formatter.rb +1 -1
  126. data/lib/active_record/querying.rb +21 -9
  127. data/lib/active_record/railtie.rb +50 -68
  128. data/lib/active_record/railties/controller_runtime.rb +13 -4
  129. data/lib/active_record/railties/databases.rake +42 -45
  130. data/lib/active_record/reflection.rb +106 -38
  131. data/lib/active_record/relation/batches/batch_enumerator.rb +15 -2
  132. data/lib/active_record/relation/batches.rb +14 -8
  133. data/lib/active_record/relation/calculations.rb +96 -63
  134. data/lib/active_record/relation/delegation.rb +8 -11
  135. data/lib/active_record/relation/finder_methods.rb +16 -2
  136. data/lib/active_record/relation/merger.rb +4 -6
  137. data/lib/active_record/relation/predicate_builder/array_handler.rb +2 -2
  138. data/lib/active_record/relation/predicate_builder/association_query_value.rb +9 -3
  139. data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +6 -1
  140. data/lib/active_record/relation/predicate_builder.rb +3 -3
  141. data/lib/active_record/relation/query_methods.rb +245 -65
  142. data/lib/active_record/relation/record_fetch_warning.rb +3 -0
  143. data/lib/active_record/relation/spawn_methods.rb +2 -18
  144. data/lib/active_record/relation/where_clause.rb +7 -19
  145. data/lib/active_record/relation.rb +500 -66
  146. data/lib/active_record/result.rb +32 -45
  147. data/lib/active_record/runtime_registry.rb +39 -0
  148. data/lib/active_record/sanitization.rb +24 -19
  149. data/lib/active_record/schema.rb +8 -6
  150. data/lib/active_record/schema_dumper.rb +19 -9
  151. data/lib/active_record/schema_migration.rb +30 -14
  152. data/lib/active_record/scoping/named.rb +1 -0
  153. data/lib/active_record/signed_id.rb +20 -1
  154. data/lib/active_record/statement_cache.rb +7 -7
  155. data/lib/active_record/table_metadata.rb +1 -10
  156. data/lib/active_record/tasks/database_tasks.rb +98 -48
  157. data/lib/active_record/tasks/mysql_database_tasks.rb +1 -1
  158. data/lib/active_record/tasks/postgresql_database_tasks.rb +1 -1
  159. data/lib/active_record/tasks/sqlite_database_tasks.rb +2 -1
  160. data/lib/active_record/test_fixtures.rb +87 -89
  161. data/lib/active_record/testing/query_assertions.rb +121 -0
  162. data/lib/active_record/timestamp.rb +5 -3
  163. data/lib/active_record/token_for.rb +22 -12
  164. data/lib/active_record/touch_later.rb +1 -1
  165. data/lib/active_record/transaction.rb +132 -0
  166. data/lib/active_record/transactions.rb +70 -14
  167. data/lib/active_record/translation.rb +0 -2
  168. data/lib/active_record/type/serialized.rb +1 -3
  169. data/lib/active_record/type_caster/connection.rb +4 -4
  170. data/lib/active_record/validations/associated.rb +9 -3
  171. data/lib/active_record/validations/uniqueness.rb +15 -10
  172. data/lib/active_record/validations.rb +4 -1
  173. data/lib/active_record.rb +150 -41
  174. data/lib/arel/alias_predication.rb +1 -1
  175. data/lib/arel/collectors/bind.rb +2 -0
  176. data/lib/arel/collectors/composite.rb +7 -0
  177. data/lib/arel/collectors/sql_string.rb +1 -1
  178. data/lib/arel/collectors/substitute_binds.rb +1 -1
  179. data/lib/arel/nodes/binary.rb +0 -6
  180. data/lib/arel/nodes/bound_sql_literal.rb +9 -5
  181. data/lib/arel/nodes/{and.rb → nary.rb} +5 -2
  182. data/lib/arel/nodes/node.rb +4 -3
  183. data/lib/arel/nodes/sql_literal.rb +7 -0
  184. data/lib/arel/nodes.rb +2 -2
  185. data/lib/arel/predications.rb +1 -1
  186. data/lib/arel/select_manager.rb +1 -1
  187. data/lib/arel/tree_manager.rb +8 -3
  188. data/lib/arel/update_manager.rb +2 -1
  189. data/lib/arel/visitors/dot.rb +1 -0
  190. data/lib/arel/visitors/mysql.rb +9 -4
  191. data/lib/arel/visitors/postgresql.rb +1 -12
  192. data/lib/arel/visitors/sqlite.rb +25 -0
  193. data/lib/arel/visitors/to_sql.rb +31 -17
  194. data/lib/arel.rb +7 -3
  195. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +4 -1
  196. metadata +21 -15
@@ -63,7 +63,7 @@ module Arel # :nodoc: all
63
63
 
64
64
  def visit_Arel_Nodes_Lateral(o, collector)
65
65
  collector << "LATERAL "
66
- grouping_parentheses o, collector
66
+ grouping_parentheses o.expr, collector
67
67
  end
68
68
 
69
69
  def visit_Arel_Nodes_IsNotDistinctFrom(o, collector)
@@ -83,17 +83,6 @@ module Arel # :nodoc: all
83
83
 
84
84
  def bind_block; BIND_BLOCK; end
85
85
 
86
- # Used by Lateral visitor to enclose select queries in parentheses
87
- def grouping_parentheses(o, collector)
88
- if o.expr.is_a? Nodes::SelectStatement
89
- collector << "("
90
- visit o.expr, collector
91
- collector << ")"
92
- else
93
- visit o.expr, collector
94
- end
95
- end
96
-
97
86
  # Utilized by GroupingSet, Cube & RollUp visitors to
98
87
  # handle grouping aggregation semantics
99
88
  def grouping_array_or_grouping_element(o, collector)
@@ -33,6 +33,31 @@ module Arel # :nodoc: all
33
33
  collector << " IS NOT "
34
34
  visit o.right, collector
35
35
  end
36
+
37
+ # Queries used in UNION should not be wrapped by parentheses,
38
+ # because it is an invalid syntax in SQLite.
39
+ def infix_value_with_paren(o, collector, value, suppress_parens = false)
40
+ collector << "( " unless suppress_parens
41
+
42
+ left = o.left.is_a?(Nodes::Grouping) ? o.left.expr : o.left
43
+ collector = if left.class == o.class
44
+ infix_value_with_paren(left, collector, value, true)
45
+ else
46
+ grouping_parentheses left, collector, false
47
+ end
48
+
49
+ collector << value
50
+
51
+ right = o.right.is_a?(Nodes::Grouping) ? o.right.expr : o.right
52
+ collector = if right.class == o.class
53
+ infix_value_with_paren(right, collector, value, true)
54
+ else
55
+ grouping_parentheses right, collector, false
56
+ end
57
+
58
+ collector << " )" unless suppress_parens
59
+ collector
60
+ end
36
61
  end
37
62
  end
38
63
  end
@@ -20,6 +20,7 @@ module Arel # :nodoc: all
20
20
 
21
21
  private
22
22
  def visit_Arel_Nodes_DeleteStatement(o, collector)
23
+ collector.retryable = false
23
24
  o = prepare_delete_statement(o)
24
25
 
25
26
  if has_join_sources?(o)
@@ -37,6 +38,7 @@ module Arel # :nodoc: all
37
38
  end
38
39
 
39
40
  def visit_Arel_Nodes_UpdateStatement(o, collector)
41
+ collector.retryable = false
40
42
  o = prepare_update_statement(o)
41
43
 
42
44
  collector << "UPDATE "
@@ -49,6 +51,7 @@ module Arel # :nodoc: all
49
51
  end
50
52
 
51
53
  def visit_Arel_Nodes_InsertStatement(o, collector)
54
+ collector.retryable = false
52
55
  collector << "INSERT INTO "
53
56
  collector = visit o.relation, collector
54
57
 
@@ -381,6 +384,7 @@ module Arel # :nodoc: all
381
384
  end
382
385
 
383
386
  def visit_Arel_Nodes_NamedFunction(o, collector)
387
+ collector.retryable = false
384
388
  collector << o.name
385
389
  collector << "("
386
390
  collector << "DISTINCT " if o.distinct
@@ -582,10 +586,11 @@ module Arel # :nodoc: all
582
586
  end
583
587
 
584
588
  def visit_Arel_Nodes_In(o, collector)
585
- collector.preparable = false
586
589
  attr, values = o.left, o.right
587
590
 
588
591
  if Array === values
592
+ collector.preparable = false
593
+
589
594
  unless values.empty?
590
595
  values.delete_if { |value| unboundable?(value) }
591
596
  end
@@ -598,10 +603,11 @@ module Arel # :nodoc: all
598
603
  end
599
604
 
600
605
  def visit_Arel_Nodes_NotIn(o, collector)
601
- collector.preparable = false
602
606
  attr, values = o.left, o.right
603
607
 
604
608
  if Array === values
609
+ collector.preparable = false
610
+
605
611
  unless values.empty?
606
612
  values.delete_if { |value| unboundable?(value) }
607
613
  end
@@ -618,18 +624,7 @@ module Arel # :nodoc: all
618
624
  end
619
625
 
620
626
  def visit_Arel_Nodes_Or(o, collector)
621
- stack = [o.right, o.left]
622
-
623
- while o = stack.pop
624
- if o.is_a?(Arel::Nodes::Or)
625
- stack.push o.right, o.left
626
- else
627
- visit o, collector
628
- collector << " OR " unless stack.empty?
629
- end
630
- end
631
-
632
- collector
627
+ inject_join o.children, collector, " OR "
633
628
  end
634
629
 
635
630
  def visit_Arel_Nodes_Assignment(o, collector)
@@ -768,10 +763,12 @@ module Arel # :nodoc: all
768
763
 
769
764
  def visit_Arel_Nodes_SqlLiteral(o, collector)
770
765
  collector.preparable = false
766
+ collector.retryable = o.retryable
771
767
  collector << o.to_s
772
768
  end
773
769
 
774
770
  def visit_Arel_Nodes_BoundSqlLiteral(o, collector)
771
+ collector.retryable = false
775
772
  bind_index = 0
776
773
 
777
774
  new_bind = lambda do |value|
@@ -930,7 +927,8 @@ module Arel # :nodoc: all
930
927
  stmt.limit = nil
931
928
  stmt.offset = nil
932
929
  stmt.orders = []
933
- stmt.wheres = [Nodes::In.new(o.key, [build_subselect(o.key, o)])]
930
+ columns = Arel::Nodes::Grouping.new(o.key)
931
+ stmt.wheres = [Nodes::In.new(columns, [build_subselect(o.key, o)])]
934
932
  stmt.relation = o.relation.left if has_join_sources?(o)
935
933
  stmt.groups = o.groups unless o.groups.empty?
936
934
  stmt.havings = o.havings unless o.havings.empty?
@@ -967,18 +965,34 @@ module Arel # :nodoc: all
967
965
  collector = if o.left.class == o.class
968
966
  infix_value_with_paren(o.left, collector, value, true)
969
967
  else
970
- visit o.left, collector
968
+ grouping_parentheses o.left, collector, false
971
969
  end
972
970
  collector << value
973
971
  collector = if o.right.class == o.class
974
972
  infix_value_with_paren(o.right, collector, value, true)
975
973
  else
976
- visit o.right, collector
974
+ grouping_parentheses o.right, collector, false
977
975
  end
978
976
  collector << " )" unless suppress_parens
979
977
  collector
980
978
  end
981
979
 
980
+ # Used by some visitors to enclose select queries in parentheses
981
+ def grouping_parentheses(o, collector, always_wrap_selects = true)
982
+ if o.is_a?(Nodes::SelectStatement) && (always_wrap_selects || require_parentheses?(o))
983
+ collector << "("
984
+ visit o, collector
985
+ collector << ")"
986
+ collector
987
+ else
988
+ visit o, collector
989
+ end
990
+ end
991
+
992
+ def require_parentheses?(o)
993
+ !o.orders.empty? || o.limit || o.offset
994
+ end
995
+
982
996
  def aggregate(name, o, collector)
983
997
  collector << "#{name}("
984
998
  if o.distinct
data/lib/arel.rb CHANGED
@@ -45,16 +45,20 @@ module Arel
45
45
  # that this behavior only applies when bind value parameters are
46
46
  # supplied in the call; without them, the placeholder tokens have no
47
47
  # special meaning, and will be passed through to the query as-is.
48
- def self.sql(sql_string, *positional_binds, **named_binds)
48
+ #
49
+ # The +:retryable+ option can be used to mark the SQL as safe to retry.
50
+ # Use this option only if the SQL is idempotent, as it could be executed
51
+ # more than once.
52
+ def self.sql(sql_string, *positional_binds, retryable: false, **named_binds)
49
53
  if positional_binds.empty? && named_binds.empty?
50
- Arel::Nodes::SqlLiteral.new sql_string
54
+ Arel::Nodes::SqlLiteral.new(sql_string, retryable: retryable)
51
55
  else
52
56
  Arel::Nodes::BoundSqlLiteral.new sql_string, positional_binds, named_binds
53
57
  end
54
58
  end
55
59
 
56
60
  def self.star # :nodoc:
57
- sql "*"
61
+ sql("*", retryable: true)
58
62
  end
59
63
 
60
64
  def self.arel_node?(value) # :nodoc:
@@ -12,7 +12,10 @@ class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Mi
12
12
  t.<%= attribute.type %> :<%= attribute.name %><%= attribute.inject_options %>
13
13
  <% end -%>
14
14
  <% end -%>
15
- <% if options[:timestamps] %>
15
+ <% unless attributes.empty? -%>
16
+
17
+ <% end -%>
18
+ <% if options[:timestamps] -%>
16
19
  t.timestamps
17
20
  <% end -%>
18
21
  end
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.3.4
4
+ version: 7.2.2.1
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: 2024-06-04 00:00:00.000000000 Z
11
+ date: 2024-12-10 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.3.4
19
+ version: 7.2.2.1
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.3.4
26
+ version: 7.2.2.1
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.3.4
33
+ version: 7.2.2.1
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.3.4
40
+ version: 7.2.2.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: timeout
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -85,6 +85,7 @@ files:
85
85
  - lib/active_record/associations/collection_association.rb
86
86
  - lib/active_record/associations/collection_proxy.rb
87
87
  - lib/active_record/associations/disable_joins_association_scope.rb
88
+ - lib/active_record/associations/errors.rb
88
89
  - lib/active_record/associations/foreign_association.rb
89
90
  - lib/active_record/associations/has_many_association.rb
90
91
  - lib/active_record/associations/has_many_through_association.rb
@@ -94,6 +95,7 @@ files:
94
95
  - lib/active_record/associations/join_dependency/join_association.rb
95
96
  - lib/active_record/associations/join_dependency/join_base.rb
96
97
  - lib/active_record/associations/join_dependency/join_part.rb
98
+ - lib/active_record/associations/nested_error.rb
97
99
  - lib/active_record/associations/preloader.rb
98
100
  - lib/active_record/associations/preloader/association.rb
99
101
  - lib/active_record/associations/preloader/batch.rb
@@ -105,6 +107,7 @@ files:
105
107
  - lib/active_record/attribute_assignment.rb
106
108
  - lib/active_record/attribute_methods.rb
107
109
  - lib/active_record/attribute_methods/before_type_cast.rb
110
+ - lib/active_record/attribute_methods/composite_primary_key.rb
108
111
  - lib/active_record/attribute_methods/dirty.rb
109
112
  - lib/active_record/attribute_methods/primary_key.rb
110
113
  - lib/active_record/attribute_methods/query.rb
@@ -240,6 +243,7 @@ files:
240
243
  - lib/active_record/encryption/key_generator.rb
241
244
  - lib/active_record/encryption/key_provider.rb
242
245
  - lib/active_record/encryption/message.rb
246
+ - lib/active_record/encryption/message_pack_message_serializer.rb
243
247
  - lib/active_record/encryption/message_serializer.rb
244
248
  - lib/active_record/encryption/null_encryptor.rb
245
249
  - lib/active_record/encryption/properties.rb
@@ -340,9 +344,11 @@ files:
340
344
  - lib/active_record/tasks/sqlite_database_tasks.rb
341
345
  - lib/active_record/test_databases.rb
342
346
  - lib/active_record/test_fixtures.rb
347
+ - lib/active_record/testing/query_assertions.rb
343
348
  - lib/active_record/timestamp.rb
344
349
  - lib/active_record/token_for.rb
345
350
  - lib/active_record/touch_later.rb
351
+ - lib/active_record/transaction.rb
346
352
  - lib/active_record/transactions.rb
347
353
  - lib/active_record/translation.rb
348
354
  - lib/active_record/type.rb
@@ -386,7 +392,6 @@ files:
386
392
  - lib/arel/insert_manager.rb
387
393
  - lib/arel/math.rb
388
394
  - lib/arel/nodes.rb
389
- - lib/arel/nodes/and.rb
390
395
  - lib/arel/nodes/ascending.rb
391
396
  - lib/arel/nodes/binary.rb
392
397
  - lib/arel/nodes/bind_param.rb
@@ -415,6 +420,7 @@ files:
415
420
  - lib/arel/nodes/leading_join.rb
416
421
  - lib/arel/nodes/matches.rb
417
422
  - lib/arel/nodes/named_function.rb
423
+ - lib/arel/nodes/nary.rb
418
424
  - lib/arel/nodes/node.rb
419
425
  - lib/arel/nodes/node_expression.rb
420
426
  - lib/arel/nodes/ordering.rb
@@ -470,12 +476,12 @@ licenses:
470
476
  - MIT
471
477
  metadata:
472
478
  bug_tracker_uri: https://github.com/rails/rails/issues
473
- changelog_uri: https://github.com/rails/rails/blob/v7.1.3.4/activerecord/CHANGELOG.md
474
- documentation_uri: https://api.rubyonrails.org/v7.1.3.4/
479
+ changelog_uri: https://github.com/rails/rails/blob/v7.2.2.1/activerecord/CHANGELOG.md
480
+ documentation_uri: https://api.rubyonrails.org/v7.2.2.1/
475
481
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
476
- source_code_uri: https://github.com/rails/rails/tree/v7.1.3.4/activerecord
482
+ source_code_uri: https://github.com/rails/rails/tree/v7.2.2.1/activerecord
477
483
  rubygems_mfa_required: 'true'
478
- post_install_message:
484
+ post_install_message:
479
485
  rdoc_options:
480
486
  - "--main"
481
487
  - README.rdoc
@@ -485,15 +491,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
485
491
  requirements:
486
492
  - - ">="
487
493
  - !ruby/object:Gem::Version
488
- version: 2.7.0
494
+ version: 3.1.0
489
495
  required_rubygems_version: !ruby/object:Gem::Requirement
490
496
  requirements:
491
497
  - - ">="
492
498
  - !ruby/object:Gem::Version
493
499
  version: '0'
494
500
  requirements: []
495
- rubygems_version: 3.3.27
496
- signing_key:
501
+ rubygems_version: 3.5.22
502
+ signing_key:
497
503
  specification_version: 4
498
504
  summary: Object-relational mapper framework (part of Rails).
499
505
  test_files: []