ANN: Sequel 3.30.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, IBM_DB, Informix, JDBC, MySQL, Mysql2, ODBC,
    OpenBase, Oracle, PostgreSQL, SQLite3, Swift, and TinyTDS.

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

= Dataset Literalization Refactoring

  • As warned about in the 3.29.0 release notes, dataset literalization
    has been completely refactored. It now uses an append-only design
    which is faster in all cases, about twice as fast for large objects
    and deeply nested structures, and over two orders of magnitude
    faster in some pathological cases.

    This change should not affect applications, but may affect custom
    extensions or adapters that dealt with literalization of objects.
    Most literalization methods now have a method with an _append
    suffix that does the actual literalization, which takes the sql
    string to append to as the first argument. If you were overriding
    a literalization method, you now probably need to override the
    _append version instead. If you have this literalization method:

    def foo_sql(bar)
    “BAR #{literal(bar.baz)}”
    end

    You need to change the code to:

    def foo_sql_append(sql, bar)
    sql << "BAR "
    literal_append(sql, bar.baz)
    end

    def foo_sql(bar)
    sql = “”
    foo_sql_append(sql, bar)
    sql
    end

    If you have questions about modifying your custom adapter or
    extension, please ask on the Google Group or the IRC channel.

= New Features

  • Model#set_server has been added to the base support (it was
    previously only in the sharding plugin), which allows you to
    set the shard on which to save/delete the model instance:

    foo1.set_server(:server_a).save
    foo2.set_server(:server_a).destroy

  • Model#save now accepts a :server option that uses set_server
    to set the shard to use. Unlike most other #save options, this
    option persists past the end of the save. Previously, the
    :server option only affected the transaction code, it now
    affects the INSERT/UPDATE statement as well.

  • When initiating a new dataset graph, any existing selected
    columns is assumed to be the columns to select for the graph from
    the current/master table. Before, there was not a way to specify
    the columns to select from the current/master table.

  • A :graph_alias_base association option has been added, which is
    used to set the base alias name to use when eager graphing. This
    is mostly useful when cascading eager graphs to dependent
    associations, where multiple associations with the same name in
    different models are being graphed simultaneously.

  • You can now specify nanoseconds and a timezone offset
    when converting a hash or array to a timestamp. The nanoseconds
    and offset are the 7th and 8th entries in the array, and the :nanos
    and :offset entry in the hash.

  • The postgres adapter now respects a :connect_timeout option if you
    are using the pg driver.

= Other Improvements

  • Type conversion of Java to Ruby types in the JDBC adapter has been
    made much faster, as conversion method lookup is now
    O(number of columns) instead of
    O(number of columns*number of rows).

  • Sequel::SQL::Blob literalization is now much faster on adapters that
    use hex encoding, by switching to String#unpack(‘H*’).

  • Database#after_commit and after_rollback now respect the :server
    option to set the server/shard to use.

  • Symbol splitting (e.g. for table__column) is now slightly faster.

  • All adapters now pass the dataset :limit/:offset value through
    Dataset#literal instead of using it verbatim. Note that
    Dataset#limit already called to_i on input strings, so this isn’t
    a security issue. However, the previous code broke if you
    provided a Sequel-specific object (e.g. Sequel::SQL::Function) as
    the :limit/:offset value.

  • Calling graph and eager_graph on an already graphed dataset no
    longer modifies the receiver.

  • Model#set_server now correctly handles the case where @this is
    already loaded.

  • Dataset#destroy for model datasets now uses the dataset’s shard
    for transactions.

  • When emulating offset support using ROW_NUMBER (on Microsoft SQL
    Server, DB2, and Oracle), explicitly order by the ROW_NUMBER
    result, as otherwise the results are not guaranteed to be ordered.

  • Explicitly force a case insensitive collation when emulating ILIKE
    on Microsoft SQL Server. Previously, ILIKE could be case sensitive
    on Microsoft SQL Server if case sensitive collation was the
    database default.

  • Using on_duplicate_key_update with prepared statements on MySQL now
    works correctly.

  • The tinytds adapter now works correctly if the
    identifier_output_method is nil.

  • The plugin/extension specs were cleaned up using the mock adapter.

= Backwards Compatibility

  • In addition to the previously mentioned dataset literalization
    changes, any custom adapters that overrode *_clause_methods
    methods need to be modified to add a method that adds the
    SELECT/UPDATE/INSERT/DELETE. Previously, this was done by default,
    but due to common table expressions and the dataset literalization
    changes, a separate method is now needed.

  • Dataset#on_duplicate_key_update_sql has been removed from the shared
    mysql adapter.

  • The :columns dataset option used when inserting is no longer
    literalized in advance.

  • Dataset#as_sql no longer takes an expression, it just takes the
    alias, and only adds the alias part.

Thanks,
Jeremy

-----Messaggio originale-----
Da: Jeremy E. [mailto:[email protected]]
Inviato: gioved 1 dicembre 2011 19:36
A: ruby-talk ML
Oggetto: ANN: Sequel 3.30.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, IBM_DB, Informix, JDBC, MySQL, Mysql2, ODBC,
    OpenBase, Oracle, PostgreSQL, SQLite3, Swift, and TinyTDS.

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

= Dataset Literalization Refactoring

  • As warned about in the 3.29.0 release notes, dataset literalization
    has been completely refactored. It now uses an append-only design
    which is faster in all cases, about twice as fast for large objects
    and deeply nested structures, and over two orders of magnitude
    faster in some pathological cases.

    This change should not affect applications, but may affect custom
    extensions or adapters that dealt with literalization of objects.
    Most literalization methods now have a method with an _append
    suffix that does the actual literalization, which takes the sql
    string to append to as the first argument. If you were overriding
    a literalization method, you now probably need to override the
    _append version instead. If you have this literalization method:

    def foo_sql(bar)
    “BAR #{literal(bar.baz)}”
    end

    You need to change the code to:

    def foo_sql_append(sql, bar)
    sql << "BAR "
    literal_append(sql, bar.baz)
    end

    def foo_sql(bar)
    sql = “”
    foo_sql_append(sql, bar)
    sql
    end

    If you have questions about modifying your custom adapter or
    extension, please ask on the Google Group or the IRC channel.

= New Features

  • Model#set_server has been added to the base support (it was
    previously only in the sharding plugin), which allows you to
    set the shard on which to save/delete the model instance:

    foo1.set_server(:server_a).save
    foo2.set_server(:server_a).destroy

  • Model#save now accepts a :server option that uses set_server
    to set the shard to use. Unlike most other #save options, this
    option persists past the end of the save. Previously, the
    :server option only affected the transaction code, it now
    affects the INSERT/UPDATE statement as well.

  • When initiating a new dataset graph, any existing selected
    columns is assumed to be the columns to select for the graph from
    the current/master table. Before, there was not a way to specify
    the columns to select from the current/master table.

  • A :graph_alias_base association option has been added, which is
    used to set the base alias name to use when eager graphing. This
    is mostly useful when cascading eager graphs to dependent
    associations, where multiple associations with the same name in
    different models are being graphed simultaneously.

  • You can now specify nanoseconds and a timezone offset
    when converting a hash or array to a timestamp. The nanoseconds
    and offset are the 7th and 8th entries in the array, and the :nanos
    and :offset entry in the hash.

  • The postgres adapter now respects a :connect_timeout option if you
    are using the pg driver.

= Other Improvements

  • Type conversion of Java to Ruby types in the JDBC adapter has been
    made much faster, as conversion method lookup is now
    O(number of columns) instead of
    O(number of columns*number of rows).

  • Sequel::SQL::Blob literalization is now much faster on adapters that
    use hex encoding, by switching to String#unpack(‘H*’).

  • Database#after_commit and after_rollback now respect the :server
    option to set the server/shard to use.

  • Symbol splitting (e.g. for table__column) is now slightly faster.

  • All adapters now pass the dataset :limit/:offset value through
    Dataset#literal instead of using it verbatim. Note that
    Dataset#limit already called to_i on input strings, so this isn’t
    a security issue. However, the previous code broke if you
    provided a Sequel-specific object (e.g. Sequel::SQL::Function) as
    the :limit/:offset value.

  • Calling graph and eager_graph on an already graphed dataset no
    longer modifies the receiver.

  • Model#set_server now correctly handles the case where @this is
    already loaded.

  • Dataset#destroy for model datasets now uses the dataset’s shard
    for transactions.

  • When emulating offset support using ROW_NUMBER (on Microsoft SQL
    Server, DB2, and Oracle), explicitly order by the ROW_NUMBER
    result, as otherwise the results are not guaranteed to be ordered.

  • Explicitly force a case insensitive collation when emulating ILIKE
    on Microsoft SQL Server. Previously, ILIKE could be case sensitive
    on Microsoft SQL Server if case sensitive collation was the
    database default.

  • Using on_duplicate_key_update with prepared statements on MySQL now
    works correctly.

  • The tinytds adapter now works correctly if the
    identifier_output_method is nil.

  • The plugin/extension specs were cleaned up using the mock adapter.

= Backwards Compatibility

  • In addition to the previously mentioned dataset literalization
    changes, any custom adapters that overrode *_clause_methods
    methods need to be modified to add a method that adds the
    SELECT/UPDATE/INSERT/DELETE. Previously, this was done by default,
    but due to common table expressions and the dataset literalization
    changes, a separate method is now needed.

  • Dataset#on_duplicate_key_update_sql has been removed from the shared
    mysql adapter.

  • The :columns dataset option used when inserting is no longer
    literalized in advance.

  • Dataset#as_sql no longer takes an expression, it just takes the
    alias, and only adds the alias part.

Thanks,
Jeremy


Posted via http://www.ruby-forum.com/.


Caselle da 1GB, trasmetti allegati fino a 3GB e in piu’ IMAP, POP3 e
SMTP autenticato? GRATIS solo con Email.it http://www.email.it/f

Sponsor:
Riccione Hotel 3 stelle in centro: Pacchetto Capodanno mezza pensione,
animazione bimbi, zona relax, parcheggio. Scopri l’offerta solo per
oggi…
Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid982&d)-12