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 For other comments, contact the author. AUTHOR Adam Kennedy SEE ALSO Algorithm::Dependency, 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.