package Persistence::ValueGenerator::SequenceGenerator;
use strict;
use warnings;
use vars qw(@EXPORT_OK %EXPORT_TAGS $VERSION);
use base qw (Exporter Persistence::ValueGenerator);
use Abstract::Meta::Class ':all';
@EXPORT_OK = qw(sequence_generator);
%EXPORT_TAGS = (all => \@EXPORT_OK);
$VERSION = 0.01;
=head1 NAME
Persistence::ValueGenerator::SequenceGenerator - Unique value generator based on databse sequence
=head1 CLASS HIERARCHY
Persistence::ValueGenerator
|
+----Persistence::ValueGenerator::SequenceGenerator
=head1 SYNOPSIS
use Persistence::ValueGenerator::SequenceGenerator;
my $generator = Persistence::ValueGenerator::SequenceGenerator->new(
entity_manager_name => $entity_manager_name,
name => 'pk_generator',
sequence_name => 'cust_seq',
allocation_size => 1,
);
$generator->nextval;
or
use Persistence::ValueGenerator::SequenceGenerator ':all';
my $generator = sequence_generator 'pk_generator' => (
entity_manager_name => $entity_manager_name,
sequence_name => 'cust_seq',
allocation_size => 1,
)
=head1 DESCRIPTION
Represents sequence generator that uses database sequcnce.
=head1 EXPORT
sequence_generator by ':all' tag.
=head2 ATTRIBUTES
=over
=item sequence_name
=cut
has '$.sequence_name' => (required => 1);
=back
=head2 METHODS
=over
=item retrieve_next_value
Returns next value for the instance generator
=cut
sub retrieve_next_value {
my ($self) = @_;
my $entity_manager = $self->entity_manager;
my $connection = $entity_manager->connection;
$connection->sequence_value($self->sequence_name);
}
=item sequence_generator
Creates a new instance of Persistence::ValueGenerator::TableGenerator
=cut
sub sequence_generator {
my $name = shift;
__PACKAGE__->new(@_, name => $name);
}
1;
__END__
=back
=head1 SEE ALSO
L<Persistence::ValueGenerator>
=head1 COPYRIGHT AND LICENSE
The Persistence::ValueGenerator::SequenceGenerator module is free software. You may distribute under the terms of
either the GNU General Public License or the Artistic License, as specified in
the Perl README file.
=head1 AUTHOR
Adrian Witas, adrian@webapp.strefa.pl
=cut
1;