Algorithm-Dependency-Source-DBI
view release on metacpan or search on metacpan
lib/Algorithm/Dependency/Source/DBI.pm view on Meta::CPAN
L<Algorithm::Dependency::Source::DBI> extends L<Algorithm::Dependency>
by providing a simple way to create dependency objects that pull their
data from a database directly.
=head1 METHODS
=cut
use 5.005;
use strict;
use Params::Util qw{ _STRING _ARRAY _INSTANCE };
use Algorithm::Dependency::Item ();
use Algorithm::Dependency::Source ();
use vars qw{$VERSION @ISA};
BEGIN {
$VERSION = '1.06';
@ISA = 'Algorithm::Dependency::Source';
}
#####################################################################
# Constructor and Accessors
=pod
=head2 new
my $simple = Algorithm::Dependency::Source::DBI->new(
dbh => $dbi_db_handle,
select_ids => 'select name from stuff',
select_depends => 'select from, to from m2m_deps',
);
my $complex = Algorithm::Dependency::Source::DBI->new(
dbh => $dbi_db_handle,
select_ids => [ 'select name from stuff where foo = ?', 'bar' ],
select_depends => [ 'select from, to from m2m_deps where from = ?', 'bar' ],
);
The C<new> constructor takes three named named params.
The C<dbh> param should be a standard L<DBI> database connection.
The C<select_ids> param is either a complete SQL string, or a reference to
an C<ARRAY> containing a SQL string with placeholders and matching
variables.
When executed on the database, it should return a single column containing
the complete set of all item identifiers.
The C<select_depends> param is either a complete SQL string, or a reference
to an C<ARRAY> containing a SQL string with placeholders and matching
variables.
When executed on the database, it should return two columns containing
the complete set of all dependencies, where identifiers in the first-column
depends on identifiers in the second-column.
Returns a new L<Algorithm::Dependency::Source::DBI> object, or dies on
error.
=cut
sub new {
my $class = shift;
# Create the object
my $self = bless { @_ }, $class;
# Apply defaults
if ( _STRING($self->{select_ids}) ) {
$self->{select_ids} = [ $self->{select_ids} ];
}
if ( _STRING($self->{select_depends}) ) {
$self->{select_depends} = [ $self->{select_depends} ];
}
# Check params
unless ( _INSTANCE($self->dbh, 'DBI::db') ) {
Carp::croak("The dbh param is not a DBI database handle");
}
unless ( _ARRAY($self->select_ids) and _STRING($self->select_ids->[0]) ) {
Carp::croak("Missing or invalid select_ids param");
}
unless ( _ARRAY($self->select_depends) and _STRING($self->select_depends->[0]) ) {
Carp::croak("Did not provide the select_depends query");
}
return $self;
}
=pod
=head2 dbh
The C<dbh> accessor returns the database handle provided to the constructor.
=cut
sub dbh {
$_[0]->{dbh};
}
=pod
=head2 select_ids
The C<select_ids> accessor returns the SQL statement provided to the
constructor. If a raw string was provided, it will be returned as a
reference to an C<ARRAY> containing the SQL string and no params.
=cut
sub select_ids {
$_[0]->{select_ids};
}
( run in 0.414 second using v1.01-cache-2.11-cpan-39bf76dae61 )