X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FPK%2FAuto.pm;h=6928ba77e9decc78186e60425bd746a9145a67f8;hb=bfab575afa37545ee175b824cea554c9c37ab6f5;hp=ff4ed69822185406b35543a1b03bd86fc4f8e5ef;hpb=78bab9cad621ac5e3d1d12b02c41d662dec7a22a;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/PK/Auto.pm b/lib/DBIx/Class/PK/Auto.pm index ff4ed69..6928ba7 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; @@ -14,6 +16,9 @@ DBIx::Class::PK::Auto - Automatic Primary Key class 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 + =head1 METHODS =over 4 @@ -27,30 +32,45 @@ 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)) { $self->throw( "Can't auto-inc for $pri on ".ref $self.": no _last_insert_id method" ) - unless $self->can('_last_insert_id'); - my $id = $self->_last_insert_id; + unless $self->can('last_insert_id'); + my $id = $self->last_insert_id; $self->throw( "Can't get last insert id" ) unless $id; $self->store_column($pri => $id); } return $ret; } +=item 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'); + 1; =back =head1 AUTHORS -Matt S. Trout +Matt S. Trout =head1 LICENSE