/usr/local/CPAN/Schema-RDBMS-AUS/Schema/RDBMS/AUS.pm


package Schema::RDBMS::AUS;

use 5.006;
use strict;
use warnings;

use DBI;
use DBIx::Transaction;
use DBIx::Migration::Directories::Base;

our $VERSION = '0.04';
our $SCHEMA_VERSION = '0.01';

our @optmap = (
    ['AUS_DB_DSN',  'DBI_DSN'],
    ['AUS_DB_USER', 'DBI_USER'],
    ['AUS_DB_PASS', 'DBI_PASS'],
);

sub sdbh {
    my $class = shift;
    my $dbh = $class->dbh(@_);
    
    DBIx::Migration::Directories::Base->new(dbh=>$dbh)->require_schema(
        'Schema-RDBMS-AUS'  =>  $VERSION
    );
    
    return $dbh;
}

sub db_opts {
    my($class, @db_opts) = @_;
    
    $db_opts[$_->[0]] = $ENV{$_->[1]}
        foreach(
            grep    { defined $_->[1] }
            map     { [ $_, (grep { defined $ENV{$_} } @{$optmap[$_]})[0] ] }
            grep    { !defined $db_opts[$_] }
                ($[ .. $#optmap)
        );

    $db_opts[3] = {
        RaiseError => 1, PrintError => 0, PrintWarn => 0, AutoCommit => 1
    } unless defined $db_opts[3];
    
    return(@db_opts);
}

sub dbh {
    my($class, @db_opts) = @_;
   
    @db_opts = $class->db_opts(@db_opts);
    
    my $dbh = DBIx::Transaction->connect_cached(@db_opts)
        or die "Database connection @db_opts[0,1] failed: ", DBI->errstr;

    return $dbh;
}

1;