[Bast-commits] r9319 - in DBIx-Class/0.08/trunk: . lib/DBIx/Class t

nigel at dev.catalyst.perl.org nigel at dev.catalyst.perl.org
Fri May 7 13:03:00 GMT 2010


Author: nigel
Date: 2010-05-07 14:03:00 +0100 (Fri, 07 May 2010)
New Revision: 9319

Modified:
   DBIx-Class/0.08/trunk/Changes
   DBIx-Class/0.08/trunk/lib/DBIx/Class/Row.pm
   DBIx-Class/0.08/trunk/t/60core.t
Log:
empty update OK even if row is not in database

Modified: DBIx-Class/0.08/trunk/Changes
===================================================================
--- DBIx-Class/0.08/trunk/Changes	2010-05-07 12:56:57 UTC (rev 9318)
+++ DBIx-Class/0.08/trunk/Changes	2010-05-07 13:03:00 UTC (rev 9319)
@@ -20,7 +20,10 @@
         - Fix as_subselect_rs to not inject resultset class-wide where
           conditions outside of the resulting subquery
         - Depend on optimized SQL::Abstract (faster SQL generation)
+        - update on row not in database now OK if no changes - 
+          fixes problems with cascaded unnecessary updates
 
+
 0.08121 2010-04-11 18:43:00 (UTC)
         - Support for Firebird RDBMS with DBD::InterBase and ODBC
         - Add core support for INSERT RETURNING (for storages that

Modified: DBIx-Class/0.08/trunk/lib/DBIx/Class/Row.pm
===================================================================
--- DBIx-Class/0.08/trunk/lib/DBIx/Class/Row.pm	2010-05-07 12:56:57 UTC (rev 9318)
+++ DBIx-Class/0.08/trunk/lib/DBIx/Class/Row.pm	2010-05-07 13:03:00 UTC (rev 9319)
@@ -518,7 +518,6 @@
 
 sub update {
   my ($self, $upd) = @_;
-  $self->throw_exception( "Not in database" ) unless $self->in_storage;
 
   my $ident_cond = $self->{_orig_ident} || $self->ident_condition;
 
@@ -528,6 +527,9 @@
   $self->set_inflated_columns($upd) if $upd;
   my %to_update = $self->get_dirty_columns;
   return $self unless keys %to_update;
+
+  $self->throw_exception( "Not in database" ) unless $self->in_storage;
+
   my $rows = $self->result_source->storage->update(
     $self->result_source, \%to_update, $ident_cond
   );

Modified: DBIx-Class/0.08/trunk/t/60core.t
===================================================================
--- DBIx-Class/0.08/trunk/t/60core.t	2010-05-07 12:56:57 UTC (rev 9318)
+++ DBIx-Class/0.08/trunk/t/60core.t	2010-05-07 13:03:00 UTC (rev 9319)
@@ -45,6 +45,8 @@
 is(scalar(keys(%fake_dirty)), 1, '1 fake dirty column');
 ok(grep($_ eq 'name', keys(%fake_dirty)), 'name is fake dirty');
 
+ok($art->update, 'Update run');
+
 my $record_jp = $schema->resultset("Artist")->search(undef, { join => 'cds' })->search(undef, { prefetch => 'cds' })->next;
 
 ok($record_jp, "prefetch on same rel okay");
@@ -67,6 +69,8 @@
 
 is($art->in_storage, 0, "It knows it's dead");
 
+lives_ok { $art->update } 'No changes so update should be OK';
+
 dies_ok ( sub { $art->delete }, "Can't delete twice");
 
 is($art->name, 'We Are In Rehab', 'But the object is still live');




More information about the Bast-commits mailing list