From: David Kamholz Date: Tue, 13 Dec 2005 20:23:50 +0000 (+0000) Subject: PK::Auto::Pg bug fix, only checks primary keys X-Git-Tag: v0.05005~137 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=dbsrgits%2FDBIx-Class.git;a=commitdiff_plain;h=b6b65a3e1ec6603147c13a96d4f753f7a57d4d89 PK::Auto::Pg bug fix, only checks primary keys --- diff --git a/lib/DBIx/Class/PK/Auto/Pg.pm b/lib/DBIx/Class/PK/Auto/Pg.pm index ab401f8..78d1d65 100644 --- a/lib/DBIx/Class/PK/Auto/Pg.pm +++ b/lib/DBIx/Class/PK/Auto/Pg.pm @@ -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; diff --git a/t/run/12pg.tl b/t/run/12pg.tl index f2aff97..9f8ce94 100644 --- a/t/run/12pg.tl +++ b/t/run/12pg.tl @@ -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;"); }