NAME
DBIx::MultiDB - join data from multiple databases
SYNOPSIS
use DBIx::MultiDB;
# Example 1
my $query = DBIx::MultiDB->new(
dsn => 'dbi:SQLite:dbname=/tmp/db1.db',
sql => 'SELECT id, name, company_id FROM employee',
);
$query->left_join(
dsn => 'dbi:SQLite:dbname=/tmp/db2.db',
sql => 'SELECT id, name AS company_name FROM company',
key => 'id', # in this table
referenced_by => 'company_id', # in base table
);
$query->execute();
# Example 2
my $query = DBIx::MultiDB->new(
dsn => 'dbi:SQLite:dbname=/tmp/db1.db',
);
$query->left_join(
dsn => 'dbi:SQLite:dbname=/tmp/db2.db',
sql => 'SELECT id, name AS company_name FROM company',
key => 'company_id', # in base table
references => 'id', # in this table
);
$query->prepare('SELECT id, name, company_id FROM employee');
$query->execute();
while ( my $row = $query->fetchrow_hashref ) {
# ...
}
DESCRIPTION
DBIx::MultiDB provides a simple way to join data from different sources.
You are not limited to a single database engine: in fact, you can join data from any source for which you have a DBI driver (MySQL, PostgreSQL, SQLite, etc). You can even mix them!
METHODS
new
Constructor. You can provide a dsn and sql, which is your base query.
left_join
attach
join
Once you have a base query, you can attach multiple queries that will be joined to it. For each one, you must provide a dsn, sql, and the relationship information (key and referenced_by).
Please note that this will also load the attached query into memory.
inner_join
Not yet implemented.
prepare
If you didn't provide the sql to the constructor, you can do it here. Example:
$query->prepare('SELECT id, name, company_id FROM employee');
$query->execute();
execute
Execute the base query.
fetchrow_hashref
Return a hashref, containing field names and values. The keys pointing to attached queries will be expanded into the attached queries' fields.
AUTHOR
Nelson Ferraz, <nferraz at gmail.com>
CAVEATS
While the base query is processed row by row, the joined tables must be previously stored in memory.
That means you can easily process hundreds of millions rows in the base query; but you must watch how much information you retrieve in the joins.
BUGS
Please report any bugs or feature requests to bug-dbix-multidb at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=DBIx-MultiDB. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc DBIx::MultiDB
You can also look for information at:
RT: CPAN's request tracker
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
Search CPAN
ACKNOWLEDGEMENTS
COPYRIGHT & LICENSE
Copyright 2010 Nelson Ferraz, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.