Sequel is a lightweight database access toolkit for Ruby.
- Sequel provides thread safety, connection pooling and a concise
DSL for constructing SQL queries and table schemas.
- Sequel includes a comprehensive ORM layer for mapping records to
Ruby objects and handling associated records.
- Sequel supports advanced database features such as prepared
statements, bound variables, stored procedures, savepoints,
two-phase commit, transaction isolation, master/slave
configurations, and database sharding.
- Sequel currently has adapters for ADO, Amalgalite, DataObjects,
DB2, DBI, Firebird, Informix, JDBC, MySQL, ODBC, OpenBase, Oracle,
PostgreSQL and SQLite3.
Sequel 3.14.0 has been released and should be available on the gem
= New Features
Dataset#grep now accepts :all_patterns, :all_columns, and
:case_insensitive options. Previously, grep would use a case
sensitive search where it would match if any pattern matched any
column. These three options give you more control over how the
pattern matching will work:
dataset.grep([:a, :b], %w’%test% foo’)
WHERE ((a LIKE ‘%test%’) OR (a LIKE ‘foo’)
OR (b LIKE ‘%test%’) OR (b LIKE ‘foo’))
dataset.grep([:a, :b], %w’%foo% %bar%’, :all_patterns=>true)
WHERE (((a LIKE ‘%foo%’) OR (b LIKE ‘%foo%’))
AND ((a LIKE ‘%bar%’) OR (b LIKE ‘%bar%’)))
dataset.grep([:a, :b], %w’%foo% %bar%’, :all_columns=>true)
WHERE (((a LIKE ‘%foo%’) OR (a LIKE ‘%bar%’))
AND ((b LIKE ‘%foo%’) OR (b LIKE ‘%bar%’)))
dataset.grep([:a, :b], %w’%foo% %bar%’,
WHERE ((a LIKE ‘%foo%’) AND (b LIKE ‘%foo%’)
AND (a LIKE ‘%bar%’) AND (b LIKE ‘%bar%’))
dataset.grep([:a, :b], %w’%test% foo’, :case_insensitive=>true)
WHERE ((a ILIKE ‘%test%’) OR (a ILIKE ‘foo’)
OR (b ILIKE ‘%test%’) OR (b ILIKE ‘foo’))
When using the schema plugin, you can now provide a block to the
create_table methods to set the schema and create the table
in the same call:
class Artist < Sequel::Model
The tree plugin now accepts a :single_root option, which uses a
before_save hook to attempt to ensure that there is only a single
root in the tree. It also adds a Model.root method to get the
single root of the tree.
The tree plugin now adds a Model#root? instance method to check
if the current node is a root of the tree.
Model#save now takes a :raise_on_failure option which will
override the object’s raise_on_save_failure setting. This makes
it easier to get the desired behavior (raise or just return false)
in library code without using a begin/ensure block.
The Database#adapter_scheme instance method was added, which
operates the same as the class method.
Sequel now handles the literalization of OCI8::CLOB objects in
the Oracle adapter.
= Other Improvements
When using the timezone support, Sequel will now correctly load
times and datetimes in standard time when the current timezone is
in daylight time, or vice versa. Previously, if you tried to
to load a time or datetime in December when in July in a timezone
that used daylight time, it would be off by an hour.
The rcte_tree plugin now works correctly when a :conditions option
The single_table_inheritance plugin now works correctly when the
class discriminator column has the same name as an existing ruby
method (such as type).
Database#each_server now works correctly when a connection string
is used to connect, instead of an options hash.
Model#destroy now respects the object’s use_transactions setting,
instead of always using a transaction.
Model#exists? now uses a simpler and faster query.
Sequel now handles the aggregate methods such as count and sum
correctly on Microsoft SQL Server when using an ordered dataset
with a clause such as DISTINCT or GROUP and without a limit.
Sequel now handles rename_table correctly on Microsoft SQL Server
when using a case sensitive collation, or when qualifying the
table with a schema.
Sequel now parses the schema correctly on Oracle when the same
table name is used in multiple schemas.
Sequel now handles OCIInvalidHandle errors when disconnecting
in the Oracle adapter.
Sequel now raises a Sequel::Error instead of an ArgumentError
if the current or target migration version does not exist.
When a mismatched number of composite keys are used in
associations, Sequel now uses a more detailed error message.
Significant improvements were made to the Dataset and Model
= Backwards Compatibility
Model#valid? now must accept an optional options hash.
The Model#save_failure private method was renamed to
The LOCAL_DATETIME_OFFSET_SECS and LOCAL_DATETIME_OFFSET constants
have been removed from the Sequel module.
Sequel now uses obj.to_json instead of JSON.generate(obj). This
shouldn’t affect backwards compatibility, but did fix a bug in