[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