1 package DBIx::Class::PK::Auto;
3 #use base qw/DBIx::Class::PK/;
4 use base qw/DBIx::Class/;
10 DBIx::Class::PK::Auto - Automatic Primary Key class
14 # In your table classes (replace PK::Auto::SQLite with your
16 __PACKAGE__->load_components(qw/PK::Auto::SQLite Core/);
17 __PACKAGE__->set_primary_key('id');
21 This class overrides the insert method to get automatically
22 incremented primary keys.
24 You don't want to be using this directly - instead load the
25 appropriate one for your database, e.g. C<PK::Auto::SQLite>, before
30 PK::Auto does this by letting the database assign the primary key
31 field and fetching the assigned value afterwards.
37 Overrides insert so that it will get the value of autoincremented
43 my ($self, @rest) = @_;
44 my $ret = $self->next::method(@rest);
46 # if all primaries are already populated, skip auto-inc
48 map { $populated++ if defined $self->get_column($_) } $self->primary_columns;
49 return $ret if ( $populated == scalar $self->primary_columns );
51 my ($pri, $too_many) =
52 (grep { $self->column_info($_)->{'auto_increment'} }
53 $self->primary_columns)
54 || $self->primary_columns;
55 $self->throw( "More than one possible key found for auto-inc on ".ref $self )
57 unless (defined $self->get_column($pri)) {
58 $self->throw( "Can't auto-inc for $pri on ".ref $self.": no _last_insert_id method" )
59 unless $self->can('last_insert_id');
60 my $id = $self->last_insert_id;
61 $self->throw( "Can't get last insert id" ) unless $id;
62 $self->store_column($pri => $id);
69 Manually define the correct sequence for your table, to avoid the overhead
70 associated with looking up the sequence automatically.
74 __PACKAGE__->mk_classdata('sequence');
80 Matt S. Trout <mst@shadowcatsystems.co.uk>
84 You may distribute this code under the same terms as Perl itself.