From: Marcus Ramberg Date: Mon, 8 Aug 2005 21:12:01 +0000 (+0000) Subject: auto-increment for postgresql X-Git-Tag: v0.03001~52 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=5d5673023a6c1a0186e84c9e13dd02c5cb6e327e;p=dbsrgits%2FDBIx-Class.git auto-increment for postgresql --- diff --git a/lib/DBIx/Class/PK/Auto/Pg.pm b/lib/DBIx/Class/PK/Auto/Pg.pm new file mode 100644 index 0000000..3452cae --- /dev/null +++ b/lib/DBIx/Class/PK/Auto/Pg.pm @@ -0,0 +1,50 @@ +package DBIx::Class::PK::Auto::Pg; + +use strict; +use warnings; + +use base qw/DBIx::Class/; + +__PACKAGE__->load_components(qw/PK::Auto/); + +sub last_insert_id { + 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 $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\)!; + } + } +} + +1; + +=head1 NAME + +DBIx::Class::PK::Auto::SQLite - Automatic Primary Key class for SQLite + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +This class implements autoincrements for SQLite. + +=head1 AUTHORS + +Matt S. Trout + +=head1 LICENSE + +You may distribute this code under the same terms as Perl itself. + +=cut + diff --git a/t/12pg.t b/t/12pg.t new file mode 100644 index 0000000..e3d3469 --- /dev/null +++ b/t/12pg.t @@ -0,0 +1,31 @@ +use lib qw(lib t/lib); +use DBICTest::Schema; + +use Test::More; + +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); + +plan tests => 1; + +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"); + +1;