Fix incorrect data returned in a corner case of partial-select HRI
authorPeter Rabbitson <ribasushi@cpan.org>
Sat, 26 Mar 2016 22:14:09 +0000 (23:14 +0100)
committerPeter Rabbitson <ribasushi@cpan.org>
Mon, 28 Mar 2016 23:22:19 +0000 (01:22 +0200)
commit40471d469bc450ab29789724d94f4c3c825c158f
tree0b570ea944a5ffdbd7047ef2b115a28bceaa7b21
parent8fc4291ef4f19b6f4c4f25cd695cb613da613fe1
Fix incorrect data returned in a corner case of partial-select HRI

While investigating better reporting on disagreeing metadata and actual
results returned by the data source, I stumbled across an incorrect
optimization applied to the HRI fast-path in aa1d8a87. The reason this has
never been a problem in the wild is that the failure case is very convoluted:

In order for the problem to present itself one needs to have a subchain of
... something-single ... with the "something" not fetching anything
AND the entire chain being hit exactly once (no multiplication of the branch
neither by a result or a parallel 1:M) AND the HRI fast-path code needs to be
in effect. Then and only then everything from "something"onwards will present
as "nonexisting left join" and a sole undef will be returned in place of the
entire substructure.
Changes
lib/DBIx/Class/ResultSource/RowParser/Util.pm
t/inflate/hri_torture.t
t/resultset/rowparser_internals.t