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:

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.