5.108.0.txt

doc/release_notes/5.108.0.txt

New Features

  • On PostgreSQL 19+, Dataset#insert_conflict now supports :select and :select_where options for the new INSERT … ON CONFLICT … DO SELECT … RETURNING syntax.

    DB[:table].
      returning(:a).
      insert_conflict(target: :a, select: true).
      insert(a: 1, b: 2)
    # INSERT INTO TABLE (a, b) VALUES (1, 2) ON CONFLICT (a)
    # DO SELECT RETURNING a
    
    DB[:table].returning(:a).for_update.
      insert_conflict(target: :a,
        select: true,
        select_where: {Sequel[:excluded][:b] => 3}).
      insert(a: 1, b: 2)
    # INSERT INTO TABLE (a, b) VALUES (1, 2) ON CONFLICT (a)
    # DO SELECT FOR UPDATE WHERE (excluded.b = 3) RETURNING a
    
  • The pg_array_ops extension now supports the following additional methods for handling the related database functions:

    • ndims

    • position

    • positions

    • prepend

    • sample

    • shuffle

    • trim

  • In the pg_array extension, Postgres::PGArray instances now support cast* methods, making it easier to cast an array of one database type to a different database type.

  • In the migration extention, Sequel::TimestampMigrator now supports an :allow_migration_number option, which can be used to check migration numbers for reasonableness. The value can be a range, proc, or other object supporting ===.

Other Improvements

  • Additional disconnect errors are now recognized in the mysql and mysql2 adapters, specifically handling cases where the MariaDB Connector/C library is used.

Sequel 6 Planning

Backwards Compatibility

  • A couple of typos in method names have been fixed:

    • Dataset#aggreate_dataset_use_from_self? has been renamed to aggregate_dataset_use_from_self?

    • Model#_save_update_changed_colums_hash has been renamed to _save_update_changed_columns_hash

    The old methods with typos will call the new methods, and work with deprecation warnings until Sequel 6. If you have an external extension, adapter, or plugin defining the old method name with the typo, you should switch to using the fixed name.

  • Sequel.require is now deprecated. It was originally added to improve performance back in the Ruby 1.8 era, but since the introduction of require_relative in Ruby 1.9, there has not been a reason to use it.