X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FPK%2FAuto.pm;h=2e3e4f3cff35837862ef9cc71aa0256d2a1c9328;hb=6718c5f0bf2bb9528c055b5974488a6d37f1209a;hp=43a1ece3239a9a8cc7069777943cf4becf860762;hpb=daec44b85cffd777869c9652273670b27625e167;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/PK/Auto.pm b/lib/DBIx/Class/PK/Auto.pm index 43a1ece..2e3e4f3 100644 --- a/lib/DBIx/Class/PK/Auto.pm +++ b/lib/DBIx/Class/PK/Auto.pm @@ -1,5 +1,7 @@ package DBIx::Class::PK::Auto; +#use base qw/DBIx::Class::PK/; +use base qw/DBIx::Class/; use strict; use warnings; @@ -9,19 +11,28 @@ 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. -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, before +C. -=head1 METHODS +=head1 LOGIC + +PK::Auto does this by letting the database assign the primary key +field and fetching the assigned value afterwards. -=over 4 +=head1 METHODS -=item insert +=head2 insert Overrides insert so that it will get the value of autoincremented primary keys. @@ -30,11 +41,17 @@ primary keys. 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->get_column($_) } $self->primary_columns; + return $ret if ( $populated == scalar $self->primary_columns ); + my ($pri, $too_many) = - (grep { $self->_primaries->{$_}{'auto_increment'} } - keys %{ $self->_primaries }) - || (keys %{ $self->_primaries }); + (grep { $self->column_info($_)->{'auto_increment'} } + $self->primary_columns) + || $self->primary_columns; $self->throw( "More than one possible key found for auto-inc on ".ref $self ) if $too_many; unless (defined $self->get_column($pri)) { @@ -47,9 +64,16 @@ sub insert { return $ret; } -1; +=head2 sequence + +Manually define the correct sequence for your table, to avoid the overhead +associated with looking up the sequence automatically. + +=cut + +__PACKAGE__->mk_classdata('sequence'); -=back +1; =head1 AUTHORS