Modify the null-branch pruning introduced in ce556881, restore compat
authorPeter Rabbitson <ribasushi@cpan.org>
Tue, 19 Feb 2013 20:54:16 +0000 (21:54 +0100)
committerPeter Rabbitson <ribasushi@cpan.org>
Wed, 20 Feb 2013 10:51:23 +0000 (11:51 +0100)
commit52864fbd5c6035f8f3961173ad05c2cc58fe9a34
tree5eb29aff6289740f2d155b8546eeb35c60177851
parentb8ced1f527fe09d52ba7bd4c8e2820fddb278e20
Modify the null-branch pruning introduced in ce556881, restore compat

In the case of "direct to HRI" we want to throw stuff away as before. In
other cases however we no longer take an educated guess when to prune.
Instead we mark each null-branch by simply blessing its containing
arrayref. This allows us to keep the arguments to inflate_result 100%
backwards compatible, while at the same time allowing "enlightened"
inflate_result implementations to skip over the dead branches with
minimal effort.

Both ::Row::inflate_result and ::HRI::inflate_result were adjusted to
react correctly to these marks. As a result the HRI folder gained
another 5% speedup (unless sidestepped by the direct-to-HRI code, which
is naturally much much more efficient).

The current name of the "null class" is stored in the global
$DBIx::Class::ResultSource::RowParser::Util::null_branch_class. Given
that the entire codebase begs for standalone CPAN extraction this should
do for the time being.

While implementing the test changes it became clear that
Test::More::is_deeply does not cut it (it ignores the blessed-ness of
structures by design: https://github.com/schwern/test-more/issues/347).
As a result a dep on Test::Deep was added, and several of the tests
looking at inflate_result RVs were converted.
15 files changed:
Changes
Makefile.PL
lib/DBIx/Class/ResultClass/HashRefInflator.pm
lib/DBIx/Class/ResultSet.pm
lib/DBIx/Class/ResultSource/RowParser.pm
lib/DBIx/Class/ResultSource/RowParser/Util.pm
lib/DBIx/Class/Row.pm
t/inflate/hri_torture.t
t/prefetch/correlated.t
t/prefetch/false_colvalues.t
t/prefetch/incomplete.t
t/prefetch/manual.t
t/prefetch/multiple_hasmany_torture.t
t/resultset/inflate_result_api.t
t/resultset/rowparser_internals.t