/usr/share/perl5/DBIx/Class/PK.pm is in libdbix-class-perl 0.08250-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | package DBIx::Class::PK;
use strict;
use warnings;
use base qw/DBIx::Class::Row/;
=head1 NAME
DBIx::Class::PK - Primary Key class
=head1 SYNOPSIS
=head1 DESCRIPTION
This class contains methods for handling primary keys and methods
depending on them.
=head1 METHODS
=cut
=head2 id
Returns the primary key(s) for a row. Can't be called as
a class method.
=cut
sub id {
my ($self) = @_;
$self->throw_exception( "Can't call id() as a class method" )
unless ref $self;
my @id_vals = $self->_ident_values;
return (wantarray ? @id_vals : $id_vals[0]);
}
sub _ident_values {
my ($self, $use_storage_state) = @_;
my (@ids, @missing);
for ($self->_pri_cols) {
push @ids, ($use_storage_state and exists $self->{_column_data_in_storage}{$_})
? $self->{_column_data_in_storage}{$_}
: $self->get_column($_)
;
push @missing, $_ if (! defined $ids[-1] and ! $self->has_column_loaded ($_) );
}
if (@missing && $self->in_storage) {
$self->throw_exception (
'Unable to uniquely identify result object with missing PK columns: '
. join (', ', @missing )
);
}
return @ids;
}
=head2 ID
Returns a unique id string identifying a result 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 {
my ($self) = @_;
$self->throw_exception( "Can't call ID() as a class method" )
unless ref $self;
return undef unless $self->in_storage;
return $self->_create_ID(%{$self->ident_condition});
}
sub _create_ID {
my ($self, %vals) = @_;
return undef unless 0 == grep { !defined } values %vals;
return join '|', ref $self || $self, $self->result_source->name,
map { $_ . '=' . $vals{$_} } sort keys %vals;
}
=head2 ident_condition
my $cond = $result_source->ident_condition();
my $cond = $result_source->ident_condition('alias');
Produces a condition hash to locate a row based on the primary key(s).
=cut
sub ident_condition {
shift->_mk_ident_cond(@_);
}
sub _storage_ident_condition {
shift->_mk_ident_cond(shift, 1);
}
sub _mk_ident_cond {
my ($self, $alias, $use_storage_state) = @_;
my @pks = $self->_pri_cols;
my @vals = $self->_ident_values($use_storage_state);
my (%cond, @undef);
my $prefix = defined $alias ? $alias.'.' : '';
for my $col (@pks) {
if (! defined ($cond{$prefix.$col} = shift @vals) ) {
push @undef, $col;
}
}
if (@undef && $self->in_storage) {
$self->throw_exception (
'Unable to construct result object identity condition due to NULL PK columns: '
. join (', ', @undef)
);
}
return \%cond;
}
1;
=head1 AUTHOR AND CONTRIBUTORS
See L<AUTHOR|DBIx::Class/AUTHOR> and L<CONTRIBUTORS|DBIx::Class/CONTRIBUTORS> in DBIx::Class
=head1 LICENSE
You may distribute this code under the same terms as Perl itself.
=cut
|