X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FRow.pm;h=9f01ded7f2185a87e279c3372cee6990e6236eed;hb=484c9dda865880cd4e1cda8e0117f1d073a6aa7e;hp=4308e9ca2c6f8533473ca3983de65a1c39dd4e0b;hpb=d3dec6248835b18100141f00983a5e34d81d9a97;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Row.pm b/lib/DBIx/Class/Row.pm index 4308e9c..9f01ded 100644 --- a/lib/DBIx/Class/Row.pm +++ b/lib/DBIx/Class/Row.pm @@ -33,7 +33,8 @@ sub new { if ($attrs) { $new->throw("attrs must be a hashref" ) unless ref($attrs) eq 'HASH'; while (my ($k, $v) = each %{$attrs}) { - $new->store_column($k => $v) if exists $class->_columns->{$k}; + die "No such column $k on $class" unless exists $class->_columns->{$k}; + $new->store_column($k => $v); } } return $new; @@ -176,6 +177,19 @@ sub get_column { return undef; } +=item get_columns + + my %data = $obj->get_columns; + +Fetch all column values at once. + +=cut + +sub get_columns { + my $self = shift; + return map { $_ => $self->get_column($_) } $self->columns; +} + =item set_column $obj->set_column($col => $val); @@ -194,6 +208,29 @@ sub set_column { return $ret; } +=item set_columns + + my $copy = $orig->set_columns({ $col => $val, ... }); + +Set more than one column value at once. + +=cut + +sub set_columns { + my ($self,$data) = @_; + while (my ($col,$val) = each %$data) { + $self->set_column($col,$val); + } +} + +=item copy + + my $copy = $orig->copy({ change => $to, ... }); + +Insert a new row with the specified changes. + +=cut + =item store_column $obj->store_column($col => $val); @@ -215,17 +252,11 @@ sub _row_to_object { my ($class, $cols, $row) = @_; my %vals; $vals{$cols->[$_]} = $row->[$_] for 0 .. $#$cols; - my $new = $class->new(\%vals); + my $new = bless({ _column_data => \%vals }, ref $class || $class); $new->in_storage(1); return $new; } -=item copy - - my $copy = $orig->copy({ change => $to, ... }); - -=cut - sub copy { my ($self, $changes) = @_; my $new = bless({ _column_data => { %{$self->{_column_data}}} }, ref $self);