activerecord 7.1.3.2 → 7.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.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +570 -2094
- data/README.rdoc +15 -15
- data/examples/performance.rb +2 -2
- data/lib/active_record/association_relation.rb +1 -1
- data/lib/active_record/associations/alias_tracker.rb +25 -19
- data/lib/active_record/associations/association.rb +15 -8
- data/lib/active_record/associations/belongs_to_association.rb +18 -11
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +3 -2
- data/lib/active_record/associations/builder/belongs_to.rb +1 -0
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +2 -2
- data/lib/active_record/associations/builder/has_many.rb +3 -4
- data/lib/active_record/associations/builder/has_one.rb +3 -4
- data/lib/active_record/associations/collection_association.rb +11 -5
- data/lib/active_record/associations/collection_proxy.rb +14 -1
- data/lib/active_record/associations/errors.rb +265 -0
- data/lib/active_record/associations/has_many_association.rb +3 -3
- data/lib/active_record/associations/has_one_association.rb +2 -2
- data/lib/active_record/associations/join_dependency/join_association.rb +27 -25
- data/lib/active_record/associations/join_dependency.rb +6 -8
- data/lib/active_record/associations/nested_error.rb +47 -0
- data/lib/active_record/associations/preloader/association.rb +2 -1
- data/lib/active_record/associations/preloader/branch.rb +7 -1
- data/lib/active_record/associations/preloader/through_association.rb +1 -3
- data/lib/active_record/associations/singular_association.rb +6 -0
- data/lib/active_record/associations/through_association.rb +1 -1
- data/lib/active_record/associations.rb +34 -273
- data/lib/active_record/attribute_assignment.rb +1 -11
- data/lib/active_record/attribute_methods/composite_primary_key.rb +84 -0
- data/lib/active_record/attribute_methods/dirty.rb +2 -2
- data/lib/active_record/attribute_methods/primary_key.rb +23 -55
- data/lib/active_record/attribute_methods/read.rb +4 -16
- data/lib/active_record/attribute_methods/serialization.rb +4 -24
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +7 -6
- data/lib/active_record/attribute_methods/write.rb +3 -3
- data/lib/active_record/attribute_methods.rb +89 -58
- data/lib/active_record/attributes.rb +60 -45
- data/lib/active_record/autosave_association.rb +17 -31
- data/lib/active_record/base.rb +2 -3
- data/lib/active_record/connection_adapters/abstract/connection_handler.rb +24 -107
- data/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb +1 -0
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +244 -58
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +35 -18
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +188 -75
- data/lib/active_record/connection_adapters/abstract/quoting.rb +65 -91
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +1 -1
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +22 -9
- data/lib/active_record/connection_adapters/abstract/transaction.rb +125 -62
- data/lib/active_record/connection_adapters/abstract_adapter.rb +38 -59
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +69 -19
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +9 -1
- data/lib/active_record/connection_adapters/mysql/quoting.rb +43 -48
- data/lib/active_record/connection_adapters/mysql/schema_statements.rb +8 -1
- data/lib/active_record/connection_adapters/mysql2/database_statements.rb +16 -15
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +20 -32
- data/lib/active_record/connection_adapters/pool_config.rb +7 -6
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +27 -4
- data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +6 -0
- data/lib/active_record/connection_adapters/postgresql/oid/interval.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +14 -4
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +58 -58
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +20 -0
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +16 -12
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +26 -21
- data/lib/active_record/connection_adapters/schema_cache.rb +123 -128
- data/lib/active_record/connection_adapters/sqlite3/column.rb +14 -1
- data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +10 -6
- data/lib/active_record/connection_adapters/sqlite3/quoting.rb +44 -46
- data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +22 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +13 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +16 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +25 -2
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +127 -77
- data/lib/active_record/connection_adapters/trilogy/database_statements.rb +15 -15
- data/lib/active_record/connection_adapters/trilogy_adapter.rb +32 -65
- data/lib/active_record/connection_adapters.rb +121 -0
- data/lib/active_record/connection_handling.rb +56 -41
- data/lib/active_record/core.rb +60 -39
- data/lib/active_record/counter_cache.rb +23 -10
- data/lib/active_record/database_configurations/connection_url_resolver.rb +7 -2
- data/lib/active_record/database_configurations/database_config.rb +19 -4
- data/lib/active_record/database_configurations/hash_config.rb +44 -36
- data/lib/active_record/database_configurations/url_config.rb +20 -1
- data/lib/active_record/database_configurations.rb +1 -1
- data/lib/active_record/delegated_type.rb +30 -6
- data/lib/active_record/destroy_association_async_job.rb +1 -1
- data/lib/active_record/dynamic_matchers.rb +2 -2
- data/lib/active_record/encryption/encryptable_record.rb +3 -3
- data/lib/active_record/encryption/encrypted_attribute_type.rb +26 -6
- data/lib/active_record/encryption/encryptor.rb +18 -3
- data/lib/active_record/encryption/message_pack_message_serializer.rb +76 -0
- data/lib/active_record/encryption/message_serializer.rb +4 -0
- data/lib/active_record/encryption/null_encryptor.rb +4 -0
- data/lib/active_record/encryption/read_only_null_encryptor.rb +4 -0
- data/lib/active_record/encryption/scheme.rb +8 -4
- data/lib/active_record/enum.rb +26 -6
- data/lib/active_record/errors.rb +46 -20
- data/lib/active_record/explain.rb +13 -24
- data/lib/active_record/fixtures.rb +37 -31
- data/lib/active_record/future_result.rb +17 -4
- data/lib/active_record/gem_version.rb +3 -3
- data/lib/active_record/inheritance.rb +4 -2
- data/lib/active_record/insert_all.rb +18 -15
- data/lib/active_record/integration.rb +4 -1
- data/lib/active_record/internal_metadata.rb +48 -34
- data/lib/active_record/locking/optimistic.rb +8 -7
- data/lib/active_record/log_subscriber.rb +0 -21
- data/lib/active_record/marshalling.rb +1 -1
- data/lib/active_record/message_pack.rb +2 -2
- data/lib/active_record/migration/command_recorder.rb +2 -3
- data/lib/active_record/migration/compatibility.rb +11 -3
- data/lib/active_record/migration/default_strategy.rb +4 -5
- data/lib/active_record/migration/pending_migration_connection.rb +2 -2
- data/lib/active_record/migration.rb +85 -76
- data/lib/active_record/model_schema.rb +39 -70
- data/lib/active_record/nested_attributes.rb +11 -3
- data/lib/active_record/normalization.rb +3 -7
- data/lib/active_record/persistence.rb +32 -354
- data/lib/active_record/query_cache.rb +18 -6
- data/lib/active_record/query_logs.rb +15 -0
- data/lib/active_record/query_logs_formatter.rb +1 -1
- data/lib/active_record/querying.rb +21 -9
- data/lib/active_record/railtie.rb +54 -67
- data/lib/active_record/railties/controller_runtime.rb +13 -4
- data/lib/active_record/railties/databases.rake +42 -45
- data/lib/active_record/reflection.rb +102 -37
- data/lib/active_record/relation/batches/batch_enumerator.rb +15 -2
- data/lib/active_record/relation/batches.rb +14 -8
- data/lib/active_record/relation/calculations.rb +95 -62
- data/lib/active_record/relation/delegation.rb +8 -11
- data/lib/active_record/relation/finder_methods.rb +16 -2
- data/lib/active_record/relation/merger.rb +4 -6
- data/lib/active_record/relation/predicate_builder/array_handler.rb +2 -2
- data/lib/active_record/relation/predicate_builder/association_query_value.rb +9 -3
- data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +6 -1
- data/lib/active_record/relation/predicate_builder.rb +3 -3
- data/lib/active_record/relation/query_methods.rb +212 -47
- data/lib/active_record/relation/record_fetch_warning.rb +3 -0
- data/lib/active_record/relation/spawn_methods.rb +2 -18
- data/lib/active_record/relation/where_clause.rb +7 -19
- data/lib/active_record/relation.rb +500 -66
- data/lib/active_record/result.rb +32 -45
- data/lib/active_record/runtime_registry.rb +39 -0
- data/lib/active_record/sanitization.rb +24 -19
- data/lib/active_record/schema.rb +8 -6
- data/lib/active_record/schema_dumper.rb +19 -9
- data/lib/active_record/schema_migration.rb +30 -14
- data/lib/active_record/scoping/named.rb +1 -0
- data/lib/active_record/signed_id.rb +20 -1
- data/lib/active_record/statement_cache.rb +7 -7
- data/lib/active_record/table_metadata.rb +1 -10
- data/lib/active_record/tasks/database_tasks.rb +87 -48
- data/lib/active_record/tasks/mysql_database_tasks.rb +1 -1
- data/lib/active_record/tasks/postgresql_database_tasks.rb +1 -1
- data/lib/active_record/tasks/sqlite_database_tasks.rb +2 -1
- data/lib/active_record/test_fixtures.rb +87 -89
- data/lib/active_record/testing/query_assertions.rb +121 -0
- data/lib/active_record/timestamp.rb +5 -3
- data/lib/active_record/token_for.rb +22 -12
- data/lib/active_record/touch_later.rb +1 -1
- data/lib/active_record/transaction.rb +132 -0
- data/lib/active_record/transactions.rb +70 -14
- data/lib/active_record/translation.rb +0 -2
- data/lib/active_record/type/serialized.rb +1 -3
- data/lib/active_record/type_caster/connection.rb +4 -4
- data/lib/active_record/validations/associated.rb +9 -3
- data/lib/active_record/validations/uniqueness.rb +14 -10
- data/lib/active_record/validations.rb +4 -1
- data/lib/active_record.rb +150 -41
- data/lib/arel/alias_predication.rb +1 -1
- data/lib/arel/collectors/bind.rb +2 -0
- data/lib/arel/collectors/composite.rb +7 -0
- data/lib/arel/collectors/sql_string.rb +1 -1
- data/lib/arel/collectors/substitute_binds.rb +1 -1
- data/lib/arel/nodes/binary.rb +0 -6
- data/lib/arel/nodes/bound_sql_literal.rb +9 -5
- data/lib/arel/nodes/{and.rb → nary.rb} +5 -2
- data/lib/arel/nodes/node.rb +4 -3
- data/lib/arel/nodes/sql_literal.rb +7 -0
- data/lib/arel/nodes.rb +2 -2
- data/lib/arel/predications.rb +1 -1
- data/lib/arel/select_manager.rb +1 -1
- data/lib/arel/tree_manager.rb +8 -3
- data/lib/arel/update_manager.rb +2 -1
- data/lib/arel/visitors/dot.rb +1 -0
- data/lib/arel/visitors/mysql.rb +9 -4
- data/lib/arel/visitors/postgresql.rb +1 -12
- data/lib/arel/visitors/to_sql.rb +31 -17
- data/lib/arel.rb +7 -3
- data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +4 -1
- metadata +18 -12
| @@ -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)
         | 
    
        data/lib/arel/visitors/to_sql.rb
    CHANGED
    
    | @@ -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 | 
            -
                       | 
| 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 | 
            -
                         | 
| 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 | 
            -
                         | 
| 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 | 
            -
                         | 
| 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 | 
            -
               | 
| 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  | 
| 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 | 
            -
            <%  | 
| 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 | 
| 4 | 
            +
              version: 7.2.1
         | 
| 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- | 
| 11 | 
            +
            date: 2024-08-22 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 | 
| 19 | 
            +
                    version: 7.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 | 
| 26 | 
            +
                    version: 7.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 | 
| 33 | 
            +
                    version: 7.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 | 
| 40 | 
            +
                    version: 7.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,10 +476,10 @@ 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 | 
| 474 | 
            -
              documentation_uri: https://api.rubyonrails.org/v7.1 | 
| 479 | 
            +
              changelog_uri: https://github.com/rails/rails/blob/v7.2.1/activerecord/CHANGELOG.md
         | 
| 480 | 
            +
              documentation_uri: https://api.rubyonrails.org/v7.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 | 
| 482 | 
            +
              source_code_uri: https://github.com/rails/rails/tree/v7.2.1/activerecord
         | 
| 477 483 | 
             
              rubygems_mfa_required: 'true'
         | 
| 478 484 | 
             
            post_install_message:
         | 
| 479 485 | 
             
            rdoc_options:
         | 
| @@ -485,14 +491,14 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 485 491 | 
             
              requirements:
         | 
| 486 492 | 
             
              - - ">="
         | 
| 487 493 | 
             
                - !ruby/object:Gem::Version
         | 
| 488 | 
            -
                  version:  | 
| 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.5. | 
| 501 | 
            +
            rubygems_version: 3.5.11
         | 
| 496 502 | 
             
            signing_key:
         | 
| 497 503 | 
             
            specification_version: 4
         | 
| 498 504 | 
             
            summary: Object-relational mapper framework (part of Rails).
         |