diff options
Diffstat (limited to 'activerecord/CHANGELOG.md')
-rw-r--r-- | activerecord/CHANGELOG.md | 823 |
1 files changed, 309 insertions, 514 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index b3df23c623..d0d5481d81 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,756 +1,551 @@ -* Ensure both parent IDs are set on join records when both sides of a - through association are new. +* Deprecated passing of `start` value to `find_in_batches` and `find_each` + in favour of `begin_at` value. - *Sean Griffin* - -* `ActiveRecord::Dirty` now detects in-place changes to mutable values. - Serialized attributes on ActiveRecord models will no longer save when - unchanged. Fixes #8328. - - Sean Griffin - -* Fixed automatic maintaining test schema to properly handle sql structure - schema format. - - Fixes #15394. - - *Wojciech Wnętrzak* - -* Pluck now works when selecting columns from different tables with the same - name. - - Fixes #15649 - - *Sean Griffin* - -* Remove `cache_attributes` and friends. All attributes are cached. - - *Sean Griffin* - -* Remove deprecated method `ActiveRecord::Base.quoted_locking_column`. - - *Akshay Vishnoi* - -* `ActiveRecord::FinderMethods.find` with block can handle proc parameter as - `Enumerable#find` does. - - Fixes #15382. - - *James Yang* - -* Make timezone aware attributes work with PostgreSQL array columns. + *Vipul A M* - Fixes #13402. +* Add `foreign_key_exists?` method. - *Kuldeep Aggarwal*, *Sean Griffin* + *Tõnis Simo* -* `ActiveRecord::SchemaMigration` has no primary key regardless of the - `primary_key_prefix_type` configuration. +* Use SQL COUNT and LIMIT 1 queries for `none?` and `one?` methods if no block or limit is given, + instead of loading the entire collection to memory. + This applies to relations (e.g. `User.all`) as well as associations (e.g. `account.users`) - Fixes #15051. + # Before: - *JoseLuis Torres*, *Yves Senn* + users.none? + # SELECT "users".* FROM "users" -* `rake db:migrate:status` works with legacy migration numbers like `00018_xyz.rb`. + users.one? + # SELECT "users".* FROM "users" - Fixes #15538. + # After: - *Yves Senn* - -* Baseclass becomes! subclass. - - Before this change, a record which changed its STI type, could not be - updated. - - Fixes #14785. - - *Matthew Draper*, *Earl St Sauver*, *Edo Balvers* + users.none? + # SELECT 1 AS one FROM "users" LIMIT 1 -* Remove deprecated `ActiveRecord::Migrator.proper_table_name`. Use the - `proper_table_name` instance method on `ActiveRecord::Migration` instead. + users.one? + # SELECT COUNT(*) FROM "users" - *Akshay Vishnoi* + *Eugene Gilburg* -* Fix regression on eager loading association based on SQL query rather than - existing column. - - Fixes #15480. - - *Lauro Caetano*, *Carlos Antonio da Silva* - -* Return a null column from `column_for_attribute` when no column exists. +* Have `enum` perform type casting consistently with the rest of Active + Record, such as `where`. *Sean Griffin* -* Implemented ActiveRecord::Base#pretty_print to work with PP. +* `scoping` no longer pollutes the current scope of sibling classes when using + STI. e.x. - *Ethan* + StiOne.none.scoping do + StiTwo.all + end -* Preserve type when dumping PostgreSQL point, bit, bit varying and money - columns. - - *Yves Senn* - -* New records remain new after YAML serialization. + Fixes #18806. *Sean Griffin* -* PostgreSQL support default values for enum types. Fixes #7814. - - *Yves Senn* - -* PostgreSQL `default_sequence_name` respects schema. Fixes #7516. - - *Yves Senn* - -* Fixed `columns_for_distinct` of postgresql adapter to work correctly - with orders without sort direction modifiers. - - *Nikolay Kondratyev* +* `remove_reference` with `foreign_key: true` removes the foreign key before + removing the column. This fixes a bug where it was not possible to remove + the column on MySQL. -* PostgreSQL `reset_pk_sequence!` respects schemas. Fixes #14719. + Fixes #18664. *Yves Senn* -* Keep PostgreSQL `hstore` and `json` attributes as `Hash` in `@attributes`. - Fixes duplication in combination with `store_accessor`. +* `find_in_batches` now accepts an `:end_at` parameter that complements the `:start` + parameter to specify where to stop batch processing. - Fixes #15369. + *Vipul A M* - *Yves Senn* - -* `rake railties:install:migrations` respects the order of railties. - - *Arun Agrawal* - -* Fix redefine a has_and_belongs_to_many inside inherited class - Fixing regression case, where redefining the same has_an_belongs_to_many - definition into a subclass would raise. - - Fixes #14983. +* Fix rounding problem for PostgreSQL timestamp column. - *arthurnn* - -* Fix has_and_belongs_to_many public reflection. - When defining a has_and_belongs_to_many, internally we convert that to two has_many. - But as `reflections` is a public API, people expect to see the right macro. - - Fixes #14682. - - *arthurnn* + If timestamp column have the precision, it need to format according to + the precision of timestamp column. -* Fixed serialization for records with an attribute named `format`. - - Fixes #15188. - - *Godfrey Chan* - -* When a `group` is set, `sum`, `size`, `average`, `minimum` and `maximum` - on a NullRelation should return a Hash. - - *Kuldeep Aggarwal* - -* Fixed serialized fields returning serialized data after being updated with - `update_column`. + *Ryuta Kamizono* - *Simon Hørup Eskildsen* +* Respect the database default charset for `schema_migrations` table. -* Fixed polymorphic eager loading when using a String as foreign key. + The charset of `version` column in `schema_migrations` table is depend + on the database default charset and collation rather than the encoding + of the connection. - Fixes #14734. + *Ryuta Kamizono* - *Lauro Caetano* +* Raise `ArgumentError` when passing `nil` or `false` to `Relation#merge`. -* Change belongs_to touch to be consistent with timestamp updates + These are not valid values to merge in a relation so it should warn the users + early. - If a model is set up with a belongs_to: touch relationship the parent - record will only be touched if the record was modified. This makes it - consistent with timestamp updating on the record itself. + *Rafael Mendonça França* - *Brock Trappitt* +* Use `SCHEMA` instead of `DB_STRUCTURE` for specifying structure file. -* Fixed the inferred table name of a has_and_belongs_to_many auxiliar - table inside a schema. + This makes the db:structure tasks consistent with test:load_structure. - Fixes #14824 + *Dieter Komendera* - *Eric Chahin* +* Respect custom primary keys for associations when calling `Relation#where` -* Remove unused `:timestamp` type. Transparently alias it to `:datetime` - in all cases. Fixes inconsistencies when column types are sent outside of - `ActiveRecord`, such as for XML Serialization. + Fixes #18813. *Sean Griffin* -* Fix bug that added `table_name_prefix` and `table_name_suffix` to - extension names in PostgreSQL when migrating. - - *Joao Carlos* +* Fixed several edge cases which could result in a counter cache updating + twice or not updating at all for `has_many` and `has_many :through`. -* The `:index` option in migrations, which previously was only available for - `references`, now works with any column types. + Fixes #10865. - *Marc Schütz* - -* Add support for counter name to be passed as parameter on `CounterCache::ClassMethods#reset_counters`. - - *jnormore* - -* Restrict deletion of record when using `delete_all` with `uniq`, `group`, `having` - or `offset`. - - In these cases the generated query ignored them and that caused unintended - records to be deleted. + *Sean Griffin* - Fixes #11985. +* Foreign keys added by migrations were given random, generated names. This + meant a different `structure.sql` would be generated every time a developer + ran migrations on their machine. - *Leandro Facchinetti* + The generated part of foreign key names is now a hash of the table name and + column name, which is consistent every time you run the migration. -* Floats with limit >= 25 that get turned into doubles in MySQL no longer have - their limit dropped from the schema. + *Chris Sinjakli* - Fixes #14135. +* Validation errors would be raised for parent records when an association + was saved when the parent had `validate: false`. It should not be the + responsibility of the model to validate an associated object unless the + object was created or modified by the parent. - *Aaron Nelson* + This fixes the issue by skipping validations if the parent record is + persisted, not changed, and not marked for destruction. -* Fix how to calculate associated class name when using namespaced has_and_belongs_to_many - association. + Fixes #17621. - Fixes #14709. + *Eileen M. Uchitelle, Aaron Patterson* - *Kassio Borges* +* Fix n+1 query problem when eager loading nil associations (fixes #18312) -* `ActiveRecord::Relation::Merger#filter_binds` now compares equivalent symbols and - strings in column names as equal. + *Sammy Larbi* - This fixes a rare case in which more bind values are passed than there are - placeholders for them in the generated SQL statement, which can make PostgreSQL - throw a `StatementInvalid` exception. +* Change the default error message from `can't be blank` to `must exist` for + the presence validator of the `:required` option on `belongs_to`/`has_one` associations. - *Nat Budin* + *Henrik Nygren* -* Fix `stored_attributes` to correctly merge the details of stored - attributes defined in parent classes. +* Fixed ActiveRecord::Relation#group method when argument is SQL reserved key word: - Fixes #14672. + Example: - *Brad Bennett*, *Jessica Yao*, *Lakshmi Parthasarathy* + SplitTest.group(:key).count + Property.group(:value).count -* `change_column_default` allows `[]` as argument to `change_column_default`. + *Bogdan Gusiev* - Fixes #11586. +* Added the `#or` method on ActiveRecord::Relation, allowing use of the OR + operator to combine WHERE or HAVING clauses. - *Yves Senn* + Example: -* Handle `name` and `"char"` column types in the PostgreSQL adapter. + Post.where('id = 1').or(Post.where('id = 2')) + # => SELECT * FROM posts WHERE (id = 1) OR (id = 2) - `name` and `"char"` are special character types used internally by - PostgreSQL and are used by internal system catalogs. These field types - can sometimes show up in structure-sniffing queries that feature internal system - structures or with certain PostgreSQL extensions. + *Sean Griffin*, *Matthew Draper*, *Gael Muller*, *Olivier El Mekki* - *J Smith*, *Yves Senn* +* Don't define autosave association callbacks twice from + `accepts_nested_attributes_for`. -* Fix `PostgreSQLAdapter::OID::Float#type_cast` to convert Infinity and - NaN PostgreSQL values into a native Ruby `Float::INFINITY` and `Float::NAN` + Fixes #18704. - Before: + *Sean Griffin* - Point.create(value: 1.0/0) - Point.last.value # => 0.0 +* Integer types will no longer raise a `RangeError` when assigning an + attribute, but will instead raise when going to the database. - After: + Fixes several vague issues which were never reported directly. See the + commit message from the commit which added this line for some examples. - Point.create(value: 1.0/0) - Point.last.value # => Infinity + *Sean Griffin* - *Innokenty Mikhailov* +* Values which would error while being sent to the database (such as an + ASCII-8BIT string with invalid UTF-8 bytes on SQLite3), no longer error on + assignment. They will still error when sent to the database, but you are + given the ability to re-assign it to a valid value. -* Allow the PostgreSQL adapter to handle bigserial primary key types again. + Fixes #18580. - Fixes #10410. + *Sean Griffin* - *Patrick Robertson* +* Don't remove join dependencies in `Relation#exists?` -* Deprecate joining, eager loading and preloading of instance dependent - associations without replacement. These operations happen before instances - are created. The current behavior is unexpected and can result in broken - behavior. + Fixes #18632. - Fixes #15024. + *Sean Griffin* - *Yves Senn* +* Invalid values assigned to a JSON column are assumed to be `nil`. -* Fixed has_and_belongs_to_many's CollectionAssociation size calculation. + Fixes #18629. - has_and_belongs_to_many should fall back to using the normal CollectionAssociation's - size calculation if the collection is not cached or loaded. + *Sean Griffin* - Fixes #14913, #14914. +* Add `ActiveRecord::Base#accessed_fields`, which can be used to quickly + discover which fields were read from a model when you are looking to only + select the data you need from the database. - *Fred Wu* + *Sean Griffin* -* Return a non zero status when running `rake db:migrate:status` and migration table does - not exist. +* Introduce the `:if_exists` option for `drop_table`. - *Paul B.* + Example: -* Add support for module-level `table_name_suffix` in models. + drop_table(:posts, if_exists: true) - This makes `table_name_suffix` work the same way as `table_name_prefix` when - using namespaced models. + That would execute: - *Jenner LaFave* + DROP TABLE IF EXISTS posts -* Revert the behaviour of `ActiveRecord::Relation#join` changed through 4.0 => 4.1 to 4.0. + If the table doesn't exist, `if_exists: false` (the default) raises an + exception whereas `if_exists: true` does nothing. - In 4.1.0 `Relation#join` is delegated to `Arel#SelectManager`. - In 4.0 series it is delegated to `Array#join`. + *Cody Cutrer*, *Stefan Kanev*, *Ryuta Kamizono* - *Bogdan Gusiev* +* Don't run SQL if attribute value is not changed for update_attribute method. -* Log nil binary column values correctly. + *Prathamesh Sonpatki* - When an object with a binary column is updated with a nil value - in that column, the SQL logger would throw an exception when trying - to log that nil value. This only occurs when updating a record - that already has a non-nil value in that column since an initial nil - value isn't included in the SQL anyway (at least, when dirty checking - is enabled.) The column's new value will now be logged as `<NULL binary data>` - to parallel the existing `<N bytes of binary data>` for non-nil values. +* `time` columns can now get affected by `time_zone_aware_attributes`. If you have + set `config.time_zone` to a value other than `'UTC'`, they will be treated + as in that time zone by default in Rails 5.1. If this is not the desired + behavior, you can set - *James Coleman* + ActiveRecord::Base.time_zone_aware_types = [:datetime] -* Rails will now pass a custom validation context through to autosave associations - in order to validate child associations with the same context. + A deprecation warning will be emitted if you have a `:time` column, and have + not explicitly opted out. - Fixes #13854. + Fixes #3145. - *Eric Chahin*, *Aaron Nelson*, *Kevin Casey* + *Sean Griffin* -* Stringify all variables keys of MySQL connection configuration. +* Tests now run after_commit callbacks. You no longer have to declare + `uses_transaction ‘test name’` to test the results of an after_commit. - When `sql_mode` variable for MySQL adapters set in configuration as `String` - was ignored and overwritten by strict mode option. + after_commit callbacks run after committing a transaction whose parent + is not `joinable?`: un-nested transactions, transactions within test cases, + and transactions in `console --sandbox`. - Fixes #14895. + *arthurnn*, *Ravil Bayramgalin*, *Matthew Draper* - *Paul Nikitochkin* +* `nil` as a value for a binary column in a query no longer logs as + "<NULL binary data>", and instead logs as just "nil". -* Ensure SQLite3 statements are closed on errors. + *Sean Griffin* - Fixes #13631. +* `attribute_will_change!` will no longer cause non-persistable attributes to + be sent to the database. - *Timur Alperovich* + Fixes #18407. -* Give ActiveRecord::PredicateBuilder private methods the privacy they deserve. + *Sean Griffin* - *Hector Satre* +* Remove support for the `protected_attributes` gem. -* When using a custom `join_table` name on a `habtm`, rails was not saving it - on Reflections. This causes a problem when rails loads fixtures, because it - uses the reflections to set database with fixtures. + *Carlos Antonio da Silva*, *Roberto Miranda* - Fixes #14845. +* Fix accessing of fixtures having non-string labels like Fixnum. - *Kassio Borges* + *Prathamesh Sonpatki* -* Reset the cache when modifying a Relation with cached Arel. - Additionally display a warning message to make the user aware. +* Remove deprecated support to preload instance-dependent associations. *Yves Senn* -* PostgreSQL should internally use `:datetime` consistently for TimeStamp. Assures - different spellings of timestamps are treated the same. - - Example: - - mytimestamp.simplified_type('timestamp without time zone') - # => :datetime - mytimestamp.simplified_type('timestamp(6) without time zone') - # => also :datetime (previously would be :timestamp) - - See #14513. - - *Jefferson Lai* - -* `ActiveRecord::Base.no_touching` no longer triggers callbacks or start empty transactions. - - Fixes #14841. - - *Lucas Mazza* +* Remove deprecated support for PostgreSQL ranges with exclusive lower bounds. -* Fix name collision with `Array#select!` with `Relation#select!`. + *Yves Senn* - Fixes #14752. +* Remove deprecation when modifying a relation with cached arel. + This raises an `ImmutableRelation` error instead. - *Earl St Sauver* + *Yves Senn* -* Fixed unexpected behavior for `has_many :through` associations going through a scoped `has_many`. +* Added `ActiveRecord::SecureToken` in order to encapsulate generation of + unique tokens for attributes in a model using `SecureRandom`. - If a `has_many` association is adjusted using a scope, and another `has_many :through` - uses this association, then the scope adjustment is unexpectedly neglected. + *Roberto Miranda* - Fixes #14537. +* Change the behavior of boolean columns to be closer to Ruby's semantics. - *Jan Habermann* + Before this change we had a small set of "truthy", and all others are "falsy". -* `@destroyed` should always be set to `false` when an object is duped. + Now, we have a small set of "falsy" values and all others are "truthy" matching + Ruby's semantics. - *Kuldeep Aggarwal* + *Rafael Mendonça França* -* Fixed has_many association to make it support irregular inflections. +* Deprecate `ActiveRecord::Base.errors_in_transactional_callbacks=`. - Fixes #8928. + *Rafael Mendonça França* - *arthurnn*, *Javier Goizueta* +* Change transaction callbacks to not swallow errors. -* Fixed a problem where count used with a grouping was not returning a Hash. + Before this change any errors raised inside a transaction callback + were getting rescued and printed in the logs. - Fixes #14721. + Now these errors are not rescued anymore and just bubble up, as the other callbacks. - *Eric Chahin* + *Rafael Mendonça França* -* `sanitize_sql_like` helper method to escape a string for safe use in a SQL - LIKE statement. +* Remove deprecated `sanitize_sql_hash_for_conditions`. - Example: + *Rafael Mendonça França* - class Article - def self.search(term) - where("title LIKE ?", sanitize_sql_like(term)) - end - end +* Remove deprecated `Reflection#source_macro`. - Article.search("20% _reduction_") - # => Query looks like "... title LIKE '20\% \_reduction\_' ..." + *Rafael Mendonça França* - *Rob Gilson*, *Yves Senn* +* Remove deprecated `symbolized_base_class` and `symbolized_sti_name`. -* Do not quote uuid default value on `change_column`. + *Rafael Mendonça França* - Fixes #14604. +* Remove deprecated `ActiveRecord::Base.disable_implicit_join_references=`. - *Eric Chahin* + *Rafael Mendonça França* -* The comparison between `Relation` and `CollectionProxy` should be consistent. +* Remove deprecated access to connection specification using a string accessor. - Example: + Now all strings will be handled as a URL. - author.posts == Post.where(author_id: author.id) - # => true - Post.where(author_id: author.id) == author.posts - # => true + *Rafael Mendonça França* - Fixes #13506. +* Change the default `null` value for `timestamps` to `false`. - *Lauro Caetano* + *Rafael Mendonça França* -* Calling `delete_all` on an unloaded `CollectionProxy` no longer - generates a SQL statement containing each id of the collection: +* Return an array of pools from `connection_pools`. - Before: + *Rafael Mendonça França* - DELETE FROM `model` WHERE `model`.`parent_id` = 1 - AND `model`.`id` IN (1, 2, 3...) - - After: - - DELETE FROM `model` WHERE `model`.`parent_id` = 1 +* Return a null column from `column_for_attribute` when no column exists. - *Eileen M. Uchitelle*, *Aaron Patterson* + *Rafael Mendonça França* -* Fixed error for aggregate methods (`empty?`, `any?`, `count`) with `select` - which created invalid SQL. +* Remove deprecated `serialized_attributes`. - Fixes #13648. + *Rafael Mendonça França* - *Simon Woker* +* Remove deprecated automatic counter caches on `has_many :through`. -* PostgreSQL adapter only warns once for every missing OID per connection. + *Rafael Mendonça França* - Fixes #14275. +* Change the way in which callback chains can be halted. - *Matthew Draper*, *Yves Senn* + The preferred method to halt a callback chain from now on is to explicitly + `throw(:abort)`. + In the past, returning `false` in an ActiveRecord `before_` callback had the + side effect of halting the callback chain. + This is not recommended anymore and, depending on the value of the + `config.active_support.halt_callback_chains_on_return_false` option, will + either not work at all or display a deprecation warning. -* PostgreSQL adapter automatically reloads it's type map when encountering - unknown OIDs. + *claudiob* - Fixes #14678. +* Clear query cache on rollback. - *Matthew Draper*, *Yves Senn* + *Florian Weingarten* -* Fix insertion of records via `has_many :through` association with scope. +* Fixed setting of foreign_key for through associations while building of new record. - Fixes #3548. + Fixes #12698. *Ivan Antropov* -* Auto-generate stable fixture UUIDs on PostgreSQL. - - Fixes #11524. +* Improve a dump of the primary key support. If it is not a default primary key, + correctly dump the type and options. - *Roderick van Domburg* + Fixes #14169, #16599. -* Fixed a problem where an enum would overwrite values of another enum - with the same name in an unrelated class. + *Ryuta Kamizono* - Fixes #14607. +* Format the datetime string according to the precision of the datetime field. - *Evan Whalen* + Incompatible to rounding behavior between MySQL 5.6 and earlier. -* PostgreSQL and SQLite string columns no longer have a default limit of 255. + In 5.5, when you insert `2014-08-17 12:30:00.999999` the fractional part + is ignored. In 5.6, it's rounded to `2014-08-17 12:30:01`: - Fixes #13435, #9153. + http://bugs.mysql.com/bug.php?id=68760 - *Vladimir Sazhin*, *Toms Mikoss*, *Yves Senn* + *Ryuta Kamizono* -* Make possible to have an association called `records`. +* Allow precision option for MySQL datetimes. - Fixes #11645. + *Ryuta Kamizono* - *prathamesh-sonpatki* +* Fixed automatic inverse_of for models nested in module. -* `to_sql` on an association now matches the query that is actually executed, where it - could previously have incorrectly accrued additional conditions (e.g. as a result of - a previous query). CollectionProxy now always defers to the association scope's - `arel` method so the (incorrect) inherited one should be entirely concealed. + *Andrew McCloud* - Fixes #14003. +* Change `ActiveRecord::Relation#update` behavior so that it can + be called without passing ids of the records to be updated. - *Jefferson Lai* + This change allows to update multiple records returned by + `ActiveRecord::Relation` with callbacks and validations. -* Block a few default Class methods as scope name. + # Before + # ArgumentError: wrong number of arguments (1 for 2) + Comment.where(group: 'expert').update(body: "Group of Rails Experts") - For instance, this will raise: + # After + # Comments with group expert updated with body "Group of Rails Experts" + Comment.where(group: 'expert').update(body: "Group of Rails Experts") - scope :public, -> { where(status: 1) } + *Prathamesh Sonpatki* - *arthurnn* +* Fix `reaping_frequency` option when the value is a string. -* Fixed error when using `with_options` with lambda. + This usually happens when it is configured using `DATABASE_URL`. - Fixes #9805. + *korbin* - *Lauro Caetano* +* Fix error message when trying to create an associated record and the foreign + key is missing. -* Switch `sqlite3:///` URLs (which were temporarily - deprecated in 4.1) from relative to absolute. + Before this fix the following exception was being raised: - If you still want the previous interpretation, you should replace - `sqlite3:///my/path` with `sqlite3:my/path`. + NoMethodError: undefined method `val' for #<Arel::Nodes::BindParam:0x007fc64d19c218> - *Matthew Draper* + Now the message is: -* Treat blank UUID values as `nil`. + ActiveRecord::UnknownAttributeError: unknown attribute 'foreign_key' for Model. - Example: + *Rafael Mendonça França* - Sample.new(uuid_field: '') #=> <Sample id: nil, uuid_field: nil> +* When a table has a composite primary key, the `primary_key` method for + SQLite3 and PostgreSQL adapters was only returning the first field of the key. + Ensures that it will return nil instead, as Active Record doesn't support + composite primary keys. - *Dmitry Lavrov* + Fixes #18070. -* Enable support for materialized views on PostgreSQL >= 9.3. + *arthurnn* - *Dave Lee* +* `validates_size_of` / `validates_length_of` do not count records, + which are `marked_for_destruction?`. -* The PostgreSQL adapter supports custom domains. Fixes #14305. + Fixes #7247. *Yves Senn* -* PostgreSQL `Column#type` is now determined through the corresponding OID. - The column types stay the same except for enum columns. They no longer have - `nil` as type but `enum`. +* Ensure `first!` and friends work on loaded associations. - See #7814. - - *Yves Senn* + Fixes #18237. -* Fixed error when specifying a non-empty default value on a PostgreSQL array column. - - Fixes #10613. + *Sean Griffin* - *Luke Steensen* +* `eager_load` preserves readonly flag for associations. -* Fixed error where .persisted? throws SystemStackError for an unsaved model with a - custom primary key that didn't save due to validation error. + Closes #15853. - Fixes #14393. + *Takashi Kokubun* - *Chris Finne* +* Provide `:touch` option to `save()` to accommodate saving without updating + timestamps. -* Introduce `validate` as an alias for `valid?`. + Fixes #18202. - This is more intuitive when you want to run validations but don't care about the return value. + *Dan Olson* - *Henrik Nyh* +* Provide a more helpful error message when an unsupported class is passed to + `serialize`. -* Create indexes inline in CREATE TABLE for MySQL. + Fixes #18224. - This is important, because adding an index on a temporary table after it has been created - would commit the transaction. + *Sean Griffin* - It also allows creating and dropping indexed tables with fewer queries and fewer permissions - required. +* Add bigint primary key support for MySQL. Example: - create_table :temp, temporary: true, as: "SELECT id, name, zip FROM a_really_complicated_query" do |t| - t.index :zip + create_table :foos, id: :bigint do |t| end - # => CREATE TEMPORARY TABLE temp (INDEX (zip)) AS SELECT id, name, zip FROM a_really_complicated_query - - *Cody Cutrer*, *Steve Rice*, *Rafael Mendonça Franca* - -* Use singular table name in generated migrations when - `ActiveRecord::Base.pluralize_table_names` is `false`. - - Fixes #13426. - - *Kuldeep Aggarwal* - -* `touch` accepts many attributes to be touched at once. - - Example: - # touches :signed_at, :sealed_at, and :updated_at/on attributes. - Photo.last.touch(:signed_at, :sealed_at) + *Ryuta Kamizono* - *James Pinto* +* Support for any type primary key. -* `rake db:structure:dump` only dumps schema information if the schema - migration table exists. + Fixes #14194. - Fixes #14217. + *Ryuta Kamizono* - *Yves Senn* +* Dump the default `nil` for PostgreSQL UUID primary key. -* Reap connections that were checked out by now-dead threads, instead - of waiting until they disconnect by themselves. Before this change, - a suitably constructed series of short-lived threads could starve - the connection pool, without ever having more than a couple alive at - the same time. + *Ryuta Kamizono* - *Matthew Draper* +* Add a `:foreign_key` option to `references` and associated migration + methods. The model and migration generators now use this option, rather than + the `add_foreign_key` form. -* `pk_and_sequence_for` now ensures that only the pg_depend entries - pointing to pg_class, and thus only sequence objects, are considered. + *Sean Griffin* - *Josh Williams* +* Don't raise when writing an attribute with an out-of-range datetime passed + by the user. -* `where.not` adds `references` for `includes` like normal `where` calls do. + *Grey Baker* - Fixes #14406. +* Replace deprecated `ActiveRecord::Tasks::DatabaseTasks#load_schema` with + `ActiveRecord::Tasks::DatabaseTasks#load_schema_for`. *Yves Senn* -* Extend fixture `$LABEL` replacement to allow string interpolation. - - Example: +* Fixes bug with 'ActiveRecord::Type::Numeric' that causes negative values to + be marked as having changed when set to the same negative value. - martin: - email: $LABEL@email.com + Closes #18161. - users(:martin).email # => martin@email.com + *Daniel Fox* - *Eric Steele* +* Introduce `force: :cascade` option for `create_table`. Using this option + will recreate tables even if they have dependent objects (like foreign keys). + `db/schema.rb` now uses `force: :cascade`. This makes it possible to + reload the schema when foreign keys are in place. -* Add support for `Relation` be passed as parameter on `QueryCache#select_all`. + *Matthew Draper*, *Yves Senn* - Fixes #14361. +* `db:schema:load` and `db:structure:load` no longer purge the database + before loading the schema. This is left for the user to do. + `db:test:prepare` will still purge the database. - *arthurnn* + Closes #17945. -* Passing an Active Record object to `find` or `exists?` is now deprecated. - Call `.id` on the object first. - - *Aaron Patterson* + *Yves Senn* -* Only use BINARY for MySQL case sensitive uniqueness check when column has a case insensitive collation. +* Fix undesirable RangeError by `Type::Integer`. Add `Type::UnsignedInteger`. *Ryuta Kamizono* -* Support for MySQL 5.6 fractional seconds. - - *arthurnn*, *Tatsuhiko Miyagawa* - -* Support for Postgres `citext` data type enabling case-insensitive where - values without needing to wrap in UPPER/LOWER sql functions. - - *Troy Kruthoff*, *Lachlan Sylvester* - -* Only save has_one associations if record has changes. - Previously after save related callbacks, such as `#after_commit`, were triggered when the has_one - object did not get saved to the db. - - *Alan Kennedy* - -* Allow strings to specify the `#order` value. - - Example: - - Model.order(id: 'asc').to_sql == Model.order(id: :asc).to_sql - - *Marcelo Casiraghi*, *Robin Dupret* - -* Dynamically register PostgreSQL enum OIDs. This prevents "unknown OID" - warnings on enum columns. - - *Dieter Komendera* - -* `includes` is able to detect the right preloading strategy when string - joins are involved. - - Fixes #14109. - - *Aaron Patterson*, *Yves Senn* - -* Fixed error with validation with enum fields for records where the - value for any enum attribute is always evaluated as 0 during - uniqueness validation. +* Add `foreign_type` option to `has_one` and `has_many` association macros. - Fixes #14172. + This option enables to define the column name of associated object's type for polymorphic associations. - *Vilius Luneckas* *Ahmed AbouElhamayed* + *Ulisses Almeida*, *Kassio Borges* -* `before_add` callbacks are fired before the record is saved on - `has_and_belongs_to_many` assocations *and* on `has_many :through` - associations. Before this change, `before_add` callbacks would be fired - before the record was saved on `has_and_belongs_to_many` associations, but - *not* on `has_many :through` associations. +* Remove deprecated behavior allowing nested arrays to be passed as query + values. - Fixes #14144. + *Melanie Gilman* -* Fixed STI classes not defining an attribute method if there is a - conflicting private method defined on its ancestors. +* Deprecate passing a class as a value in a query. Users should pass strings + instead. - Fixes #11569. + *Melanie Gilman* - *Godfrey Chan* +* `add_timestamps` and `remove_timestamps` now properly reversible with + options. -* Coerce strings when reading attributes. Fixes #10485. - - Example: - - book = Book.new(title: 12345) - book.save! - book.title # => "12345" - - *Yves Senn* - -* Deprecate half-baked support for PostgreSQL range values with excluding beginnings. - We currently map PostgreSQL ranges to Ruby ranges. This conversion is not fully - possible because the Ruby range does not support excluded beginnings. - - The current solution of incrementing the beginning is not correct and is now - deprecated. For subtypes where we don't know how to increment (e.g. `#succ` - is not defined) it will raise an ArgumentException for ranges with excluding - beginnings. - - *Yves Senn* + *Noam Gagliardi-Rabinovich* -* Support for user created range types in PostgreSQL. +* `ActiveRecord::ConnectionAdapters::ColumnDumper#column_spec` and + `ActiveRecord::ConnectionAdapters::ColumnDumper#prepare_column_options` no + longer have a `types` argument. They should access + `connection#native_database_types` directly. *Yves Senn* -Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/activerecord/CHANGELOG.md) for previous changes. +Please check [4-2-stable](https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md) for previous changes. |