Permalink
Browse files

Bump version to 3.30.0

  • Loading branch information...
1 parent e6ae6a2 commit baeea314c00d4ce846da43a9612cfb5fa40436ef @jeremyevans committed Dec 1, 2011
Showing with 143 additions and 2 deletions.
  1. +7 −1 CHANGELOG
  2. +135 −0 doc/release_notes/3.30.0.txt
  3. +1 −1 lib/sequel/version.rb
View
@@ -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)
@@ -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.
View
@@ -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

0 comments on commit baeea31

Please sign in to comment.