More descriptive error messages courtesy of Marc Espie
[dbsrgits/DBIx-Class-Historic.git] / lib / DBIx / Class / Row.pm
index 60250b6..213f3cc 100644 (file)
@@ -41,6 +41,9 @@ sub new {
   if ($attrs) {
     $new->throw_exception("attrs must be a hashref")
       unless ref($attrs) eq 'HASH';
+    if (my $source = delete $attrs->{-result_source}) {
+      $new->result_source($source);
+    }
     foreach my $k (keys %$attrs) {
       $new->throw_exception("No such column $k on $class")
         unless $class->has_column($k);
@@ -107,12 +110,12 @@ required.
 sub update {
   my ($self, $upd) = @_;
   $self->throw_exception( "Not in database" ) unless $self->in_storage;
-  $self->set_columns($upd) if $upd;
-  my %to_update = $self->get_dirty_columns;
-  return $self unless keys %to_update;
   my $ident_cond = $self->ident_condition;
   $self->throw_exception("Cannot safely update a row in a PK-less table")
     if ! keys %$ident_cond;
+  $self->set_columns($upd) if $upd;
+  my %to_update = $self->get_dirty_columns;
+  return $self unless keys %to_update;
   my $rows = $self->result_source->storage->update(
                $self->result_source->from, \%to_update, $ident_cond);
   if ($rows == 0) {