New Features¶ ↑
-
A query_blocker extension has been added, for blocking queries inside a block:
DB.extension :query_blocker DB[:table].all # works DB.block_queries do DB[:table].all # raises end
To handle concurrency, you can specify a scope for the block:
DB.block_queries(scope: :thread) do # Block queries for current thread end DB.block_queries(scope: :fiber) do # Block queries for current fiber end
In some cases, you may want to block queries in general, and only allow them in specific places. The query blocker extension supports this:
DB.block_queries do # Queries blocked DB.allow_queries do # Queries allowed end # Queries blocked end
-
The alter_table add_primary_key and add_unique_constraint methods now support a :using_index option on PostgreSQL, to add the constraint using an existing index, instead of building a new unique index to enforce the constraint.
-
A :compare_connections_by_identity Database option is now supported, which can be set to false to not use compare_by_identity on hashes keyed by connections. This should only be used to work around bugs in other libraries or ruby implementations.
Other Improvements¶ ↑
-
All anonymous classes and modules created by
Sequel
now have temporary names set when using Ruby 3.3+. This makes debugging and introspection easier. Example:class Foo < Sequel::Model(:foo) def_column_alias :a, :a puts ancestors[0..3] end
Previous and when running on Ruby < 3.3 Output:
Foo #<Module:0x00000846cf717aa0> #<Class:0x00000846cf718040> Sequel::Model
New output when running on Ruby 3.3+:
Foo Foo::@overridable_methods_module Sequel::_Model(:foo) Sequel::Model
-
The connection_validator extension now handles exceptions raised by Database#valid_connection?, which shouldn’t happen, but would result in the thread/fiber being assigned the connection permanently in that case.
-
The mysql2 adapter now handles invalid statement handles when closing prepared statements. This only affected cases where you were changing the definition of already prepared statement.