Permalink
Fetching contributors…
Cannot retrieve contributors at this time
160 lines (114 sloc) 5.54 KB
= Major Changes
* Datasets are now frozen by default. Since Sequel's inception,
datasets have used a method-chaining API that returned modified
copies, but previously they still supported direct mutation. Now,
datasets are always frozen and cannot be mutated. This allows many
additional default optimizations related to caching, and provides
greater thread safety.
ds = DB[:table]
# Before
ds.row_proc = lambda{|h| h}
# Now
ds = ds.with_row_proc(lambda{|h| h})
* Symbol splitting to create qualified and/or aliased identifiers is
now disabled by default. While symbol splitting allowed for shorter
code, it was not obvious and caused significant issues when using
column names with embedded double or triple underscores. Sequel now
offers many ways to create qualified and/or aliased identifiers.
# Before
:table__column # "table"."column"
# Now
:table__column # "table__column"
Sequel[:table][:column] # "table"."column"
# To get back historical behavior
Sequel.split_symbols = true
* Sequel no longer allows the use of plain ruby strings as SQL code
fragments in the dataset filtering methods, as that makes it
easier to introduce SQL injection vulnerabilities. You can use
Sequel.lit to create literal strings (SQL code fragments), which
makes it easier to do security auditing of applications using
Sequel.
# Before
DB[:table].where("column = 1").all
# Now
DB[:table].where(Sequel.lit("column = 1")).all
# or better
DB[:table].where(column: 1).all
# To get back historical behavior
DB.extension :auto_literal_strings
= Backwards Compatibility
* All adapters, extensions, plugins, features, and constants
deprecated in 4.49.0 have been removed. Before upgrading to Sequel
5.0.0, upgrade to 4.49.0 and fix all deprecation warnings.
* Support for ruby 1.8.7 has been dropped, the minimum ruby version is
now 1.9.2.
* The {before,after,around}_validation hooks are now always called
when saving, even if the validate: false option is used. This
allows you to use the before_validation hook to make changes
to the model instance that are required before validation and
before saving even if not validating.
* Getting column values for newly created model instances after
insertion now happens before after_create is called, instead of
after.
* Sequel now immediately attempts to the connect to the database
when a Database instance is created, in order to fail fast if the
connection parameters are invalid.
* The validates_unique method in the validation_helpers plugin
now only checks for uniqueness by default if the record is new or
one of the related columns has been modified by default.
* Database schema modification methods and schema generator methods
now return nil instead of some internal value.
* Many cases where Sequel used Kernel#send internally have been
switched to Kernel#public_send so they only call public methods.
* Model association hooks are now nil instead of empty arrays by
default.
* Internal uses of instance_eval with a block have been changed to
instance_exec. This allows them to be used with lambdas that
take no arguments.
* Most internal constants are now frozen, unless there is a
requirement that they be modified at runtime.
* The Model @was_new instance variable is now no longer set when
saving new model instances.
* The private Sequel::Postgres::PGArray::Parser#new_entry_buffer
method in the pg_array extension has been removed.
* Modifying Model.input_transformer_order in the input_transformer
plugin no longer has an effect.
= New Features
* Database#add_index :if_not_exists option is now supported on
PostgreSQL 9.5+.
* SQL::Subscript#expression has been added to retrieve the
expression that is subscripted.
= Other Improvements
* Threaded connection pools no longer block while new connections
are being made. Previously, attempting to establish a new
connection blocked all connection pool activity until the new
connection was made.
* Many minor performance improvements have been made.
* The class_table_inheritance plugin now raises an error during
Model#update if a query does not modify a single row, just as
the default Model#update does.
* ConnectionPool#size is now thread-safe in both threaded
connection pools. Internal callers that already have the
connection pool mutex should switch to using #_size (a new
private method).
* Registration of new serialization formats in the serialization
plugin is now thread-safe.
* If transactional schema modifications are not supported, a
savepoint will not automatically be created when adding
indexes for new tables inside transactions. This fixes issues
when making schema changes inside transactions on MySQL.
* Attempting to create a prepared statement using a dataset that
uses a delayed evaluation now raises an error, because the
prepared statement would not respect the delayed evaluation.
* The bin/sequel -M option now uses base 10. Previously, it
used the Kernel#Integer default, which was base 8 if there was
a preceding 0.
= Deprecated Features
These deprecated features will be removed in Sequel 5.1.0.
* Model.allowed_columns in the base plugin is now deprecated. Use
the whitelist_security plugin if you want to call it.
* Model use_after_commit_rollback class and instance accessors are
now deprecated.
* Defining the Model#_before_validation method is now deprecated.
You can change to using before_validation.
* The private Model.plugin_module_defined? method is now deprecated.