Initial commit of DBIx::Class (experimental Class::DBI-inspired ORM)
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / DB.pm
1 package DBIx::Class::DB;
2
3 use base qw/Class::Data::Inheritable/;
4
5 __PACKAGE__->mk_classdata('_dbi_connect_info');
6 __PACKAGE__->mk_classdata('_dbi_connect_package');
7 __PACKAGE__->mk_classdata('_dbh');
8
9 sub _get_dbh {
10   my ($class) = @_;
11   unless ((my $dbh = $class->_dbh) && $dbh->FETCH('Active') && $dbh->ping) {
12     $class->_populate_dbh;
13   }
14   return $class->_dbh;
15 }
16
17 sub _populate_dbh {
18   my ($class) = @_;
19   my @info = @{$class->_dbi_connect_info || []};
20   my $pkg = $class->_dbi_connect_package || $class;
21   $pkg->_dbh($class->_dbi_connect(@info));
22 }
23
24 sub _dbi_connect {
25   my ($class, @info) = @_;
26   return DBI->connect_cached(@info);
27 }
28
29 1;