Merge 'trunk' into 'DBIx-Class-current'
Brandon L. Black [Mon, 11 Dec 2006 14:24:48 +0000 (14:24 +0000)]
r12251@localhost (orig r2961):  ningu | 2006-12-09 14:39:02 -0600
- die in Storage::DBI::Pg when it can't find the autoinc sequence
r12253@localhost (orig r2963):  ningu | 2006-12-10 10:25:22 -0600
add test for has_many prefetch with adjacent rows with no rel objects
r12254@localhost (orig r2964):  ningu | 2006-12-10 10:26:59 -0600
whoops
r12255@localhost (orig r2965):  blblack | 2006-12-10 19:00:22 -0600
allow pk mutation via column accessor + update
r12316@localhost (orig r2966):  blblack | 2006-12-11 08:24:23 -0600
better fix for pk mutation based on mst irc conversation

1  2 
lib/DBIx/Class/Row.pm
lib/DBIx/Class/Storage/DBI/Pg.pm

Simple merge
@@@ -21,22 -16,10 +21,25 @@@ sub _dbh_last_insert_id 
  sub last_insert_id {
    my ($self,$source,$col) = @_;
    my $seq = ($source->column_info($col)->{sequence} ||= $self->get_autoinc_seq($source,$col));
+   $self->throw_exception("could not fetch primary key for " . $source->name . ", could not "
+     . "get autoinc sequence for $col (check that table and column specifications are correct "
+     . "and in the correct case)") unless defined $seq;
 -  $self->_dbh->last_insert_id(undef,undef,undef,undef, {sequence => $seq});
 +  $self->dbh_do($self->can('_dbh_last_insert_id'), $seq);
 +}
 +
 +sub _dbh_get_autoinc_seq {
 +  my ($self, $dbh, $schema, $table, @pri) = @_;
 +
 +  while (my $col = shift @pri) {
 +    my $info = $dbh->column_info(undef,$schema,$table,$col)->fetchrow_hashref;
 +    if(defined $info->{COLUMN_DEF} and
 +       $info->{COLUMN_DEF} =~ /^nextval\(+'([^']+)'::(?:text|regclass)\)/) {
 +      my $seq = $1;
 +      # may need to strip quotes -- see if this works
 +      return $seq =~ /\./ ? $seq : $info->{TABLE_SCHEM} . "." . $seq;
 +    }
 +  }
 +  return;
  }
  
  sub get_autoinc_seq {