discard changes now is forced to use master for replication. changed discard_changes...
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / PK.pm
CommitLineData
dbd7896f 1package DBIx::Class::PK;
2
3use strict;
4use warnings;
5
1edd1722 6use base qw/DBIx::Class::Row/;
dbd7896f 7
75d07914 8=head1 NAME
34d52be2 9
10DBIx::Class::PK - Primary Key class
11
12=head1 SYNOPSIS
13
14=head1 DESCRIPTION
15
75d07914 16This class contains methods for handling primary keys and methods
8091aa91 17depending on them.
34d52be2 18
19=head1 METHODS
20
34d52be2 21=cut
22
dbd7896f 23sub _ident_values {
24 my ($self) = @_;
d7156e50 25 return (map { $self->{_column_data}{$_} } $self->primary_columns);
dbd7896f 26}
27
8091aa91 28=head2 discard_changes
076652e8 29
8091aa91 30Re-selects the row from the database, losing any changes that had
31been made.
076652e8 32
aefa6508 33This method can also be used to refresh from storage, retrieving any
34changes made since the row was last read from storage.
35
076652e8 36=cut
37
510ca912 38sub discard_changes {
39 my ($self) = @_;
ed213e85 40 my $storage = $self->result_source->schema->storage;
41 $storage->reload_row($self);
c1d23573 42 return $self;
510ca912 43}
44
8091aa91 45=head2 id
076652e8 46
8091aa91 47Returns the primary key(s) for a row. Can't be called as
076652e8 48a class method.
49
50=cut
51
604d9f38 52sub id {
53 my ($self) = @_;
bc0c9800 54 $self->throw_exception( "Can't call id() as a class method" )
55 unless ref $self;
604d9f38 56 my @pk = $self->_ident_values;
57 return (wantarray ? @pk : $pk[0]);
58}
59
8091aa91 60=head2 ID
61
62Returns a unique id string identifying a row object by primary key.
75d07914 63Used by L<DBIx::Class::CDBICompat::LiveObjectIndex> and
8091aa91 64L<DBIx::Class::ObjectCache>.
65
66=cut
67
48700d09 68sub ID {
69 my ($self) = @_;
bc0c9800 70 $self->throw_exception( "Can't call ID() as a class method" )
71 unless ref $self;
48700d09 72 return undef unless $self->in_storage;
bc0c9800 73 return $self->_create_ID(map { $_ => $self->{_column_data}{$_} }
74 $self->primary_columns);
48700d09 75}
76
77sub _create_ID {
9bbd8963 78 my ($self,%vals) = @_;
90f3f5ff 79 return undef unless 0 == grep { !defined } values %vals;
bc0c9800 80 return join '|', ref $self || $self, $self->result_source->name,
75d07914 81 map { $_ . '=' . $vals{$_} } sort keys %vals;
48700d09 82}
83
9b83fccd 84=head2 ident_condition
85
86 my $cond = $result_source->ident_condition();
87
88 my $cond = $result_source->ident_condition('alias');
89
90Produces a condition hash to locate a row based on the primary key(s).
91
92=cut
93
103647d5 94sub ident_condition {
fea3d045 95 my ($self, $alias) = @_;
103647d5 96 my %cond;
e04df8ec 97 my $prefix = defined $alias ? $alias.'.' : '';
98 $cond{$prefix.$_} = $self->get_column($_) for $self->primary_columns;
103647d5 99 return \%cond;
100}
101
dbd7896f 1021;
34d52be2 103
34d52be2 104=head1 AUTHORS
105
daec44b8 106Matt S. Trout <mst@shadowcatsystems.co.uk>
34d52be2 107
108=head1 LICENSE
109
110You may distribute this code under the same terms as Perl itself.
111
112=cut
113