activerecord 8.0.0.beta1 → 8.0.0.rc1
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.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +67 -0
 - data/lib/active_record/associations/has_many_through_association.rb +7 -1
 - data/lib/active_record/attribute_methods/primary_key.rb +2 -7
 - data/lib/active_record/attribute_methods/time_zone_conversion.rb +2 -12
 - data/lib/active_record/callbacks.rb +1 -1
 - data/lib/active_record/connection_adapters/abstract/connection_pool.rb +26 -8
 - data/lib/active_record/connection_adapters/abstract/schema_creation.rb +4 -5
 - data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +6 -1
 - data/lib/active_record/connection_adapters/abstract/schema_statements.rb +8 -2
 - data/lib/active_record/connection_adapters/abstract_adapter.rb +0 -1
 - data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +8 -4
 - data/lib/active_record/connection_adapters/postgresql/oid/array.rb +1 -1
 - data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +2 -4
 - data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +0 -10
 - data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +1 -11
 - data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +1 -1
 - data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +4 -8
 - data/lib/active_record/connection_adapters/postgresql_adapter.rb +8 -8
 - data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +1 -1
 - data/lib/active_record/connection_adapters/sqlite3_adapter.rb +0 -2
 - data/lib/active_record/connection_adapters.rb +0 -56
 - data/lib/active_record/core.rb +14 -11
 - data/lib/active_record/enum.rb +54 -72
 - data/lib/active_record/fixtures.rb +0 -1
 - data/lib/active_record/gem_version.rb +1 -1
 - data/lib/active_record/locking/optimistic.rb +1 -1
 - data/lib/active_record/log_subscriber.rb +5 -11
 - data/lib/active_record/marshalling.rb +4 -1
 - data/lib/active_record/migration.rb +0 -5
 - data/lib/active_record/model_schema.rb +2 -3
 - data/lib/active_record/query_cache.rb +0 -4
 - data/lib/active_record/query_logs.rb +5 -11
 - data/lib/active_record/querying.rb +2 -2
 - data/lib/active_record/railtie.rb +1 -24
 - data/lib/active_record/railties/databases.rake +1 -1
 - data/lib/active_record/reflection.rb +14 -19
 - data/lib/active_record/relation/calculations.rb +24 -28
 - data/lib/active_record/relation/predicate_builder.rb +8 -0
 - data/lib/active_record/relation/query_methods.rb +66 -36
 - data/lib/active_record/relation.rb +8 -1
 - data/lib/active_record/result.rb +10 -9
 - data/lib/active_record/table_metadata.rb +1 -3
 - data/lib/active_record/tasks/database_tasks.rb +4 -31
 - data/lib/active_record/testing/query_assertions.rb +2 -2
 - data/lib/active_record.rb +0 -45
 - data/lib/arel/table.rb +3 -7
 - data/lib/arel/visitors/sqlite.rb +25 -0
 - metadata +9 -10
 - data/lib/active_record/relation/record_fetch_warning.rb +0 -52
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: c87db8720964fea39e42e8eb013edb1fc3fd47e5964e5d6d6fdbe46295766f02
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: c4bf7718e51c5accaad971f57faae94312d5cf81f5cfc4e58e8d4fe138027964
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 81389502abf74508e9eb58bcf7c91088bf4c44b858bd121128e801fee6a3a58309e0f455444bbe43faea18f7fe458610ab04ad8286d8e9faebf06ba5198bcba9
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 85de6837aff3ae8a24f177c53e2f3912c6660493bbb4138f75223a2dcb813c7f796444bd4d0196f606d16ce1bde6d3352d30d54279c72bb99910eee7f4183924
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,3 +1,70 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ## Rails 8.0.0.rc1 (October 19, 2024) ##
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            *   Remove deprecated support to setting `ENV["SCHEMA_CACHE"]`.
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                *Rafael Mendonça França*
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            *   Remove deprecated support to passing a database name to `cache_dump_filename`.
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                *Rafael Mendonça França*
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            *   Remove deprecated `ActiveRecord::ConnectionAdapters::ConnectionPool#connection`.
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                *Rafael Mendonça França*
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            *   Remove deprecated `config.active_record.sqlite3_deprecated_warning`.
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                *Rafael Mendonça França*
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            *   Remove deprecated `config.active_record.warn_on_records_fetched_greater_than`.
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                *Rafael Mendonça França*
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            *   Remove deprecated support for defining `enum` with keyword arguments.
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                *Rafael Mendonça França*
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            *   Remove deprecated support to finding database adapters that aren't registered to Active Record.
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                *Rafael Mendonça França*
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            *   Remove deprecated `config.active_record.allow_deprecated_singular_associations_name`.
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                *Rafael Mendonça França*
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            *   Remove deprecated `config.active_record.commit_transaction_on_non_local_return`.
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                *Rafael Mendonça França*
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            *   Fix incorrect SQL query when passing an empty hash to `ActiveRecord::Base.insert`.
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                *David Stosik*
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            *   Allow to save records with polymorphic join tables that have `inverse_of`
         
     | 
| 
      
 44 
     | 
    
         
            +
                specified.
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                *Markus Doits*
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            *   Fix association scopes applying on the incorrect join when using a polymorphic `has_many through:`.
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                *Joshua Young*
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            *   Allow `ActiveRecord::Base#pluck` to accept hash arguments with symbol and string values.
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                ```ruby
         
     | 
| 
      
 55 
     | 
    
         
            +
                Post.joins(:comments).pluck(:id, comments: :id)
         
     | 
| 
      
 56 
     | 
    
         
            +
                Post.joins(:comments).pluck("id", "comments" => "id")
         
     | 
| 
      
 57 
     | 
    
         
            +
                ```
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                *Joshua Young*
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            *   Make Float distinguish between `float4` and `float8` in PostgreSQL.
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                Fixes #52742
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                *Ryota Kitazawa*, *Takayuki Nagatomi*
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
       1 
68 
     | 
    
         
             
            ## Rails 8.0.0.beta1 (September 26, 2024) ##
         
     | 
| 
       2 
69 
     | 
    
         | 
| 
       3 
70 
     | 
    
         
             
            *   Allow `drop_table` to accept an array of table names.
         
     | 
| 
         @@ -93,7 +93,13 @@ module ActiveRecord 
     | 
|
| 
       93 
93 
     | 
    
         
             
                      @through_scope = scope
         
     | 
| 
       94 
94 
     | 
    
         
             
                      record = super
         
     | 
| 
       95 
95 
     | 
    
         | 
| 
       96 
     | 
    
         
            -
                      inverse = 
     | 
| 
      
 96 
     | 
    
         
            +
                      inverse =
         
     | 
| 
      
 97 
     | 
    
         
            +
                        if source_reflection.polymorphic?
         
     | 
| 
      
 98 
     | 
    
         
            +
                          source_reflection.polymorphic_inverse_of(record.class)
         
     | 
| 
      
 99 
     | 
    
         
            +
                        else
         
     | 
| 
      
 100 
     | 
    
         
            +
                          source_reflection.inverse_of
         
     | 
| 
      
 101 
     | 
    
         
            +
                        end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
       97 
103 
     | 
    
         
             
                      if inverse
         
     | 
| 
       98 
104 
     | 
    
         
             
                        if inverse.collection?
         
     | 
| 
       99 
105 
     | 
    
         
             
                          record.send(inverse.name) << build_through_record(record)
         
     | 
| 
         @@ -1,7 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            require "set"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
3 
     | 
    
         
             
            module ActiveRecord
         
     | 
| 
       6 
4 
     | 
    
         
             
              module AttributeMethods
         
     | 
| 
       7 
5 
     | 
    
         
             
                # = Active Record Attribute Methods Primary Key
         
     | 
| 
         @@ -89,10 +87,9 @@ module ActiveRecord 
     | 
|
| 
       89 
87 
     | 
    
         
             
                        @composite_primary_key
         
     | 
| 
       90 
88 
     | 
    
         
             
                      end
         
     | 
| 
       91 
89 
     | 
    
         | 
| 
       92 
     | 
    
         
            -
                      # Returns a quoted version of the primary key name 
     | 
| 
       93 
     | 
    
         
            -
                      # SQL statements.
         
     | 
| 
      
 90 
     | 
    
         
            +
                      # Returns a quoted version of the primary key name.
         
     | 
| 
       94 
91 
     | 
    
         
             
                      def quoted_primary_key
         
     | 
| 
       95 
     | 
    
         
            -
                         
     | 
| 
      
 92 
     | 
    
         
            +
                        adapter_class.quote_column_name(primary_key)
         
     | 
| 
       96 
93 
     | 
    
         
             
                      end
         
     | 
| 
       97 
94 
     | 
    
         | 
| 
       98 
95 
     | 
    
         
             
                      def reset_primary_key # :nodoc:
         
     | 
| 
         @@ -138,7 +135,6 @@ module ActiveRecord 
     | 
|
| 
       138 
135 
     | 
    
         
             
                        elsif value
         
     | 
| 
       139 
136 
     | 
    
         
             
                          -value.to_s
         
     | 
| 
       140 
137 
     | 
    
         
             
                        end
         
     | 
| 
       141 
     | 
    
         
            -
                        @quoted_primary_key = nil
         
     | 
| 
       142 
138 
     | 
    
         
             
                        @attributes_builder = nil
         
     | 
| 
       143 
139 
     | 
    
         
             
                      end
         
     | 
| 
       144 
140 
     | 
    
         | 
| 
         @@ -148,7 +144,6 @@ module ActiveRecord 
     | 
|
| 
       148 
144 
     | 
    
         
             
                          base.class_eval do
         
     | 
| 
       149 
145 
     | 
    
         
             
                            @primary_key = PRIMARY_KEY_NOT_SET
         
     | 
| 
       150 
146 
     | 
    
         
             
                            @composite_primary_key = false
         
     | 
| 
       151 
     | 
    
         
            -
                            @quoted_primary_key = nil
         
     | 
| 
       152 
147 
     | 
    
         
             
                            @attributes_builder = nil
         
     | 
| 
       153 
148 
     | 
    
         
             
                          end
         
     | 
| 
       154 
149 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -28,7 +28,7 @@ module ActiveRecord 
     | 
|
| 
       28 
28 
     | 
    
         
             
                      elsif value.respond_to?(:infinite?) && value.infinite?
         
     | 
| 
       29 
29 
     | 
    
         
             
                        value
         
     | 
| 
       30 
30 
     | 
    
         
             
                      else
         
     | 
| 
       31 
     | 
    
         
            -
                         
     | 
| 
      
 31 
     | 
    
         
            +
                        map(super) { |v| cast(v) }
         
     | 
| 
       32 
32 
     | 
    
         
             
                      end
         
     | 
| 
       33 
33 
     | 
    
         
             
                    end
         
     | 
| 
       34 
34 
     | 
    
         | 
| 
         @@ -45,23 +45,13 @@ module ActiveRecord 
     | 
|
| 
       45 
45 
     | 
    
         
             
                        elsif value.respond_to?(:infinite?) && value.infinite?
         
     | 
| 
       46 
46 
     | 
    
         
             
                          value
         
     | 
| 
       47 
47 
     | 
    
         
             
                        else
         
     | 
| 
       48 
     | 
    
         
            -
                           
     | 
| 
      
 48 
     | 
    
         
            +
                          map(value) { |v| convert_time_to_time_zone(v) }
         
     | 
| 
       49 
49 
     | 
    
         
             
                        end
         
     | 
| 
       50 
50 
     | 
    
         
             
                      end
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
52 
     | 
    
         
             
                      def set_time_zone_without_conversion(value)
         
     | 
| 
       53 
53 
     | 
    
         
             
                        ::Time.zone.local_to_utc(value).try(:in_time_zone) if value
         
     | 
| 
       54 
54 
     | 
    
         
             
                      end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                      def map_avoiding_infinite_recursion(value)
         
     | 
| 
       57 
     | 
    
         
            -
                        map(value) do |v|
         
     | 
| 
       58 
     | 
    
         
            -
                          if value.equal?(v)
         
     | 
| 
       59 
     | 
    
         
            -
                            nil
         
     | 
| 
       60 
     | 
    
         
            -
                          else
         
     | 
| 
       61 
     | 
    
         
            -
                            yield(v)
         
     | 
| 
       62 
     | 
    
         
            -
                          end
         
     | 
| 
       63 
     | 
    
         
            -
                        end
         
     | 
| 
       64 
     | 
    
         
            -
                      end
         
     | 
| 
       65 
55 
     | 
    
         
             
                  end
         
     | 
| 
       66 
56 
     | 
    
         | 
| 
       67 
57 
     | 
    
         
             
                  extend ActiveSupport::Concern
         
     | 
| 
         @@ -418,7 +418,7 @@ module ActiveRecord 
     | 
|
| 
       418 
418 
     | 
    
         | 
| 
       419 
419 
     | 
    
         
             
                def destroy # :nodoc:
         
     | 
| 
       420 
420 
     | 
    
         
             
                  @_destroy_callback_already_called ||= false
         
     | 
| 
       421 
     | 
    
         
            -
                  return if @_destroy_callback_already_called
         
     | 
| 
      
 421 
     | 
    
         
            +
                  return true if @_destroy_callback_already_called
         
     | 
| 
       422 
422 
     | 
    
         
             
                  @_destroy_callback_already_called = true
         
     | 
| 
       423 
423 
     | 
    
         
             
                  _run_destroy_callbacks { super }
         
     | 
| 
       424 
424 
     | 
    
         
             
                rescue RecordNotDestroyed => e
         
     | 
| 
         @@ -183,6 +183,31 @@ module ActiveRecord 
     | 
|
| 
       183 
183 
     | 
    
         
             
                    end
         
     | 
| 
       184 
184 
     | 
    
         
             
                  end
         
     | 
| 
       185 
185 
     | 
    
         | 
| 
      
 186 
     | 
    
         
            +
                  module ExecutorHooks # :nodoc:
         
     | 
| 
      
 187 
     | 
    
         
            +
                    class << self
         
     | 
| 
      
 188 
     | 
    
         
            +
                      def run
         
     | 
| 
      
 189 
     | 
    
         
            +
                        # noop
         
     | 
| 
      
 190 
     | 
    
         
            +
                      end
         
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
      
 192 
     | 
    
         
            +
                      def complete(_)
         
     | 
| 
      
 193 
     | 
    
         
            +
                        ActiveRecord::Base.connection_handler.each_connection_pool do |pool|
         
     | 
| 
      
 194 
     | 
    
         
            +
                          if (connection = pool.active_connection?)
         
     | 
| 
      
 195 
     | 
    
         
            +
                            transaction = connection.current_transaction
         
     | 
| 
      
 196 
     | 
    
         
            +
                            if transaction.closed? || !transaction.joinable?
         
     | 
| 
      
 197 
     | 
    
         
            +
                              pool.release_connection
         
     | 
| 
      
 198 
     | 
    
         
            +
                            end
         
     | 
| 
      
 199 
     | 
    
         
            +
                          end
         
     | 
| 
      
 200 
     | 
    
         
            +
                        end
         
     | 
| 
      
 201 
     | 
    
         
            +
                      end
         
     | 
| 
      
 202 
     | 
    
         
            +
                    end
         
     | 
| 
      
 203 
     | 
    
         
            +
                  end
         
     | 
| 
      
 204 
     | 
    
         
            +
             
     | 
| 
      
 205 
     | 
    
         
            +
                  class << self
         
     | 
| 
      
 206 
     | 
    
         
            +
                    def install_executor_hooks(executor = ActiveSupport::Executor)
         
     | 
| 
      
 207 
     | 
    
         
            +
                      executor.register_hook(ExecutorHooks)
         
     | 
| 
      
 208 
     | 
    
         
            +
                    end
         
     | 
| 
      
 209 
     | 
    
         
            +
                  end
         
     | 
| 
      
 210 
     | 
    
         
            +
             
     | 
| 
       186 
211 
     | 
    
         
             
                  include MonitorMixin
         
     | 
| 
       187 
212 
     | 
    
         
             
                  prepend QueryCache::ConnectionPoolConfiguration
         
     | 
| 
       188 
213 
     | 
    
         
             
                  include ConnectionAdapters::AbstractPool
         
     | 
| 
         @@ -291,14 +316,6 @@ module ActiveRecord 
     | 
|
| 
       291 
316 
     | 
    
         
             
                    connection_lease.sticky.nil?
         
     | 
| 
       292 
317 
     | 
    
         
             
                  end
         
     | 
| 
       293 
318 
     | 
    
         | 
| 
       294 
     | 
    
         
            -
                  def connection
         
     | 
| 
       295 
     | 
    
         
            -
                    ActiveRecord.deprecator.warn(<<~MSG)
         
     | 
| 
       296 
     | 
    
         
            -
                      ActiveRecord::ConnectionAdapters::ConnectionPool#connection is deprecated
         
     | 
| 
       297 
     | 
    
         
            -
                      and will be removed in Rails 8.0. Use #lease_connection instead.
         
     | 
| 
       298 
     | 
    
         
            -
                    MSG
         
     | 
| 
       299 
     | 
    
         
            -
                    lease_connection
         
     | 
| 
       300 
     | 
    
         
            -
                  end
         
     | 
| 
       301 
     | 
    
         
            -
             
     | 
| 
       302 
319 
     | 
    
         
             
                  def pin_connection!(lock_thread) # :nodoc:
         
     | 
| 
       303 
320 
     | 
    
         
             
                    @pinned_connection ||= (connection_lease&.connection || checkout)
         
     | 
| 
       304 
321 
     | 
    
         
             
                    @pinned_connections_depth += 1
         
     | 
| 
         @@ -332,6 +349,7 @@ module ActiveRecord 
     | 
|
| 
       332 
349 
     | 
    
         
             
                      end
         
     | 
| 
       333 
350 
     | 
    
         | 
| 
       334 
351 
     | 
    
         
             
                      if @pinned_connection.nil?
         
     | 
| 
      
 352 
     | 
    
         
            +
                        connection.steal!
         
     | 
| 
       335 
353 
     | 
    
         
             
                        connection.lock_thread = nil
         
     | 
| 
       336 
354 
     | 
    
         
             
                        checkin(connection)
         
     | 
| 
       337 
355 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -28,6 +28,7 @@ module ActiveRecord 
     | 
|
| 
       28 
28 
     | 
    
         
             
                      sql << o.foreign_key_drops.map { |fk| visit_DropForeignKey fk }.join(" ")
         
     | 
| 
       29 
29 
     | 
    
         
             
                      sql << o.check_constraint_adds.map { |con| visit_AddCheckConstraint con }.join(" ")
         
     | 
| 
       30 
30 
     | 
    
         
             
                      sql << o.check_constraint_drops.map { |con| visit_DropCheckConstraint con }.join(" ")
         
     | 
| 
      
 31 
     | 
    
         
            +
                      sql << o.constraint_drops.map { |con| visit_DropConstraint con }.join(" ")
         
     | 
| 
       31 
32 
     | 
    
         
             
                    end
         
     | 
| 
       32 
33 
     | 
    
         | 
| 
       33 
34 
     | 
    
         
             
                    def visit_ColumnDefinition(o)
         
     | 
| 
         @@ -96,9 +97,11 @@ module ActiveRecord 
     | 
|
| 
       96 
97 
     | 
    
         
             
                      "ADD #{accept(o)}"
         
     | 
| 
       97 
98 
     | 
    
         
             
                    end
         
     | 
| 
       98 
99 
     | 
    
         | 
| 
       99 
     | 
    
         
            -
                    def  
     | 
| 
      
 100 
     | 
    
         
            +
                    def visit_DropConstraint(name)
         
     | 
| 
       100 
101 
     | 
    
         
             
                      "DROP CONSTRAINT #{quote_column_name(name)}"
         
     | 
| 
       101 
102 
     | 
    
         
             
                    end
         
     | 
| 
      
 103 
     | 
    
         
            +
                    alias :visit_DropForeignKey :visit_DropConstraint
         
     | 
| 
      
 104 
     | 
    
         
            +
                    alias :visit_DropCheckConstraint :visit_DropConstraint
         
     | 
| 
       102 
105 
     | 
    
         | 
| 
       103 
106 
     | 
    
         
             
                    def visit_CreateIndexDefinition(o)
         
     | 
| 
       104 
107 
     | 
    
         
             
                      index = o.index
         
     | 
| 
         @@ -127,10 +130,6 @@ module ActiveRecord 
     | 
|
| 
       127 
130 
     | 
    
         
             
                      "ADD #{accept(o)}"
         
     | 
| 
       128 
131 
     | 
    
         
             
                    end
         
     | 
| 
       129 
132 
     | 
    
         | 
| 
       130 
     | 
    
         
            -
                    def visit_DropCheckConstraint(name)
         
     | 
| 
       131 
     | 
    
         
            -
                      "DROP CONSTRAINT #{quote_column_name(name)}"
         
     | 
| 
       132 
     | 
    
         
            -
                    end
         
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
133 
     | 
    
         
             
                    def quoted_columns(o)
         
     | 
| 
       135 
134 
     | 
    
         
             
                      String === o.columns ? o.columns : quoted_columns_for_index(o.columns, o.column_options)
         
     | 
| 
       136 
135 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -1,6 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
3 
     | 
    
         
             
            module ActiveRecord
         
     | 
| 
       5 
4 
     | 
    
         
             
              module ConnectionAdapters # :nodoc:
         
     | 
| 
       6 
5 
     | 
    
         
             
                # Abstract representation of an index definition on a table. Instances of
         
     | 
| 
         @@ -622,6 +621,7 @@ module ActiveRecord 
     | 
|
| 
       622 
621 
     | 
    
         
             
                  attr_reader :adds
         
     | 
| 
       623 
622 
     | 
    
         
             
                  attr_reader :foreign_key_adds, :foreign_key_drops
         
     | 
| 
       624 
623 
     | 
    
         
             
                  attr_reader :check_constraint_adds, :check_constraint_drops
         
     | 
| 
      
 624 
     | 
    
         
            +
                  attr_reader :constraint_drops
         
     | 
| 
       625 
625 
     | 
    
         | 
| 
       626 
626 
     | 
    
         
             
                  def initialize(td)
         
     | 
| 
       627 
627 
     | 
    
         
             
                    @td   = td
         
     | 
| 
         @@ -630,6 +630,7 @@ module ActiveRecord 
     | 
|
| 
       630 
630 
     | 
    
         
             
                    @foreign_key_drops = []
         
     | 
| 
       631 
631 
     | 
    
         
             
                    @check_constraint_adds = []
         
     | 
| 
       632 
632 
     | 
    
         
             
                    @check_constraint_drops = []
         
     | 
| 
      
 633 
     | 
    
         
            +
                    @constraint_drops = []
         
     | 
| 
       633 
634 
     | 
    
         
             
                  end
         
     | 
| 
       634 
635 
     | 
    
         | 
| 
       635 
636 
     | 
    
         
             
                  def name; @td.name; end
         
     | 
| 
         @@ -650,6 +651,10 @@ module ActiveRecord 
     | 
|
| 
       650 
651 
     | 
    
         
             
                    @check_constraint_drops << constraint_name
         
     | 
| 
       651 
652 
     | 
    
         
             
                  end
         
     | 
| 
       652 
653 
     | 
    
         | 
| 
      
 654 
     | 
    
         
            +
                  def drop_constraint(constraint_name)
         
     | 
| 
      
 655 
     | 
    
         
            +
                    @constraint_drops << constraint_name
         
     | 
| 
      
 656 
     | 
    
         
            +
                  end
         
     | 
| 
      
 657 
     | 
    
         
            +
             
     | 
| 
       653 
658 
     | 
    
         
             
                  def add_column(name, type, **options)
         
     | 
| 
       654 
659 
     | 
    
         
             
                    name = name.to_s
         
     | 
| 
       655 
660 
     | 
    
         
             
                    type = type.to_sym
         
     | 
| 
         @@ -693,7 +693,7 @@ module ActiveRecord 
     | 
|
| 
       693 
693 
     | 
    
         
             
                  #
         
     | 
| 
       694 
694 
     | 
    
         
             
                  # If the options provided include an +if_exists+ key, it will be used to check if the
         
     | 
| 
       695 
695 
     | 
    
         
             
                  # column does not exist. This will silently ignore the migration rather than raising
         
     | 
| 
       696 
     | 
    
         
            -
                  # if the column was already  
     | 
| 
      
 696 
     | 
    
         
            +
                  # if the column was already removed.
         
     | 
| 
       697 
697 
     | 
    
         
             
                  #
         
     | 
| 
       698 
698 
     | 
    
         
             
                  #   remove_column(:suppliers, :qualification, if_exists: true)
         
     | 
| 
       699 
699 
     | 
    
         
             
                  def remove_column(table_name, column_name, type = nil, **options)
         
     | 
| 
         @@ -1334,7 +1334,6 @@ module ActiveRecord 
     | 
|
| 
       1334 
1334 
     | 
    
         
             
                    execute schema_creation.accept(at)
         
     | 
| 
       1335 
1335 
     | 
    
         
             
                  end
         
     | 
| 
       1336 
1336 
     | 
    
         | 
| 
       1337 
     | 
    
         
            -
             
     | 
| 
       1338 
1337 
     | 
    
         
             
                  # Checks to see if a check constraint exists on a table for a given check constraint definition.
         
     | 
| 
       1339 
1338 
     | 
    
         
             
                  #
         
     | 
| 
       1340 
1339 
     | 
    
         
             
                  #   check_constraint_exists?(:products, name: "price_check")
         
     | 
| 
         @@ -1346,6 +1345,13 @@ module ActiveRecord 
     | 
|
| 
       1346 
1345 
     | 
    
         
             
                    check_constraint_for(table_name, **options).present?
         
     | 
| 
       1347 
1346 
     | 
    
         
             
                  end
         
     | 
| 
       1348 
1347 
     | 
    
         | 
| 
      
 1348 
     | 
    
         
            +
                  def remove_constraint(table_name, constraint_name) # :nodoc:
         
     | 
| 
      
 1349 
     | 
    
         
            +
                    at = create_alter_table(table_name)
         
     | 
| 
      
 1350 
     | 
    
         
            +
                    at.drop_constraint(constraint_name)
         
     | 
| 
      
 1351 
     | 
    
         
            +
             
     | 
| 
      
 1352 
     | 
    
         
            +
                    execute schema_creation.accept(at)
         
     | 
| 
      
 1353 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1354 
     | 
    
         
            +
             
     | 
| 
       1349 
1355 
     | 
    
         
             
                  def dump_schema_information # :nodoc:
         
     | 
| 
       1350 
1356 
     | 
    
         
             
                    versions = pool.schema_migration.versions
         
     | 
| 
       1351 
1357 
     | 
    
         
             
                    insert_versions_sql(versions) if versions.any?
         
     | 
| 
         @@ -98,7 +98,7 @@ module ActiveRecord 
     | 
|
| 
       98 
98 
     | 
    
         
             
                  end
         
     | 
| 
       99 
99 
     | 
    
         | 
| 
       100 
100 
     | 
    
         
             
                  def supports_index_sort_order?
         
     | 
| 
       101 
     | 
    
         
            -
                     
     | 
| 
      
 101 
     | 
    
         
            +
                    mariadb? ? database_version >= "10.8.1" : database_version >= "8.0.1"
         
     | 
| 
       102 
102 
     | 
    
         
             
                  end
         
     | 
| 
       103 
103 
     | 
    
         | 
| 
       104 
104 
     | 
    
         
             
                  def supports_expression_index?
         
     | 
| 
         @@ -628,7 +628,7 @@ module ActiveRecord 
     | 
|
| 
       628 
628 
     | 
    
         
             
                  end
         
     | 
| 
       629 
629 
     | 
    
         | 
| 
       630 
630 
     | 
    
         
             
                  def build_insert_sql(insert) # :nodoc:
         
     | 
| 
       631 
     | 
    
         
            -
                    no_op_column = quote_column_name(insert.keys.first)
         
     | 
| 
      
 631 
     | 
    
         
            +
                    no_op_column = quote_column_name(insert.keys.first) if insert.keys.first
         
     | 
| 
       632 
632 
     | 
    
         | 
| 
       633 
633 
     | 
    
         
             
                    # MySQL 8.0.19 replaces `VALUES(<expression>)` clauses with row and column alias names, see https://dev.mysql.com/worklog/task/?id=6312 .
         
     | 
| 
       634 
634 
     | 
    
         
             
                    # then MySQL 8.0.20 deprecates the `VALUES(<expression>)` see https://dev.mysql.com/worklog/task/?id=13325 .
         
     | 
| 
         @@ -637,7 +637,9 @@ module ActiveRecord 
     | 
|
| 
       637 
637 
     | 
    
         
             
                      sql = +"INSERT #{insert.into} #{insert.values_list} AS #{values_alias}"
         
     | 
| 
       638 
638 
     | 
    
         | 
| 
       639 
639 
     | 
    
         
             
                      if insert.skip_duplicates?
         
     | 
| 
       640 
     | 
    
         
            -
                         
     | 
| 
      
 640 
     | 
    
         
            +
                        if no_op_column
         
     | 
| 
      
 641 
     | 
    
         
            +
                          sql << " ON DUPLICATE KEY UPDATE #{no_op_column}=#{values_alias}.#{no_op_column}"
         
     | 
| 
      
 642 
     | 
    
         
            +
                        end
         
     | 
| 
       641 
643 
     | 
    
         
             
                      elsif insert.update_duplicates?
         
     | 
| 
       642 
644 
     | 
    
         
             
                        if insert.raw_update_sql?
         
     | 
| 
       643 
645 
     | 
    
         
             
                          sql = +"INSERT #{insert.into} #{insert.values_list} ON DUPLICATE KEY UPDATE #{insert.raw_update_sql}"
         
     | 
| 
         @@ -651,7 +653,9 @@ module ActiveRecord 
     | 
|
| 
       651 
653 
     | 
    
         
             
                      sql = +"INSERT #{insert.into} #{insert.values_list}"
         
     | 
| 
       652 
654 
     | 
    
         | 
| 
       653 
655 
     | 
    
         
             
                      if insert.skip_duplicates?
         
     | 
| 
       654 
     | 
    
         
            -
                         
     | 
| 
      
 656 
     | 
    
         
            +
                        if no_op_column
         
     | 
| 
      
 657 
     | 
    
         
            +
                          sql << " ON DUPLICATE KEY UPDATE #{no_op_column}=#{no_op_column}"
         
     | 
| 
      
 658 
     | 
    
         
            +
                        end
         
     | 
| 
       655 
659 
     | 
    
         
             
                      elsif insert.update_duplicates?
         
     | 
| 
       656 
660 
     | 
    
         
             
                        sql << " ON DUPLICATE KEY UPDATE "
         
     | 
| 
       657 
661 
     | 
    
         
             
                        if insert.raw_update_sql?
         
     | 
| 
         @@ -45,12 +45,10 @@ Rails needs superuser privileges to disable referential integrity. 
     | 
|
| 
       45 
45 
     | 
    
         
             
                        BEGIN
         
     | 
| 
       46 
46 
     | 
    
         
             
                        FOR r IN (
         
     | 
| 
       47 
47 
     | 
    
         
             
                          SELECT FORMAT(
         
     | 
| 
       48 
     | 
    
         
            -
                            'UPDATE pg_constraint SET convalidated=false WHERE conname = ''%I'' AND connamespace::regnamespace = ''%I''::regnamespace; ALTER TABLE %I.%I VALIDATE CONSTRAINT %I;',
         
     | 
| 
      
 48 
     | 
    
         
            +
                            'UPDATE pg_catalog.pg_constraint SET convalidated=false WHERE conname = ''%1$I'' AND connamespace::regnamespace = ''%2$I''::regnamespace; ALTER TABLE %2$I.%3$I VALIDATE CONSTRAINT %1$I;',
         
     | 
| 
       49 
49 
     | 
    
         
             
                            constraint_name,
         
     | 
| 
       50 
50 
     | 
    
         
             
                            table_schema,
         
     | 
| 
       51 
     | 
    
         
            -
                             
     | 
| 
       52 
     | 
    
         
            -
                            table_name,
         
     | 
| 
       53 
     | 
    
         
            -
                            constraint_name
         
     | 
| 
      
 51 
     | 
    
         
            +
                            table_name
         
     | 
| 
       54 
52 
     | 
    
         
             
                          ) AS constraint_check
         
     | 
| 
       55 
53 
     | 
    
         
             
                          FROM information_schema.table_constraints WHERE constraint_type = 'FOREIGN KEY'
         
     | 
| 
       56 
54 
     | 
    
         
             
                        )
         
     | 
| 
         @@ -11,9 +11,7 @@ module ActiveRecord 
     | 
|
| 
       11 
11 
     | 
    
         
             
                        sql = super
         
     | 
| 
       12 
12 
     | 
    
         
             
                        sql << o.constraint_validations.map { |fk| visit_ValidateConstraint fk }.join(" ")
         
     | 
| 
       13 
13 
     | 
    
         
             
                        sql << o.exclusion_constraint_adds.map { |con| visit_AddExclusionConstraint con }.join(" ")
         
     | 
| 
       14 
     | 
    
         
            -
                        sql << o.exclusion_constraint_drops.map { |con| visit_DropExclusionConstraint con }.join(" ")
         
     | 
| 
       15 
14 
     | 
    
         
             
                        sql << o.unique_constraint_adds.map { |con| visit_AddUniqueConstraint con }.join(" ")
         
     | 
| 
       16 
     | 
    
         
            -
                        sql << o.unique_constraint_drops.map { |con| visit_DropUniqueConstraint con }.join(" ")
         
     | 
| 
       17 
15 
     | 
    
         
             
                      end
         
     | 
| 
       18 
16 
     | 
    
         | 
| 
       19 
17 
     | 
    
         
             
                      def visit_AddForeignKey(o)
         
     | 
| 
         @@ -72,18 +70,10 @@ module ActiveRecord 
     | 
|
| 
       72 
70 
     | 
    
         
             
                        "ADD #{accept(o)}"
         
     | 
| 
       73 
71 
     | 
    
         
             
                      end
         
     | 
| 
       74 
72 
     | 
    
         | 
| 
       75 
     | 
    
         
            -
                      def visit_DropExclusionConstraint(name)
         
     | 
| 
       76 
     | 
    
         
            -
                        "DROP CONSTRAINT #{quote_column_name(name)}"
         
     | 
| 
       77 
     | 
    
         
            -
                      end
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
73 
     | 
    
         
             
                      def visit_AddUniqueConstraint(o)
         
     | 
| 
       80 
74 
     | 
    
         
             
                        "ADD #{accept(o)}"
         
     | 
| 
       81 
75 
     | 
    
         
             
                      end
         
     | 
| 
       82 
76 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
                      def visit_DropUniqueConstraint(name)
         
     | 
| 
       84 
     | 
    
         
            -
                        "DROP CONSTRAINT #{quote_column_name(name)}"
         
     | 
| 
       85 
     | 
    
         
            -
                      end
         
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
77 
     | 
    
         
             
                      def visit_ChangeColumnDefinition(o)
         
     | 
| 
       88 
78 
     | 
    
         
             
                        column = o.column
         
     | 
| 
       89 
79 
     | 
    
         
             
                        column.sql_type = type_to_sql(column.type, **column.options)
         
     | 
| 
         @@ -356,15 +356,13 @@ module ActiveRecord 
     | 
|
| 
       356 
356 
     | 
    
         | 
| 
       357 
357 
     | 
    
         
             
                  # = Active Record PostgreSQL Adapter Alter \Table
         
     | 
| 
       358 
358 
     | 
    
         
             
                  class AlterTable < ActiveRecord::ConnectionAdapters::AlterTable
         
     | 
| 
       359 
     | 
    
         
            -
                    attr_reader :constraint_validations, :exclusion_constraint_adds, : 
     | 
| 
      
 359 
     | 
    
         
            +
                    attr_reader :constraint_validations, :exclusion_constraint_adds, :unique_constraint_adds
         
     | 
| 
       360 
360 
     | 
    
         | 
| 
       361 
361 
     | 
    
         
             
                    def initialize(td)
         
     | 
| 
       362 
362 
     | 
    
         
             
                      super
         
     | 
| 
       363 
363 
     | 
    
         
             
                      @constraint_validations = []
         
     | 
| 
       364 
364 
     | 
    
         
             
                      @exclusion_constraint_adds = []
         
     | 
| 
       365 
     | 
    
         
            -
                      @exclusion_constraint_drops = []
         
     | 
| 
       366 
365 
     | 
    
         
             
                      @unique_constraint_adds = []
         
     | 
| 
       367 
     | 
    
         
            -
                      @unique_constraint_drops = []
         
     | 
| 
       368 
366 
     | 
    
         
             
                    end
         
     | 
| 
       369 
367 
     | 
    
         | 
| 
       370 
368 
     | 
    
         
             
                    def validate_constraint(name)
         
     | 
| 
         @@ -375,17 +373,9 @@ module ActiveRecord 
     | 
|
| 
       375 
373 
     | 
    
         
             
                      @exclusion_constraint_adds << @td.new_exclusion_constraint_definition(expression, options)
         
     | 
| 
       376 
374 
     | 
    
         
             
                    end
         
     | 
| 
       377 
375 
     | 
    
         | 
| 
       378 
     | 
    
         
            -
                    def drop_exclusion_constraint(constraint_name)
         
     | 
| 
       379 
     | 
    
         
            -
                      @exclusion_constraint_drops << constraint_name
         
     | 
| 
       380 
     | 
    
         
            -
                    end
         
     | 
| 
       381 
     | 
    
         
            -
             
     | 
| 
       382 
376 
     | 
    
         
             
                    def add_unique_constraint(column_name, options)
         
     | 
| 
       383 
377 
     | 
    
         
             
                      @unique_constraint_adds << @td.new_unique_constraint_definition(column_name, options)
         
     | 
| 
       384 
378 
     | 
    
         
             
                    end
         
     | 
| 
       385 
     | 
    
         
            -
             
     | 
| 
       386 
     | 
    
         
            -
                    def drop_unique_constraint(unique_constraint_name)
         
     | 
| 
       387 
     | 
    
         
            -
                      @unique_constraint_drops << unique_constraint_name
         
     | 
| 
       388 
     | 
    
         
            -
                    end
         
     | 
| 
       389 
379 
     | 
    
         
             
                  end
         
     | 
| 
       390 
380 
     | 
    
         
             
                end
         
     | 
| 
       391 
381 
     | 
    
         
             
              end
         
     | 
| 
         @@ -299,6 +299,8 @@ module ActiveRecord 
     | 
|
| 
       299 
299 
     | 
    
         | 
| 
       300 
300 
     | 
    
         
             
                    # Returns the sequence name for a table's primary key or some other specified key.
         
     | 
| 
       301 
301 
     | 
    
         
             
                    def default_sequence_name(table_name, pk = "id") # :nodoc:
         
     | 
| 
      
 302 
     | 
    
         
            +
                      return nil if pk.is_a?(Array)
         
     | 
| 
      
 303 
     | 
    
         
            +
             
     | 
| 
       302 
304 
     | 
    
         
             
                      result = serial_sequence(table_name, pk)
         
     | 
| 
       303 
305 
     | 
    
         
             
                      return nil unless result
         
     | 
| 
       304 
306 
     | 
    
         
             
                      Utils.extract_schema_qualified_name(result).to_s
         
     | 
| 
         @@ -764,10 +766,7 @@ module ActiveRecord 
     | 
|
| 
       764 
766 
     | 
    
         
             
                    def remove_exclusion_constraint(table_name, expression = nil, **options)
         
     | 
| 
       765 
767 
     | 
    
         
             
                      excl_name_to_delete = exclusion_constraint_for!(table_name, expression: expression, **options).name
         
     | 
| 
       766 
768 
     | 
    
         | 
| 
       767 
     | 
    
         
            -
                       
     | 
| 
       768 
     | 
    
         
            -
                      at.drop_exclusion_constraint(excl_name_to_delete)
         
     | 
| 
       769 
     | 
    
         
            -
             
     | 
| 
       770 
     | 
    
         
            -
                      execute schema_creation.accept(at)
         
     | 
| 
      
 769 
     | 
    
         
            +
                      remove_constraint(table_name, excl_name_to_delete)
         
     | 
| 
       771 
770 
     | 
    
         
             
                    end
         
     | 
| 
       772 
771 
     | 
    
         | 
| 
       773 
772 
     | 
    
         
             
                    # Adds a new unique constraint to the table.
         
     | 
| 
         @@ -819,10 +818,7 @@ module ActiveRecord 
     | 
|
| 
       819 
818 
     | 
    
         
             
                    def remove_unique_constraint(table_name, column_name = nil, **options)
         
     | 
| 
       820 
819 
     | 
    
         
             
                      unique_name_to_delete = unique_constraint_for!(table_name, column: column_name, **options).name
         
     | 
| 
       821 
820 
     | 
    
         | 
| 
       822 
     | 
    
         
            -
                       
     | 
| 
       823 
     | 
    
         
            -
                      at.drop_unique_constraint(unique_name_to_delete)
         
     | 
| 
       824 
     | 
    
         
            -
             
     | 
| 
       825 
     | 
    
         
            -
                      execute schema_creation.accept(at)
         
     | 
| 
      
 821 
     | 
    
         
            +
                      remove_constraint(table_name, unique_name_to_delete)
         
     | 
| 
       826 
822 
     | 
    
         
             
                    end
         
     | 
| 
       827 
823 
     | 
    
         | 
| 
       828 
824 
     | 
    
         
             
                    # Maps logical Rails types to PostgreSQL-specific data types.
         
     | 
| 
         @@ -576,9 +576,9 @@ module ActiveRecord 
     | 
|
| 
       576 
576 
     | 
    
         | 
| 
       577 
577 
     | 
    
         
             
                  # Rename an existing enum type to something else.
         
     | 
| 
       578 
578 
     | 
    
         
             
                  def rename_enum(name, **options)
         
     | 
| 
       579 
     | 
    
         
            -
                     
     | 
| 
      
 579 
     | 
    
         
            +
                    new_name = options.fetch(:to) { raise ArgumentError, ":to is required" }
         
     | 
| 
       580 
580 
     | 
    
         | 
| 
       581 
     | 
    
         
            -
                    exec_query("ALTER TYPE #{quote_table_name(name)} RENAME TO #{ 
     | 
| 
      
 581 
     | 
    
         
            +
                    exec_query("ALTER TYPE #{quote_table_name(name)} RENAME TO #{quote_table_name(new_name)}").tap { reload_type_map }
         
     | 
| 
       582 
582 
     | 
    
         
             
                  end
         
     | 
| 
       583 
583 
     | 
    
         | 
| 
       584 
584 
     | 
    
         
             
                  # Add enum value to an existing enum type.
         
     | 
| 
         @@ -586,14 +586,14 @@ module ActiveRecord 
     | 
|
| 
       586 
586 
     | 
    
         
             
                    before, after = options.values_at(:before, :after)
         
     | 
| 
       587 
587 
     | 
    
         
             
                    sql = +"ALTER TYPE #{quote_table_name(type_name)} ADD VALUE"
         
     | 
| 
       588 
588 
     | 
    
         
             
                    sql << " IF NOT EXISTS" if options[:if_not_exists]
         
     | 
| 
       589 
     | 
    
         
            -
                    sql << "  
     | 
| 
      
 589 
     | 
    
         
            +
                    sql << " #{quote(value)}"
         
     | 
| 
       590 
590 
     | 
    
         | 
| 
       591 
591 
     | 
    
         
             
                    if before && after
         
     | 
| 
       592 
592 
     | 
    
         
             
                      raise ArgumentError, "Cannot have both :before and :after at the same time"
         
     | 
| 
       593 
593 
     | 
    
         
             
                    elsif before
         
     | 
| 
       594 
     | 
    
         
            -
                      sql << " BEFORE  
     | 
| 
      
 594 
     | 
    
         
            +
                      sql << " BEFORE #{quote(before)}"
         
     | 
| 
       595 
595 
     | 
    
         
             
                    elsif after
         
     | 
| 
       596 
     | 
    
         
            -
                      sql << " AFTER  
     | 
| 
      
 596 
     | 
    
         
            +
                      sql << " AFTER #{quote(after)}"
         
     | 
| 
       597 
597 
     | 
    
         
             
                    end
         
     | 
| 
       598 
598 
     | 
    
         | 
| 
       599 
599 
     | 
    
         
             
                    execute(sql).tap { reload_type_map }
         
     | 
| 
         @@ -608,7 +608,7 @@ module ActiveRecord 
     | 
|
| 
       608 
608 
     | 
    
         
             
                    from = options.fetch(:from) { raise ArgumentError, ":from is required" }
         
     | 
| 
       609 
609 
     | 
    
         
             
                    to = options.fetch(:to) { raise ArgumentError, ":to is required" }
         
     | 
| 
       610 
610 
     | 
    
         | 
| 
       611 
     | 
    
         
            -
                    execute("ALTER TYPE #{quote_table_name(type_name)} RENAME VALUE  
     | 
| 
      
 611 
     | 
    
         
            +
                    execute("ALTER TYPE #{quote_table_name(type_name)} RENAME VALUE #{quote(from)} TO #{quote(to)}").tap {
         
     | 
| 
       612 
612 
     | 
    
         
             
                      reload_type_map
         
     | 
| 
       613 
613 
     | 
    
         
             
                    }
         
     | 
| 
       614 
614 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -671,8 +671,8 @@ module ActiveRecord 
     | 
|
| 
       671 
671 
     | 
    
         
             
                      m.register_type "int4", Type::Integer.new(limit: 4)
         
     | 
| 
       672 
672 
     | 
    
         
             
                      m.register_type "int8", Type::Integer.new(limit: 8)
         
     | 
| 
       673 
673 
     | 
    
         
             
                      m.register_type "oid", OID::Oid.new
         
     | 
| 
       674 
     | 
    
         
            -
                      m.register_type "float4", Type::Float.new
         
     | 
| 
       675 
     | 
    
         
            -
                      m. 
     | 
| 
      
 674 
     | 
    
         
            +
                      m.register_type "float4", Type::Float.new(limit: 24)
         
     | 
| 
      
 675 
     | 
    
         
            +
                      m.register_type "float8", Type::Float.new
         
     | 
| 
       676 
676 
     | 
    
         
             
                      m.register_type "text", Type::Text.new
         
     | 
| 
       677 
677 
     | 
    
         
             
                      register_class_with_limit m, "varchar", Type::String
         
     | 
| 
       678 
678 
     | 
    
         
             
                      m.alias_type "char", "varchar"
         
     | 
| 
         @@ -68,7 +68,7 @@ module ActiveRecord 
     | 
|
| 
       68 
68 
     | 
    
         
             
                          raise StandardError, "You need to enable the shared-cache mode in SQLite mode before attempting to change the transaction isolation level" unless shared_cache?
         
     | 
| 
       69 
69 
     | 
    
         
             
                        end
         
     | 
| 
       70 
70 
     | 
    
         | 
| 
       71 
     | 
    
         
            -
                        internal_execute("BEGIN #{mode} TRANSACTION", allow_retry: true, materialize_transactions: false)
         
     | 
| 
      
 71 
     | 
    
         
            +
                        internal_execute("BEGIN #{mode} TRANSACTION", "TRANSACTION", allow_retry: true, materialize_transactions: false)
         
     | 
| 
       72 
72 
     | 
    
         
             
                        if isolation
         
     | 
| 
       73 
73 
     | 
    
         
             
                          @previous_read_uncommitted = query_value("PRAGMA read_uncommitted")
         
     | 
| 
       74 
74 
     | 
    
         
             
                          internal_execute("PRAGMA read_uncommitted=ON", "TRANSACTION", allow_retry: true, materialize_transactions: false)
         
     | 
| 
         @@ -31,62 +31,6 @@ module ActiveRecord 
     | 
|
| 
       31 
31 
     | 
    
         
             
                    class_name, path_to_adapter = @adapters[adapter_name.to_s]
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
                    unless class_name
         
     | 
| 
       34 
     | 
    
         
            -
                      # To provide better error messages for adapters expecting the pre-7.2 adapter registration API, we attempt
         
     | 
| 
       35 
     | 
    
         
            -
                      # to load the adapter file from the old location which was required by convention, and then raise an error
         
     | 
| 
       36 
     | 
    
         
            -
                      # describing how to upgrade the adapter to the new API.
         
     | 
| 
       37 
     | 
    
         
            -
                      legacy_adapter_path = "active_record/connection_adapters/#{adapter_name}_adapter"
         
     | 
| 
       38 
     | 
    
         
            -
                      legacy_adapter_connection_method_name = "#{adapter_name}_connection".to_sym
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                      begin
         
     | 
| 
       41 
     | 
    
         
            -
                        require legacy_adapter_path
         
     | 
| 
       42 
     | 
    
         
            -
                        # If we reach here it means we found the found a file that may be the legacy adapter and should raise.
         
     | 
| 
       43 
     | 
    
         
            -
                        if ActiveRecord::ConnectionHandling.method_defined?(legacy_adapter_connection_method_name)
         
     | 
| 
       44 
     | 
    
         
            -
                          # If we find the connection method then we care certain it is a legacy adapter.
         
     | 
| 
       45 
     | 
    
         
            -
                          deprecation_message = <<~MSG.squish
         
     | 
| 
       46 
     | 
    
         
            -
                            Database configuration specifies '#{adapter_name}' adapter but that adapter has not been registered.
         
     | 
| 
       47 
     | 
    
         
            -
                            Rails 7.2 has changed the way Active Record database adapters are loaded. The adapter needs to be
         
     | 
| 
       48 
     | 
    
         
            -
                            updated to register itself rather than being loaded by convention.
         
     | 
| 
       49 
     | 
    
         
            -
                            Ensure that the adapter in the Gemfile is at the latest version. If it is, then the adapter may need to
         
     | 
| 
       50 
     | 
    
         
            -
                            be modified.
         
     | 
| 
       51 
     | 
    
         
            -
                            See:
         
     | 
| 
       52 
     | 
    
         
            -
                            https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters.html#method-c-register
         
     | 
| 
       53 
     | 
    
         
            -
                          MSG
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                          exception_message = <<~MSG.squish
         
     | 
| 
       56 
     | 
    
         
            -
                            Database configuration specifies '#{adapter_name}' adapter but that adapter has not been registered.
         
     | 
| 
       57 
     | 
    
         
            -
                            Ensure that the adapter in the Gemfile is at the latest version. If it is, then the adapter may need to
         
     | 
| 
       58 
     | 
    
         
            -
                            be modified.
         
     | 
| 
       59 
     | 
    
         
            -
                          MSG
         
     | 
| 
       60 
     | 
    
         
            -
                        else
         
     | 
| 
       61 
     | 
    
         
            -
                          # If we do not find the connection method we are much less certain it is a legacy adapter. Even though the
         
     | 
| 
       62 
     | 
    
         
            -
                          # file exists in the location defined by convenntion, it does not necessarily mean that file is supposed
         
     | 
| 
       63 
     | 
    
         
            -
                          # to define the adapter the legacy way. So raise an error that explains both possibilities.
         
     | 
| 
       64 
     | 
    
         
            -
                          deprecation_message = <<~MSG.squish
         
     | 
| 
       65 
     | 
    
         
            -
                            Database configuration specifies nonexistent '#{adapter_name}' adapter.
         
     | 
| 
       66 
     | 
    
         
            -
                            Available adapters are: #{@adapters.keys.sort.join(", ")}.
         
     | 
| 
       67 
     | 
    
         
            -
                            Ensure that the adapter is spelled correctly in config/database.yml and that you've added the necessary
         
     | 
| 
       68 
     | 
    
         
            -
                            adapter gem to your Gemfile if it's not in the list of available adapters.
         
     | 
| 
       69 
     | 
    
         
            -
                            Rails 7.2 has changed the way Active Record database adapters are loaded. Ensure that the adapter in
         
     | 
| 
       70 
     | 
    
         
            -
                            the Gemfile is at the latest version. If it is up to date, the adapter may need to be modified.
         
     | 
| 
       71 
     | 
    
         
            -
                            See:
         
     | 
| 
       72 
     | 
    
         
            -
                            https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters.html#method-c-register
         
     | 
| 
       73 
     | 
    
         
            -
                          MSG
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
                          exception_message = <<~MSG.squish
         
     | 
| 
       76 
     | 
    
         
            -
                            Database configuration specifies nonexistent '#{adapter_name}' adapter.
         
     | 
| 
       77 
     | 
    
         
            -
                            Available adapters are: #{@adapters.keys.sort.join(", ")}.
         
     | 
| 
       78 
     | 
    
         
            -
                            Ensure that the adapter is spelled correctly in config/database.yml and that you've added the necessary
         
     | 
| 
       79 
     | 
    
         
            -
                            adapter gem to your Gemfile and that it is at its latest version. If it is up to date, the adapter may
         
     | 
| 
       80 
     | 
    
         
            -
                            need to be modified.
         
     | 
| 
       81 
     | 
    
         
            -
                          MSG
         
     | 
| 
       82 
     | 
    
         
            -
                        end
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
                        ActiveRecord.deprecator.warn(deprecation_message)
         
     | 
| 
       85 
     | 
    
         
            -
                        raise AdapterNotFound, exception_message
         
     | 
| 
       86 
     | 
    
         
            -
                      rescue LoadError => error
         
     | 
| 
       87 
     | 
    
         
            -
                        # The adapter was not found in the legacy location so fall through to the error handling for a missing adapter.
         
     | 
| 
       88 
     | 
    
         
            -
                      end
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
34 
     | 
    
         
             
                      raise AdapterNotFound, <<~MSG.squish
         
     | 
| 
       91 
35 
     | 
    
         
             
                        Database configuration specifies nonexistent '#{adapter_name}' adapter.
         
     | 
| 
       92 
36 
     | 
    
         
             
                        Available adapters are: #{@adapters.keys.sort.join(", ")}.
         
     |