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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
|
= New Features
* A modification_detection plugin has been added, for automatic
detection of in-place column value modifications. This makes
it so you don't have to call Model#modified! manually when
changing a value in place.
* A column_select plugin has been added, for automatically
selecting explicitly qualified columns in model datasets.
Example:
Sequel::Model.plugin :column_select
class Album < Sequel::Model
end
Album.dataset.sql
# SELECT albums.id, albums.name, albums.artist_id
# FROM albums
* An insert_returning_select plugin has been added, for automatically
setting up RETURNING clauses for models that select explicit
columns. This is useful when using the column_select or
lazy_attributes plugins.
* A pg_enum extension has been added, for easier dealing with
PostgreSQL enum types. The possible values for the type
are then returned in the schema hashes under the :enum_values
key. It also adds create_enum, drop_enum, and add_enum_value
Database methods for migration support.
* A round_timestamps extension has been added, for automatically
rounding timestamps to database supported precision when
literalizing.
* A dataset_source_alias extension has been added, for automatically
aliasing datasets to their first source, instead of using t1, t2.
Example:
DB.from(:a, DB[:b]).sql
# SELECT * FROM a, (SELECT * FROM b) AS t1
DB.extension(:dataset_source_alias)
DB.from(:a, DB[:b]).sql
# SELECT * FROM a, (SELECT * FROM b) AS b
* On Microsoft SQL Server, Sequel now emulates RETURNING support
using the OUTPUT clause, as long as only simple column references
are used.
= Other Improvements
* A regression has been fixed in the timestamps and table
inheritance plugins, where column values would not be
saved when skipping validations. This was first broken in
4.11.0.
* A regression has been fixed on JRuby and Rubinius when using
Sequel::Model(dataset) if the dataset needs to literalize a
symbol (and most do). This was first broken in 4.10.0.
* Primary keys are now automatically setup for models even if
the models select specific columns.
* The lazy_attributes plugin now uses qualified columns in its
selection, instead of unqualified columns.
* When looking up model instances by primary key, Sequel now uses a
qualified primary key if the model uses a joined dataset.
* For associations that require joins, Sequel will now use the
associated model's selection directly (instead of
associated_table.*) if the associated model's selection consists
solely of qualified columns.
Among other things, this means that a many_to_many association to
a model that uses lazy attributes will not eagerly load the lazy
attributes by default.
* Model#save now uses insert_select if there is an existing
RETURNING clause used by the underlying dataset, even if the model
selects specific columns.
* In Dataset#insert, aliased tables are now automatically unaliased.
This allows you to use a dataset with an aliased table and have
full SELECT/INSERT/UPDATE/DELETE support, assuming the database
supports aliased tables in UPDATE and DELETE.
* Dataset#graph now qualifies columns correctly if the current
dataset is a joined dataset and it moves the current dataset to
a subselect.
* Dataset#joined_dataset? is now a public method, and can be used to
determine whether the dataset uses a join, either explicitly via
JOIN or implicitly via multiple FROM tables.
* The Dataset#unqualified_column_for helper method has been added,
returning the unqualified version of a possibly qualified column.
* The composition and serialization plugins now support validations
on the underlying columns. Previously, they didn't update the
underlying columns until after validations were performed. This
works better when using the auto_validations plugin.
* The class_table_inheritance plugin now uses JOIN ON instead of
JOIN USING, which makes it work on all databases that Sequel
supports. Additionally, the plugin now explicitly selects
qualified columns from all of the tables.
* The list plugin now adds an after_destroy hook that will renumber
rows after the current row, similar to how moving existing values
in the list works.
* The pg_json extension is now faster when json column value is a
plain string, number, true, false, or nil, if the underlying json
library handles such values natively.
* External jdbc, odbc, and do subadapters can now be loaded
automatically without requiring them first, assuming proper
support in the external subadapter.
* When using create_table on MySQL, correctly handle the :key
option to when calling foreign_key with a column reference.
* On Oracle, use all_tab_cols instead of user_tab_cols for getting
default values when parsing the schema. This makes it work if the
user does not own the table.
* On Oracle, use all_tables and all_views for Database#tables and
Database#views. This works better for users with limited rights.
* Additional disconnect errors are now recognized in the postgres and
jdbc/mysql adapters.
* Sequel::Model now uses copy constructors (e.g. initialize_copy)
instead of overriding #dup and #clone.
* The rake default task now runs plugin specs in addition to
core and model specs.
= bin/sequel Improvements
* Add the sequel lib directory to the front of the load path
instead of the end, fixing cases where you end up requiring an
old version of the sequel gem (e.g. by using sequel_pg).
* Add the sequel lib directory as an absolute path, fixing cases
where you later change the current directory.
* Require sequel later in the code, so that bin/sequel -h doesn't
need to require sequel, and full backtrace is not printed if
requiring sequel raises an error (unless -t is used).
* If an exception is raised, put a newline between the exception
message and backtrace.
* Don't allow usage of -C with any of -cdDmS.
* If sequel -v is given along with a database or code string to
execute, print the Sequel version but also continue, similar
to how ruby -v works.
= Backwards Compatibility
* The switch from JOIN ON to JOIN USING in the
class_table_inheritance can break certain usage, such as querying
using unqualified primary key. Users should switch to using a
qualified primary key instead.
* Calling Dataset#returning when the underlying database does not
support it now raises an Error.
|