sequel 5.80.0 → 5.92.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/sequel +9 -4
- data/lib/sequel/adapters/ado.rb +1 -1
- data/lib/sequel/adapters/ibmdb.rb +1 -0
- data/lib/sequel/adapters/jdbc/db2.rb +2 -2
- data/lib/sequel/adapters/jdbc/derby.rb +3 -3
- data/lib/sequel/adapters/jdbc/h2.rb +2 -2
- data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -2
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -2
- data/lib/sequel/adapters/jdbc/mysql.rb +1 -1
- data/lib/sequel/adapters/jdbc/oracle.rb +5 -5
- data/lib/sequel/adapters/jdbc/postgresql.rb +5 -5
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +6 -6
- data/lib/sequel/adapters/jdbc/sqlite.rb +2 -2
- data/lib/sequel/adapters/jdbc/sqlserver.rb +2 -2
- data/lib/sequel/adapters/jdbc.rb +8 -8
- data/lib/sequel/adapters/mysql2.rb +8 -1
- data/lib/sequel/adapters/shared/access.rb +1 -0
- data/lib/sequel/adapters/shared/db2.rb +1 -1
- data/lib/sequel/adapters/shared/mssql.rb +18 -5
- data/lib/sequel/adapters/shared/mysql.rb +8 -4
- data/lib/sequel/adapters/shared/oracle.rb +1 -0
- data/lib/sequel/adapters/shared/postgres.rb +106 -13
- data/lib/sequel/adapters/shared/sqlite.rb +4 -2
- data/lib/sequel/adapters/sqlite.rb +4 -0
- data/lib/sequel/adapters/trilogy.rb +1 -2
- data/lib/sequel/connection_pool/sharded_threaded.rb +26 -10
- data/lib/sequel/connection_pool/threaded.rb +26 -10
- data/lib/sequel/connection_pool.rb +2 -2
- data/lib/sequel/core.rb +15 -0
- data/lib/sequel/database/connecting.rb +20 -26
- data/lib/sequel/database/dataset_defaults.rb +3 -3
- data/lib/sequel/database/misc.rb +46 -10
- data/lib/sequel/database/query.rb +11 -11
- data/lib/sequel/database/schema_generator.rb +8 -0
- data/lib/sequel/database/schema_methods.rb +17 -1
- data/lib/sequel/dataset/actions.rb +9 -1
- data/lib/sequel/dataset/deprecated_singleton_class_methods.rb +1 -1
- data/lib/sequel/dataset/prepared_statements.rb +2 -1
- data/lib/sequel/dataset/query.rb +9 -5
- data/lib/sequel/dataset/sql.rb +25 -5
- data/lib/sequel/extensions/caller_logging.rb +2 -0
- data/lib/sequel/extensions/connection_validator.rb +15 -10
- data/lib/sequel/extensions/dataset_run.rb +41 -0
- data/lib/sequel/extensions/migration.rb +23 -3
- data/lib/sequel/extensions/null_dataset.rb +2 -2
- data/lib/sequel/extensions/pg_auto_parameterize.rb +1 -1
- data/lib/sequel/extensions/pg_auto_parameterize_in_array.rb +93 -10
- data/lib/sequel/extensions/pg_enum.rb +3 -3
- data/lib/sequel/extensions/pg_json_ops.rb +642 -9
- data/lib/sequel/extensions/pg_row.rb +3 -1
- data/lib/sequel/extensions/pg_schema_caching.rb +90 -0
- data/lib/sequel/extensions/provenance.rb +2 -0
- data/lib/sequel/extensions/query_blocker.rb +172 -0
- data/lib/sequel/extensions/schema_caching.rb +24 -9
- data/lib/sequel/extensions/schema_dumper.rb +16 -4
- data/lib/sequel/extensions/sqlite_json_ops.rb +1 -1
- data/lib/sequel/extensions/stdio_logger.rb +48 -0
- data/lib/sequel/extensions/string_agg.rb +17 -4
- data/lib/sequel/extensions/temporarily_release_connection.rb +178 -0
- data/lib/sequel/extensions/virtual_row_method_block.rb +1 -0
- data/lib/sequel/model/associations.rb +28 -3
- data/lib/sequel/model/base.rb +67 -18
- data/lib/sequel/plugins/association_pks.rb +1 -1
- data/lib/sequel/plugins/column_encryption.rb +1 -1
- data/lib/sequel/plugins/composition.rb +1 -1
- data/lib/sequel/plugins/defaults_setter.rb +16 -4
- data/lib/sequel/plugins/enum.rb +1 -1
- data/lib/sequel/plugins/forbid_lazy_load.rb +14 -1
- data/lib/sequel/plugins/input_transformer.rb +1 -1
- data/lib/sequel/plugins/inspect_pk.rb +44 -0
- data/lib/sequel/plugins/instance_filters.rb +4 -1
- data/lib/sequel/plugins/inverted_subsets.rb +1 -0
- data/lib/sequel/plugins/lazy_attributes.rb +1 -1
- data/lib/sequel/plugins/nested_attributes.rb +10 -5
- data/lib/sequel/plugins/optimistic_locking.rb +2 -0
- data/lib/sequel/plugins/paged_operations.rb +5 -2
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +6 -1
- data/lib/sequel/plugins/pg_auto_validate_enums.rb +88 -0
- data/lib/sequel/plugins/pg_eager_any_typed_array.rb +95 -0
- data/lib/sequel/plugins/rcte_tree.rb +1 -1
- data/lib/sequel/plugins/serialization.rb +11 -5
- data/lib/sequel/plugins/sql_comments.rb +7 -2
- data/lib/sequel/plugins/static_cache_cache.rb +50 -13
- data/lib/sequel/plugins/subset_conditions.rb +85 -5
- data/lib/sequel/plugins/subset_static_cache.rb +263 -0
- data/lib/sequel/plugins/tactical_eager_loading.rb +6 -2
- data/lib/sequel/plugins/validate_associated.rb +1 -1
- data/lib/sequel/sql.rb +16 -6
- data/lib/sequel/version.rb +1 -1
- metadata +12 -234
- data/CHANGELOG +0 -1355
- 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 -102
- 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 -436
- 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.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 -190
- 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.
|