X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FPK.pm;h=ed0b830a4302fae3d52ef7ac3a8a11ea8c012792;hb=fab31d8c753ec27ee5b5a16d1568cc337a245858;hp=bcd545dd4754041177586ef9c9842263bb822bdf;hpb=8b445e337a0dbacf4ccb827211002f8d691ad671;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/PK.pm b/lib/DBIx/Class/PK.pm index bcd545d..ed0b830 100644 --- a/lib/DBIx/Class/PK.pm +++ b/lib/DBIx/Class/PK.pm @@ -44,37 +44,40 @@ sub set_primary_key { $class->_primaries(\%pri); } -sub retrieve { +sub find { my ($class, @vals) = @_; my $attrs = (@vals > 1 && ref $vals[$#vals] eq 'HASH' ? pop(@vals) : {}); my @pk = keys %{$class->_primaries}; - $class->throw( "Can't retrieve unless primary columns are defined" ) + $class->throw( "Can't find unless primary columns are defined" ) unless @pk; my $query; if (ref $vals[0] eq 'HASH') { $query = $vals[0]; } elsif (@pk == @vals) { - my $ret = ($class->retrieve_from_sql($class->_ident_cond, @vals, $attrs))[0]; + $query = {}; + @{$query}{@pk} = @vals; + #my $ret = ($class->search_literal($class->_ident_cond, @vals, $attrs))[0]; #warn "$class: ".join(', ', %{$ret->{_column_data}}); - return $ret; + #return $ret; } else { $query = {@vals}; } - $class->throw( "Can't retrieve unless all primary keys are specified" ) + $class->throw( "Can't find unless all primary keys are specified" ) unless (keys %$query >= @pk); # If we check 'em we run afoul of uc/lc # column names etc. Not sure what to do yet - my $ret = ($class->search($query))[0]; - #warn "$class: ".join(', ', %{$ret->{_column_data}}); - return $ret; + #return $class->search($query)->next; + my @cols = $class->_select_columns; + my @row = $class->storage->select_single($class->_table_name, \@cols, $query); + return (@row ? $class->_row_to_object(\@cols, \@row) : ()); } sub discard_changes { my ($self) = @_; delete $self->{_dirty_columns}; - return unless $self->in_database; # Don't reload if we aren't real! - my ($reload) = $self->retrieve($self->id); + return unless $self->in_storage; # Don't reload if we aren't real! + my ($reload) = $self->find($self->id); unless ($reload) { # If we got deleted in the mean-time - $self->in_database(0); + $self->in_storage(0); return $self; } delete @{$self}{keys %$self}; @@ -101,7 +104,7 @@ sub primary_columns { =head1 AUTHORS -Matt S. Trout +Matt S. Trout =head1 LICENSE