NAME
Algorithm::Dependency::Source::DBI - Database source for
Algorithm::Dependency
SYNOPSIS
use DBI;
use Algorithm::Dependency;
use Algorithm::Dependency::Source::DBI;
# Load the data from a database
my $data_source = Algorithm::Dependency::Source::DBI->new(
dbh => DBI->connect('dbi:SQLite:sqlite.db'),
select_ids => 'select name from stuff',
select_depends => 'select from, to from m2m_deps',
);
# Create the dependency object, and indicate the items that are already
# selected/installed/etc in the database
my $dep = Algorithm::Dependency->new(
source => $data_source,
selected => [ 'This', 'That' ]
) or die 'Failed to set up dependency algorithm';
# For the item 'Foo', find out the other things we also have to select.
# This WON'T include the item we selected, 'Foo'.
my $also = $dep->depends( 'Foo' );
print $also
? "By selecting 'Foo', you are also selecting the following items: "
. join( ', ', @$also )
: "Nothing else to select for 'Foo'";
# Find out the order we need to act on the items in.
# This WILL include the item we selected, 'Foo'.
my $schedule = $dep->schedule( 'Foo' );
DESCRIPTION
The Algorithm::Dependency module has shown itself to be quite reliable
over a long period of time, as well as relatively easy to setup and use.
However, recently there has been an increasing use of things like
DBD::SQLite to store and distribute structured data.
Algorithm::Dependency::Source::DBI extends Algorithm::Dependency by
providing a simple way to create dependency objects that pull their data
from a database directly.
METHODS
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 "new" constructor takes three named named params.
The "dbh" param should be a standard DBI database connection.
The "select_ids" param is either a complete SQL string, or a reference
to an "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 "select_depends" param is either a complete SQL string, or a
reference to an "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 Algorithm::Dependency::Source::DBI object, or dies on
error.
dbh
The "dbh" accessor returns the database handle provided to the
constructor.
select_ids
The "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 "ARRAY" containing the SQL string and no params.
select_depends
The "select_depends" accessor returns the SQL statement provided to the
constructor. If a raw string was provided, it will be returned as a
reference to an "ARRAY" containing the SQL string and no params.
SUPPORT
To file a bug against this module, use the CPAN bug tracking system
<
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Algorithm-Dependency-Sou
rce-DBI>
For other comments, contact the author.
AUTHOR
Adam Kennedy <
[email protected]>
SEE ALSO
Algorithm::Dependency, <
http://ali.as/>
COPYRIGHT
Copyright 2007 Adam Kennedy.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included
with this module.