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=487aa94edbe7f7339f9c351a5cd02da889cba9ce;hpb=78bab9cad621ac5e3d1d12b02c41d662dec7a22a;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/PK.pm b/lib/DBIx/Class/PK.pm index 487aa94..ed0b830 100644 --- a/lib/DBIx/Class/PK.pm +++ b/lib/DBIx/Class/PK.pm @@ -44,41 +44,46 @@ 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; } - $self->store_column($_ => $reload->get_column($_)) - foreach keys %{$self->_columns}; + delete @{$self}{keys %$self}; + @{$self}{keys %$reload} = values %$reload; + #$self->store_column($_ => $reload->get_column($_)) + # foreach keys %{$self->_columns}; return $self; } @@ -89,13 +94,17 @@ sub id { return (wantarray ? @pk : $pk[0]); } +sub primary_columns { + return keys %{shift->_primaries}; +} + 1; =back =head1 AUTHORS -Matt S. Trout +Matt S. Trout =head1 LICENSE