ANN: Sequel 3.25.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.25.0 has been released and should be available on the gem
mirrors.

= New Features

  • drop_table, drop_view, drop_column, and drop_constraint all now
    support a :cascade option for using CASCADE.

    DB.drop_table(:tab, :cascade=>true)

    DROP TABLE tab CASCADE

    DB.drop_column(:tab, :col, :cascade=>true)

    ALTER TABLE tab DROP COLUMN col CASCADE

    A few databases support CASCADE for dropping tables and views,
    but only PostgreSQL appears to support it for columns and
    constraints. Using the :cascade option when the underlying
    database doesn’t support it will probably result in a
    DatabaseError being raised.

  • You can now use datasets as expressions, allowing things such as:

    DB[:table1].select(:column1) > DB[:table2].select(:column2)

    (SELECT column1 FROM table1) > (SELECT column2 FROM table2)

    DB[:table1].select(:column1).cast(Integer)

    CAST((SELECT column1 FROM table1) AS integer)

  • Dataset#select_group has been added for grouping and selecting on
    the same columns.

    DB[:a].select_group(:b, :c)

    SELECT b, c FROM a GROUP BY b, c

  • Dataset#exclude_where and #exclude_having methods have been added,
    allowing you to specify which clause to affect. #exclude’s
    behavior is still to add to the HAVING clause if one is present,
    and use the WHERE clause otherwise.

  • Dataset#select_all now accepts optional arguments and will select
    all columns from those arguments if present:

    DB[:a].select_all(:a)

    SELECT a.* FROM a

    DB.from(:a, :b).select_all(:a, :b)

    SELECT a., b. FROM a, b

  • Dataset#group and #group_and_count now both accept virtual row
    blocks:

    DB[:a].select(:b).group{c(d)}

    SELECT b FROM a GROUP BY c(d)

  • If you use a LiteralString as a validation error message,
    Errors#full_messages will now not add the related column name to
    the start of the error message.

  • Model.set_dataset now accepts SQL::Identifier,
    SQL::QualifiedIdentifier, and SQL::AliasedExpression instances,
    treating them like Symbols.

= Other Improvements

  • The association_pks plugin’s setter method will now automatically
    convert a given array of strings to an array of integers if the
    primary key field is an integer field, which should make it easier
    to use in web applications.

  • nil bound variable, prepared statement, and stored procedure
    arguments are now handled correctly in the JDBC adapter.

  • On 1.9, you can now load plugins even when ::ClassMethods,
    ::InstanceMethods, or ::DatasetMethods is defined.

= Backwards Compatibility

  • The tinytds adapter now only works with tiny_tds 0.4.5 and greater.
    Also, if you were using the tinytds adapter with FreeTDS 0.91rc1,
    you need to upgrade to FreeTDS 0.91rc2 for it to work. Also, if
    you were referencing an entry in the freetds.conf file, you now
    need to specify it directly using the :dataserver option when
    connecting, the adapter no longer copies the :host option to the
    :dataserver option.

  • On postgresql, Sequel now no longer drops tables with CASCADE by
    default. You now have to use the :cascade option to drop_table if
    you want to use CASCADE.

  • The Database#drop_table_sql private method now takes an additional
    options hash argument.

Thanks,
Jeremy