- more schema update stuff:
[DBIx-DBSchema.git] / DBSchema / _util.pm
1 # internal utility subroutines used by multiple classes
2
3 package DBIx::DBSchema::_util;
4
5 use strict;
6 use vars qw(@ISA @EXPORT_OK);
7 use Exporter;
8 use Carp qw(confess);
9 use DBI;
10
11 @ISA = qw(Exporter);
12 @EXPORT_OK = qw( _load_driver _dbh );
13
14 sub _load_driver {
15   my($dbh) = @_;
16   my $driver;
17   if ( ref($dbh) ) {
18     $driver = $dbh->{Driver}->{Name};
19   } else {
20     $dbh =~ s/^dbi:(\w*?)(?:\((.*?)\))?://i #nicked from DBI->connect
21                         or '' =~ /()/; # ensure $1 etc are empty if match fails
22     $driver = $1 or confess "can't parse data source: $dbh";
23   }
24
25   #require "DBIx/DBSchema/DBD/$driver.pm";
26   #$driver;
27   eval 'require "DBIx/DBSchema/DBD/$driver.pm"' and $driver or die $@;
28 }
29
30 #sub _dbh_or_dbi_connect_args {
31 sub _dbh {
32   my($dbh) = shift;
33   my $created_dbh = 0;
34   unless ( ref($dbh) || ! @_ ) {
35     $dbh = DBI->connect( $dbh, @_ ) or die $DBI::errstr;
36     $created_dbh = 1;
37   }
38
39   ( $dbh, $created_dbh );
40 }
41
42 1;
43