[Dbix-class] PK::Auto::Pg patch
Mike Rylander
mrylander at gmail.com
Sun Dec 11 15:30:44 CET 2005
Just off the top of my head after scanning the patch, it doesn't have
support for tables in non-default schemas (Postgres namespaces).
However, I have no idea whether this is a limitation of D::C or just
::Auto::Pg.
Just my $.02, and thanks for all the work on D::C!
On 12/11/05, Matt S Trout <dbix-class at trout.me.uk> wrote:
> This looks sane to me. Would the Pg users among us care to try it and report
> back? 0.04001 beckons :)
>
> On Sun, Dec 11, 2005 at 01:01:28AM -0500, mbailey at vortexit.net wrote:
> > Index: t/run/12pg.tl
> > ===================================================================
> > --- t/run/12pg.tl (revision 380)
> > +++ t/run/12pg.tl (working copy)
> > @@ -7,7 +7,7 @@
> > plan skip_all, 'Set $ENV{DBICTEST_PG_DSN}, _USER and _PASS to run this test'
> > unless ($dsn && $user);
> >
> > -plan tests => 1;
> > +plan tests => 2;
> >
> > DBICTest::Schema->compose_connection('PgTest' => $dsn, $user, $pass);
> >
> > @@ -23,8 +23,12 @@
> >
> > my $new = PgTest::Artist->create({ name => 'foo' });
> >
> > -ok($new->artistid, "Auto-PK worked");
> > +is($new->artistid, 1, "Auto-PK worked");
> >
> > +my $new = PgTest::Artist->create({ name => 'bar' });
> > +
> > +is($new->artistid, 2, "Auto-PK worked");
> > +
> > }
> >
> > 1;
> > Index: lib/DBIx/Class/PK/Auto/Pg.pm
> > ===================================================================
> > --- lib/DBIx/Class/PK/Auto/Pg.pm (revision 380)
> > +++ lib/DBIx/Class/PK/Auto/Pg.pm (working copy)
> > @@ -16,6 +16,7 @@
> >
> > sub get_autoinc_seq {
> > my $self=shift;
> > + my ( @pri_keys);
> >
> > # return the user-defined sequence if known
> > if ($self->sequence) {
> > @@ -23,13 +24,15 @@
> > }
> >
> > 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)\)!;
> > - }
> > + (@pri_keys) = map ( ($dbh->column_info(undef,undef,$self->_table_name,$_)),
> > + ($dbh->primary_key(undef,undef,$self->_table_name)));
> > + while( my $p_key = pop @pri_keys){
> > + my $d_seq_name = $p_key->fetchrow_arrayref->[12];
> > + if(defined $d_seq_name && $d_seq_name =~ /^nextval/) {
> > + ($self->{_autoinc_seq}) = $d_seq_name =~
> > + m!^nextval\('"?([^"']+)"?'::(?:text|regclass)\)!;
> > }
> > + }
> > }
> >
> > 1;
> > @@ -39,7 +42,30 @@
> > DBIx::Class::PK::Auto::Pg - Automatic Primary Key class for Postgresql
> >
> > =head1 SYNOPSIS
> > +# Inside Base Class
> >
> > +Package MyApp::DB;
> > +use base qw/DBIx::Class/;
> > +...
> > +...
> > +
> > +# Inside Table Class
> > +
> > +Package MyApp::DB::Artist;
> > +
> > +use base qw/MyApp::DB/;
> > +
> > +__PACKAGE__->load_components('PK::Auto::Pg');
> > +...
> > +...
> > +
> > +# Inside your App
> > +# assuming that there is an auto-incrementing column artist_id in this table
> > +my $artist1 = MyApp::DB::Artist->create({ name => 'artist1' });
> > +
> > +# this should be the value stored in the auto-incrementing primary key column of object
> > +my $id = $artist1->artist_id;
> > +
> > =head1 DESCRIPTION
> >
> > This class implements autoincrements for Postgresql.
> > _______________________________________________
> > List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
> > Wiki: http://dbix-class.shadowcatsystems.co.uk/
> > IRC: irc.perl.org#dbix-class
> > SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
>
> --
> Matt S Trout Offering custom development, consultancy and support
> Technical Director contracts for Catalyst, DBIx::Class and BAST. Contact
> Shadowcat Systems Ltd. mst (at) shadowcatsystems.co.uk for more information
>
> + Help us build a better perl ORM: http://dbix-class.shadowcatsystems.co.uk/ +
>
> _______________________________________________
> List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
> Wiki: http://dbix-class.shadowcatsystems.co.uk/
> IRC: irc.perl.org#dbix-class
> SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
>
--
Mike Rylander
mrylander at gmail.com
GPLS -- PINES Development
Database Developer
http://open-ils.org
More information about the Dbix-class
mailing list