= New Features * An insert_conflict plugin has been added for automatically handling constraint conflicts when saving new model instances. It is supported on PostgreSQL 9.5+ and SQLite 3.24.0+. Album.new(name: 'Foo', copies_sold: 1000). insert_conflict( target: :name, update: {copies_sold: Sequel[:excluded][:b]} ). save * On Microsoft SQL Server, the Database :ansi option has been added, which sets the following ANSI related options: * ANSI_NULLS * ANSI_PADDING * ANSI_WARNINGS * ANSI_NULL_DFLT_ON * QUOTED_IDENTIFIER * CONCAT_NULL_YIELDS_NULL = Other Improvements * Sequel.datetime_class = Time is now supported when using the named_timezones extension. For backwards compatibility, the named_timezones extension still sets Sequel.datetime_class = DateTime. When using Ruby 2.6+, the Time instances have the timezone set on them using Ruby 2.6+'s timezone support, but basic support works correctly in earlier versions of Ruby. * On Microsoft SQL Server, Sequel now handles parsing schema for tables in another database on the same server or in a database on a linked server. * The pg_json extension now correctly handles subclasses of core classes when wrapping objects. This stopped working in Sequel 5.21.0, when support for wrapping JSON primitives was added. * Sequel now works around a couple bugs in jdbc-sqlite 3.27.2.1, allowing schema parsing and foreign key parsing to work. * Dataset#execute* private methods now respect an explicitly given :server option, fixing Dataset#paged_each in the postgres adapter when using sharding. * Timezone offsets are now handled correctly when typecasting an array or hash to datetime when Sequel.datetime_class = Time. * Sequel now avoids errors when parsing schema when using the mock SQLite adapter. * A minor thread-safety issue has been fixed in the named_timezones extension.