activerecord 4.2.11.1 → 6.0.3
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 +711 -1547
- data/MIT-LICENSE +4 -2
- data/README.rdoc +14 -13
- data/examples/performance.rb +33 -32
- data/examples/simple.rb +5 -4
- data/lib/active_record/advisory_lock_base.rb +18 -0
- data/lib/active_record/aggregations.rb +266 -251
- data/lib/active_record/association_relation.rb +20 -13
- data/lib/active_record/associations/alias_tracker.rb +29 -36
- data/lib/active_record/associations/association.rb +128 -57
- data/lib/active_record/associations/association_scope.rb +103 -132
- data/lib/active_record/associations/belongs_to_association.rb +65 -60
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +8 -12
- data/lib/active_record/associations/builder/association.rb +27 -40
- data/lib/active_record/associations/builder/belongs_to.rb +69 -55
- data/lib/active_record/associations/builder/collection_association.rb +10 -33
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +50 -66
- data/lib/active_record/associations/builder/has_many.rb +8 -4
- data/lib/active_record/associations/builder/has_one.rb +46 -5
- data/lib/active_record/associations/builder/singular_association.rb +16 -10
- data/lib/active_record/associations/collection_association.rb +136 -288
- data/lib/active_record/associations/collection_proxy.rb +241 -147
- data/lib/active_record/associations/foreign_association.rb +10 -1
- data/lib/active_record/associations/has_many_association.rb +34 -98
- data/lib/active_record/associations/has_many_through_association.rb +60 -87
- data/lib/active_record/associations/has_one_association.rb +61 -49
- data/lib/active_record/associations/has_one_through_association.rb +20 -11
- data/lib/active_record/associations/join_dependency/join_association.rb +38 -86
- data/lib/active_record/associations/join_dependency/join_base.rb +10 -9
- data/lib/active_record/associations/join_dependency/join_part.rb +14 -14
- data/lib/active_record/associations/join_dependency.rb +149 -166
- data/lib/active_record/associations/preloader/association.rb +90 -123
- data/lib/active_record/associations/preloader/through_association.rb +85 -65
- data/lib/active_record/associations/preloader.rb +90 -93
- data/lib/active_record/associations/singular_association.rb +18 -39
- data/lib/active_record/associations/through_association.rb +38 -18
- data/lib/active_record/associations.rb +1737 -1597
- data/lib/active_record/attribute_assignment.rb +57 -185
- data/lib/active_record/attribute_decorators.rb +39 -17
- data/lib/active_record/attribute_methods/before_type_cast.rb +13 -9
- data/lib/active_record/attribute_methods/dirty.rb +174 -144
- data/lib/active_record/attribute_methods/primary_key.rb +90 -84
- data/lib/active_record/attribute_methods/query.rb +6 -5
- data/lib/active_record/attribute_methods/read.rb +20 -77
- data/lib/active_record/attribute_methods/serialization.rb +40 -21
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +57 -37
- data/lib/active_record/attribute_methods/write.rb +32 -55
- data/lib/active_record/attribute_methods.rb +120 -135
- data/lib/active_record/attributes.rb +213 -82
- data/lib/active_record/autosave_association.rb +97 -41
- data/lib/active_record/base.rb +57 -45
- data/lib/active_record/callbacks.rb +101 -76
- data/lib/active_record/coders/json.rb +3 -1
- data/lib/active_record/coders/yaml_column.rb +23 -12
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +804 -297
- data/lib/active_record/connection_adapters/abstract/database_limits.rb +26 -8
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +240 -115
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +83 -24
- data/lib/active_record/connection_adapters/abstract/quoting.rb +170 -53
- data/lib/active_record/connection_adapters/abstract/savepoints.rb +5 -3
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +74 -47
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +371 -242
- data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +79 -36
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +694 -256
- data/lib/active_record/connection_adapters/abstract/transaction.rb +190 -83
- data/lib/active_record/connection_adapters/abstract_adapter.rb +473 -202
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +507 -639
- data/lib/active_record/connection_adapters/column.rb +56 -43
- data/lib/active_record/connection_adapters/connection_specification.rb +174 -153
- data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +29 -0
- data/lib/active_record/connection_adapters/mysql/column.rb +27 -0
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +196 -0
- data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +71 -0
- data/lib/active_record/connection_adapters/mysql/quoting.rb +81 -0
- data/lib/active_record/connection_adapters/mysql/schema_creation.rb +71 -0
- data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +95 -0
- data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +88 -0
- data/lib/active_record/connection_adapters/mysql/schema_statements.rb +264 -0
- data/lib/active_record/connection_adapters/mysql/type_metadata.rb +31 -0
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +58 -181
- data/lib/active_record/connection_adapters/postgresql/column.rb +21 -11
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +70 -114
- data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +44 -0
- data/lib/active_record/connection_adapters/postgresql/oid/array.rb +49 -58
- data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +9 -8
- data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +2 -0
- data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +4 -2
- data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +5 -1
- data/lib/active_record/connection_adapters/postgresql/oid/date.rb +13 -1
- data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +9 -22
- data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +3 -1
- data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +5 -4
- data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +31 -20
- data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +2 -0
- data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +3 -11
- data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +44 -0
- data/lib/active_record/connection_adapters/postgresql/oid/money.rb +7 -9
- data/lib/active_record/connection_adapters/postgresql/oid/{infinity.rb → oid.rb} +5 -3
- data/lib/active_record/connection_adapters/postgresql/oid/point.rb +32 -11
- data/lib/active_record/connection_adapters/postgresql/oid/range.rb +51 -34
- data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +4 -5
- data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +58 -54
- data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +9 -5
- data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +3 -1
- data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +3 -1
- data/lib/active_record/connection_adapters/postgresql/oid.rb +23 -25
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +144 -47
- data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +27 -14
- data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +76 -0
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +178 -108
- data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +49 -0
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +462 -296
- data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +36 -0
- data/lib/active_record/connection_adapters/postgresql/utils.rb +11 -8
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +558 -356
- data/lib/active_record/connection_adapters/schema_cache.rb +72 -25
- data/lib/active_record/connection_adapters/sql_type_metadata.rb +37 -0
- data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +119 -0
- data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +21 -0
- data/lib/active_record/connection_adapters/sqlite3/quoting.rb +102 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +17 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +19 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +18 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +137 -0
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +299 -349
- data/lib/active_record/connection_adapters/statement_pool.rb +33 -13
- data/lib/active_record/connection_handling.rb +167 -41
- data/lib/active_record/core.rb +252 -230
- data/lib/active_record/counter_cache.rb +70 -49
- data/lib/active_record/database_configurations/database_config.rb +37 -0
- data/lib/active_record/database_configurations/hash_config.rb +50 -0
- data/lib/active_record/database_configurations/url_config.rb +78 -0
- data/lib/active_record/database_configurations.rb +233 -0
- data/lib/active_record/define_callbacks.rb +22 -0
- data/lib/active_record/dynamic_matchers.rb +87 -106
- data/lib/active_record/enum.rb +163 -86
- data/lib/active_record/errors.rb +188 -53
- data/lib/active_record/explain.rb +22 -11
- data/lib/active_record/explain_registry.rb +4 -2
- data/lib/active_record/explain_subscriber.rb +10 -5
- data/lib/active_record/fixture_set/file.rb +35 -9
- data/lib/active_record/fixture_set/model_metadata.rb +33 -0
- data/lib/active_record/fixture_set/render_context.rb +17 -0
- data/lib/active_record/fixture_set/table_row.rb +152 -0
- data/lib/active_record/fixture_set/table_rows.rb +46 -0
- data/lib/active_record/fixtures.rb +227 -501
- data/lib/active_record/gem_version.rb +6 -4
- data/lib/active_record/inheritance.rb +158 -115
- data/lib/active_record/insert_all.rb +179 -0
- data/lib/active_record/integration.rb +123 -29
- data/lib/active_record/internal_metadata.rb +53 -0
- data/lib/active_record/legacy_yaml_adapter.rb +21 -3
- data/lib/active_record/locale/en.yml +3 -2
- data/lib/active_record/locking/optimistic.rb +86 -96
- data/lib/active_record/locking/pessimistic.rb +18 -6
- data/lib/active_record/log_subscriber.rb +76 -33
- data/lib/active_record/middleware/database_selector/resolver/session.rb +45 -0
- data/lib/active_record/middleware/database_selector/resolver.rb +87 -0
- data/lib/active_record/middleware/database_selector.rb +74 -0
- data/lib/active_record/migration/command_recorder.rb +166 -91
- data/lib/active_record/migration/compatibility.rb +244 -0
- data/lib/active_record/migration/join_table.rb +8 -7
- data/lib/active_record/migration.rb +623 -305
- data/lib/active_record/model_schema.rb +313 -112
- data/lib/active_record/nested_attributes.rb +263 -223
- data/lib/active_record/no_touching.rb +15 -2
- data/lib/active_record/null_relation.rb +24 -38
- data/lib/active_record/persistence.rb +557 -126
- data/lib/active_record/query_cache.rb +19 -23
- data/lib/active_record/querying.rb +44 -30
- data/lib/active_record/railtie.rb +143 -44
- data/lib/active_record/railties/collection_cache_association_loading.rb +34 -0
- data/lib/active_record/railties/console_sandbox.rb +2 -0
- data/lib/active_record/railties/controller_runtime.rb +34 -33
- data/lib/active_record/railties/databases.rake +331 -185
- data/lib/active_record/readonly_attributes.rb +5 -4
- data/lib/active_record/reflection.rb +430 -281
- data/lib/active_record/relation/batches/batch_enumerator.rb +69 -0
- data/lib/active_record/relation/batches.rb +206 -55
- data/lib/active_record/relation/calculations.rb +268 -254
- data/lib/active_record/relation/delegation.rb +75 -84
- data/lib/active_record/relation/finder_methods.rb +285 -241
- data/lib/active_record/relation/from_clause.rb +30 -0
- data/lib/active_record/relation/merger.rb +78 -88
- data/lib/active_record/relation/predicate_builder/array_handler.rb +27 -26
- data/lib/active_record/relation/predicate_builder/association_query_value.rb +43 -0
- data/lib/active_record/relation/predicate_builder/base_handler.rb +18 -0
- data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +19 -0
- data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +53 -0
- data/lib/active_record/relation/predicate_builder/range_handler.rb +22 -0
- data/lib/active_record/relation/predicate_builder/relation_handler.rb +7 -1
- data/lib/active_record/relation/predicate_builder.rb +110 -119
- data/lib/active_record/relation/query_attribute.rb +50 -0
- data/lib/active_record/relation/query_methods.rb +603 -397
- data/lib/active_record/relation/record_fetch_warning.rb +51 -0
- data/lib/active_record/relation/spawn_methods.rb +11 -14
- data/lib/active_record/relation/where_clause.rb +189 -0
- data/lib/active_record/relation/where_clause_factory.rb +33 -0
- data/lib/active_record/relation.rb +530 -341
- data/lib/active_record/result.rb +79 -43
- data/lib/active_record/runtime_registry.rb +6 -4
- data/lib/active_record/sanitization.rb +144 -121
- data/lib/active_record/schema.rb +21 -24
- data/lib/active_record/schema_dumper.rb +112 -93
- data/lib/active_record/schema_migration.rb +24 -17
- data/lib/active_record/scoping/default.rb +98 -83
- data/lib/active_record/scoping/named.rb +86 -33
- data/lib/active_record/scoping.rb +45 -27
- data/lib/active_record/secure_token.rb +40 -0
- data/lib/active_record/serialization.rb +5 -5
- data/lib/active_record/statement_cache.rb +73 -36
- data/lib/active_record/store.rb +127 -42
- data/lib/active_record/suppressor.rb +61 -0
- data/lib/active_record/table_metadata.rb +90 -0
- data/lib/active_record/tasks/database_tasks.rb +307 -100
- data/lib/active_record/tasks/mysql_database_tasks.rb +55 -100
- data/lib/active_record/tasks/postgresql_database_tasks.rb +80 -41
- data/lib/active_record/tasks/sqlite_database_tasks.rb +37 -16
- data/lib/active_record/test_databases.rb +23 -0
- data/lib/active_record/test_fixtures.rb +225 -0
- data/lib/active_record/timestamp.rb +86 -41
- data/lib/active_record/touch_later.rb +65 -0
- data/lib/active_record/transactions.rb +223 -157
- data/lib/active_record/translation.rb +3 -1
- data/lib/active_record/type/adapter_specific_registry.rb +126 -0
- data/lib/active_record/type/date.rb +4 -45
- data/lib/active_record/type/date_time.rb +4 -49
- data/lib/active_record/type/decimal_without_scale.rb +6 -2
- data/lib/active_record/type/hash_lookup_type_map.rb +5 -4
- data/lib/active_record/type/internal/timezone.rb +17 -0
- data/lib/active_record/type/json.rb +30 -0
- data/lib/active_record/type/serialized.rb +23 -15
- data/lib/active_record/type/text.rb +2 -2
- data/lib/active_record/type/time.rb +11 -16
- data/lib/active_record/type/type_map.rb +16 -19
- data/lib/active_record/type/unsigned_integer.rb +9 -8
- data/lib/active_record/type.rb +77 -23
- data/lib/active_record/type_caster/connection.rb +34 -0
- data/lib/active_record/type_caster/map.rb +20 -0
- data/lib/active_record/type_caster.rb +9 -0
- data/lib/active_record/validations/absence.rb +25 -0
- data/lib/active_record/validations/associated.rb +12 -4
- data/lib/active_record/validations/length.rb +26 -0
- data/lib/active_record/validations/presence.rb +14 -13
- data/lib/active_record/validations/uniqueness.rb +42 -55
- data/lib/active_record/validations.rb +38 -35
- data/lib/active_record/version.rb +3 -1
- data/lib/active_record.rb +42 -22
- data/lib/arel/alias_predication.rb +9 -0
- data/lib/arel/attributes/attribute.rb +37 -0
- data/lib/arel/attributes.rb +22 -0
- data/lib/arel/collectors/bind.rb +24 -0
- data/lib/arel/collectors/composite.rb +31 -0
- data/lib/arel/collectors/plain_string.rb +20 -0
- data/lib/arel/collectors/sql_string.rb +20 -0
- data/lib/arel/collectors/substitute_binds.rb +28 -0
- data/lib/arel/crud.rb +42 -0
- data/lib/arel/delete_manager.rb +18 -0
- data/lib/arel/errors.rb +9 -0
- data/lib/arel/expressions.rb +29 -0
- data/lib/arel/factory_methods.rb +49 -0
- data/lib/arel/insert_manager.rb +49 -0
- data/lib/arel/math.rb +45 -0
- data/lib/arel/nodes/and.rb +32 -0
- data/lib/arel/nodes/ascending.rb +23 -0
- data/lib/arel/nodes/binary.rb +52 -0
- data/lib/arel/nodes/bind_param.rb +36 -0
- data/lib/arel/nodes/case.rb +55 -0
- data/lib/arel/nodes/casted.rb +50 -0
- data/lib/arel/nodes/comment.rb +29 -0
- data/lib/arel/nodes/count.rb +12 -0
- data/lib/arel/nodes/delete_statement.rb +45 -0
- data/lib/arel/nodes/descending.rb +23 -0
- data/lib/arel/nodes/equality.rb +18 -0
- data/lib/arel/nodes/extract.rb +24 -0
- data/lib/arel/nodes/false.rb +16 -0
- data/lib/arel/nodes/full_outer_join.rb +8 -0
- data/lib/arel/nodes/function.rb +44 -0
- data/lib/arel/nodes/grouping.rb +8 -0
- data/lib/arel/nodes/in.rb +8 -0
- data/lib/arel/nodes/infix_operation.rb +80 -0
- data/lib/arel/nodes/inner_join.rb +8 -0
- data/lib/arel/nodes/insert_statement.rb +37 -0
- data/lib/arel/nodes/join_source.rb +20 -0
- data/lib/arel/nodes/matches.rb +18 -0
- data/lib/arel/nodes/named_function.rb +23 -0
- data/lib/arel/nodes/node.rb +50 -0
- data/lib/arel/nodes/node_expression.rb +13 -0
- data/lib/arel/nodes/outer_join.rb +8 -0
- data/lib/arel/nodes/over.rb +15 -0
- data/lib/arel/nodes/regexp.rb +16 -0
- data/lib/arel/nodes/right_outer_join.rb +8 -0
- data/lib/arel/nodes/select_core.rb +67 -0
- data/lib/arel/nodes/select_statement.rb +41 -0
- data/lib/arel/nodes/sql_literal.rb +16 -0
- data/lib/arel/nodes/string_join.rb +11 -0
- data/lib/arel/nodes/table_alias.rb +27 -0
- data/lib/arel/nodes/terminal.rb +16 -0
- data/lib/arel/nodes/true.rb +16 -0
- data/lib/arel/nodes/unary.rb +45 -0
- data/lib/arel/nodes/unary_operation.rb +20 -0
- data/lib/arel/nodes/unqualified_column.rb +22 -0
- data/lib/arel/nodes/update_statement.rb +41 -0
- data/lib/arel/nodes/values_list.rb +9 -0
- data/lib/arel/nodes/window.rb +126 -0
- data/lib/arel/nodes/with.rb +11 -0
- data/lib/arel/nodes.rb +68 -0
- data/lib/arel/order_predications.rb +13 -0
- data/lib/arel/predications.rb +256 -0
- data/lib/arel/select_manager.rb +271 -0
- data/lib/arel/table.rb +110 -0
- data/lib/arel/tree_manager.rb +72 -0
- data/lib/arel/update_manager.rb +34 -0
- data/lib/arel/visitors/depth_first.rb +203 -0
- data/lib/arel/visitors/dot.rb +296 -0
- data/lib/arel/visitors/ibm_db.rb +34 -0
- data/lib/arel/visitors/informix.rb +62 -0
- data/lib/arel/visitors/mssql.rb +156 -0
- data/lib/arel/visitors/mysql.rb +83 -0
- data/lib/arel/visitors/oracle.rb +158 -0
- data/lib/arel/visitors/oracle12.rb +65 -0
- data/lib/arel/visitors/postgresql.rb +109 -0
- data/lib/arel/visitors/sqlite.rb +38 -0
- data/lib/arel/visitors/to_sql.rb +888 -0
- data/lib/arel/visitors/visitor.rb +45 -0
- data/lib/arel/visitors/where_sql.rb +22 -0
- data/lib/arel/visitors.rb +20 -0
- data/lib/arel/window_predications.rb +9 -0
- data/lib/arel.rb +62 -0
- data/lib/rails/generators/active_record/application_record/application_record_generator.rb +26 -0
- data/lib/rails/generators/active_record/application_record/templates/application_record.rb.tt +5 -0
- data/lib/rails/generators/active_record/migration/migration_generator.rb +42 -37
- data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +24 -0
- data/lib/rails/generators/active_record/migration/templates/{migration.rb → migration.rb.tt} +11 -2
- data/lib/rails/generators/active_record/migration.rb +30 -1
- data/lib/rails/generators/active_record/model/model_generator.rb +18 -22
- data/lib/rails/generators/active_record/model/templates/model.rb.tt +22 -0
- data/lib/rails/generators/active_record/model/templates/{module.rb → module.rb.tt} +0 -0
- data/lib/rails/generators/active_record.rb +7 -5
- metadata +168 -59
- data/lib/active_record/associations/preloader/belongs_to.rb +0 -17
- data/lib/active_record/associations/preloader/collection_association.rb +0 -24
- data/lib/active_record/associations/preloader/has_many.rb +0 -17
- data/lib/active_record/associations/preloader/has_many_through.rb +0 -19
- data/lib/active_record/associations/preloader/has_one.rb +0 -23
- data/lib/active_record/associations/preloader/has_one_through.rb +0 -9
- data/lib/active_record/associations/preloader/singular_association.rb +0 -21
- data/lib/active_record/attribute.rb +0 -163
- data/lib/active_record/attribute_set/builder.rb +0 -106
- data/lib/active_record/attribute_set.rb +0 -81
- data/lib/active_record/connection_adapters/mysql_adapter.rb +0 -498
- data/lib/active_record/connection_adapters/postgresql/array_parser.rb +0 -93
- data/lib/active_record/connection_adapters/postgresql/oid/float.rb +0 -21
- data/lib/active_record/connection_adapters/postgresql/oid/integer.rb +0 -11
- data/lib/active_record/connection_adapters/postgresql/oid/json.rb +0 -35
- data/lib/active_record/connection_adapters/postgresql/oid/time.rb +0 -11
- data/lib/active_record/railties/jdbcmysql_error.rb +0 -16
- data/lib/active_record/serializers/xml_serializer.rb +0 -193
- data/lib/active_record/type/big_integer.rb +0 -13
- data/lib/active_record/type/binary.rb +0 -50
- data/lib/active_record/type/boolean.rb +0 -31
- data/lib/active_record/type/decimal.rb +0 -64
- data/lib/active_record/type/decorator.rb +0 -14
- data/lib/active_record/type/float.rb +0 -19
- data/lib/active_record/type/integer.rb +0 -59
- data/lib/active_record/type/mutable.rb +0 -16
- data/lib/active_record/type/numeric.rb +0 -36
- data/lib/active_record/type/string.rb +0 -40
- data/lib/active_record/type/time_value.rb +0 -38
- data/lib/active_record/type/value.rb +0 -110
- data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +0 -19
- data/lib/rails/generators/active_record/model/templates/model.rb +0 -10
data/CHANGELOG.md
CHANGED
@@ -1,2033 +1,1197 @@
|
|
1
|
-
## Rails
|
1
|
+
## Rails 6.0.3 (May 06, 2020) ##
|
2
2
|
|
3
|
-
*
|
4
|
-
|
5
|
-
|
6
|
-
## Rails 4.2.11 (November 27, 2018) ##
|
7
|
-
|
8
|
-
* No changes.
|
9
|
-
|
10
|
-
|
11
|
-
## Rails 4.2.10 (September 27, 2017) ##
|
12
|
-
|
13
|
-
* `Relation#joins` is no longer affected by the target model's
|
14
|
-
`current_scope`, with the exception of `unscoped`.
|
15
|
-
|
16
|
-
Fixes #29338.
|
17
|
-
|
18
|
-
*Sean Griffin*
|
19
|
-
|
20
|
-
## Rails 4.2.9 (June 26, 2017) ##
|
21
|
-
|
22
|
-
* Fix regression caused by `collection_singular_ids=` ignoring different primary key on relationship.
|
23
|
-
|
24
|
-
*Nick Pezza*
|
25
|
-
|
26
|
-
* Fix `rake db:schema:load` with subdirectories.
|
27
|
-
|
28
|
-
*Ryuta Kamizono*
|
29
|
-
|
30
|
-
* Fix `rake db:migrate:status` with subdirectories.
|
31
|
-
|
32
|
-
*Ryuta Kamizono*
|
33
|
-
|
34
|
-
* Fix regression of #1969 with SELECT aliases in HAVING clause.
|
35
|
-
|
36
|
-
*Eugene Kenny*
|
37
|
-
|
38
|
-
* Fix `wait_timeout` to configurable for mysql2 adapter.
|
39
|
-
|
40
|
-
Fixes #26556.
|
41
|
-
|
42
|
-
*Ryuta Kamizono*
|
43
|
-
|
44
|
-
* Make `table_name=` reset current statement cache,
|
45
|
-
so queries are not run against the previous table name.
|
46
|
-
|
47
|
-
*namusyaka*
|
48
|
-
|
49
|
-
|
50
|
-
## Rails 4.2.8 (February 21, 2017) ##
|
51
|
-
|
52
|
-
* Using a mysql2 connection after it fails to reconnect will now have an error message
|
53
|
-
saying the connection is closed rather than an undefined method error message.
|
54
|
-
|
55
|
-
*Dylan Thacker-Smith*
|
56
|
-
|
57
|
-
* Bust Model.attribute_names cache when resetting column information
|
58
|
-
|
59
|
-
*James Coleman*
|
60
|
-
|
61
|
-
* Fix query caching when type information is reset
|
62
|
-
|
63
|
-
Backports ancillary fix in 5.0.
|
64
|
-
|
65
|
-
*James Coleman*
|
66
|
-
|
67
|
-
* Allow `joins` to be unscoped.
|
68
|
-
|
69
|
-
Fixes #13775.
|
70
|
-
|
71
|
-
*Takashi Kokubun*
|
72
|
-
|
73
|
-
* Hashes can once again be passed to setters of `composed_of`, if all of the
|
74
|
-
mapping methods are methods implemented on `Hash`.
|
75
|
-
|
76
|
-
Fixes #25978.
|
77
|
-
|
78
|
-
*Sean Griffin*
|
79
|
-
|
80
|
-
|
81
|
-
## Rails 4.2.7 (July 12, 2016) ##
|
82
|
-
|
83
|
-
* Inspecting an object with an associated array of over 10 elements no longer
|
84
|
-
truncates the array, preventing `inspect` from looping infinitely in some
|
85
|
-
cases.
|
86
|
-
|
87
|
-
*Kevin McPhillips*
|
88
|
-
|
89
|
-
* Ensure hashes can be assigned to attributes created using `composed_of`.
|
90
|
-
Fixes #25210.
|
91
|
-
|
92
|
-
*Sean Griffin*
|
93
|
-
|
94
|
-
* Queries such as `Computer.joins(:monitor).group(:status).count` will now be
|
95
|
-
interpreted as `Computer.joins(:monitor).group('computers.status').count`
|
96
|
-
so that when `Computer` and `Monitor` have both `status` columns we don't
|
97
|
-
have conflicts in projection.
|
98
|
-
|
99
|
-
*Rafael Sales*
|
100
|
-
|
101
|
-
* ActiveRecord::Relation#count: raise an ArgumentError when finder options
|
102
|
-
are specified or an ActiveRecord::StatementInvalid when an invalid type
|
103
|
-
is provided for a column name (e.g. a Hash).
|
104
|
-
|
105
|
-
Fixes #20434
|
106
|
-
|
107
|
-
*Konstantinos Rousis*
|
108
|
-
|
109
|
-
* Correctly pass MySQL options when using structure_dump or structure_load
|
110
|
-
|
111
|
-
Specifically, it fixes an issue when using SSL authentication.
|
112
|
-
|
113
|
-
*Alex Coomans*
|
114
|
-
|
115
|
-
|
116
|
-
## Rails 4.2.6 (March 07, 2016) ##
|
117
|
-
|
118
|
-
* Fix a bug where using `t.foreign_key` twice with the same `to_table` within
|
119
|
-
the same table definition would only create one foreign key.
|
120
|
-
|
121
|
-
*George Millo*
|
122
|
-
|
123
|
-
* Fix regression in dirty attribute tracking after #dup. Changes to the
|
124
|
-
clone no longer show as changed attributes in the original object.
|
125
|
-
|
126
|
-
*Dominic Cleal*
|
127
|
-
|
128
|
-
* Fix regression when loading fixture files with symbol keys.
|
129
|
-
|
130
|
-
Closes #22584.
|
131
|
-
|
132
|
-
*Yves Senn*
|
133
|
-
|
134
|
-
* Fix `rake db:structure:dump` on Postgres when multiple schemas are used.
|
135
|
-
|
136
|
-
Fixes #22346.
|
137
|
-
|
138
|
-
*Nick Muerdter*, *ckoenig*
|
139
|
-
|
140
|
-
* Introduce `connection.data_sources` and `connection.data_source_exists?`.
|
141
|
-
These methods determine what relations can be used to back Active Record
|
142
|
-
models (usually tables and views).
|
143
|
-
|
144
|
-
*Yves Senn*, *Matthew Draper*
|
145
|
-
|
146
|
-
|
147
|
-
## Rails 4.2.5.2 (February 26, 2016) ##
|
148
|
-
|
149
|
-
* No changes.
|
150
|
-
|
151
|
-
|
152
|
-
## Rails 4.2.5.1 (January 25, 2015) ##
|
153
|
-
|
154
|
-
* No changes.
|
155
|
-
|
156
|
-
|
157
|
-
## Rails 4.2.5 (November 12, 2015) ##
|
158
|
-
|
159
|
-
* No longer pass deprecated option `-i` to `pg_dump`.
|
160
|
-
|
161
|
-
*Paul Sadauskas*
|
162
|
-
|
163
|
-
* Set `scope.reordering_value` to `true` if :reordering values are specified.
|
164
|
-
|
165
|
-
Fixes #21886.
|
166
|
-
|
167
|
-
*Hiroaki Izu*
|
168
|
-
|
169
|
-
* Avoid disabling errors on the PostgreSQL connection when enabling the
|
170
|
-
standard_conforming_strings setting. Errors were previously disabled because
|
171
|
-
the setting wasn't writable in Postgres 8.1 and didn't exist in earlier
|
172
|
-
versions. Now Rails only supports Postgres 8.2+ we're fine to assume the
|
173
|
-
setting exists. Disabling errors caused problems when using a connection
|
174
|
-
pooling tool like PgBouncer because it's not guaranteed to have the same
|
175
|
-
connection between calls to `execute` and it could leave the connection
|
176
|
-
with errors disabled.
|
177
|
-
|
178
|
-
Fixes #22101.
|
179
|
-
|
180
|
-
*Harry Marr*
|
181
|
-
|
182
|
-
* Includes HABTM returns correct size now. It's caused by the join dependency
|
183
|
-
only instantiates one HABTM object because the join table hasn't a primary key.
|
184
|
-
|
185
|
-
Fixes #16032.
|
186
|
-
|
187
|
-
Examples:
|
188
|
-
|
189
|
-
before:
|
190
|
-
|
191
|
-
Project.first.salaried_developers.size # => 3
|
192
|
-
Project.includes(:salaried_developers).first.salaried_developers.size # => 1
|
193
|
-
|
194
|
-
after:
|
195
|
-
|
196
|
-
Project.first.salaried_developers.size # => 3
|
197
|
-
Project.includes(:salaried_developers).first.salaried_developers.size # => 3
|
198
|
-
|
199
|
-
*Bigxiang*
|
200
|
-
|
201
|
-
* Descriptive error message when fixtures contain a missing column.
|
202
|
-
|
203
|
-
Closes #21201.
|
204
|
-
|
205
|
-
*Yves Senn*
|
206
|
-
|
207
|
-
* `bin/rake db:migrate` uses
|
208
|
-
`ActiveRecord::Tasks::DatabaseTasks.migrations_paths` instead of
|
209
|
-
`Migrator.migrations_paths`.
|
210
|
-
|
211
|
-
*Tobias Bielohlawek*
|
212
|
-
|
213
|
-
* Fix `rewhere` in a `has_many` association.
|
214
|
-
|
215
|
-
Fixes #21955.
|
216
|
-
|
217
|
-
*Josh Branchaud*, *Kal*
|
218
|
-
|
219
|
-
* Added run_cmd class method to ActiveRecord::Tasks::DatabaseTasks for
|
220
|
-
drying up Kernel.system() calls within this namespace and to avoid
|
221
|
-
shell expansion by using a paramter list instead of string as arguments
|
222
|
-
for Kernel.system(). Thanks to Nate Berkopec for supply patch to get
|
223
|
-
test units passing.
|
224
|
-
|
225
|
-
*Bryan Paxton*
|
226
|
-
|
227
|
-
* Avoid leaking the first relation we call `first` on, per model.
|
228
|
-
|
229
|
-
Fixes #21921.
|
230
|
-
|
231
|
-
*Matthew Draper*, *Jean Boussier*
|
232
|
-
|
233
|
-
* Allow deserialization of Active Record models that were YAML encoded prior
|
234
|
-
to Rails 4.2
|
235
|
-
|
236
|
-
*Sean Griffin*
|
237
|
-
|
238
|
-
* Correctly apply `unscope` when preloading through associations.
|
239
|
-
|
240
|
-
*Jimmy Bourassa*
|
241
|
-
|
242
|
-
* Ensure `select` quotes aliased attributes, even when using `from`.
|
243
|
-
|
244
|
-
Fixes #21488
|
245
|
-
|
246
|
-
*Sean Griffin & @johanlunds*
|
247
|
-
|
248
|
-
* Correct query for PostgreSQL 8.2 compatibility.
|
249
|
-
|
250
|
-
*Ben Murphy*, *Matthew Draper*
|
251
|
-
|
252
|
-
* Uniqueness validator raises descriptive error when running on a persisted
|
253
|
-
record without primary key.
|
254
|
-
|
255
|
-
Closes #21304.
|
256
|
-
|
257
|
-
*Yves Senn*
|
258
|
-
|
259
|
-
|
260
|
-
## Rails 4.2.4 (August 24, 2015) ##
|
261
|
-
|
262
|
-
* Skip statement cache on through association reader.
|
263
|
-
|
264
|
-
If the through class has default scopes we should skip the statement
|
265
|
-
cache.
|
266
|
-
|
267
|
-
Closes #20745.
|
268
|
-
|
269
|
-
*Rafael Mendonça França*
|
270
|
-
|
271
|
-
* Fixes #19420. When generating schema.rb using Postgres BigInt[] data type
|
272
|
-
the limit: 8 was not coming through. This caused it to become Int[] data type
|
273
|
-
after doing a rebuild off of schema.rb.
|
274
|
-
|
275
|
-
*Jake Waller*
|
276
|
-
|
277
|
-
* Fix state being carried over from previous transaction.
|
278
|
-
|
279
|
-
Considering the following example where `name` is a required attribute.
|
280
|
-
Before we had `new_record?` returning `true` for a persisted record:
|
281
|
-
|
282
|
-
author = Author.create! name: 'foo'
|
283
|
-
author.name = nil
|
284
|
-
author.save # => false
|
285
|
-
author.new_record? # => true
|
286
|
-
|
287
|
-
Fixes #20824.
|
288
|
-
|
289
|
-
*Roque Pinel*
|
290
|
-
|
291
|
-
* Correctly ignore `mark_for_destruction` when `autosave` isn't set to `true`
|
292
|
-
when validating associations.
|
293
|
-
|
294
|
-
Fixes #20882.
|
295
|
-
|
296
|
-
*Sean Griffin*
|
297
|
-
|
298
|
-
* Fix through associations using scopes having the scope merged multiple
|
299
|
-
times.
|
300
|
-
|
301
|
-
Fixes #20721.
|
302
|
-
Fixes #20727.
|
303
|
-
|
304
|
-
*Sean Griffin*
|
305
|
-
|
306
|
-
* `ActiveRecord::Base.dump_schema_after_migration` applies migration tasks
|
307
|
-
other than `db:migrate`. (eg. `db:rollback`, `db:migrate:dup`, ...)
|
308
|
-
|
309
|
-
Fixes #20743.
|
310
|
-
|
311
|
-
*Yves Senn*
|
312
|
-
|
313
|
-
* Correctly raise `ActiveRecord::AssociationTypeMismatch` when assigning
|
314
|
-
a wrong type to a namespaced association.
|
315
|
-
|
316
|
-
Fixes #20545.
|
317
|
-
|
318
|
-
*Diego Carrion*
|
319
|
-
|
320
|
-
* Prevent error when using `force_reload: true` on an unassigned polymorphic
|
321
|
-
belongs_to association.
|
322
|
-
|
323
|
-
Fixes #20426.
|
324
|
-
|
325
|
-
*James Dabbs*
|
326
|
-
|
327
|
-
|
328
|
-
## Rails 4.2.3 (June 25, 2015) ##
|
329
|
-
|
330
|
-
* Let `WITH` queries (Common Table Expressions) be explainable.
|
331
|
-
|
332
|
-
*Vladimir Kochnev*
|
333
|
-
|
334
|
-
* Fix n+1 query problem when eager loading nil associations (fixes #18312)
|
335
|
-
|
336
|
-
*Sammy Larbi*
|
337
|
-
|
338
|
-
* Fixed an error which would occur in dirty checking when calling
|
339
|
-
`update_attributes` from a getter.
|
340
|
-
|
341
|
-
Fixes #20531.
|
342
|
-
|
343
|
-
*Sean Griffin*
|
344
|
-
|
345
|
-
* Ensure symbols passed to `ActiveRecord::Relation#select` are always treated
|
346
|
-
as columns.
|
347
|
-
|
348
|
-
Fixes #20360.
|
349
|
-
|
350
|
-
*Sean Griffin*
|
351
|
-
|
352
|
-
* Clear query cache when `ActiveRecord::Base#reload` is called.
|
353
|
-
|
354
|
-
*Shane Hender*
|
355
|
-
|
356
|
-
* Pass `:extend` option for `has_and_belongs_to_many` associations to the
|
357
|
-
underlying `has_many :through`.
|
358
|
-
|
359
|
-
*Jaehyun Shin*
|
360
|
-
|
361
|
-
* Make `unscope` aware of "less than" and "greater than" conditions.
|
362
|
-
|
363
|
-
*TAKAHASHI Kazuaki*
|
364
|
-
|
365
|
-
* Revert behavior of `db:schema:load` back to loading the full
|
366
|
-
environment. This ensures that initializers are run.
|
367
|
-
|
368
|
-
Fixes #19545.
|
369
|
-
|
370
|
-
*Yves Senn*
|
371
|
-
|
372
|
-
* Fix missing index when using `timestamps` with the `index` option.
|
373
|
-
|
374
|
-
The `index` option used with `timestamps` should be passed to both
|
375
|
-
`column` definitions for `created_at` and `updated_at` rather than just
|
376
|
-
the first.
|
377
|
-
|
378
|
-
*Paul Mucur*
|
379
|
-
|
380
|
-
* Rename `:class` to `:anonymous_class` in association options.
|
381
|
-
|
382
|
-
Fixes #19659.
|
383
|
-
|
384
|
-
*Andrew White*
|
385
|
-
|
386
|
-
* Fixed a bug where uniqueness validations would error on out of range values,
|
387
|
-
even if an validation should have prevented it from hitting the database.
|
388
|
-
|
389
|
-
*Andrey Voronkov*
|
390
|
-
|
391
|
-
* Foreign key related methods in the migration DSL respect
|
392
|
-
`ActiveRecord::Base.pluralize_table_names = false`.
|
393
|
-
|
394
|
-
Fixes #19643.
|
395
|
-
|
396
|
-
*Mehmet Emin İNAÇ*
|
397
|
-
|
398
|
-
* Reduce memory usage from loading types on pg.
|
399
|
-
|
400
|
-
Fixes #19578.
|
401
|
-
|
402
|
-
*Sean Griffin*
|
403
|
-
|
404
|
-
* Fix referencing wrong table aliases while joining tables of has many through
|
405
|
-
association (only when calling calculation methods).
|
406
|
-
|
407
|
-
Fixes #19276.
|
408
|
-
|
409
|
-
*pinglamb*
|
410
|
-
|
411
|
-
* Don't attempt to update counter caches, when the column wasn't selected.
|
412
|
-
|
413
|
-
Fixes #19437.
|
414
|
-
|
415
|
-
*Sean Griffin*
|
416
|
-
|
417
|
-
* Correctly persist a serialized attribute that has been returned to
|
418
|
-
its default value by an in-place modification.
|
419
|
-
|
420
|
-
Fixes #19467.
|
421
|
-
|
422
|
-
*Matthew Draper*
|
423
|
-
|
424
|
-
* Fix default `format` value in `ActiveRecord::Tasks::DatabaseTasks#schema_file`.
|
425
|
-
|
426
|
-
*James Cox*
|
427
|
-
|
428
|
-
* Dont enroll records in the transaction if they dont have commit callbacks.
|
429
|
-
That was causing a memory grow problem when creating a lot of records inside a transaction.
|
430
|
-
|
431
|
-
Fixes #15549.
|
432
|
-
|
433
|
-
*Will Bryant*, *Aaron Patterson*
|
434
|
-
|
435
|
-
* Correctly create through records when created on a has many through
|
436
|
-
association when using `where`.
|
437
|
-
|
438
|
-
Fixes #19073.
|
439
|
-
|
440
|
-
*Sean Griffin*
|
441
|
-
|
442
|
-
|
443
|
-
## Rails 4.2.2 (June 16, 2015) ##
|
444
|
-
|
445
|
-
* No Changes *
|
446
|
-
|
447
|
-
|
448
|
-
## Rails 4.2.1 (March 19, 2015) ##
|
449
|
-
|
450
|
-
* Fixed ActiveRecord::Relation#becomes! and changed_attributes issues for type column
|
451
|
-
|
452
|
-
Fixes #17139.
|
453
|
-
|
454
|
-
*Miklos Fazekas*
|
455
|
-
|
456
|
-
* `remove_reference` with `foreign_key: true` removes the foreign key before
|
457
|
-
removing the column. This fixes a bug where it was not possible to remove
|
458
|
-
the column on MySQL.
|
459
|
-
|
460
|
-
Fixes #18664.
|
461
|
-
|
462
|
-
*Yves Senn*
|
463
|
-
|
464
|
-
* Add a `:foreign_key` option to `references` and associated migration
|
465
|
-
methods. The model and migration generators now use this option, rather than
|
466
|
-
the `add_foreign_key` form.
|
467
|
-
|
468
|
-
*Sean Griffin*
|
469
|
-
|
470
|
-
* Fix rounding problem for PostgreSQL timestamp column.
|
471
|
-
|
472
|
-
If timestamp column have the precision, it need to format according to
|
473
|
-
the precision of timestamp column.
|
474
|
-
|
475
|
-
*Ryuta Kamizono*
|
476
|
-
|
477
|
-
* Respect the database default charset for `schema_migrations` table.
|
478
|
-
|
479
|
-
The charset of `version` column in `schema_migrations` table is depend
|
480
|
-
on the database default charset and collation rather than the encoding
|
481
|
-
of the connection.
|
482
|
-
|
483
|
-
*Ryuta Kamizono*
|
484
|
-
|
485
|
-
* Respect custom primary keys for associations when calling `Relation#where`
|
486
|
-
|
487
|
-
Fixes #18813.
|
488
|
-
|
489
|
-
*Sean Griffin*
|
490
|
-
|
491
|
-
* Fixed several edge cases which could result in a counter cache updating
|
492
|
-
twice or not updating at all for `has_many` and `has_many :through`.
|
493
|
-
|
494
|
-
Fixes #10865.
|
495
|
-
|
496
|
-
*Sean Griffin*
|
497
|
-
|
498
|
-
* Foreign keys added by migrations were given random, generated names. This
|
499
|
-
meant a different `structure.sql` would be generated every time a developer
|
500
|
-
ran migrations on their machine.
|
501
|
-
|
502
|
-
The generated part of foreign key names is now a hash of the table name and
|
503
|
-
column name, which is consistent every time you run the migration.
|
504
|
-
|
505
|
-
*Chris Sinjakli*
|
506
|
-
|
507
|
-
* Fixed ActiveRecord::Relation#group method when argument is SQL reserved key word:
|
508
|
-
|
509
|
-
SplitTest.group(:key).count
|
510
|
-
Property.group(:value).count
|
511
|
-
|
512
|
-
*Bogdan Gusiev*
|
513
|
-
|
514
|
-
* Don't define autosave association callbacks twice from
|
515
|
-
`accepts_nested_attributes_for`.
|
516
|
-
|
517
|
-
Fixes #18704.
|
518
|
-
|
519
|
-
*Sean Griffin*
|
520
|
-
|
521
|
-
* Integer types will no longer raise a `RangeError` when assigning an
|
522
|
-
attribute, but will instead raise when going to the database.
|
523
|
-
|
524
|
-
Fixes several vague issues which were never reported directly. See the
|
525
|
-
commit message from the commit which added this line for some examples.
|
526
|
-
|
527
|
-
*Sean Griffin*
|
528
|
-
|
529
|
-
* Values which would error while being sent to the database (such as an
|
530
|
-
ASCII-8BIT string with invalid UTF-8 bytes on Sqlite3), no longer error on
|
531
|
-
assignment. They will still error when sent to the database, but you are
|
532
|
-
given the ability to re-assign it to a valid value.
|
533
|
-
|
534
|
-
Fixes #18580.
|
535
|
-
|
536
|
-
*Sean Griffin*
|
537
|
-
|
538
|
-
* Don't remove join dependencies in `Relation#exists?`
|
539
|
-
|
540
|
-
Fixes #18632.
|
541
|
-
|
542
|
-
*Sean Griffin*
|
543
|
-
|
544
|
-
* Invalid values assigned to a JSON column are assumed to be `nil`.
|
545
|
-
|
546
|
-
Fixes #18629.
|
547
|
-
|
548
|
-
*Sean Griffin*
|
549
|
-
|
550
|
-
* No longer issue deprecation warning when including a scope with extensions.
|
551
|
-
Previously every scope with extension methods was transformed into an
|
552
|
-
instance dependent scope. Including such a scope would wrongfully issue a
|
553
|
-
deprecation warning. This is no longer the case.
|
554
|
-
|
555
|
-
Fixes #18467.
|
556
|
-
|
557
|
-
*Yves Senn*
|
558
|
-
|
559
|
-
* Correctly use the type provided by `serialize` when updating records using
|
560
|
-
optimistic locking.
|
561
|
-
|
562
|
-
Fixes #18385.
|
3
|
+
* Recommend applications don't use the `database` kwarg in `connected_to`
|
563
4
|
|
564
|
-
|
565
|
-
|
566
|
-
* `attribute_will_change!` will no longer cause non-persistable attributes to
|
567
|
-
be sent to the database.
|
568
|
-
|
569
|
-
Fixes #18407.
|
570
|
-
|
571
|
-
*Sean Griffin*
|
572
|
-
|
573
|
-
* Format the datetime string according to the precision of the datetime field.
|
5
|
+
The database kwarg in `connected_to` was meant to be used for one-off scripts but is often used in requests. This is really dangerous because it re-establishes a connection every time. It's deprecated in 6.1 and will be removed in 6.2 without replacement. This change soft deprecates it in 6.0 by removing documentation.
|
574
6
|
|
575
|
-
|
7
|
+
*Eileen M. Uchitelle*
|
576
8
|
|
577
|
-
|
578
|
-
is ignored. In 5.6, it's rounded to `2014-08-17 12:30:01`:
|
9
|
+
* Fix support for PostgreSQL 11+ partitioned indexes.
|
579
10
|
|
580
|
-
|
11
|
+
*Sebastián Palma*
|
581
12
|
|
582
|
-
|
13
|
+
* Add support for beginless ranges, introduced in Ruby 2.7.
|
583
14
|
|
584
|
-
*
|
15
|
+
*Josh Goodall*
|
585
16
|
|
586
|
-
|
17
|
+
* Fix insert_all with enum values
|
587
18
|
|
588
|
-
|
19
|
+
Fixes #38716.
|
589
20
|
|
590
|
-
*
|
21
|
+
*Joel Blum*
|
591
22
|
|
592
|
-
*
|
23
|
+
* Regexp-escape table name for MS SQL
|
593
24
|
|
594
|
-
|
25
|
+
Add `Regexp.escape` to one method in ActiveRecord, so that table names with regular expression characters in them work as expected. Since MS SQL Server uses "[" and "]" to quote table and column names, and those characters are regular expression characters, methods like `pluck` and `select` fail in certain cases when used with the MS SQL Server adapter.
|
595
26
|
|
596
|
-
*
|
27
|
+
*Larry Reid*
|
597
28
|
|
598
|
-
*
|
29
|
+
* Store advisory locks on their own named connection.
|
599
30
|
|
600
|
-
|
31
|
+
Previously advisory locks were taken out against a connection when a migration started. This works fine in single database applications but doesn't work well when migrations need to open new connections which results in the lock getting dropped.
|
601
32
|
|
602
|
-
|
33
|
+
In order to fix this we are storing the advisory lock on a new connection with the connection specification name `AdisoryLockBase`. The caveat is that we need to maintain at least 2 connections to a database while migrations are running in order to do this.
|
603
34
|
|
604
|
-
|
35
|
+
*Eileen M. Uchitelle*, *John Crepezzi*
|
605
36
|
|
606
|
-
|
37
|
+
* Ensure `:reading` connections always raise if a write is attempted.
|
607
38
|
|
608
|
-
|
609
|
-
key is missing.
|
39
|
+
Now Rails will raise an `ActiveRecord::ReadOnlyError` if any connection on the reading handler attempts to make a write. If your reading role needs to write you should name the role something other than `:reading`.
|
610
40
|
|
611
|
-
|
41
|
+
*Eileen M. Uchitelle*
|
612
42
|
|
613
|
-
|
43
|
+
* Enforce fresh ETag header after a collection's contents change by adding
|
44
|
+
ActiveRecord::Relation#cache_key_with_version. This method will be used by
|
45
|
+
ActionController::ConditionalGet to ensure that when collection cache versioning
|
46
|
+
is enabled, requests using ConditionalGet don't return the same ETag header
|
47
|
+
after a collection is modified. Fixes #38078.
|
614
48
|
|
615
|
-
|
49
|
+
*Aaron Lipman*
|
616
50
|
|
617
|
-
|
51
|
+
* A database URL can now contain a querystring value that contains an equal sign. This is needed to support passing PostgresSQL `options`.
|
618
52
|
|
619
|
-
|
53
|
+
*Joshua Flanagan*
|
620
54
|
|
621
|
-
*
|
622
|
-
`ArgumentError: string contains null byte` exception with pg-0.18.
|
55
|
+
* Retain explicit selections on the base model after applying `includes` and `joins`.
|
623
56
|
|
624
|
-
|
57
|
+
Resolves #34889.
|
625
58
|
|
626
|
-
*
|
59
|
+
*Patrick Rebsch*
|
627
60
|
|
628
|
-
* When a table has a composite primary key, the `primary_key` method for
|
629
|
-
SQLite3 and PostgreSQL adapters was only returning the first field of the key.
|
630
|
-
Ensures that it will return nil instead, as Active Record doesn't support
|
631
|
-
composite primary keys.
|
632
61
|
|
633
|
-
|
62
|
+
## Rails 6.0.2.2 (March 19, 2020) ##
|
634
63
|
|
635
|
-
|
64
|
+
* No changes.
|
636
65
|
|
637
|
-
* Ensure `first!` and friends work on loaded associations.
|
638
66
|
|
639
|
-
|
67
|
+
## Rails 6.0.2.1 (December 18, 2019) ##
|
640
68
|
|
641
|
-
|
69
|
+
* No changes.
|
642
70
|
|
643
|
-
* Dump the default `nil` for PostgreSQL UUID primary key.
|
644
71
|
|
645
|
-
|
72
|
+
## Rails 6.0.2 (December 13, 2019) ##
|
646
73
|
|
647
|
-
*
|
648
|
-
|
74
|
+
* Share the same connection pool for primary and replica databases in the
|
75
|
+
transactional tests for the same database.
|
649
76
|
|
650
|
-
*
|
77
|
+
*Edouard Chin*
|
651
78
|
|
652
|
-
*
|
653
|
-
|
79
|
+
* Fix the preloader when one record is fetched using `after_initialize`
|
80
|
+
but not the entire collection.
|
654
81
|
|
655
|
-
|
82
|
+
*Bradley Price*
|
656
83
|
|
657
|
-
|
84
|
+
* Fix collection callbacks not terminating when `:abort` is thrown.
|
658
85
|
|
86
|
+
*Edouard Chin*, *Ryuta Kamizono*
|
659
87
|
|
660
|
-
|
88
|
+
* Correctly deprecate `where.not` working as NOR for relations.
|
661
89
|
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
90
|
+
12a9664 deprecated where.not working as NOR, however
|
91
|
+
doing a relation query like `where.not(relation: { ... })`
|
92
|
+
wouldn't be properly deprecated and `where.not` would work as
|
93
|
+
NAND instead.
|
666
94
|
|
667
|
-
*
|
95
|
+
*Edouard Chin*
|
668
96
|
|
669
|
-
* `db:
|
670
|
-
|
671
|
-
`db:test:prepare` will still purge the database.
|
97
|
+
* Fix `db:migrate` task with multiple databases to restore the connection
|
98
|
+
to the previous database.
|
672
99
|
|
673
|
-
|
100
|
+
The migrate task iterates and establish a connection over each db
|
101
|
+
resulting in the last one to be used by subsequent rake tasks.
|
102
|
+
We should reestablish a connection to the connection that was
|
103
|
+
established before the migrate tasks was run
|
674
104
|
|
675
|
-
*
|
105
|
+
*Edouard Chin*
|
676
106
|
|
677
|
-
* Fix
|
107
|
+
* Fix multi-threaded issue for `AcceptanceValidator`.
|
678
108
|
|
679
109
|
*Ryuta Kamizono*
|
680
110
|
|
681
|
-
* Add `foreign_type` option to `has_one` and `has_many` association macros.
|
682
|
-
|
683
|
-
This option enables to define the column name of associated object's type for polymorphic associations.
|
684
|
-
|
685
|
-
*Ulisses Almeida, Kassio Borges*
|
686
|
-
|
687
|
-
* `add_timestamps` and `remove_timestamps` now properly reversible with
|
688
|
-
options.
|
689
|
-
|
690
|
-
*Noam Gagliardi-Rabinovich*
|
691
|
-
|
692
|
-
* Bring back `db:test:prepare` to synchronize the test database schema.
|
693
|
-
|
694
|
-
Manual synchronization using `bin/rake db:test:prepare` is required
|
695
|
-
when a migration is rolled-back, edited and reapplied.
|
696
|
-
|
697
|
-
`ActiveRecord::Base.maintain_test_schema` now uses `db:test:prepare`
|
698
|
-
to synchronize the schema. Plugins can use this task as a hook to
|
699
|
-
provide custom behavior after the schema has been loaded.
|
700
|
-
|
701
|
-
NOTE: `test:prepare` runs before the schema is synchronized.
|
702
|
-
|
703
|
-
Fixes #17171, #15787.
|
704
|
-
|
705
|
-
*Yves Senn*
|
706
|
-
|
707
|
-
* Change `reflections` public api to return the keys as String objects.
|
708
|
-
|
709
|
-
Fixes #16928.
|
710
|
-
|
711
|
-
*arthurnn*
|
712
|
-
|
713
|
-
* Renaming a table in pg also renames the primary key index.
|
714
|
-
|
715
|
-
Fixes #12856
|
716
|
-
|
717
|
-
*Sean Griffin*
|
718
|
-
|
719
|
-
* Make it possible to access fixtures excluded by a `default_scope`.
|
720
|
-
|
721
|
-
*Yves Senn*
|
722
111
|
|
723
|
-
|
724
|
-
conditions on the joined association.
|
112
|
+
## Rails 6.0.1 (November 5, 2019) ##
|
725
113
|
|
726
|
-
|
114
|
+
* Common Table Expressions are allowed on read-only connections.
|
727
115
|
|
728
|
-
*
|
116
|
+
*Chris Morris*
|
729
117
|
|
730
|
-
|
118
|
+
* New record instantiation respects `unscope`.
|
731
119
|
|
732
|
-
*
|
733
|
-
the owner has been saved so that the proxy is not cached without the
|
734
|
-
owner's id.
|
120
|
+
*Ryuta Kamizono*
|
735
121
|
|
736
|
-
|
122
|
+
* Fixed a case where `find_in_batches` could halt too early.
|
737
123
|
|
738
|
-
*
|
124
|
+
*Takayuki Nakata*
|
739
125
|
|
740
|
-
|
126
|
+
* Autosaved associations always perform validations when a custom validation
|
127
|
+
context is used.
|
741
128
|
|
742
|
-
*
|
129
|
+
*Tekin Suleyman*
|
743
130
|
|
744
|
-
|
131
|
+
* `sql.active_record` notifications now include the `:connection` in
|
132
|
+
their payloads.
|
745
133
|
|
746
|
-
|
134
|
+
*Eugene Kenny*
|
747
135
|
|
748
|
-
*
|
136
|
+
* A rollback encountered in an `after_commit` callback does not reset
|
137
|
+
previously-committed record state.
|
749
138
|
|
750
|
-
|
139
|
+
*Ryuta Kamizono*
|
751
140
|
|
752
|
-
*
|
753
|
-
`Relation` for performing queries and updates is the prefered API.
|
141
|
+
* Fixed that join order was lost when eager-loading.
|
754
142
|
|
755
|
-
|
756
|
-
|
757
|
-
* Queries now properly type cast values that are part of a join statement,
|
758
|
-
even when using type decorators such as `serialize`.
|
759
|
-
|
760
|
-
*Melanie Gilman & Sean Griffin*
|
761
|
-
|
762
|
-
* MySQL enum type lookups, with values matching another type, no longer result
|
763
|
-
in an endless loop.
|
764
|
-
|
765
|
-
Fixes #17402.
|
766
|
-
|
767
|
-
*Yves Senn*
|
768
|
-
|
769
|
-
* Raise `ArgumentError` when the body of a scope is not callable.
|
770
|
-
|
771
|
-
*Mauro George*
|
772
|
-
|
773
|
-
* Use type column first in multi-column indexes created with `add-reference`.
|
774
|
-
|
775
|
-
*Derek Prior*
|
776
|
-
|
777
|
-
* Fix `Relation.rewhere` to work with Range values.
|
778
|
-
|
779
|
-
*Dan Olson*
|
780
|
-
|
781
|
-
* `AR::UnknownAttributeError` now includes the class name of a record.
|
782
|
-
|
783
|
-
User.new(name: "Yuki Nishijima", project_attributes: {name: "kaminari"})
|
784
|
-
# => ActiveRecord::UnknownAttributeError: unknown attribute 'name' for User.
|
785
|
-
|
786
|
-
*Yuki Nishijima*
|
787
|
-
|
788
|
-
* Fix a regression causing `after_create` callbacks to run before associated
|
789
|
-
records are autosaved.
|
143
|
+
*Ryuta Kamizono*
|
790
144
|
|
791
|
-
|
145
|
+
* `DESCRIBE` queries are allowed on read-only connections.
|
792
146
|
|
793
|
-
*
|
794
|
-
|
795
|
-
* Honor overridden `rack.test` in Rack environment for the connection
|
796
|
-
management middleware.
|
797
|
-
|
798
|
-
*Simon Eskildsen*
|
799
|
-
|
800
|
-
* Add a truncate method to the connection.
|
801
|
-
|
802
|
-
*Aaron Patterson*
|
803
|
-
|
804
|
-
* Don't autosave unchanged has_one through records.
|
147
|
+
*Dylan Thacker-Smith*
|
805
148
|
|
806
|
-
|
149
|
+
* Fixed that records that had been `inspect`ed could not be marshaled.
|
807
150
|
|
808
|
-
*
|
151
|
+
*Eugene Kenny*
|
809
152
|
|
810
|
-
|
153
|
+
* The connection pool reaper thread is respawned in forked processes. This
|
154
|
+
fixes that idle connections in forked processes wouldn't be reaped.
|
811
155
|
|
812
|
-
*
|
813
|
-
outside the schema search path.
|
156
|
+
*John Hawthorn*
|
814
157
|
|
815
|
-
|
158
|
+
* The memoized result of `ActiveRecord::Relation#take` is properly cleared
|
159
|
+
when `ActiveRecord::Relation#reset` or `ActiveRecord::Relation#reload`
|
160
|
+
is called.
|
816
161
|
|
817
|
-
*
|
162
|
+
*Anmol Arora*
|
818
163
|
|
819
|
-
*
|
820
|
-
committing it during the stack unwind. Previously, we could commit half-
|
821
|
-
completed work. This fix only works for Ruby 2.0+; on 1.9, we can't
|
822
|
-
distinguish a thread kill from an ordinary non-local (block) return, so must
|
823
|
-
default to committing.
|
164
|
+
* Fixed the performance regression for `primary_keys` introduced MySQL 8.0.
|
824
165
|
|
825
|
-
*
|
166
|
+
*Hiroyuki Ishii*
|
826
167
|
|
827
|
-
*
|
828
|
-
`Comment.where(post_id: Post.none)` returned a non-empty result.
|
168
|
+
* `insert`, `insert_all`, `upsert`, and `upsert_all` now clear the query cache.
|
829
169
|
|
830
|
-
|
170
|
+
*Eugene Kenny*
|
831
171
|
|
832
|
-
|
172
|
+
* Call `while_preventing_writes` directly from `connected_to`.
|
833
173
|
|
834
|
-
|
835
|
-
in the future without affecting old migrations that assumed old defaults.
|
174
|
+
In some cases application authors want to use the database switching middleware and make explicit calls with `connected_to`. It's possible for an app to turn off writes and not turn them back on by the time we call `connected_to(role: :writing)`.
|
836
175
|
|
837
|
-
|
176
|
+
This change allows apps to fix this by assuming if a role is writing we want to allow writes, except in the case it's explicitly turned off.
|
838
177
|
|
839
|
-
*
|
178
|
+
*Eileen M. Uchitelle*
|
840
179
|
|
841
|
-
|
180
|
+
* Improve detection of ActiveRecord::StatementTimeout with mysql2 adapter in the edge case when the query is terminated during filesort.
|
842
181
|
|
843
|
-
*
|
182
|
+
*Kir Shatrov*
|
844
183
|
|
845
|
-
*Jeremy Kemper*
|
846
184
|
|
847
|
-
|
185
|
+
## Rails 6.0.0 (August 16, 2019) ##
|
848
186
|
|
849
|
-
|
187
|
+
* Preserve user supplied joins order as much as possible.
|
850
188
|
|
851
|
-
|
852
|
-
has support for SQL views. Connection adapters should define this method.
|
189
|
+
Fixes #36761, #34328, #24281, #12953.
|
853
190
|
|
854
|
-
*
|
191
|
+
*Ryuta Kamizono*
|
855
192
|
|
856
|
-
*
|
193
|
+
* Make the DATABASE_URL env variable only affect the primary connection. Add new env variables for multiple databases.
|
857
194
|
|
858
|
-
|
195
|
+
*John Crepezzi*, *Eileen Uchitelle*
|
859
196
|
|
860
|
-
|
197
|
+
* Add a warning for enum elements with 'not_' prefix.
|
861
198
|
|
862
|
-
|
863
|
-
|
199
|
+
class Foo
|
200
|
+
enum status: [:sent, :not_sent]
|
201
|
+
end
|
864
202
|
|
865
|
-
|
203
|
+
*Edu Depetris*
|
866
204
|
|
867
|
-
|
205
|
+
* Make currency symbols optional for money column type in PostgreSQL
|
868
206
|
|
869
|
-
*
|
207
|
+
*Joel Schneider*
|
870
208
|
|
871
|
-
Sets the connection collation to the database collation configured in
|
872
|
-
database.yml. Otherwise, `SET NAMES utf8mb4` will use the default
|
873
|
-
collation for that charset (utf8mb4_general_ci) when you may have chosen
|
874
|
-
a different collation, like utf8mb4_unicode_ci.
|
875
209
|
|
876
|
-
|
877
|
-
is unlikely to affect you.
|
210
|
+
## Rails 6.0.0.rc2 (July 22, 2019) ##
|
878
211
|
|
879
|
-
|
212
|
+
* Add database_exists? method to connection adapters to check if a database exists.
|
880
213
|
|
881
|
-
*
|
214
|
+
*Guilherme Mansur*
|
882
215
|
|
883
|
-
|
216
|
+
* PostgreSQL: Fix GROUP BY with ORDER BY virtual count attribute.
|
884
217
|
|
885
|
-
|
886
|
-
PostgreSQL.
|
218
|
+
Fixes #36022.
|
887
219
|
|
888
|
-
*
|
220
|
+
*Ryuta Kamizono*
|
889
221
|
|
890
|
-
|
222
|
+
* Make ActiveRecord `ConnectionPool.connections` method thread-safe.
|
891
223
|
|
892
|
-
|
893
|
-
passed as a lambda with an arity of one.
|
224
|
+
Fixes #36465.
|
894
225
|
|
895
|
-
|
226
|
+
*Jeff Doering*
|
896
227
|
|
897
|
-
|
228
|
+
* Fix sqlite3 collation parsing when using decimal columns.
|
898
229
|
|
899
|
-
*
|
230
|
+
*Martin R. Schuster*
|
900
231
|
|
901
|
-
|
232
|
+
* Fix invalid schema when primary key column has a comment.
|
902
233
|
|
903
|
-
|
234
|
+
Fixes #29966.
|
904
235
|
|
905
|
-
*
|
906
|
-
`after_rollback`/`after_create` callbacks and prints them to the logs.
|
907
|
-
Future versions of Rails will not rescue these errors anymore and
|
908
|
-
just bubble them up like the other callbacks.
|
236
|
+
*Guilherme Goettems Schneider*
|
909
237
|
|
910
|
-
|
238
|
+
* Fix table comment also being applied to the primary key column.
|
911
239
|
|
912
|
-
|
240
|
+
*Guilherme Goettems Schneider*
|
913
241
|
|
914
|
-
|
915
|
-
config.active_record.raise_in_transactional_callbacks = true
|
242
|
+
* Fix merging left_joins to maintain its own `join_type` context.
|
916
243
|
|
917
|
-
Fixes #
|
244
|
+
Fixes #36103.
|
918
245
|
|
919
|
-
*
|
246
|
+
*Ryuta Kamizono*
|
920
247
|
|
921
|
-
* Fix an issue where custom accessor methods (such as those generated by
|
922
|
-
`enum`) with the same name as a global method are incorrectly overridden
|
923
|
-
when subclassing.
|
924
248
|
|
925
|
-
|
249
|
+
## Rails 6.0.0.rc1 (April 24, 2019) ##
|
926
250
|
|
927
|
-
|
251
|
+
* Add `touch` option to `has_one` association.
|
928
252
|
|
929
|
-
*
|
930
|
-
well.
|
253
|
+
*Abhay Nikam*
|
931
254
|
|
932
|
-
|
255
|
+
* Deprecate `where.not` working as NOR and will be changed to NAND in Rails 6.1.
|
933
256
|
|
934
|
-
|
257
|
+
```ruby
|
258
|
+
all = [treasures(:diamond), treasures(:sapphire), cars(:honda), treasures(:sapphire)]
|
259
|
+
assert_equal all, PriceEstimate.all.map(&:estimate_of)
|
260
|
+
```
|
935
261
|
|
936
|
-
|
262
|
+
In Rails 6.0:
|
937
263
|
|
938
|
-
|
264
|
+
```ruby
|
265
|
+
sapphire = treasures(:sapphire)
|
939
266
|
|
940
|
-
|
267
|
+
nor = all.reject { |e|
|
268
|
+
e.estimate_of_type == sapphire.class.polymorphic_name
|
269
|
+
}.reject { |e|
|
270
|
+
e.estimate_of_id == sapphire.id
|
271
|
+
}
|
272
|
+
assert_equal [cars(:honda)], nor
|
941
273
|
|
942
|
-
|
274
|
+
without_sapphire = PriceEstimate.where.not(
|
275
|
+
estimate_of_type: sapphire.class.polymorphic_name, estimate_of_id: sapphire.id
|
276
|
+
)
|
277
|
+
assert_equal nor, without_sapphire.map(&:estimate_of)
|
278
|
+
```
|
943
279
|
|
944
|
-
|
280
|
+
In Rails 6.1:
|
945
281
|
|
946
|
-
|
282
|
+
```ruby
|
283
|
+
sapphire = treasures(:sapphire)
|
947
284
|
|
948
|
-
|
285
|
+
nand = all - [sapphire]
|
286
|
+
assert_equal [treasures(:diamond), cars(:honda)], nand
|
949
287
|
|
950
|
-
|
288
|
+
without_sapphire = PriceEstimate.where.not(
|
289
|
+
estimate_of_type: sapphire.class.polymorphic_name, estimate_of_id: sapphire.id
|
290
|
+
)
|
291
|
+
assert_equal nand, without_sapphire.map(&:estimate_of)
|
292
|
+
```
|
951
293
|
|
952
|
-
|
953
|
-
index_exists? :articles, :title, name: "idx_title" # => `true`
|
954
|
-
index_exists? :articles, :body, name: "idx_title" # => `true`
|
294
|
+
*Ryuta Kamizono*
|
955
295
|
|
956
|
-
|
957
|
-
index_exists? :articles, :title, name: "idx_title" # => `true`
|
958
|
-
index_exists? :articles, :body, name: "idx_title" # => `false`
|
296
|
+
* Fix dirty tracking after rollback.
|
959
297
|
|
960
|
-
|
298
|
+
Fixes #15018, #30167, #33868.
|
961
299
|
|
962
|
-
*
|
963
|
-
Not passing the option is deprecated but the default is still `null: true`.
|
964
|
-
With Rails 5 this will change to `null: false`.
|
300
|
+
*Ryuta Kamizono*
|
965
301
|
|
966
|
-
|
302
|
+
* Add `ActiveRecord::Relation#cache_version` to support recyclable cache keys via
|
303
|
+
the versioned entries in `ActiveSupport::Cache`. This also means that
|
304
|
+
`ActiveRecord::Relation#cache_key` will now return a stable key that does not
|
305
|
+
include the max timestamp or count any more.
|
967
306
|
|
968
|
-
|
969
|
-
|
970
|
-
|
307
|
+
NOTE: This feature is turned off by default, and `cache_key` will still return
|
308
|
+
cache keys with timestamps until you set `ActiveRecord::Base.collection_cache_versioning = true`.
|
309
|
+
That's the setting for all new apps on Rails 6.0+
|
971
310
|
|
972
311
|
*Lachlan Sylvester*
|
973
312
|
|
974
|
-
*
|
975
|
-
|
976
|
-
Currently when we call `id_was` and we have a custom primary key name,
|
977
|
-
Active Record will return the current value of the primary key. This
|
978
|
-
makes it impossible to correctly do an update operation if you change the
|
979
|
-
id.
|
980
|
-
|
981
|
-
Fixes #16413.
|
982
|
-
|
983
|
-
*Rafael Mendonça França*
|
984
|
-
|
985
|
-
* Deprecate `DatabaseTasks.load_schema` to act on the current connection.
|
986
|
-
Use `.load_schema_current` instead. In the future `load_schema` will
|
987
|
-
require the `configuration` to act on as an argument.
|
988
|
-
|
989
|
-
*Yves Senn*
|
990
|
-
|
991
|
-
* Fix automatic maintaining test schema to properly handle sql structure
|
992
|
-
schema format.
|
993
|
-
|
994
|
-
Fixes #15394.
|
995
|
-
|
996
|
-
*Wojciech Wnętrzak*
|
997
|
-
|
998
|
-
* Fix type casting to Decimal from Float with large precision.
|
999
|
-
|
1000
|
-
*Tomohiro Hashidate*
|
1001
|
-
|
1002
|
-
* Deprecate `Reflection#source_macro`
|
1003
|
-
|
1004
|
-
`Reflection#source_macro` is no longer needed in Active Record
|
1005
|
-
source so it has been deprecated. Code that used `source_macro`
|
1006
|
-
was removed in #16353.
|
1007
|
-
|
1008
|
-
*Eileen M. Uchtitelle*, *Aaron Patterson*
|
1009
|
-
|
1010
|
-
* No verbose backtrace by `db:drop` when database does not exist.
|
1011
|
-
|
1012
|
-
Fixes #16295.
|
1013
|
-
|
1014
|
-
*Kenn Ejima*
|
1015
|
-
|
1016
|
-
* Add support for PostgreSQL JSONB.
|
1017
|
-
|
1018
|
-
Example:
|
1019
|
-
|
1020
|
-
create_table :posts do |t|
|
1021
|
-
t.jsonb :meta_data
|
1022
|
-
end
|
1023
|
-
|
1024
|
-
*Philippe Creux*, *Chris Teague*
|
1025
|
-
|
1026
|
-
* `db:purge` with MySQL respects `Rails.env`.
|
1027
|
-
|
1028
|
-
*Yves Senn*
|
1029
|
-
|
1030
|
-
* `change_column_default :table, :column, nil` with PostgreSQL will issue a
|
1031
|
-
`DROP DEFAULT` instead of a `DEFAULT NULL` query.
|
1032
|
-
|
1033
|
-
Fixes #16261.
|
1034
|
-
|
1035
|
-
*Matthew Draper*, *Yves Senn*
|
1036
|
-
|
1037
|
-
* Allow to specify a type for the foreign key column in `references`
|
1038
|
-
and `add_reference`.
|
1039
|
-
|
1040
|
-
Example:
|
1041
|
-
|
1042
|
-
change_table :vehicle do |t|
|
1043
|
-
t.references :station, type: :uuid
|
1044
|
-
end
|
1045
|
-
|
1046
|
-
*Andrey Novikov*, *Łukasz Sarnacki*
|
1047
|
-
|
1048
|
-
* `create_join_table` removes a common prefix when generating the join table.
|
1049
|
-
This matches the existing behavior of HABTM associations.
|
1050
|
-
|
1051
|
-
Fixes #13683.
|
1052
|
-
|
1053
|
-
*Stefan Kanev*
|
1054
|
-
|
1055
|
-
* Do not swallow errors on `compute_type` when having a bad `alias_method` on
|
1056
|
-
a class.
|
1057
|
-
|
1058
|
-
*arthurnn*
|
1059
|
-
|
1060
|
-
* PostgreSQL invalid `uuid` are convert to nil.
|
1061
|
-
|
1062
|
-
*Abdelkader Boudih*
|
1063
|
-
|
1064
|
-
* Restore 4.0 behavior for using serialize attributes with `JSON` as coder.
|
1065
|
-
|
1066
|
-
With 4.1.x, `serialize` started returning a string when `JSON` was passed as
|
1067
|
-
the second attribute. It will now return a hash as per previous versions.
|
1068
|
-
|
1069
|
-
Example:
|
1070
|
-
|
1071
|
-
class Post < ActiveRecord::Base
|
1072
|
-
serialize :comment, JSON
|
1073
|
-
end
|
1074
|
-
|
1075
|
-
class Comment
|
1076
|
-
include ActiveModel::Model
|
1077
|
-
attr_accessor :category, :text
|
1078
|
-
end
|
1079
|
-
|
1080
|
-
post = Post.create!
|
1081
|
-
post.comment = Comment.new(category: "Animals", text: "This is a comment about squirrels.")
|
1082
|
-
post.save!
|
1083
|
-
|
1084
|
-
# 4.0
|
1085
|
-
post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
|
1086
|
-
|
1087
|
-
# 4.1 before
|
1088
|
-
post.comment # => "#<Comment:0x007f80ab48ff98>"
|
1089
|
-
|
1090
|
-
# 4.1 after
|
1091
|
-
post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
|
313
|
+
* Fix dirty tracking for `touch` to track saved changes.
|
1092
314
|
|
1093
|
-
|
1094
|
-
new `ActiveRecord::Coders::JSON` coder which delegates its `dump/load` to
|
1095
|
-
`ActiveSupport::JSON.encode/decode`. This ensures special objects are dumped
|
1096
|
-
correctly using the `#as_json` hook.
|
315
|
+
Fixes #33429.
|
1097
316
|
|
1098
|
-
|
1099
|
-
([example](https://gist.github.com/jenncoop/8c4142bbe59da77daa63)).
|
317
|
+
*Ryuta Kamzono*
|
1100
318
|
|
1101
|
-
|
319
|
+
* `change_column_comment` and `change_table_comment` are invertible only if
|
320
|
+
`to` and `from` options are specified.
|
1102
321
|
|
1103
|
-
*
|
322
|
+
*Yoshiyuki Kinjo*
|
1104
323
|
|
1105
|
-
*
|
324
|
+
* Don't call commit/rollback callbacks when a record isn't saved.
|
1106
325
|
|
1107
|
-
Fixes #
|
326
|
+
Fixes #29747.
|
1108
327
|
|
1109
|
-
*
|
1110
|
-
|
1111
|
-
* Calling `#empty?` on a `has_many` association would use the value from the
|
1112
|
-
counter cache if one exists.
|
328
|
+
*Ryuta Kamizono*
|
1113
329
|
|
1114
|
-
|
330
|
+
* Fix circular `autosave: true` causes invalid records to be saved.
|
1115
331
|
|
1116
|
-
|
1117
|
-
|
332
|
+
Prior to the fix, when there was a circular series of `autosave: true`
|
333
|
+
associations, the callback for a `has_many` association was run while
|
334
|
+
another instance of the same callback on the same association hadn't
|
335
|
+
finished running. When control returned to the first instance of the
|
336
|
+
callback, the instance variable had changed, and subsequent associated
|
337
|
+
records weren't saved correctly. Specifically, the ID field for the
|
338
|
+
`belongs_to` corresponding to the `has_many` was `nil`.
|
1118
339
|
|
1119
|
-
Fixes #
|
340
|
+
Fixes #28080.
|
1120
341
|
|
1121
|
-
*
|
342
|
+
*Larry Reid*
|
1122
343
|
|
1123
|
-
*
|
1124
|
-
produce an `IN` statements.
|
344
|
+
* Raise `ArgumentError` for invalid `:limit` and `:precision` like as other options.
|
1125
345
|
|
1126
346
|
Before:
|
1127
347
|
|
1128
|
-
|
1129
|
-
|
348
|
+
```ruby
|
349
|
+
add_column :items, :attr1, :binary, size: 10 # => ArgumentError
|
350
|
+
add_column :items, :attr2, :decimal, scale: 10 # => ArgumentError
|
351
|
+
add_column :items, :attr3, :integer, limit: 10 # => ActiveRecordError
|
352
|
+
add_column :items, :attr4, :datetime, precision: 10 # => ActiveRecordError
|
353
|
+
```
|
1130
354
|
|
1131
355
|
After:
|
1132
356
|
|
1133
|
-
|
1134
|
-
|
1135
|
-
|
1136
|
-
|
1137
|
-
|
1138
|
-
|
1139
|
-
values for string columns. Otherwise, in some database, the string column
|
1140
|
-
values will be coerced to a numeric allowing false or 0.seconds match any
|
1141
|
-
string starting with a non-digit.
|
1142
|
-
|
1143
|
-
Example:
|
1144
|
-
|
1145
|
-
App.where(apikey: false) # => SELECT * FROM users WHERE apikey = '0'
|
1146
|
-
|
1147
|
-
*Dylan Thacker-Smith*
|
1148
|
-
|
1149
|
-
* Add a `:required` option to singular associations, providing a nicer
|
1150
|
-
API for presence validations on associations.
|
1151
|
-
|
1152
|
-
*Sean Griffin*
|
1153
|
-
|
1154
|
-
* Fix an error in `reset_counters` when associations have `select` scope.
|
1155
|
-
(Call to `count` generated invalid SQL.)
|
1156
|
-
|
1157
|
-
*Cade Truitt*
|
1158
|
-
|
1159
|
-
* After a successful `reload`, `new_record?` is always false.
|
1160
|
-
|
1161
|
-
Fixes #12101.
|
357
|
+
```ruby
|
358
|
+
add_column :items, :attr1, :binary, size: 10 # => ArgumentError
|
359
|
+
add_column :items, :attr2, :decimal, scale: 10 # => ArgumentError
|
360
|
+
add_column :items, :attr3, :integer, limit: 10 # => ArgumentError
|
361
|
+
add_column :items, :attr4, :datetime, precision: 10 # => ArgumentError
|
362
|
+
```
|
1162
363
|
|
1163
|
-
*
|
1164
|
-
|
1165
|
-
* PostgreSQL renaming table doesn't attempt to rename non existent sequences.
|
1166
|
-
|
1167
|
-
*Abdelkader Boudih*
|
1168
|
-
|
1169
|
-
* Move 'dependent: :destroy' handling for `belongs_to`
|
1170
|
-
from `before_destroy` to `after_destroy` callback chain
|
1171
|
-
|
1172
|
-
Fixes #12380.
|
1173
|
-
|
1174
|
-
*Ivan Antropov*
|
1175
|
-
|
1176
|
-
* Detect in-place modifications on String attributes.
|
364
|
+
*Ryuta Kamizono*
|
1177
365
|
|
1178
|
-
|
1179
|
-
|
1180
|
-
required.
|
366
|
+
* Association loading isn't to be affected by scoping consistently
|
367
|
+
whether preloaded / eager loaded or not, with the exception of `unscoped`.
|
1181
368
|
|
1182
369
|
Before:
|
1183
370
|
|
1184
|
-
|
1185
|
-
|
1186
|
-
|
1187
|
-
|
1188
|
-
|
371
|
+
```ruby
|
372
|
+
Post.where("1=0").scoping do
|
373
|
+
Comment.find(1).post # => nil
|
374
|
+
Comment.preload(:post).find(1).post # => #<Post id: 1, ...>
|
375
|
+
Comment.eager_load(:post).find(1).post # => #<Post id: 1, ...>
|
376
|
+
end
|
377
|
+
```
|
1189
378
|
|
1190
379
|
After:
|
1191
380
|
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1199
|
-
* Add `ActiveRecord::Base#validate!` that raises `RecordInvalid` if the record
|
1200
|
-
is invalid.
|
1201
|
-
|
1202
|
-
*Bogdan Gusiev*, *Marc Schütz*
|
1203
|
-
|
1204
|
-
* Support for adding and removing foreign keys. Foreign keys are now
|
1205
|
-
a part of `schema.rb`. This is supported by Mysql2Adapter, MysqlAdapter
|
1206
|
-
and PostgreSQLAdapter.
|
1207
|
-
|
1208
|
-
Many thanks to *Matthew Higgins* for laying the foundation with his work on
|
1209
|
-
[foreigner](https://github.com/matthuhiggins/foreigner).
|
1210
|
-
|
1211
|
-
Example:
|
1212
|
-
|
1213
|
-
# within your migrations:
|
1214
|
-
add_foreign_key :articles, :authors
|
1215
|
-
remove_foreign_key :articles, :authors
|
1216
|
-
|
1217
|
-
*Yves Senn*
|
1218
|
-
|
1219
|
-
* Fix subtle bugs regarding attribute assignment on models with no primary
|
1220
|
-
key. `'id'` will no longer be part of the attributes hash.
|
1221
|
-
|
1222
|
-
*Sean Griffin*
|
1223
|
-
|
1224
|
-
* Deprecate automatic counter caches on `has_many :through`. The behavior was
|
1225
|
-
broken and inconsistent.
|
1226
|
-
|
1227
|
-
*Sean Griffin*
|
1228
|
-
|
1229
|
-
* `preload` preserves readonly flag for associations.
|
381
|
+
```ruby
|
382
|
+
Post.where("1=0").scoping do
|
383
|
+
Comment.find(1).post # => #<Post id: 1, ...>
|
384
|
+
Comment.preload(:post).find(1).post # => #<Post id: 1, ...>
|
385
|
+
Comment.eager_load(:post).find(1).post # => #<Post id: 1, ...>
|
386
|
+
end
|
387
|
+
```
|
1230
388
|
|
1231
|
-
|
389
|
+
Fixes #34638, #35398.
|
1232
390
|
|
1233
|
-
*
|
1234
|
-
|
1235
|
-
* Assume numeric types have changed if they were assigned to a value that
|
1236
|
-
would fail numericality validation, regardless of the old value. Previously
|
1237
|
-
this would only occur if the old value was 0.
|
1238
|
-
|
1239
|
-
Example:
|
1240
|
-
|
1241
|
-
model = Model.create!(number: 5)
|
1242
|
-
model.number = '5wibble'
|
1243
|
-
model.number_changed? # => true
|
1244
|
-
|
1245
|
-
Fixes #14731.
|
1246
|
-
|
1247
|
-
*Sean Griffin*
|
1248
|
-
|
1249
|
-
* `reload` no longer merges with the existing attributes.
|
1250
|
-
The attribute hash is fully replaced. The record is put into the same state
|
1251
|
-
as it would be with `Model.find(model.id)`.
|
1252
|
-
|
1253
|
-
*Sean Griffin*
|
391
|
+
*Ryuta Kamizono*
|
1254
392
|
|
1255
|
-
*
|
1256
|
-
If this is not the case a `NoMethodError` is raised.
|
393
|
+
* Add `rails db:prepare` to migrate or setup a database.
|
1257
394
|
|
1258
|
-
|
395
|
+
Runs `db:migrate` if the database exists or `db:setup` if it doesn't.
|
1259
396
|
|
1260
|
-
*
|
397
|
+
*Roberto Miranda*
|
1261
398
|
|
1262
|
-
|
399
|
+
* Add `after_save_commit` callback as shortcut for `after_commit :hook, on: [ :create, :update ]`.
|
1263
400
|
|
1264
|
-
*
|
401
|
+
*DHH*
|
1265
402
|
|
1266
|
-
|
403
|
+
* Assign all attributes before calling `build` to ensure the child record is visible in
|
404
|
+
`before_add` and `after_add` callbacks for `has_many :through` associations.
|
1267
405
|
|
1268
|
-
|
406
|
+
Fixes #33249.
|
1269
407
|
|
1270
|
-
*
|
408
|
+
*Ryan H. Kerr*
|
1271
409
|
|
1272
|
-
*
|
1273
|
-
are part of the URI structure, not the actual host.
|
410
|
+
* Add `ActiveRecord::Relation#extract_associated` for extracting associated records from a relation.
|
1274
411
|
|
1275
|
-
|
412
|
+
```
|
413
|
+
account.memberships.extract_associated(:user)
|
414
|
+
# => Returns collection of User records
|
415
|
+
```
|
1276
416
|
|
1277
|
-
*
|
417
|
+
*DHH*
|
1278
418
|
|
1279
|
-
*
|
1280
|
-
through association are new.
|
419
|
+
* Add `ActiveRecord::Relation#annotate` for adding SQL comments to its queries.
|
1281
420
|
|
1282
|
-
|
421
|
+
For example:
|
1283
422
|
|
1284
|
-
|
1285
|
-
|
1286
|
-
|
423
|
+
```
|
424
|
+
Post.where(id: 123).annotate("this is a comment").to_sql
|
425
|
+
# SELECT "posts".* FROM "posts" WHERE "posts"."id" = 123 /* this is a comment */
|
426
|
+
```
|
1287
427
|
|
1288
|
-
|
428
|
+
This can be useful in instrumentation or other analysis of issued queries.
|
1289
429
|
|
1290
|
-
*
|
430
|
+
*Matt Yoho*
|
1291
431
|
|
1292
|
-
*
|
1293
|
-
name.
|
432
|
+
* Support Optimizer Hints.
|
1294
433
|
|
1295
|
-
|
434
|
+
In most databases, a way to control the optimizer is by using optimizer hints,
|
435
|
+
which can be specified within individual statements.
|
1296
436
|
|
1297
|
-
|
437
|
+
Example (for MySQL):
|
1298
438
|
|
1299
|
-
|
439
|
+
Topic.optimizer_hints("MAX_EXECUTION_TIME(50000)", "NO_INDEX_MERGE(topics)")
|
440
|
+
# SELECT /*+ MAX_EXECUTION_TIME(50000) NO_INDEX_MERGE(topics) */ `topics`.* FROM `topics`
|
1300
441
|
|
1301
|
-
|
442
|
+
Example (for PostgreSQL with pg_hint_plan):
|
1302
443
|
|
1303
|
-
|
444
|
+
Topic.optimizer_hints("SeqScan(topics)", "Parallel(topics 8)")
|
445
|
+
# SELECT /*+ SeqScan(topics) Parallel(topics 8) */ "topics".* FROM "topics"
|
1304
446
|
|
1305
|
-
|
447
|
+
See also:
|
1306
448
|
|
1307
|
-
*
|
1308
|
-
|
449
|
+
* https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html
|
450
|
+
* https://pghintplan.osdn.jp/pg_hint_plan.html
|
451
|
+
* https://docs.oracle.com/en/database/oracle/oracle-database/12.2/tgsql/influencing-the-optimizer.html
|
452
|
+
* https://docs.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-query?view=sql-server-2017
|
453
|
+
* https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.admin.perf.doc/doc/c0070117.html
|
1309
454
|
|
1310
|
-
|
455
|
+
*Ryuta Kamizono*
|
1311
456
|
|
1312
|
-
|
457
|
+
* Fix query attribute method on user-defined attribute to be aware of typecasted value.
|
1313
458
|
|
1314
|
-
|
459
|
+
For example, the following code no longer return false as casted non-empty string:
|
1315
460
|
|
1316
|
-
|
461
|
+
```
|
462
|
+
class Post < ActiveRecord::Base
|
463
|
+
attribute :user_defined_text, :text
|
464
|
+
end
|
1317
465
|
|
1318
|
-
|
466
|
+
Post.new(user_defined_text: "false").user_defined_text? # => true
|
467
|
+
```
|
1319
468
|
|
1320
|
-
*
|
1321
|
-
`primary_key_prefix_type` configuration.
|
469
|
+
*Yuji Kamijima*
|
1322
470
|
|
1323
|
-
|
471
|
+
* Quote empty ranges like other empty enumerables.
|
1324
472
|
|
1325
|
-
*
|
473
|
+
*Patrick Rebsch*
|
1326
474
|
|
1327
|
-
*
|
475
|
+
* Add `insert_all`/`insert_all!`/`upsert_all` methods to `ActiveRecord::Persistence`,
|
476
|
+
allowing bulk inserts akin to the bulk updates provided by `update_all` and
|
477
|
+
bulk deletes by `delete_all`.
|
1328
478
|
|
1329
|
-
|
479
|
+
Supports skipping or upserting duplicates through the `ON CONFLICT` syntax
|
480
|
+
for PostgreSQL (9.5+) and SQLite (3.24+) and `ON DUPLICATE KEY UPDATE` syntax
|
481
|
+
for MySQL.
|
1330
482
|
|
1331
|
-
*
|
483
|
+
*Bob Lail*
|
1332
484
|
|
1333
|
-
*
|
485
|
+
* Add `rails db:seed:replant` that truncates tables of each database
|
486
|
+
for current environment and loads the seeds.
|
1334
487
|
|
1335
|
-
|
1336
|
-
updated.
|
488
|
+
*bogdanvlviv*, *DHH*
|
1337
489
|
|
1338
|
-
|
490
|
+
* Add `ActiveRecord::Base.connection.truncate` for SQLite3 adapter.
|
1339
491
|
|
1340
|
-
*
|
492
|
+
*bogdanvlviv*
|
1341
493
|
|
1342
|
-
*
|
1343
|
-
`proper_table_name` instance method on `ActiveRecord::Migration` instead.
|
494
|
+
* Deprecate mismatched collation comparison for uniqueness validator.
|
1344
495
|
|
1345
|
-
|
496
|
+
Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1.
|
497
|
+
To continue case sensitive comparison on the case insensitive column,
|
498
|
+
pass `case_sensitive: true` option explicitly to the uniqueness validator.
|
1346
499
|
|
1347
|
-
*
|
1348
|
-
existing column.
|
500
|
+
*Ryuta Kamizono*
|
1349
501
|
|
1350
|
-
|
502
|
+
* Add `reselect` method. This is a short-hand for `unscope(:select).select(fields)`.
|
1351
503
|
|
1352
|
-
|
504
|
+
Fixes #27340.
|
1353
505
|
|
1354
|
-
*
|
1355
|
-
It will return a null object in Rails 5.0
|
506
|
+
*Willian Gustavo Veiga*
|
1356
507
|
|
1357
|
-
|
508
|
+
* Add negative scopes for all enum values.
|
1358
509
|
|
1359
|
-
|
510
|
+
Example:
|
1360
511
|
|
1361
|
-
|
512
|
+
class Post < ActiveRecord::Base
|
513
|
+
enum status: %i[ drafted active trashed ]
|
514
|
+
end
|
1362
515
|
|
1363
|
-
|
1364
|
-
|
516
|
+
Post.not_drafted # => where.not(status: :drafted)
|
517
|
+
Post.not_active # => where.not(status: :active)
|
518
|
+
Post.not_trashed # => where.not(status: :trashed)
|
1365
519
|
|
1366
|
-
*
|
520
|
+
*DHH*
|
1367
521
|
|
1368
|
-
*
|
522
|
+
* Fix different `count` calculation when using `size` with manual `select` with DISTINCT.
|
1369
523
|
|
1370
|
-
|
524
|
+
Fixes #35214.
|
1371
525
|
|
1372
|
-
*
|
526
|
+
*Juani Villarejo*
|
1373
527
|
|
1374
|
-
*Yves Senn*
|
1375
528
|
|
1376
|
-
|
529
|
+
## Rails 6.0.0.beta3 (March 11, 2019) ##
|
1377
530
|
|
1378
|
-
|
531
|
+
* No changes.
|
1379
532
|
|
1380
|
-
* Fix `columns_for_distinct` of PostgreSQL adapter to work correctly
|
1381
|
-
with orders without sort direction modifiers.
|
1382
533
|
|
1383
|
-
|
534
|
+
## Rails 6.0.0.beta2 (February 25, 2019) ##
|
1384
535
|
|
1385
|
-
*
|
536
|
+
* Fix prepared statements caching to be enabled even when query caching is enabled.
|
1386
537
|
|
1387
|
-
*
|
538
|
+
*Ryuta Kamizono*
|
1388
539
|
|
1389
|
-
*
|
1390
|
-
Fixes duplication in combination with `store_accessor`.
|
540
|
+
* Ensure `update_all` series cares about optimistic locking.
|
1391
541
|
|
1392
|
-
|
542
|
+
*Ryuta Kamizono*
|
1393
543
|
|
1394
|
-
|
544
|
+
* Don't allow `where` with non numeric string matches to 0 values.
|
1395
545
|
|
1396
|
-
*
|
546
|
+
*Ryuta Kamizono*
|
1397
547
|
|
1398
|
-
|
548
|
+
* Introduce `ActiveRecord::Relation#destroy_by` and `ActiveRecord::Relation#delete_by`.
|
1399
549
|
|
1400
|
-
|
1401
|
-
|
1402
|
-
definition into a subclass would raise.
|
550
|
+
`destroy_by` allows relation to find all the records matching the condition and perform
|
551
|
+
`destroy_all` on the matched records.
|
1403
552
|
|
1404
|
-
|
553
|
+
Example:
|
1405
554
|
|
1406
|
-
|
555
|
+
Person.destroy_by(name: 'David')
|
556
|
+
Person.destroy_by(name: 'David', rating: 4)
|
1407
557
|
|
1408
|
-
|
1409
|
-
|
1410
|
-
But as `reflections` is a public API, people expect to see the right macro.
|
558
|
+
david = Person.find_by(name: 'David')
|
559
|
+
david.posts.destroy_by(id: [1, 2, 3])
|
1411
560
|
|
1412
|
-
|
561
|
+
`delete_by` allows relation to find all the records matching the condition and perform
|
562
|
+
`delete_all` on the matched records.
|
1413
563
|
|
1414
|
-
|
564
|
+
Example:
|
1415
565
|
|
1416
|
-
|
566
|
+
Person.delete_by(name: 'David')
|
567
|
+
Person.delete_by(name: 'David', rating: 4)
|
1417
568
|
|
1418
|
-
|
569
|
+
david = Person.find_by(name: 'David')
|
570
|
+
david.posts.delete_by(id: [1, 2, 3])
|
1419
571
|
|
1420
|
-
*
|
572
|
+
*Abhay Nikam*
|
1421
573
|
|
1422
|
-
*
|
1423
|
-
on a NullRelation should return a Hash.
|
574
|
+
* Don't allow `where` with invalid value matches to nil values.
|
1424
575
|
|
1425
|
-
|
576
|
+
Fixes #33624.
|
1426
577
|
|
1427
|
-
*
|
1428
|
-
`update_column`.
|
578
|
+
*Ryuta Kamizono*
|
1429
579
|
|
1430
|
-
|
580
|
+
* SQLite3: Implement `add_foreign_key` and `remove_foreign_key`.
|
1431
581
|
|
1432
|
-
*
|
582
|
+
*Ryuta Kamizono*
|
1433
583
|
|
1434
|
-
|
584
|
+
* Deprecate using class level querying methods if the receiver scope
|
585
|
+
regarded as leaked. Use `klass.unscoped` to avoid the leaking scope.
|
1435
586
|
|
1436
|
-
*
|
587
|
+
*Ryuta Kamizono*
|
1437
588
|
|
1438
|
-
*
|
589
|
+
* Allow applications to automatically switch connections.
|
1439
590
|
|
1440
|
-
|
1441
|
-
|
1442
|
-
|
591
|
+
Adds a middleware and configuration options that can be used in your
|
592
|
+
application to automatically switch between the writing and reading
|
593
|
+
database connections.
|
1443
594
|
|
1444
|
-
|
595
|
+
`GET` and `HEAD` requests will read from the replica unless there was
|
596
|
+
a write in the last 2 seconds, otherwise they will read from the primary.
|
597
|
+
Non-get requests will always write to the primary. The middleware accepts
|
598
|
+
an argument for a Resolver class and an Operations class where you are able
|
599
|
+
to change how the auto-switcher works to be most beneficial for your
|
600
|
+
application.
|
1445
601
|
|
1446
|
-
|
1447
|
-
|
602
|
+
To use the middleware in your application you can use the following
|
603
|
+
configuration options:
|
1448
604
|
|
1449
|
-
|
605
|
+
```
|
606
|
+
config.active_record.database_selector = { delay: 2.seconds }
|
607
|
+
config.active_record.database_resolver = ActiveRecord::Middleware::DatabaseSelector::Resolver
|
608
|
+
config.active_record.database_resolver_context = ActiveRecord::Middleware::DatabaseSelector::Resolver::Session
|
609
|
+
```
|
1450
610
|
|
1451
|
-
|
611
|
+
To change the database selection strategy, pass a custom class to the
|
612
|
+
configuration options:
|
1452
613
|
|
1453
|
-
|
1454
|
-
|
1455
|
-
|
614
|
+
```
|
615
|
+
config.active_record.database_selector = { delay: 10.seconds }
|
616
|
+
config.active_record.database_resolver = MyResolver
|
617
|
+
config.active_record.database_resolver_context = MyResolver::MyCookies
|
618
|
+
```
|
1456
619
|
|
1457
|
-
*
|
620
|
+
*Eileen M. Uchitelle*
|
1458
621
|
|
1459
|
-
*
|
1460
|
-
extension names in PostgreSQL when migrating.
|
622
|
+
* MySQL: Support `:size` option to change text and blob size.
|
1461
623
|
|
1462
|
-
*
|
624
|
+
*Ryuta Kamizono*
|
1463
625
|
|
1464
|
-
*
|
1465
|
-
`references`, now works with any column types.
|
626
|
+
* Make `t.timestamps` with precision by default.
|
1466
627
|
|
1467
|
-
*
|
628
|
+
*Ryuta Kamizono*
|
1468
629
|
|
1469
|
-
* Add support for counter name to be passed as parameter on `CounterCache::ClassMethods#reset_counters`.
|
1470
630
|
|
1471
|
-
|
631
|
+
## Rails 6.0.0.beta1 (January 18, 2019) ##
|
1472
632
|
|
1473
|
-
*
|
1474
|
-
or `offset`.
|
633
|
+
* Remove deprecated `#set_state` from the transaction object.
|
1475
634
|
|
1476
|
-
|
1477
|
-
records to be deleted.
|
635
|
+
*Rafael Mendonça França*
|
1478
636
|
|
1479
|
-
|
637
|
+
* Remove deprecated `#supports_statement_cache?` from the database adapters.
|
1480
638
|
|
1481
|
-
*
|
639
|
+
*Rafael Mendonça França*
|
1482
640
|
|
1483
|
-
*
|
1484
|
-
their limit dropped from the schema.
|
641
|
+
* Remove deprecated `#insert_fixtures` from the database adapters.
|
1485
642
|
|
1486
|
-
|
643
|
+
*Rafael Mendonça França*
|
1487
644
|
|
1488
|
-
|
645
|
+
* Remove deprecated `ActiveRecord::ConnectionAdapters::SQLite3Adapter#valid_alter_table_type?`.
|
1489
646
|
|
1490
|
-
*
|
1491
|
-
association.
|
647
|
+
*Rafael Mendonça França*
|
1492
648
|
|
1493
|
-
|
649
|
+
* Do not allow passing the column name to `sum` when a block is passed.
|
1494
650
|
|
1495
|
-
*
|
651
|
+
*Rafael Mendonça França*
|
1496
652
|
|
1497
|
-
* `
|
1498
|
-
strings in column names as equal.
|
653
|
+
* Do not allow passing the column name to `count` when a block is passed.
|
1499
654
|
|
1500
|
-
|
1501
|
-
placeholders for them in the generated SQL statement, which can make PostgreSQL
|
1502
|
-
throw a `StatementInvalid` exception.
|
655
|
+
*Rafael Mendonça França*
|
1503
656
|
|
1504
|
-
|
657
|
+
* Remove delegation of missing methods in a relation to arel.
|
1505
658
|
|
1506
|
-
*
|
1507
|
-
attributes defined in parent classes.
|
659
|
+
*Rafael Mendonça França*
|
1508
660
|
|
1509
|
-
|
661
|
+
* Remove delegation of missing methods in a relation to private methods of the class.
|
1510
662
|
|
1511
|
-
*
|
663
|
+
*Rafael Mendonça França*
|
1512
664
|
|
1513
|
-
*
|
665
|
+
* Deprecate `config.active_record.sqlite3.represent_boolean_as_integer`.
|
1514
666
|
|
1515
|
-
|
667
|
+
*Rafael Mendonça França*
|
1516
668
|
|
1517
|
-
|
669
|
+
* Change `SQLite3Adapter` to always represent boolean values as integers.
|
1518
670
|
|
1519
|
-
*
|
671
|
+
*Rafael Mendonça França*
|
1520
672
|
|
1521
|
-
|
1522
|
-
PostgreSQL and are used by internal system catalogs. These field types
|
1523
|
-
can sometimes show up in structure-sniffing queries that feature internal system
|
1524
|
-
structures or with certain PostgreSQL extensions.
|
673
|
+
* Remove ability to specify a timestamp name for `#cache_key`.
|
1525
674
|
|
1526
|
-
*
|
675
|
+
*Rafael Mendonça França*
|
1527
676
|
|
1528
|
-
*
|
1529
|
-
NaN PostgreSQL values into a native Ruby `Float::INFINITY` and `Float::NAN`
|
677
|
+
* Remove deprecated `ActiveRecord::Migrator.migrations_path=`.
|
1530
678
|
|
1531
|
-
|
679
|
+
*Rafael Mendonça França*
|
1532
680
|
|
1533
|
-
|
1534
|
-
Point.last.value # => 0.0
|
681
|
+
* Remove deprecated `expand_hash_conditions_for_aggregates`.
|
1535
682
|
|
1536
|
-
|
683
|
+
*Rafael Mendonça França*
|
1537
684
|
|
1538
|
-
|
1539
|
-
Point.last.value # => Infinity
|
685
|
+
* Set polymorphic type column to NULL on `dependent: :nullify` strategy.
|
1540
686
|
|
1541
|
-
|
687
|
+
On polymorphic associations both the foreign key and the foreign type columns will be set to NULL.
|
1542
688
|
|
1543
|
-
*
|
689
|
+
*Laerti Papa*
|
1544
690
|
|
1545
|
-
|
691
|
+
* Allow permitted instance of `ActionController::Parameters` as argument of `ActiveRecord::Relation#exists?`.
|
1546
692
|
|
1547
|
-
*
|
693
|
+
*Gannon McGibbon*
|
1548
694
|
|
1549
|
-
*
|
1550
|
-
associations without replacement. These operations happen before instances
|
1551
|
-
are created. The current behavior is unexpected and can result in broken
|
1552
|
-
behavior.
|
695
|
+
* Add support for endless ranges introduces in Ruby 2.6.
|
1553
696
|
|
1554
|
-
|
697
|
+
*Greg Navis*
|
1555
698
|
|
1556
|
-
|
699
|
+
* Deprecate passing `migrations_paths` to `connection.assume_migrated_upto_version`.
|
1557
700
|
|
1558
|
-
*
|
701
|
+
*Ryuta Kamizono*
|
1559
702
|
|
1560
|
-
|
1561
|
-
size calculation if the collection is not cached or loaded.
|
703
|
+
* MySQL: `ROW_FORMAT=DYNAMIC` create table option by default.
|
1562
704
|
|
1563
|
-
|
705
|
+
Since MySQL 5.7.9, the `innodb_default_row_format` option defines the default row
|
706
|
+
format for InnoDB tables. The default setting is `DYNAMIC`.
|
707
|
+
The row format is required for indexing on `varchar(255)` with `utf8mb4` columns.
|
1564
708
|
|
1565
|
-
*
|
709
|
+
*Ryuta Kamizono*
|
1566
710
|
|
1567
|
-
*
|
1568
|
-
not exist.
|
711
|
+
* Fix join table column quoting with SQLite.
|
1569
712
|
|
1570
|
-
*
|
713
|
+
*Gannon McGibbon*
|
1571
714
|
|
1572
|
-
*
|
715
|
+
* Allow disabling scopes generated by `ActiveRecord.enum`.
|
1573
716
|
|
1574
|
-
|
1575
|
-
using namespaced models.
|
717
|
+
*Alfred Dominic*
|
1576
718
|
|
1577
|
-
|
719
|
+
* Ensure that `delete_all` on collection proxy returns affected count.
|
1578
720
|
|
1579
|
-
*
|
721
|
+
*Ryuta Kamizono*
|
1580
722
|
|
1581
|
-
|
1582
|
-
In 4.0 series it is delegated to `Array#join`.
|
723
|
+
* Reset scope after delete on collection association to clear stale offsets of removed records.
|
1583
724
|
|
1584
|
-
*
|
725
|
+
*Gannon McGibbon*
|
1585
726
|
|
1586
|
-
*
|
727
|
+
* Add the ability to prevent writes to a database for the duration of a block.
|
1587
728
|
|
1588
|
-
|
1589
|
-
|
1590
|
-
|
1591
|
-
that already has a non-nil value in that column since an initial nil
|
1592
|
-
value isn't included in the SQL anyway (at least, when dirty checking
|
1593
|
-
is enabled.) The column's new value will now be logged as `<NULL binary data>`
|
1594
|
-
to parallel the existing `<N bytes of binary data>` for non-nil values.
|
729
|
+
Allows the application to prevent writes to a database. This can be useful when
|
730
|
+
you're building out multiple databases and want to make sure you're not sending
|
731
|
+
writes when you want a read.
|
1595
732
|
|
1596
|
-
|
733
|
+
If `while_preventing_writes` is called and the query is considered a write
|
734
|
+
query the database will raise an exception regardless of whether the database
|
735
|
+
user is able to write.
|
1597
736
|
|
1598
|
-
|
1599
|
-
|
737
|
+
This is not meant to be a catch-all for write queries but rather a way to enforce
|
738
|
+
read-only queries without opening a second connection. One purpose of this is to
|
739
|
+
catch accidental writes, not all writes.
|
1600
740
|
|
1601
|
-
|
741
|
+
*Eileen M. Uchitelle*
|
1602
742
|
|
1603
|
-
|
743
|
+
* Allow aliased attributes to be used in `#update_columns` and `#update`.
|
1604
744
|
|
1605
|
-
*
|
745
|
+
*Gannon McGibbon*
|
1606
746
|
|
1607
|
-
|
1608
|
-
was ignored and overwritten by strict mode option.
|
747
|
+
* Allow spaces in postgres table names.
|
1609
748
|
|
1610
|
-
Fixes
|
749
|
+
Fixes issue where "user post" is misinterpreted as "\"user\".\"post\"" when quoting table names with the postgres adapter.
|
1611
750
|
|
1612
|
-
*
|
751
|
+
*Gannon McGibbon*
|
1613
752
|
|
1614
|
-
*
|
753
|
+
* Cached `columns_hash` fields should be excluded from `ResultSet#column_types`.
|
1615
754
|
|
1616
|
-
|
755
|
+
PR #34528 addresses the inconsistent behaviour when attribute is defined for an ignored column. The following test
|
756
|
+
was passing for SQLite and MySQL, but failed for PostgreSQL:
|
1617
757
|
|
1618
|
-
|
758
|
+
```ruby
|
759
|
+
class DeveloperName < ActiveRecord::Type::String
|
760
|
+
def deserialize(value)
|
761
|
+
"Developer: #{value}"
|
762
|
+
end
|
763
|
+
end
|
1619
764
|
|
1620
|
-
|
765
|
+
class AttributedDeveloper < ActiveRecord::Base
|
766
|
+
self.table_name = "developers"
|
1621
767
|
|
1622
|
-
|
768
|
+
attribute :name, DeveloperName.new
|
1623
769
|
|
1624
|
-
|
1625
|
-
|
1626
|
-
uses the reflections to set database with fixtures.
|
770
|
+
self.ignored_columns += ["name"]
|
771
|
+
end
|
1627
772
|
|
1628
|
-
|
773
|
+
developer = AttributedDeveloper.create
|
774
|
+
developer.update_column :name, "name"
|
1629
775
|
|
1630
|
-
|
776
|
+
loaded_developer = AttributedDeveloper.where(id: developer.id).select("*").first
|
777
|
+
puts loaded_developer.name # should be "Developer: name" but it's just "name"
|
778
|
+
```
|
1631
779
|
|
1632
|
-
*
|
1633
|
-
Additionally display a warning message to make the user aware.
|
780
|
+
*Dmitry Tsepelev*
|
1634
781
|
|
1635
|
-
|
782
|
+
* Make the implicit order column configurable.
|
1636
783
|
|
1637
|
-
|
1638
|
-
|
784
|
+
When calling ordered finder methods such as `first` or `last` without an
|
785
|
+
explicit order clause, ActiveRecord sorts records by primary key. This can
|
786
|
+
result in unpredictable and surprising behaviour when the primary key is
|
787
|
+
not an auto-incrementing integer, for example when it's a UUID. This change
|
788
|
+
makes it possible to override the column used for implicit ordering such
|
789
|
+
that `first` and `last` will return more predictable results.
|
1639
790
|
|
1640
791
|
Example:
|
1641
792
|
|
1642
|
-
|
1643
|
-
|
1644
|
-
|
1645
|
-
# => also :datetime (previously would be :timestamp)
|
1646
|
-
|
1647
|
-
See #14513.
|
1648
|
-
|
1649
|
-
*Jefferson Lai*
|
1650
|
-
|
1651
|
-
* `ActiveRecord::Base.no_touching` no longer triggers callbacks or start empty transactions.
|
1652
|
-
|
1653
|
-
Fixes #14841.
|
1654
|
-
|
1655
|
-
*Lucas Mazza*
|
1656
|
-
|
1657
|
-
* Fix name collision with `Array#select!` with `Relation#select!`.
|
1658
|
-
|
1659
|
-
Fixes #14752.
|
1660
|
-
|
1661
|
-
*Earl St Sauver*
|
793
|
+
class Project < ActiveRecord::Base
|
794
|
+
self.implicit_order_column = "created_at"
|
795
|
+
end
|
1662
796
|
|
1663
|
-
*
|
1664
|
-
a scoped `has_many`.
|
797
|
+
*Tekin Suleyman*
|
1665
798
|
|
1666
|
-
|
1667
|
-
`has_many :through` uses this association, then the scope adjustment is
|
1668
|
-
unexpectedly neglected.
|
799
|
+
* Bump minimum PostgreSQL version to 9.3.
|
1669
800
|
|
1670
|
-
|
801
|
+
*Yasuo Honda*
|
1671
802
|
|
1672
|
-
|
803
|
+
* Values of enum are frozen, raising an error when attempting to modify them.
|
1673
804
|
|
1674
|
-
*
|
805
|
+
*Emmanuel Byrd*
|
1675
806
|
|
1676
|
-
|
807
|
+
* Move `ActiveRecord::StatementInvalid` SQL to error property and include binds as separate error property.
|
1677
808
|
|
1678
|
-
|
809
|
+
`ActiveRecord::ConnectionAdapters::AbstractAdapter#translate_exception_class` now requires `binds` to be passed as the last argument.
|
1679
810
|
|
1680
|
-
|
811
|
+
`ActiveRecord::ConnectionAdapters::AbstractAdapter#translate_exception` now requires `message`, `sql`, and `binds` to be passed as keyword arguments.
|
1681
812
|
|
1682
|
-
|
813
|
+
Subclasses of `ActiveRecord::StatementInvalid` must now provide `sql:` and `binds:` arguments to `super`.
|
1683
814
|
|
1684
|
-
|
815
|
+
Example:
|
1685
816
|
|
1686
|
-
|
817
|
+
```
|
818
|
+
class MySubclassedError < ActiveRecord::StatementInvalid
|
819
|
+
def initialize(message, sql:, binds:)
|
820
|
+
super(message, sql: sql, binds: binds)
|
821
|
+
end
|
822
|
+
end
|
823
|
+
```
|
1687
824
|
|
1688
|
-
*
|
825
|
+
*Gannon McGibbon*
|
1689
826
|
|
1690
|
-
* `
|
1691
|
-
LIKE statement.
|
827
|
+
* Add an `:if_not_exists` option to `create_table`.
|
1692
828
|
|
1693
829
|
Example:
|
1694
830
|
|
1695
|
-
|
1696
|
-
|
1697
|
-
where("title LIKE ?", sanitize_sql_like(term))
|
1698
|
-
end
|
831
|
+
create_table :posts, if_not_exists: true do |t|
|
832
|
+
t.string :title
|
1699
833
|
end
|
1700
834
|
|
1701
|
-
|
1702
|
-
# => Query looks like "... title LIKE '20\% \_reduction\_' ..."
|
1703
|
-
|
1704
|
-
*Rob Gilson*, *Yves Senn*
|
835
|
+
That would execute:
|
1705
836
|
|
1706
|
-
|
837
|
+
CREATE TABLE IF NOT EXISTS posts (
|
838
|
+
...
|
839
|
+
)
|
1707
840
|
|
1708
|
-
|
841
|
+
If the table already exists, `if_not_exists: false` (the default) raises an
|
842
|
+
exception whereas `if_not_exists: true` does nothing.
|
1709
843
|
|
1710
|
-
*
|
844
|
+
*fatkodima*, *Stefan Kanev*
|
1711
845
|
|
1712
|
-
*
|
846
|
+
* Defining an Enum as a Hash with blank key, or as an Array with a blank value, now raises an `ArgumentError`.
|
1713
847
|
|
1714
|
-
|
1715
|
-
|
1716
|
-
author.posts == Post.where(author_id: author.id)
|
1717
|
-
# => true
|
1718
|
-
Post.where(author_id: author.id) == author.posts
|
1719
|
-
# => true
|
848
|
+
*Christophe Maximin*
|
1720
849
|
|
1721
|
-
|
850
|
+
* Adds support for multiple databases to `rails db:schema:cache:dump` and `rails db:schema:cache:clear`.
|
1722
851
|
|
1723
|
-
*
|
852
|
+
*Gannon McGibbon*
|
1724
853
|
|
1725
|
-
*
|
1726
|
-
|
1727
|
-
|
1728
|
-
Before:
|
854
|
+
* `update_columns` now correctly raises `ActiveModel::MissingAttributeError`
|
855
|
+
if the attribute does not exist.
|
1729
856
|
|
1730
|
-
|
1731
|
-
AND `model`.`id` IN (1, 2, 3...)
|
857
|
+
*Sean Griffin*
|
1732
858
|
|
1733
|
-
|
859
|
+
* Add support for hash and URL configs in database hash of `ActiveRecord::Base.connected_to`.
|
1734
860
|
|
1735
|
-
|
861
|
+
````
|
862
|
+
User.connected_to(database: { writing: "postgres://foo" }) do
|
863
|
+
User.create!(name: "Gannon")
|
864
|
+
end
|
1736
865
|
|
1737
|
-
|
866
|
+
config = { "adapter" => "sqlite3", "database" => "db/readonly.sqlite3" }
|
867
|
+
User.connected_to(database: { reading: config }) do
|
868
|
+
User.count
|
869
|
+
end
|
870
|
+
````
|
1738
871
|
|
1739
|
-
*
|
1740
|
-
with `select`.
|
872
|
+
*Gannon McGibbon*
|
1741
873
|
|
1742
|
-
|
874
|
+
* Support default expression for MySQL.
|
1743
875
|
|
1744
|
-
|
876
|
+
MySQL 8.0.13 and higher supports default value to be a function or expression.
|
1745
877
|
|
1746
|
-
|
878
|
+
https://dev.mysql.com/doc/refman/8.0/en/create-table.html
|
1747
879
|
|
1748
|
-
|
880
|
+
*Ryuta Kamizono*
|
1749
881
|
|
1750
|
-
|
882
|
+
* Support expression indexes for MySQL.
|
1751
883
|
|
1752
|
-
|
1753
|
-
|
884
|
+
MySQL 8.0.13 and higher supports functional key parts that index
|
885
|
+
expression values rather than column or column prefix values.
|
1754
886
|
|
1755
|
-
|
887
|
+
https://dev.mysql.com/doc/refman/8.0/en/create-index.html
|
1756
888
|
|
1757
|
-
*
|
889
|
+
*Ryuta Kamizono*
|
1758
890
|
|
1759
|
-
* Fix
|
891
|
+
* Fix collection cache key with limit and custom select to avoid ambiguous timestamp column error.
|
1760
892
|
|
1761
|
-
Fixes #
|
893
|
+
Fixes #33056.
|
1762
894
|
|
1763
|
-
*
|
895
|
+
*Federico Martinez*
|
1764
896
|
|
1765
|
-
*
|
897
|
+
* Add basic API for connection switching to support multiple databases.
|
1766
898
|
|
1767
|
-
|
899
|
+
1) Adds a `connects_to` method for models to connect to multiple databases. Example:
|
1768
900
|
|
1769
|
-
|
901
|
+
```
|
902
|
+
class AnimalsModel < ApplicationRecord
|
903
|
+
self.abstract_class = true
|
1770
904
|
|
1771
|
-
|
1772
|
-
|
905
|
+
connects_to database: { writing: :animals_primary, reading: :animals_replica }
|
906
|
+
end
|
1773
907
|
|
1774
|
-
|
908
|
+
class Dog < AnimalsModel
|
909
|
+
# connected to both the animals_primary db for writing and the animals_replica for reading
|
910
|
+
end
|
911
|
+
```
|
1775
912
|
|
1776
|
-
|
913
|
+
2) Adds a `connected_to` block method for switching connection roles or connecting to
|
914
|
+
a database that the model didn't connect to. Connecting to the database in this block is
|
915
|
+
useful when you have another defined connection, for example `slow_replica` that you don't
|
916
|
+
want to connect to by default but need in the console, or a specific code block.
|
1777
917
|
|
1778
|
-
|
918
|
+
```
|
919
|
+
ActiveRecord::Base.connected_to(role: :reading) do
|
920
|
+
Dog.first # finds dog from replica connected to AnimalsBase
|
921
|
+
Book.first # doesn't have a reading connection, will raise an error
|
922
|
+
end
|
923
|
+
```
|
1779
924
|
|
1780
|
-
|
925
|
+
```
|
926
|
+
ActiveRecord::Base.connected_to(database: :slow_replica) do
|
927
|
+
SlowReplicaModel.first # if the db config has a slow_replica configuration this will be used to do the lookup, otherwise this will throw an exception
|
928
|
+
end
|
929
|
+
```
|
1781
930
|
|
1782
|
-
*
|
931
|
+
*Eileen M. Uchitelle*
|
1783
932
|
|
1784
|
-
*
|
933
|
+
* Enum raises on invalid definition values
|
1785
934
|
|
1786
|
-
|
935
|
+
When defining a Hash enum it can be easy to use `[]` instead of `{}`. This
|
936
|
+
commit checks that only valid definition values are provided, those can
|
937
|
+
be a Hash, an array of Symbols or an array of Strings. Otherwise it
|
938
|
+
raises an `ArgumentError`.
|
1787
939
|
|
1788
|
-
|
940
|
+
Fixes #33961
|
1789
941
|
|
1790
|
-
*
|
1791
|
-
could previously have incorrectly accrued additional conditions (e.g. as a result of
|
1792
|
-
a previous query). `CollectionProxy` now always defers to the association scope's
|
1793
|
-
`arel` method so the (incorrect) inherited one should be entirely concealed.
|
942
|
+
*Alberto Almagro*
|
1794
943
|
|
1795
|
-
|
944
|
+
* Reloading associations now clears the Query Cache like `Persistence#reload` does.
|
1796
945
|
|
1797
|
-
|
946
|
+
```
|
947
|
+
class Post < ActiveRecord::Base
|
948
|
+
has_one :category
|
949
|
+
belongs_to :author
|
950
|
+
has_many :comments
|
951
|
+
end
|
1798
952
|
|
1799
|
-
|
953
|
+
# Each of the following will now clear the query cache.
|
954
|
+
post.reload_category
|
955
|
+
post.reload_author
|
956
|
+
post.comments.reload
|
957
|
+
```
|
1800
958
|
|
1801
|
-
|
959
|
+
*Christophe Maximin*
|
1802
960
|
|
1803
|
-
|
961
|
+
* Added `index` option for `change_table` migration helpers.
|
962
|
+
With this change you can create indexes while adding new
|
963
|
+
columns into the existing tables.
|
1804
964
|
|
1805
|
-
|
965
|
+
Example:
|
1806
966
|
|
1807
|
-
|
967
|
+
change_table(:languages) do |t|
|
968
|
+
t.string :country_code, index: true
|
969
|
+
end
|
1808
970
|
|
1809
|
-
|
971
|
+
*Mehmet Emin İNAÇ*
|
1810
972
|
|
1811
|
-
|
973
|
+
* Fix `transaction` reverting for migrations.
|
1812
974
|
|
1813
|
-
|
1814
|
-
|
975
|
+
Before: Commands inside a `transaction` in a reverted migration ran uninverted.
|
976
|
+
Now: This change fixes that by reverting commands inside `transaction` block.
|
1815
977
|
|
1816
|
-
|
1817
|
-
`sqlite3:///my/path` with `sqlite3:my/path`.
|
978
|
+
*fatkodima*, *David Verhasselt*
|
1818
979
|
|
1819
|
-
|
980
|
+
* Raise an error instead of scanning the filesystem root when `fixture_path` is blank.
|
1820
981
|
|
1821
|
-
*
|
982
|
+
*Gannon McGibbon*, *Max Albrecht*
|
1822
983
|
|
1823
|
-
|
984
|
+
* Allow `ActiveRecord::Base.configurations=` to be set with a symbolized hash.
|
1824
985
|
|
1825
|
-
|
986
|
+
*Gannon McGibbon*
|
1826
987
|
|
1827
|
-
|
988
|
+
* Don't update counter cache unless the record is actually saved.
|
1828
989
|
|
1829
|
-
|
990
|
+
Fixes #31493, #33113, #33117.
|
1830
991
|
|
1831
|
-
*
|
992
|
+
*Ryuta Kamizono*
|
1832
993
|
|
1833
|
-
*
|
994
|
+
* Deprecate `ActiveRecord::Result#to_hash` in favor of `ActiveRecord::Result#to_a`.
|
1834
995
|
|
1835
|
-
*
|
996
|
+
*Gannon McGibbon*, *Kevin Cheng*
|
1836
997
|
|
1837
|
-
*
|
1838
|
-
The column types stay the same except for enum columns. They no longer have
|
1839
|
-
`nil` as type but `enum`.
|
998
|
+
* SQLite3 adapter supports expression indexes.
|
1840
999
|
|
1841
|
-
|
1000
|
+
```
|
1001
|
+
create_table :users do |t|
|
1002
|
+
t.string :email
|
1003
|
+
end
|
1842
1004
|
|
1843
|
-
|
1005
|
+
add_index :users, 'lower(email)', name: 'index_users_on_email', unique: true
|
1006
|
+
```
|
1844
1007
|
|
1845
|
-
*
|
1846
|
-
column.
|
1008
|
+
*Gray Kemmey*
|
1847
1009
|
|
1848
|
-
|
1010
|
+
* Allow subclasses to redefine autosave callbacks for associated records.
|
1849
1011
|
|
1850
|
-
|
1012
|
+
Fixes #33305.
|
1851
1013
|
|
1852
|
-
*
|
1853
|
-
custom primary key that did not save due to validation error.
|
1014
|
+
*Andrey Subbota*
|
1854
1015
|
|
1855
|
-
|
1016
|
+
* Bump minimum MySQL version to 5.5.8.
|
1856
1017
|
|
1857
|
-
*
|
1018
|
+
*Yasuo Honda*
|
1858
1019
|
|
1859
|
-
*
|
1020
|
+
* Use MySQL utf8mb4 character set by default.
|
1860
1021
|
|
1861
|
-
|
1022
|
+
`utf8mb4` character set with 4-Byte encoding supports supplementary characters including emoji.
|
1023
|
+
The previous default 3-Byte encoding character set `utf8` is not enough to support them.
|
1862
1024
|
|
1863
|
-
*
|
1025
|
+
*Yasuo Honda*
|
1864
1026
|
|
1865
|
-
*
|
1027
|
+
* Fix duplicated record creation when using nested attributes with `create_with`.
|
1866
1028
|
|
1867
|
-
|
1868
|
-
would commit the transaction.
|
1029
|
+
*Darwin Wu*
|
1869
1030
|
|
1870
|
-
|
1871
|
-
|
1031
|
+
* Configuration item `config.filter_parameters` could also filter out
|
1032
|
+
sensitive values of database columns when calling `#inspect`.
|
1033
|
+
We also added `ActiveRecord::Base::filter_attributes`/`=` in order to
|
1034
|
+
specify sensitive attributes to specific model.
|
1872
1035
|
|
1873
|
-
|
1036
|
+
```
|
1037
|
+
Rails.application.config.filter_parameters += [:credit_card_number, /phone/]
|
1038
|
+
Account.last.inspect # => #<Account id: 123, name: "DHH", credit_card_number: [FILTERED], telephone_number: [FILTERED] ...>
|
1039
|
+
SecureAccount.filter_attributes += [:name]
|
1040
|
+
SecureAccount.last.inspect # => #<SecureAccount id: 42, name: [FILTERED], credit_card_number: [FILTERED] ...>
|
1041
|
+
```
|
1874
1042
|
|
1875
|
-
|
1876
|
-
t.index :zip
|
1877
|
-
end
|
1878
|
-
# => CREATE TEMPORARY TABLE temp (INDEX (zip)) AS SELECT id, name, zip FROM a_really_complicated_query
|
1043
|
+
*Zhang Kang*, *Yoshiyuki Kinjo*
|
1879
1044
|
|
1880
|
-
|
1045
|
+
* Deprecate `column_name_length`, `table_name_length`, `columns_per_table`,
|
1046
|
+
`indexes_per_table`, `columns_per_multicolumn_index`, `sql_query_length`,
|
1047
|
+
and `joins_per_query` methods in `DatabaseLimits`.
|
1881
1048
|
|
1882
|
-
*
|
1883
|
-
`ActiveRecord::Base.pluralize_table_names` is `false`.
|
1049
|
+
*Ryuta Kamizono*
|
1884
1050
|
|
1885
|
-
|
1051
|
+
* `ActiveRecord::Base.configurations` now returns an object.
|
1886
1052
|
|
1887
|
-
|
1053
|
+
`ActiveRecord::Base.configurations` used to return a hash, but this
|
1054
|
+
is an inflexible data model. In order to improve multiple-database
|
1055
|
+
handling in Rails, we've changed this to return an object. Some methods
|
1056
|
+
are provided to make the object behave hash-like in order to ease the
|
1057
|
+
transition process. Since most applications don't manipulate the hash
|
1058
|
+
we've decided to add backwards-compatible functionality that will throw
|
1059
|
+
a deprecation warning if used, however calling `ActiveRecord::Base.configurations`
|
1060
|
+
will use the new version internally and externally.
|
1888
1061
|
|
1889
|
-
|
1062
|
+
For example, the following `database.yml`:
|
1890
1063
|
|
1891
|
-
|
1064
|
+
```
|
1065
|
+
development:
|
1066
|
+
adapter: sqlite3
|
1067
|
+
database: db/development.sqlite3
|
1068
|
+
```
|
1892
1069
|
|
1893
|
-
|
1894
|
-
Photo.last.touch(:signed_at, :sealed_at)
|
1070
|
+
Used to become a hash:
|
1895
1071
|
|
1896
|
-
|
1072
|
+
```
|
1073
|
+
{ "development" => { "adapter" => "sqlite3", "database" => "db/development.sqlite3" } }
|
1074
|
+
```
|
1897
1075
|
|
1898
|
-
|
1899
|
-
migration table exists.
|
1076
|
+
Is now converted into the following object:
|
1900
1077
|
|
1901
|
-
|
1078
|
+
```
|
1079
|
+
#<ActiveRecord::DatabaseConfigurations:0x00007fd1acbdf800 @configurations=[
|
1080
|
+
#<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd1acbded10 @env_name="development",
|
1081
|
+
@spec_name="primary", @config={"adapter"=>"sqlite3", "database"=>"db/development.sqlite3"}>
|
1082
|
+
]
|
1083
|
+
```
|
1902
1084
|
|
1903
|
-
|
1085
|
+
Iterating over the database configurations has also changed. Instead of
|
1086
|
+
calling hash methods on the `configurations` hash directly, a new method `configs_for` has
|
1087
|
+
been provided that allows you to select the correct configuration. `env_name` and
|
1088
|
+
`spec_name` arguments are optional. For example, these return an array of
|
1089
|
+
database config objects for the requested environment and a single database config object
|
1090
|
+
will be returned for the requested environment and specification name respectively.
|
1904
1091
|
|
1905
|
-
|
1906
|
-
|
1907
|
-
|
1908
|
-
|
1909
|
-
the same time.
|
1092
|
+
```
|
1093
|
+
ActiveRecord::Base.configurations.configs_for(env_name: "development")
|
1094
|
+
ActiveRecord::Base.configurations.configs_for(env_name: "development", spec_name: "primary")
|
1095
|
+
```
|
1910
1096
|
|
1911
|
-
*
|
1097
|
+
*Eileen M. Uchitelle*, *Aaron Patterson*
|
1912
1098
|
|
1913
|
-
*
|
1914
|
-
pointing to pg_class, and thus only sequence objects, are considered.
|
1099
|
+
* Add database configuration to disable advisory locks.
|
1915
1100
|
|
1916
|
-
|
1101
|
+
```
|
1102
|
+
production:
|
1103
|
+
adapter: postgresql
|
1104
|
+
advisory_locks: false
|
1105
|
+
```
|
1917
1106
|
|
1918
|
-
*
|
1107
|
+
*Guo Xiang*
|
1919
1108
|
|
1920
|
-
|
1109
|
+
* SQLite3 adapter `alter_table` method restores foreign keys.
|
1921
1110
|
|
1922
|
-
*
|
1111
|
+
*Yasuo Honda*
|
1923
1112
|
|
1924
|
-
*
|
1113
|
+
* Allow `:to_table` option to `invert_remove_foreign_key`.
|
1925
1114
|
|
1926
1115
|
Example:
|
1927
1116
|
|
1928
|
-
|
1929
|
-
email: $LABEL@email.com
|
1930
|
-
|
1931
|
-
users(:martin).email # => martin@email.com
|
1117
|
+
remove_foreign_key :accounts, to_table: :owners
|
1932
1118
|
|
1933
|
-
*
|
1119
|
+
*Nikolay Epifanov*, *Rich Chen*
|
1934
1120
|
|
1935
|
-
* Add
|
1121
|
+
* Add environment & load_config dependency to `bin/rake db:seed` to enable
|
1122
|
+
seed load in environments without Rails and custom DB configuration
|
1936
1123
|
|
1937
|
-
|
1938
|
-
|
1939
|
-
*arthurnn*
|
1124
|
+
*Tobias Bielohlawek*
|
1940
1125
|
|
1941
|
-
*
|
1942
|
-
Call `.id` on the object first.
|
1126
|
+
* Fix default value for mysql time types with specified precision.
|
1943
1127
|
|
1944
|
-
*
|
1128
|
+
*Nikolay Kondratyev*
|
1945
1129
|
|
1946
|
-
*
|
1947
|
-
has a case insensitive collation.
|
1130
|
+
* Fix `touch` option to behave consistently with `Persistence#touch` method.
|
1948
1131
|
|
1949
1132
|
*Ryuta Kamizono*
|
1950
1133
|
|
1951
|
-
*
|
1952
|
-
|
1953
|
-
*arthurnn*, *Tatsuhiko Miyagawa*
|
1134
|
+
* Migrations raise when duplicate column definition.
|
1954
1135
|
|
1955
|
-
|
1956
|
-
`where` values without needing to wrap in UPPER/LOWER sql functions.
|
1136
|
+
Fixes #33024.
|
1957
1137
|
|
1958
|
-
*
|
1138
|
+
*Federico Martinez*
|
1959
1139
|
|
1960
|
-
*
|
1961
|
-
Previously after save related callbacks, such as `#after_commit`, were triggered when the has_one
|
1962
|
-
object did not get saved to the db.
|
1140
|
+
* Bump minimum SQLite version to 3.8
|
1963
1141
|
|
1964
|
-
*
|
1142
|
+
*Yasuo Honda*
|
1965
1143
|
|
1966
|
-
*
|
1144
|
+
* Fix parent record should not get saved with duplicate children records.
|
1967
1145
|
|
1968
|
-
|
1146
|
+
Fixes #32940.
|
1969
1147
|
|
1970
|
-
|
1148
|
+
*Santosh Wadghule*
|
1971
1149
|
|
1972
|
-
|
1150
|
+
* Fix logic on disabling commit callbacks so they are not called unexpectedly when errors occur.
|
1973
1151
|
|
1974
|
-
*
|
1975
|
-
warnings on enum columns.
|
1152
|
+
*Brian Durand*
|
1976
1153
|
|
1977
|
-
|
1154
|
+
* Ensure `Associations::CollectionAssociation#size` and `Associations::CollectionAssociation#empty?`
|
1155
|
+
use loaded association ids if present.
|
1978
1156
|
|
1979
|
-
*
|
1980
|
-
joins are involved.
|
1157
|
+
*Graham Turner*
|
1981
1158
|
|
1982
|
-
|
1159
|
+
* Add support to preload associations of polymorphic associations when not all the records have the requested associations.
|
1983
1160
|
|
1984
|
-
*
|
1161
|
+
*Dana Sherson*
|
1985
1162
|
|
1986
|
-
*
|
1987
|
-
any enum attribute is always evaluated as 0 during uniqueness validation.
|
1163
|
+
* Add `touch_all` method to `ActiveRecord::Relation`.
|
1988
1164
|
|
1989
|
-
|
1165
|
+
Example:
|
1990
1166
|
|
1991
|
-
|
1167
|
+
Person.where(name: "David").touch_all(time: Time.new(2020, 5, 16, 0, 0, 0))
|
1992
1168
|
|
1993
|
-
*
|
1994
|
-
`has_and_belongs_to_many` associations *and* on `has_many :through`
|
1995
|
-
associations. Before this change, `before_add` callbacks would be fired
|
1996
|
-
before the record was saved on `has_and_belongs_to_many` associations, but
|
1997
|
-
*not* on `has_many :through` associations.
|
1169
|
+
*fatkodima*, *duggiefresh*
|
1998
1170
|
|
1999
|
-
|
1171
|
+
* Add `ActiveRecord::Base.base_class?` predicate.
|
2000
1172
|
|
2001
|
-
*
|
2002
|
-
private method defined on its ancestors.
|
1173
|
+
*Bogdan Gusiev*
|
2003
1174
|
|
2004
|
-
|
1175
|
+
* Add custom prefix/suffix options to `ActiveRecord::Store.store_accessor`.
|
2005
1176
|
|
2006
|
-
*
|
1177
|
+
*Tan Huynh*, *Yukio Mizuta*
|
2007
1178
|
|
2008
|
-
*
|
1179
|
+
* Rails 6 requires Ruby 2.5.0 or newer.
|
2009
1180
|
|
2010
|
-
|
1181
|
+
*Jeremy Daer*, *Kasper Timm Hansen*
|
2011
1182
|
|
2012
|
-
|
2013
|
-
book.save!
|
2014
|
-
book.title # => "12345"
|
1183
|
+
* Deprecate `update_attributes`/`!` in favor of `update`/`!`.
|
2015
1184
|
|
2016
|
-
*
|
1185
|
+
*Eddie Lebow*
|
2017
1186
|
|
2018
|
-
*
|
2019
|
-
|
2020
|
-
possible because the Ruby range does not support excluded beginnings.
|
1187
|
+
* Add `ActiveRecord::Base.create_or_find_by`/`!` to deal with the SELECT/INSERT race condition in
|
1188
|
+
`ActiveRecord::Base.find_or_create_by`/`!` by leaning on unique constraints in the database.
|
2021
1189
|
|
2022
|
-
|
2023
|
-
deprecated. For subtypes where we don't know how to increment (e.g. `#succ`
|
2024
|
-
is not defined) it will raise an `ArgumentException` for ranges with excluding
|
2025
|
-
beginnings.
|
1190
|
+
*DHH*
|
2026
1191
|
|
2027
|
-
|
1192
|
+
* Add `Relation#pick` as short-hand for single-value plucks.
|
2028
1193
|
|
2029
|
-
*
|
1194
|
+
*DHH*
|
2030
1195
|
|
2031
|
-
*Yves Senn*
|
2032
1196
|
|
2033
|
-
Please check [
|
1197
|
+
Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/activerecord/CHANGELOG.md) for previous changes.
|