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 --cc 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