= New Features * A duplicate_columns_handler extension has been added, for printing a warning or raising an exception if a dataset returns multiple columns with the same name. You can set this globally for the Database: DB.extension :duplicate_columns_handler DB.opts[:on_duplicate_columns] = :warn DB.opts[:on_duplicate_columns] = proc do |columns| columns.include?(:foo) ? :raise : :ignore end or for specific datasets: ds = DB[:table].extension(:duplicate_columns_handler) ds = ds.on_duplicate_columns(:raise) ds = ds.on_duplicate_columns do |columns| columns.include?(:foo) ? :raise : :ignore end This makes it easier to detect when duplicate columns are returned, which in some cases can cause undesired behavior, such as the values for later columns of the same name overwriting values for earlier columns. * The Dataset#to_hash, #to_hash_groups, #select_hash, and #select_hash_groups methods now take an options hash as a third argument. This options hash can now contain a :hash option, which specifies the object in which the resulting values should be placed. You can use this to have the values inserted into a custom hash, or another object responding to #[] and #[]=. * A validators_operator validation has been added to the validation_helpers plugin: class Example < Sequel::Model def validate super validates_operator(:>, 3, :column1) validates_operator(:<=, 4, [:column2, :column3]) end end * The pg_range extension now adds a #register_range_type Database method, supporting per-Database custom range types: DB.register_range_type('timerange') * The dataset_associations plugin now supports a :dataset_associations_join association option on associations that use joined datasets. This option will have the datasets returned by the dataset association methods join to the same tables that would be joined when retriving the associated objects, allowing selected columns, orders, and filters that reference columns in the joined tables to work correctly. * The Database :preconnect option can now be set to :concurrently, which will create the connections in separate threads. This can significantly speed up preconnection in high-latency environments. * The Database :name option is now supported, holding an arbitrary name for the database. Currently, it is only used in PoolTimeout exception messages, but it may be used in other places in the future. = Other Improvements * The prepared_statements_safe plugin now works correctly when using CURRENT_DATE and CURRENT_TIMESTAMP default values for columns. * Sequel now recognizes an addition unique constraint violation on Microsoft SQL Server. * PoolTimeout exception messages now include the server/shard to which the connection was attempted when using the sharded threaded connection pool. = Backwards Compatibility * Users of sequel_pg should upgrade to 1.6.17, as older versions of sequel_pg may not work with Sequel 4.34.0+. * Any custom extensions that override Dataset#to_hash, #to_hash_groups, #select_hash, and #select_hash_groups need to be modified to add support for accepting the options hash.