Fix uninitialized warnings on empty hashes passed to join/prefetch
Henry Van Styn [Wed, 29 Oct 2014 13:25:33 +0000 (09:25 -0400)]
.mailmap
AUTHORS
Changes
lib/DBIx/Class/ResultSet.pm
xt/extra/internals/merge_joinpref_attr.t

index 22615b3..ee01f0a 100644 (file)
--- a/.mailmap
+++ b/.mailmap
@@ -29,6 +29,7 @@ Gerda Shank <gshank@cpan.org>               <gerda.shank@gmail.com>
 Gianni Ceccarelli <dakkar@thenautilus.net>  <gianni.ceccarelli@net-a-porter.com>
 Gordon Irving <goraxe@cpan.org>             <goraxe@goraxe.me.uk>
 Hakim Cassimally <osfameron@cpan.org>       <hakim@vm-participo.(none)>
+Henry Van Styn <vanstyn@cpan.org>           <vanstyn@intellitree.com>
 Jason M. Mills <jmmills@cpan.org>           <jmmills@cpan.org>
 Jonathan Chu <milki@rescomp.berkeley.edu>   <milki@rescomp.berkeley.edu>
 Jose Luis Martinez <jlmartinez@capside.com> <jlmartinez@capside.com>
diff --git a/AUTHORS b/AUTHORS
index abdea35..8b67c4d 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -201,6 +201,7 @@ triode: Pete Gamache <gamache@cpan.org>
 typester: Daisuke Murase <typester@cpan.org>
 uree: Oriol Soriano <oriol.soriano@capside.com>
 uwe: Uwe Voelker <uwe@uwevoelker.de>
+vanstyn: Henry Van Styn <vanstyn@cpan.org>
 victori: Victor Igumnov <victori@cpan.org>
 wdh: Will Hawes <wdhawes@gmail.com>
 wesm: Wes Malone <wes@mitsi.com>
diff --git a/Changes b/Changes
index e64e82e..e617f91 100644 (file)
--- a/Changes
+++ b/Changes
@@ -16,6 +16,9 @@ Revision history for DBIx::Class
           http://lists.scsys.co.uk/pipermail/dbix-class/2015-January/011903.html
         - Fix incorrect collapsing-parser source being generated in the
           presence of unicode data among the collapse-points
+        - Fix uninitialized warnings on empty hashes passed to join/prefetch
+          https://github.com/vanstyn/RapidApp/commit/6f41f6e48 and
+          http://lists.scsys.co.uk/pipermail/dbix-class/2015-February/011921.html
         - Fix endless loop on BareSourcelessResultClass->throw_exception(...)
         - Fix hang in t/72pg.t when run against DBD::Pg 3.5.0. The ping()
           implementation changes due to RT#100648 made an alarm() based
index cf1298e..7e4cb4d 100644 (file)
@@ -3813,8 +3813,10 @@ sub _calculate_score {
 
   if (ref $b eq 'HASH') {
     my ($b_key) = keys %{$b};
+    $b_key = '' if ! defined $b_key;
     if (ref $a eq 'HASH') {
       my ($a_key) = keys %{$a};
+      $a_key = '' if ! defined $a_key;
       if ($a_key eq $b_key) {
         return (1 + $self->_calculate_score( $a->{$a_key}, $b->{$b_key} ));
       } else {
index 0e9f601..bb77358 100644 (file)
@@ -6,8 +6,6 @@ use lib qw(t/lib);
 use DBICTest;
 use Test::More;
 
-plan tests => 15;
-
 my $schema = DBICTest->init_schema();
 my $rs = $schema->resultset( 'CD' );
 
@@ -131,5 +129,20 @@ my $rs = $schema->resultset( 'CD' );
   is_deeply( $result, $expected );
 }
 
+{
+  my $a = [ { 'artist' => { 'manager' => {} } }, 'cd' ];
+  my $b = [ 'artist', { 'artist' => { 'manager' => {} } } ];
+  my $expected = [ { 'artist' => { 'manager' => {} } }, 'cd', { 'artist' => { 'manager' => {} } } ];
+  my $result = $rs->_merge_joinpref_attr($a, $b);
+  is_deeply( $result, $expected );
+}
+
+{
+  my $a = [ { 'artist' => { 'manager' => undef } }, 'cd' ];
+  my $b = [ 'artist', { 'artist' => { 'manager' => undef } } ];
+  my $expected = [ { 'artist' => { 'manager' => undef } }, 'cd', { 'artist' => { 'manager' => undef } } ];
+  my $result = $rs->_merge_joinpref_attr($a, $b);
+  is_deeply( $result, $expected );
+}
 
-1;
+done_testing;