X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FRow.pm;h=3efe4186c77147d6af4fcfa9d84f87ca6149cbd4;hb=f11383c2fd0da2579098d1125b51f08eb98beb3e;hp=4a40e82c04ee82be948e5b7dcf2414acba99450b;hpb=228dbcb430b9ed24cc2547cd88cbda8a747628b4;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/Row.pm b/lib/DBIx/Class/Row.pm index 4a40e82..3efe418 100644 --- a/lib/DBIx/Class/Row.pm +++ b/lib/DBIx/Class/Row.pm @@ -38,10 +38,10 @@ sub new { if ($attrs) { $new->throw_exception("attrs must be a hashref") unless ref($attrs) eq 'HASH'; - while (my ($k, $v) = each %$attrs) { + foreach my $k (keys %$attrs) { $new->throw_exception("No such column $k on $class") unless $class->has_column($k); - $new->store_column($k => $v); + $new->store_column($k => $attrs->{$k}); } } return $new; @@ -170,6 +170,17 @@ sub get_column { return undef; } +=head2 has_column_loaded + + if ( $obj->has_column_loaded($col) ) { + print "$col has been loaded from db"; + } + +Returns a true value if the column value has been loaded from the +database (or set locally). + +=cut + sub has_column_loaded { my ($self, $column) = @_; $self->throw_exception( "Can't call has_column data as class method" ) unless ref $self; @@ -232,8 +243,8 @@ Sets more than one column value at once. sub set_columns { my ($self,$data) = @_; - while (my ($col,$val) = each %$data) { - $self->set_column($col,$val); + foreach my $col (keys %$data) { + $self->set_column($col,$data->{$col}); } return $self; } @@ -255,6 +266,7 @@ sub copy { if $self->result_source->column_info($col)->{is_auto_increment}; } my $new = bless { _column_data => $col_data }, ref $self; + $new->result_source($self->result_source); $new->set_columns($changes); $new->insert; foreach my $rel ($self->result_source->relationships) { @@ -349,6 +361,12 @@ sub inflate_result { Updates the object if it's already in the db, else inserts it. +=head2 insert_or_update + + $obj->insert_or_update + +Alias for L + =cut *insert_or_update = \&update_or_insert; @@ -362,6 +380,10 @@ sub update_or_insert { my @changed_col_names = $obj->is_changed(); if ($obj->is_changed()) { ... } +In array context returns a list of columns with uncommited changes, or +in scalar context returns a true value if there are uncommitted +changes. + =cut sub is_changed { @@ -372,6 +394,8 @@ sub is_changed { if ($obj->is_column_changed('col')) { ... } +Returns a true value if the column has uncommitted changes. + =cut sub is_column_changed { @@ -381,19 +405,21 @@ sub is_column_changed { =head2 result_source - Accessor to the ResultSource this object was created from + my $resultsource = $object->result_source; -=head2 register_column +Accessor to the ResultSource this object was created from -=over 4 +=head2 register_column -=item Arguments: ($column, $column_info) + $column_info = { .... }; + $class->register_column($column_name, $column_info); -=back +Registers a column on the class. If the column_info has an 'accessor' +key, creates an accessor named after the value if defined; if there is +no such key, creates an accessor with the same name as the column - Registers a column on the class. If the column_info has an 'accessor' key, - creates an accessor named after the value if defined; if there is no such - key, creates an accessor with the same name as the column +The column_info attributes are described in +L =cut