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
|
= New Features
* Dataset#explain on PostgreSQL now supports options for all EXPLAIN
options supported by PostgreSQL. These boolean options are supported:
:analyze :: Use the ANALYZE option.
:buffers :: Use the BUFFERS option.
:costs :: Use the COSTS option.
:generic_plan :: Use the GENERIC_PLAN option.
:memory :: Use the MEMORY option.
:settings :: Use the SETTINGS option.
:summary :: Use the SUMMARY option.
:timing :: Use the TIMING option.
:verbose :: Use the VERBOSE option.
:wal :: Use the WAL option.
These non-boolean options are supported:
:format :: Use the FORMAT option to change the format of the
returned value. Values can be :text, :xml, :json,
or :yaml.
:serialize :: Use the SERIALIZE option to get timing on
serialization. Values can be :none, :text, or
:binary.
* Sequel::OLD and Sequel::NEW constants have been added, for use in
returning statements on PostgreSQL 18+.
DB[:table].
returning(Sequel::OLD[:c].as(:old), Sequel::NEW[:c].as(:new)).
update(c: 2)
# => [{old: 1, new: 2}]
* Dataset#prepare_sql_type has been added for setting the SQL type
to use for the prepared statement separately from the return type.
This method is designed primarily for cases where you are using
INSERT/UPDATE/DELETE RETURNING, and want to be able use each,
single_value, first, map, to_hash, or to_hash_groups as the return
type. For example, if you want to update multiple rows and return
the rows updated as an identity-keyed hash:
ps = DB[:table].
where(name: :$name).
returning.
prepare_sql_type(:update).
prepare([:to_hash, :id], :update_table, value: :$value)
= Other Improvements
* Database#create_table and related methods now support multilevel
qualified identifiers:
DB.create_table(Sequel[:db][:sch][:table]){}
# CREATE TABLE db.sch.table ()
This is mostly useful on Microsoft SQL Server.
* The pg_auto_parameterize extension now supports Database#explain.
and #analyze. Both methods now use an append-only approach to
building the SQL string to explain.
* Dataset#quote_identifier's handling of SQL::Identifier values
wrapping LiteralString values has been fixed. Such identifiers are
no longer quoted:
DB.quote_identifier(Sequel.identifier(Sequel.lit("OLD")))
# Before: "OLD"
# After: OLD
* SQL::QualifiedIdentifier no longer converts SQL::Identifier values
wrapping LiteralString values into plain String values. This fixes
unexpected quoting issues:
DB.literal(Sequel.identifier(Sequel.lit('OLD'))[:a])
# Before: "OLD"."a"
# After: OLD."a"
* The mock postgres adapter now emulates PostgreSQL 17 instead of
PostgreSQL 15 by default.
|