[Bast-commits] r7252 - DBIx-Class/0.08/branches/discard_changes_replication_fix/lib/DBIx/Class

ribasushi at dev.catalyst.perl.org ribasushi at dev.catalyst.perl.org
Fri Aug 7 09:19:14 GMT 2009


Author: ribasushi
Date: 2009-08-07 09:19:13 +0000 (Fri, 07 Aug 2009)
New Revision: 7252

Modified:
   DBIx-Class/0.08/branches/discard_changes_replication_fix/lib/DBIx/Class/PK.pm
   DBIx-Class/0.08/branches/discard_changes_replication_fix/lib/DBIx/Class/Row.pm
Log:
Move discard_changes code to Row.pm, better docs

Modified: DBIx-Class/0.08/branches/discard_changes_replication_fix/lib/DBIx/Class/PK.pm
===================================================================
--- DBIx-Class/0.08/branches/discard_changes_replication_fix/lib/DBIx/Class/PK.pm	2009-08-07 09:07:14 UTC (rev 7251)
+++ DBIx-Class/0.08/branches/discard_changes_replication_fix/lib/DBIx/Class/PK.pm	2009-08-07 09:19:13 UTC (rev 7252)
@@ -20,46 +20,6 @@
 
 =cut
 
-sub _ident_values {
-  my ($self) = @_;
-  return (map { $self->{_column_data}{$_} } $self->primary_columns);
-}
-
-=head2 discard_changes ($attrs)
-
-Re-selects the row from the database, losing any changes that had
-been made.
-
-This method can also be used to refresh from storage, retrieving any
-changes made since the row was last read from storage.
-
-$attrs is expected to be a hashref of attributes suitable for passing as the
-second argument to $resultset->search($cond, $attrs);
-
-=cut
-
-sub discard_changes {
-  my ($self, $attrs) = @_;
-  delete $self->{_dirty_columns};
-  return unless $self->in_storage; # Don't reload if we aren't real!
-
-  $attrs = { force_pool => 'master', %{ defined $attrs ? $attrs:{} } };
-  if( my $current_storage = $self->get_from_storage($attrs)) {
-
-    # Set $self to the current.
-  	%$self = %$current_storage;
-
-    # Avoid a possible infinite loop with
-    # sub DESTROY { $_[0]->discard_changes }
-    bless $current_storage, 'Do::Not::Exist';
-
-    return $self;  	
-  } else {
-    $self->in_storage(0);
-    return $self;  	
-  }
-}
-
 =head2 id
 
 Returns the primary key(s) for a row. Can't be called as
@@ -75,12 +35,28 @@
   return (wantarray ? @pk : $pk[0]);
 }
 
+sub _ident_values {
+  my ($self) = @_;
+  return (map { $self->{_column_data}{$_} } $self->primary_columns);
+}
+
 =head2 ID
 
 Returns a unique id string identifying a row object by primary key.
 Used by L<DBIx::Class::CDBICompat::LiveObjectIndex> and
 L<DBIx::Class::ObjectCache>.
 
+=over
+
+=item WARNING
+
+The default C<_create_ID> method used by this function orders the returned
+values by the alphabetical order of the primary column names, B<unlike>
+the L</id> method, which follows the same order in which columns were fed
+to L<DBIx::Class::ResultSource/set_primary_key>.
+
+=back
+
 =cut
 
 sub ID {

Modified: DBIx-Class/0.08/branches/discard_changes_replication_fix/lib/DBIx/Class/Row.pm
===================================================================
--- DBIx-Class/0.08/branches/discard_changes_replication_fix/lib/DBIx/Class/Row.pm	2009-08-07 09:07:14 UTC (rev 7251)
+++ DBIx-Class/0.08/branches/discard_changes_replication_fix/lib/DBIx/Class/Row.pm	2009-08-07 09:19:13 UTC (rev 7252)
@@ -1277,12 +1277,51 @@
     my $resultset = $self->result_source->resultset;
 
     if(defined $attrs) {
-    	$resultset = $resultset->search(undef, $attrs);
+      $resultset = $resultset->search(undef, $attrs);
     }
 
     return $resultset->find($self->{_orig_ident} || $self->ident_condition);
 }
 
+=head2 discard_changes ($attrs)
+
+Re-selects the row from the database, losing any changes that had
+been made.
+
+This method can also be used to refresh from storage, retrieving any
+changes made since the row was last read from storage.
+
+$attrs is expected to be a hashref of attributes suitable for passing as the
+second argument to $resultset->search($cond, $attrs);
+
+=cut
+
+sub discard_changes {
+  my ($self, $attrs) = @_;
+  delete $self->{_dirty_columns};
+  return unless $self->in_storage; # Don't reload if we aren't real!
+
+  # add a replication default to read from the master only
+  $attrs = { force_pool => 'master', %{$attrs||{}} };
+
+  if( my $current_storage = $self->get_from_storage($attrs)) {
+
+    # Set $self to the current.
+    %$self = %$current_storage;
+
+    # Avoid a possible infinite loop with
+    # sub DESTROY { $_[0]->discard_changes }
+    bless $current_storage, 'Do::Not::Exist';
+
+    return $self;
+  }
+  else {
+    $self->in_storage(0);
+    return $self;
+  }
+}
+
+
 =head2 throw_exception
 
 See L<DBIx::Class::Schema/throw_exception>.




More information about the Bast-commits mailing list