2014-04-03 00:25:16 +00:00
|
|
|
* 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*
|
|
|
|
|
2014-04-18 18:31:01 +00:00
|
|
|
* `@destroyed` should always be set to `false` when an object is duped.
|
|
|
|
|
|
|
|
*Kuldeep Aggarwal*
|
|
|
|
|
2014-04-18 05:11:47 +00:00
|
|
|
* Fixed has_many association to make it support irregular inflections.
|
|
|
|
|
|
|
|
Fixes #8928.
|
|
|
|
|
|
|
|
*arthurnn*, *Javier Goizueta*
|
|
|
|
|
2014-04-16 06:27:26 +00:00
|
|
|
* Fixed a problem where count used with a grouping was not returning a Hash.
|
|
|
|
|
|
|
|
Fixes #14721.
|
|
|
|
|
|
|
|
*Eric Chahin*
|
|
|
|
|
2014-02-27 18:34:21 +00:00
|
|
|
* `sanitize_sql_like` helper method to escape a string for safe use in a 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*
|
|
|
|
|
2014-04-15 20:24:49 +00:00
|
|
|
* Do not quote uuid default value on `change_column`.
|
|
|
|
|
|
|
|
Fixes #14604.
|
|
|
|
|
|
|
|
*Eric Chahin*
|
|
|
|
|
2014-04-04 01:07:03 +00:00
|
|
|
* 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*
|
|
|
|
|
2014-04-13 09:13:19 +00:00
|
|
|
* Calling `delete_all` on an unloaded `CollectionProxy` no longer
|
|
|
|
generates a 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*
|
|
|
|
|
2014-04-11 18:46:20 +00:00
|
|
|
* Fixed error for aggregate methods (`empty?`, `any?`, `count`) with `select`
|
|
|
|
which created invalid SQL.
|
|
|
|
|
|
|
|
Fixes #13648.
|
|
|
|
|
|
|
|
*Simon Woker*
|
|
|
|
|
2014-04-10 18:39:21 +00:00
|
|
|
* PostgreSQL adapter only warns once for every missing OID per connection.
|
|
|
|
|
|
|
|
Fixes #14275.
|
|
|
|
|
|
|
|
*Matthew Draper*, *Yves Senn*
|
|
|
|
|
2014-04-10 18:25:40 +00:00
|
|
|
* PostgreSQL adapter automatically reloads it's type map when encountering
|
|
|
|
unknown OIDs.
|
|
|
|
|
|
|
|
Fixes #14678.
|
|
|
|
|
|
|
|
*Matthew Draper*, *Yves Senn*
|
|
|
|
|
2014-04-10 20:43:59 +00:00
|
|
|
* Fix insertion of records via `has_many :through` association with scope.
|
2013-11-10 05:28:54 +00:00
|
|
|
|
2014-04-10 20:43:59 +00:00
|
|
|
Fixes #3548.
|
2013-11-10 05:28:54 +00:00
|
|
|
|
|
|
|
*Ivan Antropov*
|
|
|
|
|
2013-08-25 09:22:36 +00:00
|
|
|
* Auto-generate stable fixture UUIDs on PostgreSQL.
|
|
|
|
|
|
|
|
Fixes: #11524
|
|
|
|
|
|
|
|
*Roderick van Domburg*
|
|
|
|
|
2014-04-07 14:01:03 +00:00
|
|
|
* Fixed a problem where an enum would overwrite values of another enum
|
|
|
|
with the same name in an unrelated class.
|
|
|
|
|
|
|
|
Fixes #14607.
|
|
|
|
|
|
|
|
*Evan Whalen*
|
|
|
|
|
2014-04-03 12:59:53 +00:00
|
|
|
* PostgreSQL and SQLite string columns no longer have a default limit of 255.
|
|
|
|
|
|
|
|
Fixes #13435, #9153.
|
|
|
|
|
|
|
|
*Vladimir Sazhin*, *Toms Mikoss*, *Yves Senn*
|
|
|
|
|
2014-04-04 21:41:43 +00:00
|
|
|
* Make possible to have an association called `records`.
|
|
|
|
|
|
|
|
Fixes #11645.
|
|
|
|
|
|
|
|
*prathamesh-sonpatki*
|
|
|
|
|
2014-04-02 03:18:16 +00:00
|
|
|
* `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*
|
|
|
|
|
2014-04-03 14:39:05 +00:00
|
|
|
* Block a few default Class methods as scope name.
|
|
|
|
|
|
|
|
For instance, this will raise:
|
|
|
|
|
|
|
|
scope :public, -> { where(status: 1) }
|
|
|
|
|
|
|
|
*arthurnn*
|
|
|
|
|
2014-04-02 22:27:55 +00:00
|
|
|
* Fixed error when using `with_options` with lambda.
|
|
|
|
|
|
|
|
Fixes #9805.
|
|
|
|
|
|
|
|
*Lauro Caetano*
|
|
|
|
|
2014-04-03 14:12:06 +00:00
|
|
|
* Switch `sqlite3:///` URLs (which were temporarily
|
2014-04-02 15:11:34 +00:00
|
|
|
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*
|
|
|
|
|
2014-03-27 12:29:20 +00:00
|
|
|
* Treat blank UUID values as `nil`.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
Sample.new(uuid_field: '') #=> <Sample id: nil, uuid_field: nil>
|
|
|
|
|
|
|
|
*Dmitry Lavrov*
|
|
|
|
|
2013-11-30 23:01:34 +00:00
|
|
|
* Enable support for materialized views on PostgreSQL >= 9.3.
|
|
|
|
|
|
|
|
*Dave Lee*
|
|
|
|
|
2014-04-01 17:42:22 +00:00
|
|
|
* The PostgreSQL adapter supports custom domains. Fixes #14305.
|
|
|
|
|
|
|
|
*Yves Senn*
|
|
|
|
|
2014-03-26 16:14:05 +00:00
|
|
|
* 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*
|
|
|
|
|
2014-03-30 16:10:41 +00:00
|
|
|
* Fixed error when specifying a non-empty default value on a PostgreSQL array column.
|
|
|
|
|
|
|
|
Fixes #10613.
|
|
|
|
|
|
|
|
*Luke Steensen*
|
|
|
|
|
2014-03-27 21:10:17 +00:00
|
|
|
* Make possible to change `record_timestamps` inside Callbacks.
|
|
|
|
|
|
|
|
*Tieg Zaharia*
|
|
|
|
|
2014-03-15 10:32:24 +00:00
|
|
|
* 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*
|
|
|
|
|
2014-03-23 11:09:55 +00:00
|
|
|
* 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*
|
|
|
|
|
2014-03-26 23:31:32 +00:00
|
|
|
* Create indexes inline in CREATE TABLE for MySQL.
|
2014-03-26 04:13:29 +00:00
|
|
|
|
|
|
|
This is important, because adding an index on a temporary table after it has been created
|
|
|
|
would commit the transaction.
|
2014-03-26 23:31:32 +00:00
|
|
|
|
|
|
|
It also allows creating and dropping indexed tables with fewer queries and fewer permissions
|
|
|
|
required.
|
2014-03-26 04:13:29 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
|
2014-03-26 23:31:32 +00:00
|
|
|
*Cody Cutrer*, *Steve Rice*, *Rafael Mendonça Franca*
|
2014-03-26 04:13:29 +00:00
|
|
|
|
2014-03-25 18:09:48 +00:00
|
|
|
* Save `has_one` association even if the record doesn't changed.
|
|
|
|
|
|
|
|
Fixes #14407.
|
|
|
|
|
|
|
|
*Rafael Mendonça França*
|
|
|
|
|
2014-03-25 15:07:52 +00:00
|
|
|
* Use singular table name in generated migrations when
|
|
|
|
`ActiveRecord::Base.pluralize_table_names` is `false`.
|
2014-03-25 14:57:37 +00:00
|
|
|
|
|
|
|
Fixes #13426.
|
|
|
|
|
|
|
|
*Kuldeep Aggarwal*
|
|
|
|
|
2014-03-20 11:08:22 +00:00
|
|
|
* `touch` accepts many attributes to be touched at once.
|
2014-03-20 01:13:03 +00:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
2014-03-20 11:08:22 +00:00
|
|
|
# touches :signed_at, :sealed_at, and :updated_at/on attributes.
|
|
|
|
Photo.last.touch(:signed_at, :sealed_at)
|
2014-03-20 11:00:28 +00:00
|
|
|
|
2014-03-20 01:13:03 +00:00
|
|
|
*James Pinto*
|
|
|
|
|
2014-03-20 09:30:30 +00:00
|
|
|
* `rake db:structure:dump` only dumps schema information if the schema
|
|
|
|
migration table exists.
|
|
|
|
|
|
|
|
Fixes #14217.
|
|
|
|
|
|
|
|
*Yves Senn*
|
|
|
|
|
2014-03-07 13:36:09 +00:00
|
|
|
* 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*
|
|
|
|
|
2013-11-19 20:50:14 +00:00
|
|
|
* `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*
|
|
|
|
|
2014-03-17 13:20:23 +00:00
|
|
|
* `where.not` adds `references` for `includes` like normal `where` calls do.
|
|
|
|
|
|
|
|
Fixes #14406.
|
|
|
|
|
|
|
|
*Yves Senn*
|
|
|
|
|
2014-03-17 07:44:56 +00:00
|
|
|
* Extend fixture `$LABEL` replacement to allow string interpolation.
|
|
|
|
|
2014-03-16 01:49:04 +00:00
|
|
|
Example:
|
|
|
|
|
|
|
|
martin:
|
|
|
|
email: $LABEL@email.com
|
|
|
|
|
|
|
|
users(:martin).email # => martin@email.com
|
|
|
|
|
|
|
|
*Eric Steele*
|
2014-03-17 07:44:56 +00:00
|
|
|
|
2014-03-13 17:05:10 +00:00
|
|
|
* Add support for `Relation` be passed as parameter on `QueryCache#select_all`.
|
|
|
|
|
|
|
|
Fixes #14361.
|
|
|
|
|
|
|
|
*arthurnn*
|
|
|
|
|
2014-03-17 07:44:56 +00:00
|
|
|
* Passing an Active Record object to `find` is now deprecated. Call `.id`
|
|
|
|
on the object first.
|
2014-03-13 18:47:12 +00:00
|
|
|
|
2014-03-17 07:44:56 +00:00
|
|
|
* Passing an Active Record object to `find` or `exists?` is now deprecated.
|
|
|
|
Call `.id` on the object first.
|
2014-03-13 18:40:35 +00:00
|
|
|
|
2014-03-17 07:44:56 +00:00
|
|
|
* Only use BINARY for MySQL case sensitive uniqueness check when column has a case insensitive collation.
|
2013-11-25 19:59:18 +00:00
|
|
|
|
|
|
|
*Ryuta Kamizono*
|
|
|
|
|
2014-03-17 07:44:56 +00:00
|
|
|
* Support for MySQL 5.6 fractional seconds.
|
2014-03-12 13:15:46 +00:00
|
|
|
|
|
|
|
*arthurnn*, *Tatsuhiko Miyagawa*
|
|
|
|
|
2014-03-10 21:10:25 +00:00
|
|
|
* Support for Postgres `citext` data type enabling case-insensitive where
|
|
|
|
values without needing to wrap in UPPER/LOWER sql functions.
|
|
|
|
|
|
|
|
*Troy Kruthoff*, *Lachlan Sylvester*
|
|
|
|
|
2014-03-05 13:00:23 +00:00
|
|
|
* Allow strings to specify the `#order` value.
|
2013-05-23 03:17:15 +00:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
Model.order(id: 'asc').to_sql == Model.order(id: :asc).to_sql
|
|
|
|
|
2014-03-05 08:07:12 +00:00
|
|
|
*Marcelo Casiraghi*, *Robin Dupret*
|
2013-05-23 03:17:15 +00:00
|
|
|
|
2013-12-09 17:52:36 +00:00
|
|
|
* Dynamically register PostgreSQL enum OIDs. This prevents "unknown OID"
|
|
|
|
warnings on enum columns.
|
|
|
|
|
|
|
|
*Dieter Komendera*
|
|
|
|
|
2014-02-28 08:49:52 +00:00
|
|
|
* `includes` is able to detect the right preloading strategy when string
|
|
|
|
joins are involved.
|
|
|
|
|
|
|
|
Fixes #14109.
|
|
|
|
|
|
|
|
*Aaron Patterson*, *Yves Senn*
|
|
|
|
|
2014-02-26 01:24:44 +00:00
|
|
|
* Fixed error with validation with enum fields for records where the
|
|
|
|
value for any enum attribute is always evaluated as 0 during
|
|
|
|
uniqueness validation.
|
|
|
|
|
2014-03-05 08:07:12 +00:00
|
|
|
Fixes #14172.
|
2014-02-26 01:24:44 +00:00
|
|
|
|
|
|
|
*Vilius Luneckas* *Ahmed AbouElhamayed*
|
|
|
|
|
2014-03-05 08:07:12 +00:00
|
|
|
* `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.
|
2014-02-25 22:57:06 +00:00
|
|
|
|
2014-03-05 08:07:12 +00:00
|
|
|
Fixes #14144.
|
2014-02-25 22:57:06 +00:00
|
|
|
|
2014-02-13 19:49:19 +00:00
|
|
|
* Fixed STI classes not defining an attribute method if there is a
|
|
|
|
conflicting private method defined on its ancestors.
|
|
|
|
|
|
|
|
Fixes #11569.
|
|
|
|
|
|
|
|
*Godfrey Chan*
|
|
|
|
|
2014-03-05 08:07:12 +00:00
|
|
|
* Coerce strings when reading attributes. Fixes #10485.
|
2013-08-07 16:56:49 +00:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
book = Book.new(title: 12345)
|
|
|
|
book.save!
|
|
|
|
book.title # => "12345"
|
|
|
|
|
|
|
|
*Yves Senn*
|
|
|
|
|
2014-01-22 13:20:01 +00:00
|
|
|
* 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*
|
|
|
|
|
2014-01-21 11:14:11 +00:00
|
|
|
* Support for user created range types in PostgreSQL.
|
|
|
|
|
|
|
|
*Yves Senn*
|
|
|
|
|
2014-02-25 12:14:35 +00:00
|
|
|
Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/activerecord/CHANGELOG.md) for previous changes.
|