1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
= New Features
* Database#schema now includes :max_length entries for string
columns, specifying the size of the string field. The
auto_validations plugin now uses this information to
automatically set up max_length validations on those fields.
* The Dataset join methods now support a :reset_implicit_qualifier
option. If set to false, this makes the join not reset the
implicit qualifier, so that the next join will not consider this
table as the last table joined. Example:
DB[:a].join(:b, :c=>:d).
join(:e, :f=>:g)
# SELECT * FROM a
# INNER JOIN b ON (b.c = a.d)
# INNER JOIN e ON (e.f = b.g)
DB[:a].join(:b, {:c=>:d}, :reset_implicit_qualifier=>false).
join(:e, :f=>:g)
# SELECT * FROM a
# INNER JOIN b ON (b.c = a.d)
# INNER JOIN e ON (e.f = a.g)
* The Dataset cross and natural join methods now accept an options
hash. Example:
DB[:a].cross_join(:b, :table_alias=>:c)
# SELECT * FROM a CROSS JOIN b AS c
* Model#set_nested_attributes has been added to the nested_attributes
plugin, which allows you to to set the nested_attributes options to
use per-call. This is very helpful if you have multiple forms that
handle associated objects, but with different input fields used
for the associated objects depending on the form. Example:
album.set_nested_attributes(:tracks,
params[:track_attributes],
:fields=>[:a, :b, :c])
* Database#values has been added on PostgreSQL, which creates a
dataset that uses VALUES instead of SELECT. Just as PostgreSQL
allows, you can also use orders, limits, and offsets with this
dataset.
* A :notice_receiver option is now supported in the postgres adapter
if the pg driver is used. This should be a proc, which will be
passed to the pg connection's set_notice_receiver method.
* A Database :readonly option is now supported in the sqlite adapter,
which opens the database in a read-only mode, causing an error
if a query is issued that would modify the database.
* A :before_thread_exit option has been added to
Database#listen_for_static_cache_updates in the
pg_static_cache_updater extension, allowing you to run code before
the created thread exits.
= Other Improvements
* Eager loading limited associations using a UNION now works
correctly when an association block is used. This fixes a
regression that first occurred in 4.10.0, when the union
eager loader became the default eager loader.
* When creating a new associated object in the nested_attributes
plugin, where the reciprocal association is a many_to_one
association, set the cached reciprocal object in the new
associated object before saving it.
This fixes issues when validations in the associated object
require access to the current object, which may not yet be
saved in the database.
* The prepared_statements and prepared_statements_associations
plugins now automatically use explicit column references when
preparing statements. This fixes issues on PostgreSQL when a
column is added to a table while a prepared statement exists
that selects * from the table. Previously, all further attempts
to use the prepared statement will fail.
This allows you to run migrations that add columns to tables
while concurrently running an application that uses the
prepared statements plugins. Note that many other schema
modifications can cause issues when running migrations
while concurrently running an application, but most of those
are not specific to usage of prepared statements.
* Dataset#insert_select on PostgreSQL now respects an existing
RETURNING clause, and won't override it to use RETURNING *.
A similar fix was applied to the generalized prepared statements
support as well.
* The interval parser in the pg_interval extension now supports
intervals with 2-10 digits for hours. Previously, it only
supported using 2 digits for hours.
= Backwards Compatibility
* The methods and classes deprecated in 4.11.0 have been removed.
* The nested_attributes internal API has changed significantly. If
you were calling any private nested_attributes methods, you'll
probably need to update your code.
|