From: Peter Rabbitson Date: Tue, 7 Jun 2011 08:04:13 +0000 (+0200) Subject: Fix stupid oversight in update_all X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=8d2da21aebb41c0f460c6124e4a128473a18fad6;p=dbsrgits%2FDBIx-Class-Historic.git Fix stupid oversight in update_all --- diff --git a/Changes b/Changes index 9b4179e..be62dda 100644 --- a/Changes +++ b/Changes @@ -15,6 +15,8 @@ Revision history for DBIx::Class from 0.08191 - documentation was in fact incorrect, not the code - Fix Sybase ASE IC::DateTime support (::Storage going out of sync with new default format expected by DateTime::Format::Sybase) + - Fix a bug in update_all() resulting in the first row receiving a + different dataset than the subsequent ones 0.08192 2011-05-10 04:20 (UTC) * Fixes diff --git a/lib/DBIx/Class/ResultSet.pm b/lib/DBIx/Class/ResultSet.pm index 7f9174c..b12fca7 100644 --- a/lib/DBIx/Class/ResultSet.pm +++ b/lib/DBIx/Class/ResultSet.pm @@ -1830,7 +1830,7 @@ sub update_all { unless ref $values eq 'HASH'; my $guard = $self->result_source->schema->txn_scope_guard; - $_->update($values) for $self->all; + $_->update({%$values}) for $self->all; # shallow copy - update will mangle it $guard->commit; return 1; } diff --git a/t/update/all.t b/t/update/all.t new file mode 100644 index 0000000..acc8387 --- /dev/null +++ b/t/update/all.t @@ -0,0 +1,21 @@ +use strict; +use warnings; + +use Test::More; +use lib qw(t/lib); +use DBICTest; + +my $schema = DBICTest->init_schema(); + +my $new_artist = $schema->resultset('Artist')->create({ name => 'new kid behind the block' }); + +# see how many cds do we have, and relink them all to the new guy +my $cds = $schema->resultset('CD'); +my $cds_count = $cds->count; +cmp_ok($cds_count, '>', 0, 'have some cds'); + +$cds->update_all({ artist => $new_artist }); + +is( $new_artist->cds->count, $cds_count, 'All cds properly relinked'); + +done_testing;