X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FPK%2FAuto.pm;h=ac89dad15a5008de33d35a5d8edf7682888a4df0;hb=8292706e66edd1a95b3af7796aa013285fc842ef;hp=ac7f3dd7006a7c984cbc940531c2499008e764ab;hpb=fb184da1e1f083b01b2c071f9f2a59395895d469;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/PK/Auto.pm b/lib/DBIx/Class/PK/Auto.pm index ac7f3dd..ac89dad 100644 --- a/lib/DBIx/Class/PK/Auto.pm +++ b/lib/DBIx/Class/PK/Auto.pm @@ -1,41 +1,61 @@ package DBIx::Class::PK::Auto; -use base qw/Class::Data::Inheritable/; +#use base qw/DBIx::Class::PK/; +use base qw/DBIx::Class/; use strict; use warnings; =head1 NAME -DBIx::Class::PK::Auto - Automatic Primary Key class +DBIx::Class::PK::Auto - Automatic primary key class =head1 SYNOPSIS + # In your table classes (replace PK::Auto::SQLite with your database) + __PACKAGE__->load_components(qw/PK::Auto::SQLite Core/); + __PACKAGE__->set_primary_key('id'); + =head1 DESCRIPTION -This class overrides the insert method to get automatically -incremented primary keys. +This class overrides the insert method to get automatically incremented primary +keys. -You don't want to be using this directly - instead load the appropriate -one for your database, e.g. PK::Auto::SQLite +You don't want to be using this directly - instead load the appropriate one for +your database, e.g. C, in your table classes: -=head1 METHODS + __PACKAGE__->load_components(qw/PK::Auto::SQLite Core/); + +Note that C is specified as the leftmost argument. -=over 4 +Alternatively, you can load the components separately: -=item insert + __PACKAGE__->load_components(qw/Core/); + __PACKAGE__->load_components(qw/PK::Auto::SQLite/); -Overrides insert so that it will get the value of autoincremented -primary keys. +This can be used, for example, if you have different databases and need to +determine the appropriate C class at runtime. + +=head1 LOGIC + +C does this by letting the database assign the primary key field and +fetching the assigned value afterwards. + +=head1 METHODS + +=head2 insert + +Overrides C so that it will get the value of autoincremented primary +keys. =cut sub insert { my ($self, @rest) = @_; - my $ret = $self->NEXT::ACTUAL::insert(@rest); + my $ret = $self->next::method(@rest); # if all primaries are already populated, skip auto-inc my $populated = 0; - map { $populated++ if defined $self->$_ } $self->primary_columns; + map { $populated++ if defined $self->get_column($_) } $self->primary_columns; return $ret if ( $populated == scalar $self->primary_columns ); my ($pri, $too_many) = @@ -54,7 +74,7 @@ sub insert { return $ret; } -=item sequence +=head2 sequence Manually define the correct sequence for your table, to avoid the overhead associated with looking up the sequence automatically. @@ -65,8 +85,6 @@ __PACKAGE__->mk_classdata('sequence'); 1; -=back - =head1 AUTHORS Matt S. Trout @@ -76,4 +94,3 @@ Matt S. Trout You may distribute this code under the same terms as Perl itself. =cut -