ANN: Sequel 3.26.0 Released

Sequel is a lightweight database access toolkit for Ruby.

  • Sequel provides thread safety, connection pooling and a concise
    DSL for constructing SQL queries and table schemas.
  • Sequel includes a comprehensive ORM layer for mapping records to
    Ruby objects and handling associated records.
  • Sequel supports advanced database features such as prepared
    statements, bound variables, stored procedures, savepoints,
    two-phase commit, transaction isolation, master/slave
    configurations, and database sharding.
  • Sequel currently has adapters for ADO, Amalgalite, DataObjects,
    DB2, DBI, Firebird, Informix, JDBC, MySQL, Mysql2, ODBC, OpenBase,
    Oracle, PostgreSQL, SQLite3, Swift, and TinyTDS.

Sequel 3.26.0 has been released and should be available on the gem
mirrors.

= Performance Enhancements

  • The internal implementation of eager_graph has been made 75% to
    225% faster than before, with greater benefits to more complex
    graphs.

  • Dataset creation has been made much faster (2.5x on 1.8 and 4.4x on
    1.9), and dataset cloning has been made significantly faster (40%
    on 1.8 and 20% on 1.9).

= Other Improvements

  • Strings passed to setter methods for integer columns are no longer
    considered to be in octal format if they include leading zeroes.
    The previous behavior was never intended, but was a side effect of
    using Kernel#Integer. Strings with leading zeroes are now treated
    as decimal, and you can still use the 0x prefix to treat them as
    hexidecimal. If anyone was relying on the old octal behavior, let
    me know and I’ll add an extension that restores the octal behavior.

  • The identity_map plugin now works with the standard eager loading
    of many_to_many and many_through_many associations.

  • Database#create_table! now only attempts to drop the table if it
    already exists. Previously, it attempted to drop the table
    unconditionally ignoring any errors, which resulted in misleading
    error messages if dropping the table raised an error caused by
    permissions or referential integrity issues.

  • The default connection pool now correctly handles the case where a
    disconnect error is raised and an exception is raised while
    running the disconnection proc.

  • Disconnection errors are now detected when issuing transaction
    statements such as BEGIN/ROLLBACK/COMMIT. Previously, these
    statements did not handle disconnect errors on most adapters.

  • More disconnection errors are now detected. Specifically, the ado
    adapter and do postgres subadapter now handle disconnect errors,
    and the postgres adapter handles more types of disconnect errors.

  • Database#table_exists? now always issues a query to select from the
    table, it no longer attempts to parse the schema to determine the
    information on PostgreSQL and Oracle.

  • Date, DateTime, and Time values are now literalized correctly on
    Microsoft Access.

  • Connecting with the mysql adapter with an options hash now works if
    the :port option is a string, which makes it easier to use when the
    connection information is stored in YAML.

  • The xml_serializer plugin now works around a bug in pure-Java
    nokogiri regarding the handling of nil values.

  • Nicer error messages are now used if there is an attempt to call
    an invalid or restricted setter method.

  • The RDocs are now formatted with hanna-nouveau, which allows for
    section ordering, so the Database and Dataset RDoc pages are
    more friendly.

= Backwards Compatibility

  • If you call a Dataset method such as #each on an eager_graphed
    dataset, you now get plain hashes that have column alias symbol
    keys and their values. Previously, you got a graphed response with
    table alias keys and model values. It’s not wise to depend on the
    behavior, the only supported way of returning records when eager
    loading is to use #all.

  • An error is now raised if you attempt to eager load via
    Dataset#eager a many_to_many association that includes an
    :eager_graph option. Previously, incorrect SQL would have been
    generated and an error raised by the database.

  • Datasets are no longer guaranteed to have @row_proc,
    @indentifier_input_method, and @identifier_output_method defined
    as instance variables. You should be be using methods to access
    them anyway.

  • Database#table_exists? on PostgreSQL no longer accepts an options
    hash. Previously, you could use a :schema option. You must now
    provide the schema inside the table argument (e.g. :schema__table).

  • If you want to use the rdoc tasks in Sequel’s Rakefile, and you are
    still using the hanna RDoc template with RDoc 2.3, you need to
    upgrade to using hanna-nouveau with RDoc 3.8+.

Thanks,
Jeremy