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 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<PK::Auto::SQLite>, before
+C<Core>.
-=head1 METHODS
+=head1 LOGIC
-=over 4
+PK::Auto does this by letting the database assign the primary key
+field and fetching the assigned value afterwards.
-=item insert
+=head1 METHODS
+
+=head2 insert
Overrides insert so that it will get the value of autoincremented
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 $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) =
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.
1;
-=back
-
=head1 AUTHORS
Matt S. Trout <mst@shadowcatsystems.co.uk>