NAME

DBIx::DBO - An OO interface to SQL queries and results. Easily constructs SQL queries, and simplifies processing of the returned data.

SYNOPSIS

use DBIx::DBO;

# Create the DBO
my $dbo = DBIx::DBO->connect('DBI:mysql:my_db', 'me', 'mypasswd') or die $DBI::errstr;

# Create a "readonly" connection - useful for a slave database
$dbo->connect_readonly('DBI:mysql:my_db', 'me', 'mypasswd') or die $DBI::errstr;

# Start with a Query object
my $query = $dbo->query('my_table');

# Find records with an 'o' in the name
$query->where('name', 'LIKE', '%o%');

# And with an id that is less than 500
$query->where('id', '<', 500);

# Exluding those with an age range from 20 to 29
$query->where('age', 'NOT BETWEEN', [20, 29]);

# Return only the first 10 rows
$query->limit(10);

# Fetch the rows
while (my $row = $query->fetch) {

    # Use the row as an array reference
    printf "id=%d  name=%s  status=%s\n", $row->[0], $row->[1], $row->[4];

    # Or as a hash reference
    print 'id=', $row->{id}, "\n", 'name=', $row->{name};

    # Update/delete rows
    $row->update(status => 'Fired!') if $row->{name} eq 'Harry';
    $row->delete if $record->{id} == 27;
}

# Join tables (INNER JOIN)
my ($query, $table1, $table2, $table3) = $dbo->query('my_table', 't2', 'third');
$query->join_on($table2 ** 'parent_id', '=', $table3 ** 'child_id');

# Join tables (LEFT JOIN)
my ($query, $table1) = $dbo->query('my_table');
my $table2 = $query->join_table('another_table', 'LEFT');
$query->join_on($table2 ** 'parent_id', '=', $table1 ** 'child_id');

DESCRIPTION

This module provides a convenient and efficient way to access a database. It can construct queries for you and returns the results in easy to use methods.

METHODS

config

$global_setting = DBIx::DBO->config($option);
DBIx::DBO->config($option => $global_setting);
$dbo_setting = $dbo->config($option);
$dbo->config($option => $dbo_setting);

Get or set the global or DBIx::DBO config settings. When setting an option, the previous value is returned.

connect

$dbo = DBIx::DBO->connect($data_source, $username, $password, \%attr)
    or die $DBI::errstr;

Takes the same arguments as DBI->connect for a read-write connection to a database. It returns the DBIx::DBO object if the connection succeeds or undefined on failure.

connect_readonly

Takes the same arguments as connect for a read-only connection to a database. It returns the DBIx::DBO object if the connection succeeds or undefined on failure.

Both connect & connect_readonly can be called on a DBIx::DBO object to add that respective connection to create a DBIx::DBO with both read-write and read-only connections.

my $dbo = DBIx::DBO->connect($master_dsn, $username, $password, \%attr)
    or die $DBI::errstr;
$dbo->connect_readonly($slave_dsn, $username, $password, \%attr)
    or die $DBI::errstr;

dbh

The read-write DBI handle.

rdbh

The read-only DBI handle, or if there is no read-only connection, the read-write DBI handle.

do

$dbo->do($statement)         or die $dbo->dbh->errstr;
$dbo->do($statement, \%attr) or die $dbo->dbh->errstr;
$dbo->do($statement, \%attr, @bind_values) or die ...

This provides access to DBI do method. It defaults to using the read-write DBI handle.

selectrow_array

$dbo->selectrow_array($statement, \%attr, @bind_values);

This provides access to DBI selectrow_array method.

selectrow_arrayref

$dbo->selectrow_arrayref($statement, \%attr, @bind_values);

This provides access to DBI selectrow_arrayref method.

selectall_arrayref

$dbo->selectall_arrayref($statement, \%attr, @bind_values);

This provides access to DBI selectall_arrayref method.

table_info

$dbo->table_info($table);
$dbo->table_info([$schema, $table]);
$dbo->table_info($table_object);

Returns a hashref of PrimaryKeys and Column_Idx for the table. Mainly for internal use.

table

$dbo->table($table);
$dbo->table([$schema, $table]);
$dbo->table($table_object);

Create a new table object for the table specified.

query

$dbo->query($table, ...);
$dbo->query([$schema, $table], ...);
$dbo->query($table_object, ...);

Create a new query object from the tables specified. In scalar context, just the query object will be returned. In list context table objects will also be returned for each table specified.

row

$dbo->row($table_object);
$dbo->row($query_object);

Create a new row object.

disconnect

Disconnect both the read-write & read-only connections to the database.

AUTHOR

Vernon Lyon, <vlyon at cpan.org>

BUGS

Please report any bugs or feature requests to bug-dbix-dbo at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=DBIx-DBO. 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::DBO

You can also look for information at:

COPYRIGHT & LICENSE

Copyright 2009 Vernon Lyon, all rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.