Arthur Axel fREW Schmidt
YAPC::NA
Orlando, Florida
2014 June 23, 16:00
DBIx::Introspector->new(drivers => '2013-12.01')
$dbii->decorate_driver_unconnected( Pg => 'concat_sql' => '? || ?', )
$dbii->decorate_driver_connected(
Pg => 'rdbms_version' => sub {
my $dbh = shift;
$dbh->selectcol_arrayref('SELECT VERSION()')->[0]
},
)
$dbii->get($dbh, $dsn, 'concat_sql')
my $dbh;
$dbii->get(sub { $dbh }, $dsn, 'concat_sql', {
dbh_fallback_connect => sub {
$dbh = DBI->connect(...)
},
});
Links:
DBIx::Introspector::Driver->new({
name => 'DBI',
connected_determination_strategy => sub { $_[1]->{Driver}{Name} },
unconnected_determination_strategy => sub {
my $dsn = $_[1] || $ENV{DBI_DSN} || '';
my ($driver) = $dsn =~ /dbi:([^:]+):/i;
$driver ||= $ENV{DBI_DRIVER};
return $driver
},
})
DBIx::Introspector::Driver->new({
name => 'Mongo',
parents => ['DBI'],
})
$dbii->add_driver({
name => 'Mongo',
parents => ['DBI'],
})
$dbii->replace_driver({
name => 'DBI',
connected_determination_strategy => sub {
$_[1]->{Driver}{Name}
? $_[1]->{Driver}{Name}
: $_[1]->{Driver}{MegaDrive}
},
unconnected_determination_strategy => sub {
my $dsn = $_[1] || $ENV{DBI_DSN} || '';
my ($driver) = $dsn =~ /dbi:([^:]+):/i;
$driver ||= $ENV{DBI_DRIVER};
return $driver
},
})
/
#