sequel 5.82.0 → 5.84.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/sequel +9 -17
- data/lib/sequel/adapters/jdbc/derby.rb +1 -1
- data/lib/sequel/adapters/shared/db2.rb +1 -1
- data/lib/sequel/adapters/shared/mssql.rb +14 -2
- data/lib/sequel/adapters/shared/postgres.rb +42 -4
- data/lib/sequel/adapters/shared/sqlite.rb +3 -1
- data/lib/sequel/database/connecting.rb +1 -4
- data/lib/sequel/database/misc.rb +27 -7
- data/lib/sequel/database/schema_methods.rb +17 -1
- data/lib/sequel/dataset/sql.rb +13 -0
- data/lib/sequel/extensions/pg_json_ops.rb +328 -1
- data/lib/sequel/extensions/stdio_logger.rb +48 -0
- data/lib/sequel/extensions/string_agg.rb +15 -2
- data/lib/sequel/plugins/defaults_setter.rb +16 -4
- data/lib/sequel/plugins/optimistic_locking.rb +2 -0
- data/lib/sequel/sql.rb +8 -5
- data/lib/sequel/version.rb +1 -1
- metadata +4 -235
- data/CHANGELOG +0 -1377
- data/README.rdoc +0 -936
- data/doc/advanced_associations.rdoc +0 -884
- data/doc/association_basics.rdoc +0 -1859
- data/doc/bin_sequel.rdoc +0 -146
- data/doc/cheat_sheet.rdoc +0 -255
- data/doc/code_order.rdoc +0 -104
- data/doc/core_extensions.rdoc +0 -405
- data/doc/dataset_basics.rdoc +0 -96
- data/doc/dataset_filtering.rdoc +0 -222
- data/doc/extensions.rdoc +0 -77
- data/doc/fork_safety.rdoc +0 -84
- data/doc/mass_assignment.rdoc +0 -98
- data/doc/migration.rdoc +0 -660
- data/doc/model_dataset_method_design.rdoc +0 -129
- data/doc/model_hooks.rdoc +0 -254
- data/doc/model_plugins.rdoc +0 -270
- data/doc/mssql_stored_procedures.rdoc +0 -43
- data/doc/object_model.rdoc +0 -563
- data/doc/opening_databases.rdoc +0 -439
- data/doc/postgresql.rdoc +0 -611
- data/doc/prepared_statements.rdoc +0 -144
- data/doc/querying.rdoc +0 -1070
- data/doc/reflection.rdoc +0 -120
- data/doc/release_notes/5.0.0.txt +0 -159
- data/doc/release_notes/5.1.0.txt +0 -31
- data/doc/release_notes/5.10.0.txt +0 -84
- data/doc/release_notes/5.11.0.txt +0 -83
- data/doc/release_notes/5.12.0.txt +0 -141
- data/doc/release_notes/5.13.0.txt +0 -27
- data/doc/release_notes/5.14.0.txt +0 -63
- data/doc/release_notes/5.15.0.txt +0 -39
- data/doc/release_notes/5.16.0.txt +0 -110
- data/doc/release_notes/5.17.0.txt +0 -31
- data/doc/release_notes/5.18.0.txt +0 -69
- data/doc/release_notes/5.19.0.txt +0 -28
- data/doc/release_notes/5.2.0.txt +0 -33
- data/doc/release_notes/5.20.0.txt +0 -89
- data/doc/release_notes/5.21.0.txt +0 -87
- data/doc/release_notes/5.22.0.txt +0 -48
- data/doc/release_notes/5.23.0.txt +0 -56
- data/doc/release_notes/5.24.0.txt +0 -56
- data/doc/release_notes/5.25.0.txt +0 -32
- data/doc/release_notes/5.26.0.txt +0 -35
- data/doc/release_notes/5.27.0.txt +0 -21
- data/doc/release_notes/5.28.0.txt +0 -16
- data/doc/release_notes/5.29.0.txt +0 -22
- data/doc/release_notes/5.3.0.txt +0 -121
- data/doc/release_notes/5.30.0.txt +0 -20
- data/doc/release_notes/5.31.0.txt +0 -148
- data/doc/release_notes/5.32.0.txt +0 -46
- data/doc/release_notes/5.33.0.txt +0 -24
- data/doc/release_notes/5.34.0.txt +0 -40
- data/doc/release_notes/5.35.0.txt +0 -56
- data/doc/release_notes/5.36.0.txt +0 -60
- data/doc/release_notes/5.37.0.txt +0 -30
- data/doc/release_notes/5.38.0.txt +0 -28
- data/doc/release_notes/5.39.0.txt +0 -19
- data/doc/release_notes/5.4.0.txt +0 -80
- data/doc/release_notes/5.40.0.txt +0 -40
- data/doc/release_notes/5.41.0.txt +0 -25
- data/doc/release_notes/5.42.0.txt +0 -136
- data/doc/release_notes/5.43.0.txt +0 -98
- data/doc/release_notes/5.44.0.txt +0 -32
- data/doc/release_notes/5.45.0.txt +0 -34
- data/doc/release_notes/5.46.0.txt +0 -87
- data/doc/release_notes/5.47.0.txt +0 -59
- data/doc/release_notes/5.48.0.txt +0 -14
- data/doc/release_notes/5.49.0.txt +0 -59
- data/doc/release_notes/5.5.0.txt +0 -61
- data/doc/release_notes/5.50.0.txt +0 -78
- data/doc/release_notes/5.51.0.txt +0 -47
- data/doc/release_notes/5.52.0.txt +0 -87
- data/doc/release_notes/5.53.0.txt +0 -23
- data/doc/release_notes/5.54.0.txt +0 -27
- data/doc/release_notes/5.55.0.txt +0 -21
- data/doc/release_notes/5.56.0.txt +0 -51
- data/doc/release_notes/5.57.0.txt +0 -23
- data/doc/release_notes/5.58.0.txt +0 -31
- data/doc/release_notes/5.59.0.txt +0 -73
- data/doc/release_notes/5.6.0.txt +0 -31
- data/doc/release_notes/5.60.0.txt +0 -22
- data/doc/release_notes/5.61.0.txt +0 -43
- data/doc/release_notes/5.62.0.txt +0 -132
- data/doc/release_notes/5.63.0.txt +0 -33
- data/doc/release_notes/5.64.0.txt +0 -50
- data/doc/release_notes/5.65.0.txt +0 -21
- data/doc/release_notes/5.66.0.txt +0 -24
- data/doc/release_notes/5.67.0.txt +0 -32
- data/doc/release_notes/5.68.0.txt +0 -61
- data/doc/release_notes/5.69.0.txt +0 -26
- data/doc/release_notes/5.7.0.txt +0 -108
- data/doc/release_notes/5.70.0.txt +0 -35
- data/doc/release_notes/5.71.0.txt +0 -21
- data/doc/release_notes/5.72.0.txt +0 -33
- data/doc/release_notes/5.73.0.txt +0 -66
- data/doc/release_notes/5.74.0.txt +0 -45
- data/doc/release_notes/5.75.0.txt +0 -35
- data/doc/release_notes/5.76.0.txt +0 -86
- data/doc/release_notes/5.77.0.txt +0 -63
- data/doc/release_notes/5.78.0.txt +0 -67
- data/doc/release_notes/5.79.0.txt +0 -28
- data/doc/release_notes/5.8.0.txt +0 -170
- data/doc/release_notes/5.80.0.txt +0 -40
- data/doc/release_notes/5.81.0.txt +0 -31
- data/doc/release_notes/5.82.0.txt +0 -61
- data/doc/release_notes/5.9.0.txt +0 -99
- data/doc/schema_modification.rdoc +0 -679
- data/doc/security.rdoc +0 -443
- data/doc/sharding.rdoc +0 -286
- data/doc/sql.rdoc +0 -648
- data/doc/testing.rdoc +0 -204
- data/doc/thread_safety.rdoc +0 -15
- data/doc/transactions.rdoc +0 -250
- data/doc/validations.rdoc +0 -558
- data/doc/virtual_rows.rdoc +0 -265
@@ -1,59 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* Sequel now supports using separate queries for each table for both
|
4
|
-
lazy and eager loading of the following associations:
|
5
|
-
|
6
|
-
* many_to_many
|
7
|
-
* one_through_one
|
8
|
-
* many_through_many # many_through_many plugin
|
9
|
-
* one_through_many # many_through_many plugin
|
10
|
-
|
11
|
-
For many_to_many/one_through_one, you specify the :join_table_db
|
12
|
-
association option, which should be a Sequel::Database instance
|
13
|
-
containing the join table. It is possible for the current table,
|
14
|
-
join table, and associated table all to be in separate databases:
|
15
|
-
|
16
|
-
JOIN_TABLE_DB = Sequel.connect('...')
|
17
|
-
Album.many_to_many :artists, join_table_db: JOIN_TABLE_DB
|
18
|
-
|
19
|
-
For many_through_many/one_through_many, you can use the :db option
|
20
|
-
in each join table specification. All join tables can be in
|
21
|
-
separate databases:
|
22
|
-
|
23
|
-
JTDB1 = Sequel.connect('...')
|
24
|
-
JTDB2 = Sequel.connect('...')
|
25
|
-
# Tracks on all albums this artist appears on
|
26
|
-
Artist.many_through_many :album_tracks, [
|
27
|
-
{table: :albums_artists, left: :artist_id, right: :album_id, db: JTDB1},
|
28
|
-
{table: :artists, left: :id, right: :id, db: JTDB2}
|
29
|
-
],
|
30
|
-
class: :Track, right_primary_key: :album_id
|
31
|
-
|
32
|
-
* The :allow_eager_graph association option has been added. Setting
|
33
|
-
this option to false will disallow eager loading via #eager_graph.
|
34
|
-
This is useful if you can eager load the association via #eager,
|
35
|
-
but not with #eager_graph.
|
36
|
-
|
37
|
-
* The :allow_filtering_by association option has been added. Setting
|
38
|
-
this option to false will disallow the use of filtering by
|
39
|
-
associations for the association.
|
40
|
-
|
41
|
-
* Dataset#returning is now supported on SQLite 3.35.0+. To work around
|
42
|
-
bugs in the SQLite implementation, identifiers used in the RETURNING
|
43
|
-
clause are automatically aliased. Additionally, prepared statements
|
44
|
-
that use the RETURNING clause on SQLite seem to have issues, so the
|
45
|
-
prepared_statements plugin does not automatically use prepared
|
46
|
-
statements on SQLite for queries that use the RETURNING clause.
|
47
|
-
|
48
|
-
* Database#rename_tables has been added on MySQL to support renaming
|
49
|
-
multiple tables in the same query.
|
50
|
-
|
51
|
-
= Other Improvements
|
52
|
-
|
53
|
-
* The unused_associations plugin now tracks access to the association
|
54
|
-
reflection for associations, so it will no longer show an
|
55
|
-
association as completely unused if something is accessing the
|
56
|
-
association reflection for it. This eliminates most of the false
|
57
|
-
positives, where the plugin would show an association as unused
|
58
|
-
even though something was using it without calling the association
|
59
|
-
methods.
|
@@ -1,14 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* A Sequel::Database#like_without_collate accessor has been added on
|
4
|
-
Microsoft SQL Server, which avoids using the COLLATE clause for
|
5
|
-
LIKE expressions. This can speed up query performance significantly.
|
6
|
-
|
7
|
-
* A private Sequel::Model::Errors#full_message method has been added
|
8
|
-
to make it easier to support internationalization for Sequel::Model
|
9
|
-
error messages.
|
10
|
-
|
11
|
-
= Other Improvements
|
12
|
-
|
13
|
-
* The association reflection tracking in the unused_associations
|
14
|
-
plugin now works correctly when combining coverage runs.
|
@@ -1,59 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* Model#validates_no_null_byte has been added to the
|
4
|
-
validation_helpers. It checks that the value being validated does
|
5
|
-
not contain an ASCII NUL ('\0') byte. Some databases will return an
|
6
|
-
error if a string contains a NUL byte.
|
7
|
-
|
8
|
-
The auto_validations plugin will now automatically add no_null_byte
|
9
|
-
validations for all string columns in the model's table. This will
|
10
|
-
change exceptions raised by NUL bytes from database errors to
|
11
|
-
validation failures.
|
12
|
-
|
13
|
-
If you are using auto_validations and would like to have a table
|
14
|
-
accept NUL bytes in string columns, use the following code inside
|
15
|
-
the model:
|
16
|
-
|
17
|
-
skip_auto_validations(:no_null_byte)
|
18
|
-
|
19
|
-
* JSONB subscripts are now supported on PostgreSQL 14+ when using the
|
20
|
-
pg_json_ops extension. You can use JSONB subscripts to more easily
|
21
|
-
update part of a JSONB column:
|
22
|
-
|
23
|
-
DB[:table].update(Sequel.pg_jsonb_op(:column)['key'] => 'value')
|
24
|
-
UPDATE "table" SET "column"['key'] = 'value'
|
25
|
-
|
26
|
-
* hstore subscripts are now supported on PostgreSQL 14+ when using the
|
27
|
-
pg_hstore_ops extension. You can use hstore subscripts to more
|
28
|
-
easily update part of an hstore column:
|
29
|
-
|
30
|
-
DB[:table].update(Sequel.hstore_op(:column)['key'] => 'value')
|
31
|
-
UPDATE "table" SET "column"['key'] = 'value'
|
32
|
-
|
33
|
-
* Sequel now supports table aliases for JOIN USING columns on
|
34
|
-
PostgreSQL 14+. These allow you to reference the USING columns in
|
35
|
-
the query using a qualified identifier. To use this support, pass an
|
36
|
-
SQL::AliasedExpression as the expression to join on:
|
37
|
-
|
38
|
-
DB[:t1].join(:t2, Sequel.as([:c1, :c2], :alias))
|
39
|
-
# SELECT * FROM "t1" INNER JOIN "t2" USING ("c1", "c2") AS "alias"
|
40
|
-
|
41
|
-
* Database#create_trigger on PostgreSQL now supports a :replace option
|
42
|
-
for CREATE OR REPLACE TRIGGER (supported in PostgreSQL 14+).
|
43
|
-
|
44
|
-
* SQL::Expression#sequel_ast_transform has been added to support
|
45
|
-
AST transforms of custom expression classes.
|
46
|
-
|
47
|
-
= Other Improvements
|
48
|
-
|
49
|
-
* Sequel now supports calling PostgreSQL procedures without arguments
|
50
|
-
when using Database#call_procedure. Previously, attempts to call
|
51
|
-
procuredures without arguments would call the procedure with a
|
52
|
-
single NULL argument.
|
53
|
-
|
54
|
-
* Sequel now uses defined?(yield) instead of block_given? internally
|
55
|
-
for better performance on CRuby. defined?(yield) is faster as it is
|
56
|
-
built into the VM, while block_given? is a regular method and has
|
57
|
-
the overhead of calling a regular method. Note that defined?(yield)
|
58
|
-
is not implemented correctly on JRuby before 9.0.0.0, so this
|
59
|
-
release of Sequel drops support for JRuby versions before 9.0.0.0.
|
data/doc/release_notes/5.5.0.txt
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* The defaults_setter plugin now supports a :cache option, which
|
4
|
-
will cache default values in the model object's values hash:
|
5
|
-
|
6
|
-
Model.plugin :defaults_setter
|
7
|
-
o = Model.new
|
8
|
-
o.column # => 1 # default value
|
9
|
-
o.values # => {}
|
10
|
-
|
11
|
-
Model.plugin :defaults_setter, cache: true
|
12
|
-
o = Model.new
|
13
|
-
o.column # => 1 # default value
|
14
|
-
o.values # => {:column => 1}
|
15
|
-
|
16
|
-
* The pg_array extension now sets a :callable_default schema entry
|
17
|
-
for recognized empty array defaults.
|
18
|
-
|
19
|
-
* The pg_hstore extension now sets a :callable_default schema entry
|
20
|
-
for recognized empty hstore defaults.
|
21
|
-
|
22
|
-
* The pg_json extension now sets a :callable_default schema entry for
|
23
|
-
recognized empty json/jsonb array/hash defaults.
|
24
|
-
|
25
|
-
* The pg_inet extension now sets a :ruby_default schema entry for
|
26
|
-
recognized inet/cidr defaults.
|
27
|
-
|
28
|
-
* The pg_range extension now sets a :ruby_default schema entry for
|
29
|
-
recognized range defaults.
|
30
|
-
|
31
|
-
* The defaults_setter plugin will now give preference to a
|
32
|
-
:callable_default schema entry over a :ruby_default schema entry.
|
33
|
-
Combined with the other changes listed above, this makes default
|
34
|
-
values recognized by the pg_array, pg_hstore, and pg_json extensions
|
35
|
-
work well if the defaults_setter :cache option is also used.
|
36
|
-
|
37
|
-
= Other Improvements
|
38
|
-
|
39
|
-
* The modification_detection plugin no longer breaks column change
|
40
|
-
detection for new objects.
|
41
|
-
|
42
|
-
* Database#copy_table in the postgres adapter now handles errors that
|
43
|
-
occur when processing rows. Previously, an exception could be
|
44
|
-
raised on the next query in that case.
|
45
|
-
|
46
|
-
* The results of the changed_columns method are now cached in many
|
47
|
-
places internally where they are called in a loop. This results
|
48
|
-
in better performance, especially if the modification_detection or
|
49
|
-
serialization_modification_detection plugins are used.
|
50
|
-
|
51
|
-
= Backwards Compatibility
|
52
|
-
|
53
|
-
* The pg_interval extension now sets a :ruby_default schema entry for
|
54
|
-
recognized interval defaults to the same value Sequel would return
|
55
|
-
if the default value was returned. Previously, Sequel would use a
|
56
|
-
string in the :ruby_schema schema value.
|
57
|
-
|
58
|
-
* String values in hashes returned by Database#schema are now frozen
|
59
|
-
to prevent possible thread-safety issues and issues with
|
60
|
-
unintentional modification of a shared string. The hashes
|
61
|
-
themselves are not frozen and can still be modified.
|
@@ -1,78 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* A pg_multirange extension has been added with support for PostgreSQL
|
4
|
-
14+ multirange types. Multirange types are similar to an array of
|
5
|
-
ranges, where a value is in the multirange if it is in any of the
|
6
|
-
ranges contained in the multirange. Multiranges are useful when you
|
7
|
-
need to check against multiple ranges that do not overlap.
|
8
|
-
|
9
|
-
You can create multiranges using Sequel.pg_multirange, passing
|
10
|
-
an array of ranges and a multirange type:
|
11
|
-
|
12
|
-
DB.extension :pg_multirange
|
13
|
-
multirange = Sequel.pg_multirange(array_of_date_ranges, :datemultirange)
|
14
|
-
|
15
|
-
Sequel.pg_multirange returns a PGMultiRange, which operates as a
|
16
|
-
delegate to an array of PGRange objects. Behavior of the object
|
17
|
-
is similar to an array, except that cover? is supported, which will
|
18
|
-
test if any of the included ranges covers the argument:
|
19
|
-
|
20
|
-
multirange.cover?(Date.today)
|
21
|
-
|
22
|
-
Like the pg_range extension, this also supports registering custom
|
23
|
-
multirange types, and using multirange types as bound variables.
|
24
|
-
|
25
|
-
The pg_range_ops extension now supports both ranges and multiranges,
|
26
|
-
with a few new methods added to Postgres::RangeOp for converting
|
27
|
-
between them:
|
28
|
-
|
29
|
-
* range_merge
|
30
|
-
* multirange
|
31
|
-
* and unnest
|
32
|
-
|
33
|
-
* An sql_log_normalizer extension has been added for normalizing
|
34
|
-
logged SQL, replacing numbers and strings inside the SQL string
|
35
|
-
with question marks. This is useful for analytics and sensitive
|
36
|
-
data.
|
37
|
-
|
38
|
-
DB[:table].first(a: 1, b: 'something')
|
39
|
-
# Without sql_log_normalizer extension, logged SQL is:
|
40
|
-
# SELECT * FROM "table" WHERE (("a" = 1) AND ("b" = 'something')) LIMIT 1
|
41
|
-
|
42
|
-
DB.extension :sql_log_normalizer
|
43
|
-
DB[:table].first(a: 1, b: 'something')
|
44
|
-
# With sql_log_normalizer_extension, logged SQL is:
|
45
|
-
# SELECT * FROM "table" WHERE (("a" = ?) AND ("b" = ?)) LIMIT ?
|
46
|
-
|
47
|
-
This extension scans the logged SQL for numbers and strings,
|
48
|
-
attempting to support the database's rules for string quoting. This
|
49
|
-
means it should work with SQL that Sequel didn't itself create.
|
50
|
-
However, there are corner cases that the extension doesn't handle,
|
51
|
-
such as the use of apostrophes inside quoted identifiers, and
|
52
|
-
potentially other cases of database specific SQL where the normal
|
53
|
-
string quoting rules are changed, such as the use of escape strings
|
54
|
-
on PostgreSQL (E'escape string').
|
55
|
-
|
56
|
-
* A :before_preconnect Database option has been added. This is useful
|
57
|
-
for configuring extensions added via :preconnect_extensions before
|
58
|
-
the connection takes place.
|
59
|
-
|
60
|
-
= Other Improvements
|
61
|
-
|
62
|
-
* Dataset#columns! now uses a LIMIT 0 query instead of a LIMIT 1 query
|
63
|
-
by default. This can improve performance in cases where the row
|
64
|
-
returned would be large. Some databases do not support a LIMIT 0
|
65
|
-
query, and some adapters that ship with Sequel have been updated to
|
66
|
-
continue using LIMIT 1. Custom adapters should be updated to use
|
67
|
-
LIMIT 1 if the database does not support LIMIT 0.
|
68
|
-
|
69
|
-
* The lazy_attributes plugin no longer modifies the database schema.
|
70
|
-
Previously, it could modify the database schema indirectly,
|
71
|
-
resulting in the loss of typecasting for models that were not
|
72
|
-
based on a single table or view, such as usage with the
|
73
|
-
class_table_inheritance plugin.
|
74
|
-
|
75
|
-
* Model#freeze in the composition, serialization, and
|
76
|
-
serialization_modification_detection plugins now returns self. In
|
77
|
-
addition to being more correct, this fixes usage of these plugins
|
78
|
-
with the static_cache plugin.
|
@@ -1,47 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* On PostgreSQL 14+, Dataset#with_recursive now supports :search and
|
4
|
-
:cycle options for result ordering and cycle detection. These use
|
5
|
-
the SEARCH and CYCLE clauses added in PostgreSQL 14:
|
6
|
-
|
7
|
-
DB[:t].with_recursive(:t,
|
8
|
-
DB[:i1].where(parent_id: nil),
|
9
|
-
DB[:i1].join(:t, id: :parent_id).select_all(:i1),
|
10
|
-
search: {by: :id, type: :breadth},
|
11
|
-
cycle: {columns: :id, cycle_value: 1, noncycle_value: 2})
|
12
|
-
|
13
|
-
# WITH RECURSIVE t AS (
|
14
|
-
# SELECT * FROM i1 WHERE (parent_id IS NULL)
|
15
|
-
# UNION ALL
|
16
|
-
# (SELECT i1.* FROM i1 INNER JOIN t ON (t.id = i1.parent_id))
|
17
|
-
# )
|
18
|
-
# SEARCH BREADTH FIRST BY id SET ordercol
|
19
|
-
# CYCLE id SET is_cycle TO 1 DEFAULT 2 USING path
|
20
|
-
|
21
|
-
* On MySQL, column schema hashes now contain an :extra entry, which
|
22
|
-
contains the Extra string returned in MySQL's DESCRIBE results
|
23
|
-
for the column.
|
24
|
-
|
25
|
-
= Other Improvements
|
26
|
-
|
27
|
-
* When eager loading via the tactical_eager_loading plugin, objects
|
28
|
-
that already have an association loaded will not have it reloaded
|
29
|
-
unless the :eager_reload option is given.
|
30
|
-
|
31
|
-
* When cloning an association and using a different :class option
|
32
|
-
than the cloned association, the :class option given when cloning
|
33
|
-
will now take precedence over the :class option for the cloned
|
34
|
-
association.
|
35
|
-
|
36
|
-
* When using the mock postgres adapter, the adapter defaults to
|
37
|
-
supporting PostgreSQL 14 (previously, it defaulted to supporting
|
38
|
-
PostgreSQL 9.5).
|
39
|
-
|
40
|
-
* Sequel now avoids a method redefined warning in the lazy attributes
|
41
|
-
plugin in verbose warnings mode.
|
42
|
-
|
43
|
-
= Other
|
44
|
-
|
45
|
-
* Sequel's primary discussion forum is now GitHub Discussions. The
|
46
|
-
sequel-talk Google Group is still available for users who would
|
47
|
-
prefer to use that instead.
|
@@ -1,87 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* When the sql_comments Database extension is used,
|
4
|
-
Database#with_comments is now added, which can be used for including
|
5
|
-
comments for all queries executed inside a given block. This can
|
6
|
-
be useful if you want to analyze database query logs, and want to
|
7
|
-
group all related queries:
|
8
|
-
|
9
|
-
DB.with_comments(model: Album, action: :all) do
|
10
|
-
DB[:albums].all
|
11
|
-
# SELECT * FROM albums -- model:Album,action:all
|
12
|
-
end
|
13
|
-
|
14
|
-
* An sql_comments plugin has been added, which will automatically
|
15
|
-
add SQL comments for all queries generated by model class, instance
|
16
|
-
and dataset methods:
|
17
|
-
|
18
|
-
Album.plugin :sql_comments
|
19
|
-
|
20
|
-
album = Album[1]
|
21
|
-
# SELECT * FROM albums WHERE (id = 1) LIMIT 1
|
22
|
-
# -- model:Album,method_type:class,method:[]
|
23
|
-
|
24
|
-
album.update(:name=>'A')
|
25
|
-
# UPDATE albums SET name = 'baz' WHERE (id = 1)
|
26
|
-
# -- model:Album,method_type:instance,method:update
|
27
|
-
|
28
|
-
Album.where(id: 1).delete
|
29
|
-
# DELETE FROM albums WHERE (id = 1)
|
30
|
-
# -- model:Album,method_type:dataset,method:delete
|
31
|
-
|
32
|
-
This plugin requires you have loaded the sql_comments Database
|
33
|
-
extension into the related Database before use.
|
34
|
-
|
35
|
-
* A date_parse_input_handler extension has been added to support
|
36
|
-
custom handling of input to date parsing methods. Among other
|
37
|
-
things, you can use this to limit the length of strings that
|
38
|
-
will be parsed, which can prevent ArgumentErrors in newer Ruby
|
39
|
-
versions:
|
40
|
-
|
41
|
-
Sequel.extension :date_parse_input_handler
|
42
|
-
Sequel.date_parse_input_handler do |string|
|
43
|
-
string.b[0, 128]
|
44
|
-
end
|
45
|
-
|
46
|
-
= Other Improvements
|
47
|
-
|
48
|
-
* On Ruby 3.1, the core_refinements extension now avoids the
|
49
|
-
deprecated Refinement#include, switching to
|
50
|
-
Refinement#import_methods.
|
51
|
-
|
52
|
-
* On Ruby 3.1, the subclasses plugin will use Ruby's native support
|
53
|
-
for Class#subclasses.
|
54
|
-
|
55
|
-
* The subclasses plugin has renamed descendents to descendants and
|
56
|
-
freeze_descendents to freeze_descendants. The previous method
|
57
|
-
names are still available as aliases.
|
58
|
-
|
59
|
-
* The :ruby_default schema entry for datetime/timestamp columns now
|
60
|
-
respects Sequel.datetime_class. Previously, the value for the
|
61
|
-
:ruby_default schema entry would always be a DateTime value for
|
62
|
-
such columns.
|
63
|
-
|
64
|
-
* The pg_interval extension now works with ActiveSupport 7.0.
|
65
|
-
|
66
|
-
* The shared postgres adapter now respects
|
67
|
-
Database#default_string_column_size for setting the size of string
|
68
|
-
columns that don't use text as the database type.
|
69
|
-
|
70
|
-
* Database#supports_check_constraints? now returns true on MySQL
|
71
|
-
8.0.19+. This fixes drop_constraint in certain cases when combining
|
72
|
-
the constraint dropping with other changes in the same alter_table
|
73
|
-
block.
|
74
|
-
|
75
|
-
* The mysql adapter now supports the ruby-mysql 3 API (ruby-mysql
|
76
|
-
is a pure-ruby MySQL driver).
|
77
|
-
|
78
|
-
* The mysql adapter no longer uses the connection's server_version
|
79
|
-
method if it is defined, as the method does not return the
|
80
|
-
correct value when using the ruby-mysql driver with MariaDB.
|
81
|
-
|
82
|
-
* Comments added by the sql_comments extension no longer modify
|
83
|
-
cached SQL for a dataset.
|
84
|
-
|
85
|
-
= Other
|
86
|
-
|
87
|
-
* This is Sequel's 250th release!
|
@@ -1,23 +0,0 @@
|
|
1
|
-
= Improvements
|
2
|
-
|
3
|
-
* The jdbc/h2 subadapter now supports H2 version 2.0. It continues to
|
4
|
-
support H2 versions 1.3 and 1.4.
|
5
|
-
|
6
|
-
* The mysql2 adapter's prepared statement support now reuses existing
|
7
|
-
native prepared statements, instead of only binding variables on
|
8
|
-
newly prepared statements. This was the intended behavior
|
9
|
-
previously, and should result in increased performance in cases
|
10
|
-
where preparing a query takes significant time.
|
11
|
-
|
12
|
-
* The subclasses plugin now ignores an existing Class#subclasses
|
13
|
-
method if it is defined in Ruby. This fixes cases where usage of
|
14
|
-
ActiveSupport would break the subclasses plugin.
|
15
|
-
|
16
|
-
* Database#call_sproc in the jdbc adapter will now always close the
|
17
|
-
prepared call it creates. Before, if there was an exception raised
|
18
|
-
when setting the arguments for the prepared call, the prepared call
|
19
|
-
would not be closed.
|
20
|
-
|
21
|
-
* A more appropriate error is now issued if you try to use the
|
22
|
-
column_encryption plugin to encrypt a column without setting up an
|
23
|
-
encryption key.
|
@@ -1,27 +0,0 @@
|
|
1
|
-
= New Feature
|
2
|
-
|
3
|
-
* An enum plugin has been added. This plugin allows you to create
|
4
|
-
model-level enums, giving names to underlying values of a column.
|
5
|
-
For example:
|
6
|
-
|
7
|
-
Album.plugin :enum
|
8
|
-
Album.enum :status_id, good: 1, bad: 2
|
9
|
-
|
10
|
-
Adds Album#good! and Album#bad! for changing the status_id to 1 or
|
11
|
-
2 respectively. It adds Album#good? and Album#bad? for checking
|
12
|
-
whether the status_id is 1 or 2 respectively. It overrides
|
13
|
-
Album#status_id to return :good or :bad instead of 1 or 2,
|
14
|
-
respectively, and overrides Album#status_id= to accept :good or
|
15
|
-
:bad instead of 1 or 2 respectively.
|
16
|
-
|
17
|
-
Additionally, it adds good and bad dataset methods for filtering
|
18
|
-
the model's dataset to records where status_id is 1 or 2
|
19
|
-
respectively. It also adds not_good and not_bad dataset methods
|
20
|
-
for filtering the model's dataset to records where status_id is not
|
21
|
-
1 or not 2 respectively.
|
22
|
-
|
23
|
-
You can use :prefix and :suffix options when calling enum to
|
24
|
-
add a prefix or suffix to the method names created. You can
|
25
|
-
set the :override_accessors option to false to not override
|
26
|
-
the accessor methods for the column, and set the :dataset_methods
|
27
|
-
option to false to not add dataset methods.
|
@@ -1,21 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* An auto_restrict_eager_graph plugin has been added for automatically
|
4
|
-
disallowing the use of eager_graph with associations using blocks but
|
5
|
-
lacking graph_* options. This can prevent potentionally invalid usage,
|
6
|
-
as the restrictions added by the block are not used by eager_graph.
|
7
|
-
|
8
|
-
* The sqlite adapter now supports the :setup_regexp_function
|
9
|
-
Database option. This option will define a REGEXP function in the
|
10
|
-
database that will allow regexp support in queries, such as:
|
11
|
-
|
12
|
-
DB[:table].where(column: /(some|pattern)/)
|
13
|
-
|
14
|
-
Note that this creates a Ruby Regexp object per column value tested,
|
15
|
-
so it isn't the most optimal approach.
|
16
|
-
|
17
|
-
= Other Improvements
|
18
|
-
|
19
|
-
* Calling dataset aggregate methods such as #max on a model dataset now
|
20
|
-
works correctly. Previously, it could fail if called enough times to
|
21
|
-
optimize using a placeholder literalizer.
|
@@ -1,51 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* On SQLite, Database#create_table now supports a :strict option to
|
4
|
-
use the STRICT keyword when creating the table. When this option
|
5
|
-
is used, SQLite will enforce the types for each column. When using
|
6
|
-
this option, you are limited to using the following column types:
|
7
|
-
int, integer, real, text, blob, and any (any allows for dynamic
|
8
|
-
types).
|
9
|
-
|
10
|
-
* An sqlite_json_ops extension has been added, providing DSL support
|
11
|
-
for JSON functions and operators supported in SQLite 3.38.0. Usage
|
12
|
-
is similar to the pg_json_ops extension. First, you create an
|
13
|
-
appropriate object:
|
14
|
-
|
15
|
-
j = Sequel.sqlite_json_op(:json_column)
|
16
|
-
# or:
|
17
|
-
j = Sequel[:json_column].sqlite_json_op
|
18
|
-
|
19
|
-
Then, you call methods on that object to create expressions for the
|
20
|
-
JSON functions and operators:
|
21
|
-
|
22
|
-
j[1] # (json_column ->> 1)
|
23
|
-
j.get_text(1) # (json_column -> 1)
|
24
|
-
j.extract('$.a') # json_extract(json_column, '$.a')
|
25
|
-
|
26
|
-
j.array_length # json_array_length(json_column)
|
27
|
-
j.type # json_type(json_column)
|
28
|
-
j.valid # json_valid(json_column)
|
29
|
-
j.json # json(json_column)
|
30
|
-
|
31
|
-
j.insert('$.a', 1) # json_insert(json_column, '$.a', 1)
|
32
|
-
j.set('$.a', 1) # json_set(json_column, '$.a', 1)
|
33
|
-
j.replace('$.a', 1) # json_replace(json_column, '$.a', 1)
|
34
|
-
j.remove('$.a') # json_remove(json_column, '$.a')
|
35
|
-
j.patch('{"a":2}') # json_patch(json_column, '{"a":2}')
|
36
|
-
|
37
|
-
j.each # json_each(json_column)
|
38
|
-
j.tree # json_tree(json_column)
|
39
|
-
|
40
|
-
= Other Improvements
|
41
|
-
|
42
|
-
* The alter_table add_column and add_foreign_key methods now support
|
43
|
-
the :index option to create an index on the added column, for
|
44
|
-
compatibility with the :index option on the create_table column and
|
45
|
-
foreign_key methods.
|
46
|
-
|
47
|
-
* The schema_dumper extension now treats the "INTEGER" type the same
|
48
|
-
as the "integer" type. This fixes some behavior when using SQLite
|
49
|
-
3.37.0+.
|
50
|
-
|
51
|
-
* Sequel's website has a much improved visual design.
|
@@ -1,23 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* An is_distinct_from extension has been added with support for the
|
4
|
-
SQL IS DISTINCT FROM operator. This operator is similar to the
|
5
|
-
not equals operator, except in terms of NULL handling. It returns
|
6
|
-
true if only one side is NULL, and false if both sides are NULL.
|
7
|
-
You can call is_distinct_from on Sequel itself or on Sequel objects:
|
8
|
-
|
9
|
-
Sequel.is_distinct_from(:column_a, :column_b)
|
10
|
-
Sequel[:column_a].is_distinct_from(:column_b)
|
11
|
-
# (column_a IS DISTINCT FROM column_b)
|
12
|
-
|
13
|
-
On databases not supporting IS DISTINCT FROM, support is emulated
|
14
|
-
using a CASE statement.
|
15
|
-
|
16
|
-
* Column definitions on MySQL can use the :on_update_current_timestamp
|
17
|
-
option for ON UPDATE CURRENT_TIMESTAMP, which creates a column that
|
18
|
-
will automatically have its value set to CURRENT_TIMESTAMP on every
|
19
|
-
update.
|
20
|
-
|
21
|
-
* Database#create_function on PostgreSQL now supports a :parallel
|
22
|
-
option to set the thread safety of the funciton. The value should
|
23
|
-
be :safe, :unsafe, or :restricted.
|
@@ -1,31 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* Dataset#merge and related #merge_* methods have been added for the
|
4
|
-
MERGE statement. MERGE is supported on PostgreSQL 15+, Oracle,
|
5
|
-
Microsoft SQL Server, DB2, H2, HSQLDB, and Derby. You can use MERGE
|
6
|
-
to insert, update, and/or delete in a single query. You call
|
7
|
-
the #merge_* methods to setup the MERGE statement, and #merge to
|
8
|
-
execute it on the database:
|
9
|
-
|
10
|
-
ds = DB[:m1]
|
11
|
-
merge_using(:m2, i1: :i2).
|
12
|
-
merge_insert(i1: :i2, a: Sequel[:b]+11).
|
13
|
-
merge_delete{a > 30}.
|
14
|
-
merge_update(i1: Sequel[:i1]+:i2+10, a: Sequel[:a]+:b+20)
|
15
|
-
|
16
|
-
ds.merge
|
17
|
-
# MERGE INTO m1 USING m2 ON (i1 = i2)
|
18
|
-
# WHEN NOT MATCHED THEN INSERT (i1, a) VALUES (i2, (b + 11))
|
19
|
-
# WHEN MATCHED AND (a > 30) THEN DELETE
|
20
|
-
# WHEN MATCHED THEN UPDATE SET i1 = (i1 + i2 + 10), a = (a + b + 20)
|
21
|
-
|
22
|
-
On PostgreSQL, the following additional MERGE related methods are
|
23
|
-
available:
|
24
|
-
|
25
|
-
* #merge_do_nothing_when_matched
|
26
|
-
* #merge_do_nothing_when_not_matched
|
27
|
-
|
28
|
-
* A :disable_split_materialized Database option is now supported on
|
29
|
-
MySQL. This disables split_materialized support in the optimizer,
|
30
|
-
working around a bug in MariaDB 10.5+ that causes failures in
|
31
|
-
Sequel's association tests.
|
@@ -1,73 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* A require_valid_schema plugin has been added, for checking that
|
4
|
-
model classes have schema parsed as expected. By default, model
|
5
|
-
classes are not required to have valid schema, because it is
|
6
|
-
allowed to have model classes based on arbitrary datasets (such
|
7
|
-
as those using joins or set-returning functions), and it is not
|
8
|
-
possible to determine the schema for arbitary datasets.
|
9
|
-
|
10
|
-
Sequel swallows non-connection errors when trying to parse schema
|
11
|
-
for a model's dataset, but if schema parsing fails when you would
|
12
|
-
expect it to succeed, it results in a model where typecasting does
|
13
|
-
not work as expected.
|
14
|
-
|
15
|
-
The require_valid_schema plugin will raise an error when setting
|
16
|
-
the dataset for a model if schema parsing fails and the dataset
|
17
|
-
uses a simple table where you would expect schema parsing to
|
18
|
-
succeed. You can also provide an argument of :warn when loading
|
19
|
-
the plugin, to warn instead of raising an error.
|
20
|
-
|
21
|
-
This plugin may not work correctly in all cases for all adapters,
|
22
|
-
especially external adapters. Adapters are not required to support
|
23
|
-
schema parsing. Even if supported, adapters may not support
|
24
|
-
parsing schema for qualified tables, or parsing schema for views.
|
25
|
-
You should consider this plugin as a possible safety net. Users
|
26
|
-
are encouraged to try using it and report any unexpected breakage,
|
27
|
-
as that may help improve schema parsing in adapters that Sequel
|
28
|
-
ships.
|
29
|
-
|
30
|
-
* is_json and is_not_json methods have been added to the pg_json_ops
|
31
|
-
extension, for the IS [NOT] JSON operator supported in PostgreSQL
|
32
|
-
15+.
|
33
|
-
|
34
|
-
* Index creation methods on PostgreSQL 15+ now support a
|
35
|
-
:nulls_distinct option, for NULLS [NOT] DISTINCT. This allows you
|
36
|
-
to create unique indexes where NULL values are not considered
|
37
|
-
distinct.
|
38
|
-
|
39
|
-
* View creation methods on PostgreSQL 15+ now support a
|
40
|
-
:security_invoker option to create a view where access is
|
41
|
-
determined by the permissions of the role that is accessing the
|
42
|
-
view, instead of the role that created the view.
|
43
|
-
|
44
|
-
= Other Improvements
|
45
|
-
|
46
|
-
* The :allow_eager association option is now set to false by default
|
47
|
-
for associations explicitly marked as :instance_specific, if the
|
48
|
-
:eager_loader association is not given.
|
49
|
-
|
50
|
-
* The postgres adapter now supports the sequel-postgres-pr driver.
|
51
|
-
The sequel-postgres-pr driver is a slimmed down fork of the
|
52
|
-
postgres-pr driver designed specifically for use by Sequel.
|
53
|
-
|
54
|
-
* Model code that explicitly does not swallow connection errors
|
55
|
-
will also now not swallow disconnect errors. This can fix issues
|
56
|
-
where model classes are being loaded at runtime, and the query to
|
57
|
-
get the columns/schema for the model uses a connection that has
|
58
|
-
been disconnected.
|
59
|
-
|
60
|
-
* Model classes created from aliased expressions and literal
|
61
|
-
strings no longer use the simple_table optimization, as there
|
62
|
-
are cases where doing so is not safe.
|
63
|
-
|
64
|
-
= Backwards Compatibility
|
65
|
-
|
66
|
-
* The change to not swallow disconnect errors when not swallowing
|
67
|
-
connection errors can result in exceptions being raised which
|
68
|
-
weren't raised previously. In most cases, this will alert you
|
69
|
-
to issues in your application that should be fixed, but it
|
70
|
-
potentially it can result in regressions if you were OK with
|
71
|
-
the errors being swallowed. If this does result in regressions
|
72
|
-
in your application, please file an issue and we can probably
|
73
|
-
add a setting controlling this feature.
|