Skip to content

Commit

Permalink
Bump version to 3.30.0
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremyevans committed Dec 1, 2011
1 parent e6ae6a2 commit baeea31
Show file tree
Hide file tree
Showing 3 changed files with 143 additions and 2 deletions.
8 changes: 7 additions & 1 deletion CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
=== HEAD
=== 3.30.0 (2011-12-01)

* Handle usage of on_duplicate_key_update in MySQL prepared statements (jeremyevans) (#404)

* Make after_commit and after_rollback respect :server option (jeremyevans) (#401)

* Respect :connect_timeout option in the postgres adapter when using pg (glebpom, jeremyevans) (#402)

* Make Dataset#destroy for model datasets respect dataset shard when using a transaction (jeremyevans)

Expand Down
135 changes: 135 additions & 0 deletions doc/release_notes/3.30.0.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
= 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.
2 changes: 1 addition & 1 deletion lib/sequel/version.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module Sequel
MAJOR = 3
# The minor version of Sequel. Bumped for every non-patch level
# release, generally around once a month.
MINOR = 29
MINOR = 30
# The tiny version of Sequel. Usually 0, only bumped for bugfix
# releases that fix regressions from previous versions.
TINY = 0
Expand Down

0 comments on commit baeea31

Please sign in to comment.