activerecord 8.0.0.beta1 → 8.0.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +102 -2
  3. data/lib/active_record/association_relation.rb +1 -0
  4. data/lib/active_record/associations/association.rb +9 -5
  5. data/lib/active_record/associations/has_many_through_association.rb +7 -1
  6. data/lib/active_record/associations.rb +28 -16
  7. data/lib/active_record/attribute_methods/primary_key.rb +2 -7
  8. data/lib/active_record/attribute_methods/time_zone_conversion.rb +2 -12
  9. data/lib/active_record/callbacks.rb +1 -1
  10. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +26 -8
  11. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +4 -5
  12. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +6 -1
  13. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +8 -2
  14. data/lib/active_record/connection_adapters/abstract_adapter.rb +0 -1
  15. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +8 -4
  16. data/lib/active_record/connection_adapters/postgresql/oid/array.rb +1 -1
  17. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +2 -4
  18. data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +1 -10
  19. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +6 -12
  20. data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +2 -1
  21. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +11 -10
  22. data/lib/active_record/connection_adapters/postgresql_adapter.rb +12 -10
  23. data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +1 -1
  24. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +0 -2
  25. data/lib/active_record/connection_adapters.rb +0 -56
  26. data/lib/active_record/core.rb +43 -14
  27. data/lib/active_record/database_configurations/database_config.rb +4 -0
  28. data/lib/active_record/database_configurations/hash_config.rb +8 -0
  29. data/lib/active_record/enum.rb +9 -22
  30. data/lib/active_record/fixtures.rb +0 -1
  31. data/lib/active_record/gem_version.rb +1 -1
  32. data/lib/active_record/locking/optimistic.rb +1 -1
  33. data/lib/active_record/log_subscriber.rb +5 -11
  34. data/lib/active_record/marshalling.rb +4 -1
  35. data/lib/active_record/migration/command_recorder.rb +5 -5
  36. data/lib/active_record/migration.rb +0 -5
  37. data/lib/active_record/model_schema.rb +2 -3
  38. data/lib/active_record/query_cache.rb +0 -4
  39. data/lib/active_record/query_logs.rb +5 -11
  40. data/lib/active_record/querying.rb +2 -2
  41. data/lib/active_record/railtie.rb +2 -25
  42. data/lib/active_record/railties/databases.rake +2 -17
  43. data/lib/active_record/reflection.rb +14 -19
  44. data/lib/active_record/relation/calculations.rb +24 -28
  45. data/lib/active_record/relation/predicate_builder.rb +8 -0
  46. data/lib/active_record/relation/query_methods.rb +76 -38
  47. data/lib/active_record/relation.rb +8 -1
  48. data/lib/active_record/result.rb +10 -9
  49. data/lib/active_record/table_metadata.rb +1 -3
  50. data/lib/active_record/tasks/database_tasks.rb +26 -34
  51. data/lib/active_record/testing/query_assertions.rb +2 -2
  52. data/lib/active_record.rb +0 -45
  53. data/lib/arel/table.rb +3 -7
  54. data/lib/arel/visitors/sqlite.rb +25 -0
  55. metadata +9 -10
  56. data/lib/active_record/relation/record_fetch_warning.rb +0 -52
data/lib/active_record.rb CHANGED
@@ -268,14 +268,6 @@ module ActiveRecord
268
268
  singleton_class.attr_accessor :reading_role
269
269
  self.reading_role = :reading
270
270
 
271
- def self.legacy_connection_handling=(_)
272
- raise ArgumentError, <<~MSG.squish
273
- The `legacy_connection_handling` setter was deprecated in 7.0 and removed in 7.1,
274
- but is still defined in your configuration. Please remove this call as it no longer
275
- has any effect."
276
- MSG
277
- end
278
-
279
271
  ##
280
272
  # :singleton-method: async_query_executor
281
273
  # Sets the async_query_executor for an application. By default the thread pool executor
@@ -359,29 +351,6 @@ module ActiveRecord
359
351
  singleton_class.attr_accessor :run_after_transaction_callbacks_in_order_defined
360
352
  self.run_after_transaction_callbacks_in_order_defined = false
361
353
 
362
- def self.commit_transaction_on_non_local_return
363
- ActiveRecord.deprecator.warn <<-WARNING.squish
364
- `Rails.application.config.active_record.commit_transaction_on_non_local_return`
365
- is deprecated and will be removed in Rails 8.0.
366
- WARNING
367
- end
368
-
369
- def self.commit_transaction_on_non_local_return=(value)
370
- ActiveRecord.deprecator.warn <<-WARNING.squish
371
- `Rails.application.config.active_record.commit_transaction_on_non_local_return`
372
- is deprecated and will be removed in Rails 8.0.
373
- WARNING
374
- end
375
-
376
- ##
377
- # :singleton-method: warn_on_records_fetched_greater_than
378
- # Specify a threshold for the size of query result sets. If the number of
379
- # records in the set exceeds the threshold, a warning is logged. This can
380
- # be used to identify queries which load thousands of records and
381
- # potentially cause memory bloat.
382
- singleton_class.attr_accessor :warn_on_records_fetched_greater_than
383
- self.warn_on_records_fetched_greater_than = false
384
-
385
354
  singleton_class.attr_accessor :application_record_class
386
355
  self.application_record_class = nil
387
356
 
@@ -459,20 +428,6 @@ module ActiveRecord
459
428
  singleton_class.attr_accessor :verify_foreign_keys_for_fixtures
460
429
  self.verify_foreign_keys_for_fixtures = false
461
430
 
462
- def self.allow_deprecated_singular_associations_name
463
- ActiveRecord.deprecator.warn <<-WARNING.squish
464
- `Rails.application.config.active_record.allow_deprecated_singular_associations_name`
465
- is deprecated and will be removed in Rails 8.0.
466
- WARNING
467
- end
468
-
469
- def self.allow_deprecated_singular_associations_name=(value)
470
- ActiveRecord.deprecator.warn <<-WARNING.squish
471
- `Rails.application.config.active_record.allow_deprecated_singular_associations_name`
472
- is deprecated and will be removed in Rails 8.0.
473
- WARNING
474
- end
475
-
476
431
  singleton_class.attr_accessor :query_transformers
477
432
  self.query_transformers = []
478
433
 
data/lib/arel/table.rb CHANGED
@@ -12,13 +12,9 @@ module Arel # :nodoc: all
12
12
  attr_reader :table_alias
13
13
 
14
14
  def initialize(name, as: nil, klass: nil, type_caster: klass&.type_caster)
15
- @name =
16
- case name
17
- when Symbol then name.to_s
18
- else
19
- name
20
- end
15
+ name = name.name if name.is_a?(Symbol)
21
16
 
17
+ @name = name
22
18
  @klass = klass
23
19
  @type_caster = type_caster
24
20
 
@@ -84,7 +80,7 @@ module Arel # :nodoc: all
84
80
  end
85
81
 
86
82
  def [](name, table = self)
87
- name = name.to_s if name.is_a?(Symbol)
83
+ name = name.name if name.is_a?(Symbol)
88
84
  name = @klass.attribute_aliases[name] || name if @klass
89
85
  Attribute.new(table, name)
90
86
  end
@@ -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
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: 8.0.0.beta1
4
+ version: 8.0.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-26 00:00:00.000000000 Z
11
+ date: 2024-10-30 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: 8.0.0.beta1
19
+ version: 8.0.0.rc2
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: 8.0.0.beta1
26
+ version: 8.0.0.rc2
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: 8.0.0.beta1
33
+ version: 8.0.0.rc2
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: 8.0.0.beta1
40
+ version: 8.0.0.rc2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: timeout
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -318,7 +318,6 @@ files:
318
318
  - lib/active_record/relation/predicate_builder/relation_handler.rb
319
319
  - lib/active_record/relation/query_attribute.rb
320
320
  - lib/active_record/relation/query_methods.rb
321
- - lib/active_record/relation/record_fetch_warning.rb
322
321
  - lib/active_record/relation/spawn_methods.rb
323
322
  - lib/active_record/relation/where_clause.rb
324
323
  - lib/active_record/result.rb
@@ -476,10 +475,10 @@ licenses:
476
475
  - MIT
477
476
  metadata:
478
477
  bug_tracker_uri: https://github.com/rails/rails/issues
479
- changelog_uri: https://github.com/rails/rails/blob/v8.0.0.beta1/activerecord/CHANGELOG.md
480
- documentation_uri: https://api.rubyonrails.org/v8.0.0.beta1/
478
+ changelog_uri: https://github.com/rails/rails/blob/v8.0.0.rc2/activerecord/CHANGELOG.md
479
+ documentation_uri: https://api.rubyonrails.org/v8.0.0.rc2/
481
480
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
482
- source_code_uri: https://github.com/rails/rails/tree/v8.0.0.beta1/activerecord
481
+ source_code_uri: https://github.com/rails/rails/tree/v8.0.0.rc2/activerecord
483
482
  rubygems_mfa_required: 'true'
484
483
  post_install_message:
485
484
  rdoc_options:
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveRecord
4
- class Relation
5
- module RecordFetchWarning
6
- # Deprecated: subscribe to sql.active_record notifications and
7
- # access the row count field to detect large result set sizes.
8
- #
9
- # When this module is prepended to ActiveRecord::Relation and
10
- # +config.active_record.warn_on_records_fetched_greater_than+ is
11
- # set to an integer, if the number of records a query returns is
12
- # greater than the value of +warn_on_records_fetched_greater_than+,
13
- # a warning is logged. This allows for the detection of queries that
14
- # return a large number of records, which could cause memory bloat.
15
- #
16
- # In most cases, fetching large number of records can be performed
17
- # efficiently using the ActiveRecord::Batches methods.
18
- # See ActiveRecord::Batches for more information.
19
- def exec_queries
20
- QueryRegistry.reset
21
-
22
- super.tap do |records|
23
- if model.logger && ActiveRecord.warn_on_records_fetched_greater_than
24
- if records.length > ActiveRecord.warn_on_records_fetched_greater_than
25
- model.logger.warn "Query fetched #{records.size} #{@klass} records: #{QueryRegistry.queries.join(";")}"
26
- end
27
- end
28
- end
29
- end
30
-
31
- # :stopdoc:
32
- ActiveSupport::Notifications.subscribe("sql.active_record") do |*, payload|
33
- QueryRegistry.queries << payload[:sql]
34
- end
35
- # :startdoc:
36
-
37
- module QueryRegistry # :nodoc:
38
- extend self
39
-
40
- def queries
41
- ActiveSupport::IsolatedExecutionState[:active_record_query_registry] ||= []
42
- end
43
-
44
- def reset
45
- queries.clear
46
- end
47
- end
48
- end
49
- end
50
- end
51
-
52
- ActiveRecord::Relation.prepend ActiveRecord::Relation::RecordFetchWarning