PK::Auto::Pg bug fix, only checks primary keys
David Kamholz [Tue, 13 Dec 2005 20:23:50 +0000 (20:23 +0000)]
lib/DBIx/Class/PK/Auto/Pg.pm
t/run/12pg.tl

index ab401f8..78d1d65 100644 (file)
@@ -8,28 +8,31 @@ use base qw/DBIx::Class/;
 __PACKAGE__->load_components(qw/PK::Auto/);
 
 sub last_insert_id {
-  my $self=shift;
+  my $self = shift;
   $self->get_autoinc_seq unless $self->{_autoinc_seq};
   $self->storage->dbh->last_insert_id(undef,undef,undef,undef,
     {sequence=>$self->{_autoinc_seq}});
 }
 
 sub get_autoinc_seq {
-  my $self=shift;
+  my $self = shift;
   
   # return the user-defined sequence if known
   if ($self->sequence) {
     return $self->{_autoinc_seq} = $self->sequence;
   }
   
-  my $dbh= $self->storage->dbh;
-    my $sth    = $dbh->column_info( undef, undef, $self->_table_name, '%');
-    while (my $foo = $sth->fetchrow_arrayref){
-      if(defined $foo->[12] && $foo->[12] =~ /^nextval/) {
-        ($self->{_autoinc_seq}) = $foo->[12] =~ 
-          m!^nextval\('"?([^"']+)"?'::(?:text|regclass)\)!;
-      }
-    }
+  my @pri = keys %{ $self->_primaries };
+  my $dbh = $self->storage->dbh;
+  while (my $col = shift @pri) {
+    my $info = $dbh->column_info(undef,undef,$self->table,$col)->fetchrow_arrayref;
+    if (defined $info->[12] and $info->[12] =~ 
+      /^nextval\('"?([^"']+)"?'::(?:text|regclass)\)/)
+    {
+      $self->{_autoinc_seq} = $1;
+      last;
+    } 
+  }
 }
 
 1;
index f2aff97..9f8ce94 100644 (file)
@@ -5,25 +5,27 @@ my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_PG_${_}" } qw/DSN USER PASS/};
 #warn "$dsn $user $pass";
 
 plan skip_all, 'Set $ENV{DBICTEST_PG_DSN}, _USER and _PASS to run this test'
-  unless ($dsn && $user);
+  . ' (note: creates and drops a table named artist!)' unless ($dsn && $user);
 
-plan tests => 1;
+plan tests => 2;
 
 DBICTest::Schema->compose_connection('PgTest' => $dsn, $user, $pass);
 
 my $dbh = PgTest::Artist->storage->dbh;
 
-eval {
-  $dbh->do("DROP TABLE artist;");
-};
-
 $dbh->do("CREATE TABLE artist (artistid serial PRIMARY KEY, name VARCHAR(255));");
 
 PgTest::Artist->load_components('PK::Auto::Pg');
 
 my $new = PgTest::Artist->create({ name => 'foo' });
 
-ok($new->artistid, "Auto-PK worked");
+is($new->artistid, 1, "Auto-PK worked");
+
+$new = PgTest::Artist->create({ name => 'bar' });
+
+is($new->artistid, 2, "Auto-PK worked");
+
+$dbh->do("DROP TABLE artist;");
 
 }