5.89.0.txt

doc/release_notes/5.89.0.txt
Last Update: 2025-02-01 09:09:06 -0800

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.