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
|
= New Features
* An :extensions Database option is now supported, which will load the
named extensions into the Database before any connections are
initiated:
DB = Sequel.connect('mock:///', :extensions=>[:error_sql, :synchronize_sql])
DB = Sequel.connect('mock:///?extensions=error_sql,synchronize_sql')
* A :connect_sqls Database option is now supported, which will issue
the given queries on all new connections:
DB = Sequel.connect('postgres:///', :connect_sqls=>[
'SET random_page_cost = 1.0',
"SET default_tablespace = 'foo'"
])
* DatasetModule#reverse has been added for simpler use of descending
orders:
class Foo < Sequel::Model
dataset_module do
reverse :newest_first, :created_at
end
end
Foo.newest_first.first(10)
* A synchronize_sql extension has been added. This extension checks
out a connection around SQL string creation, and is useful in the
cases where escaping values in the query requires a connection and
a large number of values need to be escaped.
* The following features are now supported on MariaDB 10.2+:
* Common table expressions.
* Window functions.
* Dropping CHECK constraints. Older versions of MariaDB/MySQL
ignored CHECK constraints that were added, and Sequel did not
attempt to filter them out, so Sequel did not require changes to
add CHECK constraints. MariaDB 10.2 CHECK constraints work
correctly with Sequel's constraint_validations extension/plugin.
* Raising CHECK constraint violations as
Sequel::CheckConstraintViolation instances.
* Recognizing curdate() as Sequel::CURRENT_DATE when used as the
default value for a date column.
* Date::Infinity values are now supported in the
pg_extended_date_support extension:
DB.convert_infinite_timestamps = :date
This returns infinite dates/timestamps as Date::Infinity instances,
and literalizes Date::Infinity instances correctly.
= Improvements
* Database#reset_primary_key_sequence now works correctly on
PostgreSQL 10.
* If a commit or rollback raises an exception when using the postgres
adapter, Sequel will check the connection's current transaction
status and only send another rollback if the connection is currently
inside a transaction. This fixes a warning that is issued in most
cases if a commit or rollback fails.
* The jdbc/postgresql adapter now forces JDBC PreparedStatement
instances created by Dataset#call to never be prepared server side,
working around an caching issue in the jdbc-postgres drier in
versions greater than 9.4.1200.
* Database#indexes will no longer return indexes which are in the
process of being dropped on PostgreSQL 9.3+. Additionally,
Database#indexes will now return indexes that have indcheckxmin
set. The previous removal of indexes with indcheckxmin set is
more likely to cause false negatives than correctly remove
indexes not yet valid.
* Common table expressions are no longer hoisted from subqueries on
SQLite. They are still hoisted from queries used in
UNION/INSERT/EXCEPT, since SQLite does not support common table
expressions at that level.
* On Microsoft SQL Server, using an INSERT query with a subquery that
uses a common table expression now hoists the common table
expression from subquery level to main query level, allowing such
queries to work.
* An additional disconnect error is now recognized in the oracle
adapter.
* bin/sequel now adds a Database logger before the initial
connection is made, allowing you to see any connection setup
statements issued to the database.
= Backwards Compatibility
* Calling a filtering method with no argument and a virtual row
block that returns nil on a dataset with no existing filter is
deprecated in this version and will emit a warning. The behavior
in this version remains the same, where the dataset is not
modified. The behavior will change in Sequel 5.4.0 so that a
WHERE NULL filter will be added in that case, instead of the
filter being ignored, so that the behavior is similar to calling
the filtering method with a nil argument.
# Sequel 5.3.0
DB[:a].where{nil}
# SELECT * FROM a
# Sequel 5.4.0
DB[:a].where{nil}
# SELECT * FROM a WHERE NULL
* Support for PostgreSQL <8.1 has been dropped from Database#indexes.
Sequel's PostgreSQL support requires >=8.2 for Dataset#insert to
work, so it doesn't make sense to support earlier versions in other
cases.
|