Backed out my r3073, and doc'd the fact that it takes a hashref that might be changed
Ash Berlin [Mon, 5 Feb 2007 12:29:52 +0000 (12:29 +0000)]
lib/DBIx/Class/Relationship/Accessor.pm
lib/DBIx/Class/Row.pm
t/68inflate.t

index e98c9a2..b77ce00 100644 (file)
@@ -84,7 +84,6 @@ sub new {
 
 sub update {
   my ($obj, $attrs, @rest) = @_;
-  $attrs = { %$attrs} if $attrs; # Take copy so we dont change passed hashref
   my $info;
   foreach my $key (keys %{$attrs||{}}) {
     next unless $info = $obj->relationship_info($key);
index 4a55f50..e6e5ebc 100644 (file)
@@ -100,19 +100,20 @@ sub in_storage {
 
 =head2 update
 
-  $obj->update;
+  $obj->update \%columns?;
 
 Must be run on an object that is already in the database; issues an SQL
 UPDATE query to commit any changes to the object to the database if
 required.
 
+Also takes an options hashref of C<< column_name => value> pairs >> to update
+first. But be aware that this hashref might be edited in place, so dont rely on
+it being the same after a call to C<update>.
+
 =cut
 
 sub update {
   my ($self, $upd) = @_;
-  # Create a copy so we dont mess with original  
-  $upd = { %$upd } if $upd;
-
   $self->throw_exception( "Not in database" ) unless $self->in_storage;
   my $ident_cond = $self->ident_condition;
   $self->throw_exception("Cannot safely update a row in a PK-less table")
index 9cbaab9..2e7c374 100644 (file)
@@ -11,7 +11,7 @@ my $schema = DBICTest->init_schema();
 eval { require DateTime };
 plan skip_all => "Need DateTime for inflation tests" if $@;
 
-plan tests => 22;
+plan tests => 20;
 
 DBICTest::Schema::CD->inflate_column( 'year',
     { inflate => sub { DateTime->new( year => shift ) },
@@ -90,12 +90,6 @@ ok(!$@, 'update using scalarref ok');
 $cd = $schema->resultset("CD")->find(3);                 
 is($cd->year->year, $before_year + 1, 'deflate ok');
 
-my $upd = { 'year' => $now->truncate(to => 'month'), title => 'An Updated Title' };
-my $upd_copy = { %$upd };
-eval { $cd->update($upd) };
-ok(!$@, 'update worked okay');
-ok(exists $upd->{year} && $upd->{year} == $upd_copy->{year}, "update doesn't change passed hashref");
-
 # discard_changes test
 $cd = $schema->resultset("CD")->find(3);                 
 # inflate the year