Merge branch 'topic/constructor_rewrite' into master
Peter Rabbitson [Fri, 19 Apr 2013 14:49:09 +0000 (16:49 +0200)]
Consolidate changelog from the 0.0824x-TRIAL cycle

1  2 
Changes

diff --combined Changes
+++ b/Changes
@@@ -1,11 -1,29 +1,56 @@@
  Revision history for DBIx::Class
  
+     * New Features / Changes
++        - Rewrite from scratch the result constructor codepath - many bugfixes
++          and performance improvements (the current codebase is now capable of
++          outperforming both DBIx::DataModel and Rose::DB::Object on some
++          workloads). Some notable benefits:
++          - Multiple has_many prefetch
++          - Partial prefetch - you now can select only columns you are
++            interested in, while preserving the collapse functionality
++            (collapse is now exposed as a first-class API attribute)
++          - Prefetch of resultsets with arbitrary order
++            (RT#54949, RT#74024, RT#74584)
++          - Prefetch no longer inserts right-side table order_by clauses
++            (massively helps the deficient MySQL optimizer)
++          - Prefetch with limit on right-side ordered resultsets now works
++            correctly (via aggregated grouping)
++          - No longer order the insides of a complex prefetch subquery,
++            unless required to satisfy a limit
++          - Stop erroneously considering order_by criteria from a join under
++            distinct => 1 (the distinct should apply to the main source only)
++        - Massively optimize codepath around ->cursor(), over 10x speedup
++          on some iterating workloads.
++        - Changing the result_class of a ResultSet in progress is now
++          explicitly forbidden. The behavior was undefined before, and
++          would result in wildly differing outcomes depending on $rs
++          attributes.
+         - Deprecate returning of prefetched 'filter' rels as part of
+           get_columns() and get_inflated_columns() data
+         - Invoking get_inflated_columns() no longer fires get_columns() but
+           instead retrieves data from individual non-inflatable columns via
+           get_column()
++        - Emit a warning on incorrect use of nullable columns within a
++          primary key
+         - Limited checks are performed on whether columns without declared
+           is_nullable => 1 metadata do in fact sometimes fetch NULLs from
+           the database (the check is currently very limited and is performed
+           only on resultset collapse when the alternative is rather worse)
      * Fixes
+         - Fix _dbi_attrs_for_bind() being called befor DBI has been loaded
+           (regression in 0.08210)
          - Fix update/delete operations on resultsets *joining* the updated
            table failing on MySQL. Resolves oversights in the fixes for
            RT#81378 and RT#81897
 -        - Stop erroneously considering order_by criteria from a join under
 -          distinct => 1 (the distinct should apply to the main source only)
 -        - Even more robust behavior of GenericSubQuery limit dialect
++        - Fix open cursors silently resetting when inherited across a fork
++          or a thread
++        - Properly support "MySQL-style" left-side group_by with prefetch
++        - Fix $grouped_rs->get_column($col)->func($func) producing incorrect
++          SQL (RT#81127)
          - Stop Sybase ASE storage from generating invalid SQL in subselects
            when a limit without offset is encountered
 -        - Correctly recognize root source unqualified columns when
 -          resolving right-side ordered limited prefetch
++        - Even more robust behavior of GenericSubQuery limit dialect
  
  0.08210 2013-04-04 15:30 (UTC)
      * New Features / Changes
          - Fix incorrect warning/exception originator reported by carp*() and
            throw_exception()
  
 -0.08242-TRIAL (EXPERIMENTAL BETA RELEASE) 2013-03-10 14:44 (UTC)
 -    * New Features / Changes
 -        - Prefetch with limit on right-side ordered resultsets now works
 -          correctly (via aggregated grouping)
 -        - Changing the result_class of a ResultSet in progress is now
 -          explicitly forbidden. The behavior was undefined before, and
 -          would result in wildly differing outcomes depending on $rs
 -          attributes.
 -        - Scale back validation of the 'as' attribute - in the field
 -          there are legitimate-ish uses of a inflating into an apparently
 -          invalid relationship graph
 -        - Warn in case of iterative collapse being upgraded to an eager
 -          cursor slurp
 -        - No longer order the insides of a complex prefetch subquery,
 -          unless required to satisfy a limit
 -
 -    * Fixes
 -        - Properly consider unselected order_by criteria during complex
 -          subqueried prefetch
 -        - Properly support "MySQL-style" left-side group_by with prefetch
 -        - Fix $grouped_rs->get_column($col)->func($func) producing incorrect
 -          SQL (RT#81127)
 -
  0.08209 2013-03-01 12:56 (UTC)
      * New Features / Changes
          - Debugging aid - warn on invalid result objects created by what
            tarball contents (implicitly fixes RT#83084)
          - Added strict and warnings tests for all lib and test files
  
 -0.08241-TRIAL (EXPERIMENTAL BETA RELEASE) 2013-02-20 11:37 (UTC)
 -    * New Features / Changes
 -        - Revert to passing the original (pre-0.08240) arguments to
 -          inflate_result() and remove the warning about ResultClass
 -          inheritance.
 -        - Optimize the generated rowparsers even more - no user-visible
 -          changes.
 -        - Emit a warning on incorrect use of nullable columns within a
 -          primary key
 -
 -0.08240-TRIAL (EXPERIMENTAL BETA RELEASE) 2013-02-14 05:56 (UTC)
 -    * New Features / Changes
 -        - Rewrite from scratch the result constructor codepath - many bugfixes
 -          and performance improvements (the current codebase is now capable of
 -          outperforming both DBIx::DataModel and Rose::DB::Object on some
 -          workloads). Some notable benefits:
 -          - Multiple has_many prefetch
 -          - Partial prefetch - you now can select only columns you are
 -            interested in, while preserving the collapse functionality
 -            (collapse is now exposed as a first-class API attribute)
 -          - Prefetch of resultsets with arbitrary order
 -            (RT#54949, RT#74024, RT#74584)
 -          - Prefetch no longer inserts right-side table order_by clauses
 -            (massively helps the deficient MySQL optimizer)
 -        - Massively optimize codepath around ->cursor(), over 10x speedup
 -          on some iterating workloads.
 -
 -    * Fixes
 -        - Fix open cursors silently resetting when inherited across a fork
 -          or a thread
 -        - Fix duplicated selected columns when calling 'count' when a same
 -          aggregate function is used more than once in a 'having' clause
 -          (RT#83305)
 -
 -    * Misc
 -        - Fixup our distbuilding process to stop creating world-writable
 -          tarball contents (implicitly fixes RT#83084)
 -        - Added strict and warnings tests for all lib and test files
 -
  0.08206 2013-02-08
      * Fixes
          - Fix dbh_do() failing to properly reconnect (regression in 0.08205)