mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
719d52db42
068f092ced
registered autosave callbacks as `after_save` callbacks. This caused the regression described in #17209. Autosave callbacks should be registered as `after_update` and `after_create` callbacks, just like before. This is a partial revert of068f092ced
. Fixes #17209.
1237 lines
32 KiB
Markdown
1237 lines
32 KiB
Markdown
* Fix regression causing `after_create` callbacks to run before associated
|
|
records are autosaved.
|
|
|
|
Fixes #17209.
|
|
|
|
*Agis Anastasopoulos*
|
|
|
|
* Honor overridden `rack.test` in Rack environment for the connection
|
|
management middleware.
|
|
|
|
*Simon Eskildsen*
|
|
|
|
* Add a truncate method to the connection.
|
|
|
|
*Aaron Patterson*
|
|
|
|
* Don't autosave unchanged has_one through records.
|
|
|
|
*Alan Kennedy*, *Steve Parrington*
|
|
|
|
* Do not dump foreign keys for ignored tables.
|
|
|
|
*Yves Senn*
|
|
|
|
* PostgreSQL adapter correctly dumps foreign keys targeting tables
|
|
outside the schema search path.
|
|
|
|
Fixes #16907.
|
|
|
|
*Matthew Draper*, *Yves Senn*
|
|
|
|
* When a thread is killed, rollback the active transaction, instead of
|
|
committing it during the stack unwind. Previously, we could commit half-
|
|
completed work. This fix only works for Ruby 2.0+; on 1.9, we can't
|
|
distinguish a thread kill from an ordinary non-local (block) return, so must
|
|
default to committing.
|
|
|
|
*Chris Hanks*
|
|
|
|
* A `NullRelation` should represent nothing. This fixes a bug where
|
|
`Comment.where(post_id: Post.none)` returned a non-empty result.
|
|
|
|
Fixes #15176.
|
|
|
|
*Matthew Draper*, *Yves Senn*
|
|
|
|
* Include default column limits in schema.rb. Allows defaults to be changed
|
|
in the future without affecting old migrations that assumed old defaults.
|
|
|
|
*Jeremy Kemper*
|
|
|
|
* MySQL: schema.rb now includes TEXT and BLOB column limits.
|
|
|
|
*Jeremy Kemper*
|
|
|
|
* MySQL: correct LONGTEXT and LONGBLOB limits from 2GB to their true 4GB.
|
|
|
|
*Jeremy Kemper*
|
|
|
|
* SQLite3Adapter now checks for views in `table_exists?`. Fixes #14041.
|
|
|
|
*Girish Sonawane*
|
|
|
|
* Introduce `connection.supports_views?` to check whether the current adapter
|
|
has support for SQL views. Connection adapters should define this method.
|
|
|
|
*Yves Senn*
|
|
|
|
* Allow included modules to override association methods.
|
|
|
|
Fixes #16684.
|
|
|
|
*Yves Senn*
|
|
|
|
* Schema loading rake tasks (like `db:schema:load` and `db:setup`) maintain
|
|
the database connection to the current environment.
|
|
|
|
Fixes #16757.
|
|
|
|
*Joshua Cody*, *Yves Senn*
|
|
|
|
* MySQL: set the connection collation along with the charset.
|
|
|
|
Sets the connection collation to the database collation configured in
|
|
database.yml. Otherwise, `SET NAMES utf8mb4` will use the default
|
|
collation for that charset (utf8mb4_general_ci) when you may have chosen
|
|
a different collation, like utf8mb4_unicode_ci.
|
|
|
|
This only applies to literal string comparisons, not column values, so it
|
|
is unlikely to affect you.
|
|
|
|
*Jeremy Kemper*
|
|
|
|
* `default_sequence_name` from the PostgreSQL adapter returns a `String`.
|
|
|
|
*Yves Senn*
|
|
|
|
* Fixed a regression where whitespaces were stripped from DISTINCT queries in
|
|
PostgreSQL.
|
|
|
|
*Agis Anastasopoulos*
|
|
|
|
Fixes #16623.
|
|
|
|
* Fix has_many :through relation merging failing when dynamic conditions are
|
|
passed as a lambda with an arity of one.
|
|
|
|
Fixes #16128.
|
|
|
|
*Agis Anastasopoulos*
|
|
|
|
* Fixed `Relation#exists?` to work with polymorphic associations.
|
|
|
|
Fixes #15821.
|
|
|
|
*Kassio Borges*
|
|
|
|
* Currently, Active Record rescues any errors raised within
|
|
`after_rollback`/`after_create` callbacks and prints them to the logs.
|
|
Future versions of Rails will not rescue these errors anymore and
|
|
just bubble them up like the other callbacks.
|
|
|
|
This commit adds an opt-in flag to enable not rescuing the errors.
|
|
|
|
Example:
|
|
|
|
# Do not swallow errors in after_commit/after_rollback callbacks.
|
|
config.active_record.raise_in_transactional_callbacks = true
|
|
|
|
Fixes #13460.
|
|
|
|
*arthurnn*
|
|
|
|
* Fixed an issue where custom accessor methods (such as those generated by
|
|
`enum`) with the same name as a global method are incorrectly overridden
|
|
when subclassing.
|
|
|
|
Fixes #16288.
|
|
|
|
*Godfrey Chan*
|
|
|
|
* `*_was` and `changes` now work correctly for in-place attribute changes as
|
|
well.
|
|
|
|
*Sean Griffin*
|
|
|
|
* Fix regression on `after_commit` that did not fire with nested transactions.
|
|
|
|
Fixes #16425.
|
|
|
|
*arthurnn*
|
|
|
|
* Do not try to write timestamps when a table has no timestamps columns.
|
|
|
|
Fixes #8813.
|
|
|
|
*Sergey Potapov*
|
|
|
|
* `index_exists?` with `:name` option does verify specified columns.
|
|
|
|
Example:
|
|
|
|
add_index :articles, :title, name: "idx_title"
|
|
|
|
# Before:
|
|
index_exists? :articles, :title, name: "idx_title" # => `true`
|
|
index_exists? :articles, :body, name: "idx_title" # => `true`
|
|
|
|
# After:
|
|
index_exists? :articles, :title, name: "idx_title" # => `true`
|
|
index_exists? :articles, :body, name: "idx_title" # => `false`
|
|
|
|
*Yves Senn*, *Matthew Draper*
|
|
|
|
* When calling `update_columns` on a record that is not persisted, the error
|
|
message now reflects whether that object is a new record or has been
|
|
destroyed.
|
|
|
|
*Lachlan Sylvester*
|
|
|
|
* Define `id_was` to get the previous value of the primary key.
|
|
|
|
Currently when we call `id_was` and we have a custom primary key name,
|
|
Active Record will return the current value of the primary key. This
|
|
makes it impossible to correctly do an update operation if you change the
|
|
id.
|
|
|
|
Fixes #16413.
|
|
|
|
*Rafael Mendonça França*
|
|
|
|
* Deprecate `DatabaseTasks.load_schema` to act on the current connection.
|
|
Use `.load_schema_current` instead. In the future `load_schema` will
|
|
require the `configuration` to act on as an argument.
|
|
|
|
*Yves Senn*
|
|
|
|
* Fixed automatic maintaining test schema to properly handle sql structure
|
|
schema format.
|
|
|
|
Fixes #15394.
|
|
|
|
*Wojciech Wnętrzak*
|
|
|
|
* Fix type casting to Decimal from Float with large precision.
|
|
|
|
*Tomohiro Hashidate*
|
|
|
|
* Deprecate `Reflection#source_macro`
|
|
|
|
`Reflection#source_macro` is no longer needed in Active Record
|
|
source so it has been deprecated. Code that used `source_macro`
|
|
was removed in #16353.
|
|
|
|
*Eileen M. Uchtitelle*, *Aaron Patterson*
|
|
|
|
* No verbose backtrace by `db:drop` when database does not exist.
|
|
|
|
Fixes #16295.
|
|
|
|
*Kenn Ejima*
|
|
|
|
* Add support for PostgreSQL JSONB.
|
|
|
|
Example:
|
|
|
|
create_table :posts do |t|
|
|
t.jsonb :meta_data
|
|
end
|
|
|
|
*Philippe Creux*, *Chris Teague*
|
|
|
|
* `db:purge` with MySQL respects `Rails.env`.
|
|
|
|
*Yves Senn*
|
|
|
|
* `change_column_default :table, :column, nil` with PostgreSQL will issue a
|
|
`DROP DEFAULT` instead of a `DEFAULT NULL` query.
|
|
|
|
Fixes #16261.
|
|
|
|
*Matthew Draper*, *Yves Senn*
|
|
|
|
* Allow to specify a type for the foreign key column in `references`
|
|
and `add_reference`.
|
|
|
|
Example:
|
|
|
|
change_table :vehicle do |t|
|
|
t.references :station, type: :uuid
|
|
end
|
|
|
|
*Andrey Novikov*, *Łukasz Sarnacki*
|
|
|
|
* `create_join_table` removes a common prefix when generating the join table.
|
|
This matches the existing behavior of HABTM associations.
|
|
|
|
Fixes #13683.
|
|
|
|
*Stefan Kanev*
|
|
|
|
* Do not swallow errors on `compute_type` when having a bad `alias_method` on
|
|
a class.
|
|
|
|
*arthurnn*
|
|
|
|
* PostgreSQL invalid `uuid` are convert to nil.
|
|
|
|
*Abdelkader Boudih*
|
|
|
|
* Restore 4.0 behavior for using serialize attributes with `JSON` as coder.
|
|
|
|
With 4.1.x, `serialize` started returning a string when `JSON` was passed as
|
|
the second attribute. It will now return a hash as per previous versions.
|
|
|
|
Example:
|
|
|
|
class Post < ActiveRecord::Base
|
|
serialize :comment, JSON
|
|
end
|
|
|
|
class Comment
|
|
include ActiveModel::Model
|
|
attr_accessor :category, :text
|
|
end
|
|
|
|
post = Post.create!
|
|
post.comment = Comment.new(category: "Animals", text: "This is a comment about squirrels.")
|
|
post.save!
|
|
|
|
# 4.0
|
|
post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
|
|
|
|
# 4.1 before
|
|
post.comment # => "#<Comment:0x007f80ab48ff98>"
|
|
|
|
# 4.1 after
|
|
post.comment # => {"category"=>"Animals", "text"=>"This is a comment about squirrels."}
|
|
|
|
When using `JSON` as the coder in `serialize`, Active Record will use the
|
|
new `ActiveRecord::Coders::JSON` coder which delegates its `dump/load` to
|
|
`ActiveSupport::JSON.encode/decode`. This ensures special objects are dumped
|
|
correctly using the `#as_json` hook.
|
|
|
|
To keep the previous behaviour, supply a custom coder instead
|
|
([example](https://gist.github.com/jenncoop/8c4142bbe59da77daa63)).
|
|
|
|
Fixes #15594.
|
|
|
|
*Jenn Cooper*
|
|
|
|
* Do not use `RENAME INDEX` syntax for MariaDB 10.0.
|
|
|
|
Fixes #15931.
|
|
|
|
*Jeff Browning*
|
|
|
|
* Calling `#empty?` on a `has_many` association would use the value from the
|
|
counter cache if one exists.
|
|
|
|
*David Verhasselt*
|
|
|
|
* Fix the schema dump generated for tables without constraints and with
|
|
primary key with default value of custom PostgreSQL function result.
|
|
|
|
Fixes #16111.
|
|
|
|
*Andrey Novikov*
|
|
|
|
* Fix the SQL generated when a `delete_all` is run on an association to not
|
|
produce an `IN` statements.
|
|
|
|
Before:
|
|
|
|
UPDATE "categorizations" SET "category_id" = NULL WHERE
|
|
"categorizations"."category_id" = 1 AND "categorizations"."id" IN (1, 2)
|
|
|
|
After:
|
|
|
|
UPDATE "categorizations" SET "category_id" = NULL WHERE
|
|
"categorizations"."category_id" = 1
|
|
|
|
*Eileen M. Uchitelle, Aaron Patterson*
|
|
|
|
* Avoid type casting boolean and `ActiveSupport::Duration` values to numeric
|
|
values for string columns. Otherwise, in some database, the string column
|
|
values will be coerced to a numeric allowing false or 0.seconds match any
|
|
string starting with a non-digit.
|
|
|
|
Example:
|
|
|
|
App.where(apikey: false) # => SELECT * FROM users WHERE apikey = '0'
|
|
|
|
*Dylan Thacker-Smith*
|
|
|
|
* Add a `:required` option to singular associations, providing a nicer
|
|
API for presence validations on associations.
|
|
|
|
*Sean Griffin*
|
|
|
|
* Fixed error in `reset_counters` when associations have `select` scope.
|
|
(Call to `count` generates invalid SQL.)
|
|
|
|
*Cade Truitt*
|
|
|
|
* After a successful `reload`, `new_record?` is always false.
|
|
|
|
Fixes #12101.
|
|
|
|
*Matthew Draper*
|
|
|
|
* PostgreSQL renaming table doesn't attempt to rename non existent sequences.
|
|
|
|
*Abdelkader Boudih*
|
|
|
|
* Move 'dependent: :destroy' handling for `belongs_to`
|
|
from `before_destroy` to `after_destroy` callback chain
|
|
|
|
Fixes #12380.
|
|
|
|
*Ivan Antropov*
|
|
|
|
* Detect in-place modifications on String attributes.
|
|
|
|
Before this change, an attribute modified in-place had to be marked as
|
|
changed in order for it to be persisted in the database. Now it is no longer
|
|
required.
|
|
|
|
Before:
|
|
|
|
user = User.first
|
|
user.name << ' Griffin'
|
|
user.name_will_change!
|
|
user.save
|
|
user.reload.name # => "Sean Griffin"
|
|
|
|
After:
|
|
|
|
user = User.first
|
|
user.name << ' Griffin'
|
|
user.save
|
|
user.reload.name # => "Sean Griffin"
|
|
|
|
*Sean Griffin*
|
|
|
|
* Add `ActiveRecord::Base#validate!` that raises `RecordInvalid` if the record
|
|
is invalid.
|
|
|
|
*Bogdan Gusiev*, *Marc Schütz*
|
|
|
|
* Support for adding and removing foreign keys. Foreign keys are now
|
|
a part of `schema.rb`. This is supported by Mysql2Adapter, MysqlAdapter
|
|
and PostgreSQLAdapter.
|
|
|
|
Many thanks to *Matthew Higgins* for laying the foundation with his work on
|
|
[foreigner](https://github.com/matthuhiggins/foreigner).
|
|
|
|
Example:
|
|
|
|
# within your migrations:
|
|
add_foreign_key :articles, :authors
|
|
remove_foreign_key :articles, :authors
|
|
|
|
*Yves Senn*
|
|
|
|
* Fix subtle bugs regarding attribute assignment on models with no primary
|
|
key. `'id'` will no longer be part of the attributes hash.
|
|
|
|
*Sean Griffin*
|
|
|
|
* Deprecate automatic counter caches on `has_many :through`. The behavior was
|
|
broken and inconsistent.
|
|
|
|
*Sean Griffin*
|
|
|
|
* `preload` preserves readonly flag for associations.
|
|
|
|
See #15853.
|
|
|
|
*Yves Senn*
|
|
|
|
* Assume numeric types have changed if they were assigned to a value that
|
|
would fail numericality validation, regardless of the old value. Previously
|
|
this would only occur if the old value was 0.
|
|
|
|
Example:
|
|
|
|
model = Model.create!(number: 5)
|
|
model.number = '5wibble'
|
|
model.number_changed? # => true
|
|
|
|
Fixes #14731.
|
|
|
|
*Sean Griffin*
|
|
|
|
* `reload` no longer merges with the existing attributes.
|
|
The attribute hash is fully replaced. The record is put into the same state
|
|
as it would be with `Model.find(model.id)`.
|
|
|
|
*Sean Griffin*
|
|
|
|
* The object returned from `select_all` must respond to `column_types`.
|
|
If this is not the case a `NoMethodError` is raised.
|
|
|
|
*Sean Griffin*
|
|
|
|
* Detect in-place modifications of PG array types
|
|
|
|
*Sean Griffin*
|
|
|
|
* Add `bin/rake db:purge` task to empty the current database.
|
|
|
|
*Yves Senn*
|
|
|
|
* Deprecate `serialized_attributes` without replacement.
|
|
|
|
*Sean Griffin*
|
|
|
|
* Correctly extract IPv6 addresses from `DATABASE_URI`: the square brackets
|
|
are part of the URI structure, not the actual host.
|
|
|
|
Fixes #15705.
|
|
|
|
*Andy Bakun*, *Aaron Stone*
|
|
|
|
* Ensure both parent IDs are set on join records when both sides of a
|
|
through association are new.
|
|
|
|
*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*
|
|
|
|
* `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.
|
|
|
|
Fixes #13402.
|
|
|
|
*Kuldeep Aggarwal*, *Sean Griffin*
|
|
|
|
* `ActiveRecord::SchemaMigration` has no primary key regardless of the
|
|
`primary_key_prefix_type` configuration.
|
|
|
|
Fixes #15051.
|
|
|
|
*JoseLuis Torres*, *Yves Senn*
|
|
|
|
* `rake db:migrate:status` works with legacy migration numbers like `00018_xyz.rb`.
|
|
|
|
Fixes #15538.
|
|
|
|
*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*
|
|
|
|
* Remove deprecated `ActiveRecord::Migrator.proper_table_name`. Use the
|
|
`proper_table_name` instance method on `ActiveRecord::Migration` instead.
|
|
|
|
*Akshay Vishnoi*
|
|
|
|
* Fix regression on eager loading association based on SQL query rather than
|
|
existing column.
|
|
|
|
Fixes #15480.
|
|
|
|
*Lauro Caetano*, *Carlos Antonio da Silva*
|
|
|
|
* Deprecate returning `nil` from `column_for_attribute` when no column exists.
|
|
It will return a null object in Rails 5.0
|
|
|
|
*Sean Griffin*
|
|
|
|
* Implemented `ActiveRecord::Base#pretty_print` to work with PP.
|
|
|
|
*Ethan*
|
|
|
|
* Preserve type when dumping PostgreSQL point, bit, bit varying and money
|
|
columns.
|
|
|
|
*Yves Senn*
|
|
|
|
* New records remain new after YAML serialization.
|
|
|
|
*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*
|
|
|
|
* PostgreSQL `reset_pk_sequence!` respects schemas. Fixes #14719.
|
|
|
|
*Yves Senn*
|
|
|
|
* Keep PostgreSQL `hstore` and `json` attributes as `Hash` in `@attributes`.
|
|
Fixes duplication in combination with `store_accessor`.
|
|
|
|
Fixes #15369.
|
|
|
|
*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_and_belongs_to_many`
|
|
definition into a subclass would raise.
|
|
|
|
Fixes #14983.
|
|
|
|
*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*
|
|
|
|
* 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`.
|
|
|
|
*Simon Hørup Eskildsen*
|
|
|
|
* Fixed polymorphic eager loading when using a String as foreign key.
|
|
|
|
Fixes #14734.
|
|
|
|
*Lauro Caetano*
|
|
|
|
* Change belongs_to touch to be consistent with timestamp updates
|
|
|
|
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.
|
|
|
|
*Brock Trappitt*
|
|
|
|
* Fixed the inferred table name of a `has_and_belongs_to_many` auxiliar
|
|
table inside a schema.
|
|
|
|
Fixes #14824.
|
|
|
|
*Eric Chahin*
|
|
|
|
* 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.
|
|
|
|
*Sean Griffin*
|
|
|
|
* Fix bug that added `table_name_prefix` and `table_name_suffix` to
|
|
extension names in PostgreSQL when migrating.
|
|
|
|
*Joao Carlos*
|
|
|
|
* The `:index` option in migrations, which previously was only available for
|
|
`references`, now works with any column types.
|
|
|
|
*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.
|
|
|
|
Fixes #11985.
|
|
|
|
*Leandro Facchinetti*
|
|
|
|
* Floats with limit >= 25 that get turned into doubles in MySQL no longer have
|
|
their limit dropped from the schema.
|
|
|
|
Fixes #14135.
|
|
|
|
*Aaron Nelson*
|
|
|
|
* Fix how to calculate associated class name when using namespaced `has_and_belongs_to_many`
|
|
association.
|
|
|
|
Fixes #14709.
|
|
|
|
*Kassio Borges*
|
|
|
|
* `ActiveRecord::Relation::Merger#filter_binds` now compares equivalent symbols and
|
|
strings in column names as equal.
|
|
|
|
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.
|
|
|
|
*Nat Budin*
|
|
|
|
* Fix `stored_attributes` to correctly merge the details of stored
|
|
attributes defined in parent classes.
|
|
|
|
Fixes #14672.
|
|
|
|
*Brad Bennett*, *Jessica Yao*, *Lakshmi Parthasarathy*
|
|
|
|
* `change_column_default` allows `[]` as argument to `change_column_default`.
|
|
|
|
Fixes #11586.
|
|
|
|
*Yves Senn*
|
|
|
|
* Handle `name` and `"char"` column types in the PostgreSQL adapter.
|
|
|
|
`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.
|
|
|
|
*J Smith*, *Yves Senn*
|
|
|
|
* Fix `PostgreSQLAdapter::OID::Float#type_cast` to convert Infinity and
|
|
NaN PostgreSQL values into a native Ruby `Float::INFINITY` and `Float::NAN`
|
|
|
|
Before:
|
|
|
|
Point.create(value: 1.0/0)
|
|
Point.last.value # => 0.0
|
|
|
|
After:
|
|
|
|
Point.create(value: 1.0/0)
|
|
Point.last.value # => Infinity
|
|
|
|
*Innokenty Mikhailov*
|
|
|
|
* Allow the PostgreSQL adapter to handle bigserial primary key types again.
|
|
|
|
Fixes #10410.
|
|
|
|
*Patrick Robertson*
|
|
|
|
* 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 #15024.
|
|
|
|
*Yves Senn*
|
|
|
|
* Fixed has_and_belongs_to_many's CollectionAssociation size calculation.
|
|
|
|
`has_and_belongs_to_many` should fall back to using the normal CollectionAssociation's
|
|
size calculation if the collection is not cached or loaded.
|
|
|
|
Fixes #14913, #14914.
|
|
|
|
*Fred Wu*
|
|
|
|
* Return a non zero status when running `rake db:migrate:status` and migration table does
|
|
not exist.
|
|
|
|
*Paul B.*
|
|
|
|
* Add support for module-level `table_name_suffix` in models.
|
|
|
|
This makes `table_name_suffix` work the same way as `table_name_prefix` when
|
|
using namespaced models.
|
|
|
|
*Jenner LaFave*
|
|
|
|
* Revert the behaviour of `ActiveRecord::Relation#join` changed through 4.0 => 4.1 to 4.0.
|
|
|
|
In 4.1.0 `Relation#join` is delegated to `Arel#SelectManager`.
|
|
In 4.0 series it is delegated to `Array#join`.
|
|
|
|
*Bogdan Gusiev*
|
|
|
|
* Log nil binary column values correctly.
|
|
|
|
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.
|
|
|
|
*James Coleman*
|
|
|
|
* Rails will now pass a custom validation context through to autosave associations
|
|
in order to validate child associations with the same context.
|
|
|
|
Fixes #13854.
|
|
|
|
*Eric Chahin*, *Aaron Nelson*, *Kevin Casey*
|
|
|
|
* Stringify all variables keys of MySQL connection configuration.
|
|
|
|
When `sql_mode` variable for MySQL adapters set in configuration as `String`
|
|
was ignored and overwritten by strict mode option.
|
|
|
|
Fixes #14895.
|
|
|
|
*Paul Nikitochkin*
|
|
|
|
* Ensure SQLite3 statements are closed on errors.
|
|
|
|
Fixes #13631.
|
|
|
|
*Timur Alperovich*
|
|
|
|
* Give `ActiveRecord::PredicateBuilder` private methods the privacy they deserve.
|
|
|
|
*Hector Satre*
|
|
|
|
* 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.
|
|
|
|
Fixes #14845.
|
|
|
|
*Kassio Borges*
|
|
|
|
* Reset the cache when modifying a Relation with cached Arel.
|
|
Additionally display a warning message to make the user aware.
|
|
|
|
*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*
|
|
|
|
* Fix name collision with `Array#select!` with `Relation#select!`.
|
|
|
|
Fixes #14752.
|
|
|
|
*Earl St Sauver*
|
|
|
|
* Fixed unexpected behavior for `has_many :through` associations going through a scoped `has_many`.
|
|
|
|
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.
|
|
|
|
Fixes #14537.
|
|
|
|
*Jan Habermann*
|
|
|
|
* `@destroyed` should always be set to `false` when an object is duped.
|
|
|
|
*Kuldeep Aggarwal*
|
|
|
|
* Fixed `has_many` association to make it support irregular inflections.
|
|
|
|
Fixes #8928.
|
|
|
|
*arthurnn*, *Javier Goizueta*
|
|
|
|
* Fixed a problem where count used with a grouping was not returning a Hash.
|
|
|
|
Fixes #14721.
|
|
|
|
*Eric Chahin*
|
|
|
|
* `sanitize_sql_like` helper method to escape a string for safe use in an SQL
|
|
LIKE statement.
|
|
|
|
Example:
|
|
|
|
class Article
|
|
def self.search(term)
|
|
where("title LIKE ?", sanitize_sql_like(term))
|
|
end
|
|
end
|
|
|
|
Article.search("20% _reduction_")
|
|
# => Query looks like "... title LIKE '20\% \_reduction\_' ..."
|
|
|
|
*Rob Gilson*, *Yves Senn*
|
|
|
|
* Do not quote uuid default value on `change_column`.
|
|
|
|
Fixes #14604.
|
|
|
|
*Eric Chahin*
|
|
|
|
* The comparison between `Relation` and `CollectionProxy` should be consistent.
|
|
|
|
Example:
|
|
|
|
author.posts == Post.where(author_id: author.id)
|
|
# => true
|
|
Post.where(author_id: author.id) == author.posts
|
|
# => true
|
|
|
|
Fixes #13506.
|
|
|
|
*Lauro Caetano*
|
|
|
|
* Calling `delete_all` on an unloaded `CollectionProxy` no longer
|
|
generates an SQL statement containing each id of the collection:
|
|
|
|
Before:
|
|
|
|
DELETE FROM `model` WHERE `model`.`parent_id` = 1
|
|
AND `model`.`id` IN (1, 2, 3...)
|
|
|
|
After:
|
|
|
|
DELETE FROM `model` WHERE `model`.`parent_id` = 1
|
|
|
|
*Eileen M. Uchitelle*, *Aaron Patterson*
|
|
|
|
* Fixed error for aggregate methods (`empty?`, `any?`, `count`) with `select`
|
|
which created invalid SQL.
|
|
|
|
Fixes #13648.
|
|
|
|
*Simon Woker*
|
|
|
|
* PostgreSQL adapter only warns once for every missing OID per connection.
|
|
|
|
Fixes #14275.
|
|
|
|
*Matthew Draper*, *Yves Senn*
|
|
|
|
* PostgreSQL adapter automatically reloads it's type map when encountering
|
|
unknown OIDs.
|
|
|
|
Fixes #14678.
|
|
|
|
*Matthew Draper*, *Yves Senn*
|
|
|
|
* Fix insertion of records via `has_many :through` association with scope.
|
|
|
|
Fixes #3548.
|
|
|
|
*Ivan Antropov*
|
|
|
|
* Auto-generate stable fixture UUIDs on PostgreSQL.
|
|
|
|
Fixes #11524.
|
|
|
|
*Roderick van Domburg*
|
|
|
|
* Fixed a problem where an enum would overwrite values of another enum
|
|
with the same name in an unrelated class.
|
|
|
|
Fixes #14607.
|
|
|
|
*Evan Whalen*
|
|
|
|
* PostgreSQL and SQLite string columns no longer have a default limit of 255.
|
|
|
|
Fixes #13435, #9153.
|
|
|
|
*Vladimir Sazhin*, *Toms Mikoss*, *Yves Senn*
|
|
|
|
* Make possible to have an association called `records`.
|
|
|
|
Fixes #11645.
|
|
|
|
*prathamesh-sonpatki*
|
|
|
|
* `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.
|
|
|
|
Fixes #14003.
|
|
|
|
*Jefferson Lai*
|
|
|
|
* Block a few default Class methods as scope name.
|
|
|
|
For instance, this will raise:
|
|
|
|
scope :public, -> { where(status: 1) }
|
|
|
|
*arthurnn*
|
|
|
|
* Fixed error when using `with_options` with lambda.
|
|
|
|
Fixes #9805.
|
|
|
|
*Lauro Caetano*
|
|
|
|
* Switch `sqlite3:///` URLs (which were temporarily
|
|
deprecated in 4.1) from relative to absolute.
|
|
|
|
If you still want the previous interpretation, you should replace
|
|
`sqlite3:///my/path` with `sqlite3:my/path`.
|
|
|
|
*Matthew Draper*
|
|
|
|
* Treat blank UUID values as `nil`.
|
|
|
|
Example:
|
|
|
|
Sample.new(uuid_field: '') #=> <Sample id: nil, uuid_field: nil>
|
|
|
|
*Dmitry Lavrov*
|
|
|
|
* Enable support for materialized views on PostgreSQL >= 9.3.
|
|
|
|
*Dave Lee*
|
|
|
|
* The PostgreSQL adapter supports custom domains. Fixes #14305.
|
|
|
|
*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`.
|
|
|
|
See #7814.
|
|
|
|
*Yves Senn*
|
|
|
|
* Fixed error when specifying a non-empty default value on a PostgreSQL array column.
|
|
|
|
Fixes #10613.
|
|
|
|
*Luke Steensen*
|
|
|
|
* Fixed error where .persisted? throws SystemStackError for an unsaved model with a
|
|
custom primary key that didn't save due to validation error.
|
|
|
|
Fixes #14393.
|
|
|
|
*Chris Finne*
|
|
|
|
* Introduce `validate` as an alias for `valid?`.
|
|
|
|
This is more intuitive when you want to run validations but don't care about the return value.
|
|
|
|
*Henrik Nyh*
|
|
|
|
* Create indexes inline in CREATE TABLE for MySQL.
|
|
|
|
This is important, because adding an index on a temporary table after it has been created
|
|
would commit the transaction.
|
|
|
|
It also allows creating and dropping indexed tables with fewer queries and fewer permissions
|
|
required.
|
|
|
|
Example:
|
|
|
|
create_table :temp, temporary: true, as: "SELECT id, name, zip FROM a_really_complicated_query" do |t|
|
|
t.index :zip
|
|
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)
|
|
|
|
*James Pinto*
|
|
|
|
* `rake db:structure:dump` only dumps schema information if the schema
|
|
migration table exists.
|
|
|
|
Fixes #14217.
|
|
|
|
*Yves Senn*
|
|
|
|
* 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.
|
|
|
|
*Matthew Draper*
|
|
|
|
* `pk_and_sequence_for` now ensures that only the pg_depend entries
|
|
pointing to pg_class, and thus only sequence objects, are considered.
|
|
|
|
*Josh Williams*
|
|
|
|
* `where.not` adds `references` for `includes` like normal `where` calls do.
|
|
|
|
Fixes #14406.
|
|
|
|
*Yves Senn*
|
|
|
|
* Extend fixture `$LABEL` replacement to allow string interpolation.
|
|
|
|
Example:
|
|
|
|
martin:
|
|
email: $LABEL@email.com
|
|
|
|
users(:martin).email # => martin@email.com
|
|
|
|
*Eric Steele*
|
|
|
|
* Add support for `Relation` be passed as parameter on `QueryCache#select_all`.
|
|
|
|
Fixes #14361.
|
|
|
|
*arthurnn*
|
|
|
|
* Passing an Active Record object to `find` or `exists?` is now deprecated.
|
|
Call `.id` on the object first.
|
|
|
|
*Aaron Patterson*
|
|
|
|
* Only use BINARY for MySQL case sensitive uniqueness check when column has a case insensitive collation.
|
|
|
|
*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.
|
|
|
|
Fixes #14172.
|
|
|
|
*Vilius Luneckas* *Ahmed AbouElhamayed*
|
|
|
|
* `before_add` callbacks are fired before the record is saved on
|
|
`has_and_belongs_to_many` associations *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.
|
|
|
|
Fixes #14144.
|
|
|
|
* Fixed STI classes not defining an attribute method if there is a
|
|
conflicting private method defined on its ancestors.
|
|
|
|
Fixes #11569.
|
|
|
|
*Godfrey Chan*
|
|
|
|
* 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*
|
|
|
|
* Support for user created range types in PostgreSQL.
|
|
|
|
*Yves Senn*
|
|
|
|
Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/activerecord/CHANGELOG.md) for previous changes.
|