From: Peter Rabbitson Date: Fri, 19 Apr 2013 14:49:09 +0000 (+0200) Subject: Merge branch 'topic/constructor_rewrite' into master X-Git-Tag: v0.08250~31 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=dbsrgits%2FDBIx-Class.git;a=commitdiff_plain;h=f3c8fa02bf47ac8f69e707dd904735b0c2e82d13 Merge branch 'topic/constructor_rewrite' into master Consolidate changelog from the 0.0824x-TRIAL cycle --- f3c8fa02bf47ac8f69e707dd904735b0c2e82d13 diff --cc Changes index 819dc5b,54c259a..e0f59a3 --- a/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