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-Source-DBI

For other comments, contact the author.

AUTHOR

Adam Kennedy <adamk@cpan.org>

SEE ALSO

Algorithm::Dependency, http://ali.as/

COPYRIGHT

Copyright 2007 - 2009 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.