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(
prefix => 'company_',
dsn => 'dbi:SQLite:dbname=/tmp/db2.db',
sql => 'SELECT id, 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(
prefix => 'company_',
dsn => 'dbi:SQLite:dbname=/tmp/db2.db',
sql => 'SELECT id, 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). You can optionally provide a prefix that will be used to prevent name clashes.
Please note that this will also load the attached query into memory.
natural_join
Not yet implemented.
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
The tables to be joined are stored in memory.
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.