Egg::Model::DBI::dbh - Data base handler.


Egg-Release-DBI documentation Contained in the Egg-Release-DBI distribution.

Index


Code Index:

NAME

Top

Egg::Model::DBI::dbh - Data base handler.

DESCRIPTION

Top

It is a data base handler that Egg::Model::DBI returns.

  my $dbh= $e->model('dbi::data_label');

This module operates as Wrapper of the DBI module.

METHODS

Top

Please refer to the document of the DBI module for the method that can be used.

dbh

An original data base handler of DBI or Ima::DBI is returned.

Especially, it is necessary to refer to the original because the attribute of an original data base handler doesn't have the object of this module.

  if ($dbh->dbh->{Active}) {
     .......
  }

pid

Process ID under operation is returned.

  my $process_id = $dbh->pid;

tid

When operating by the thread, the thread ID is returned.

  my $thread_id = $dbh->tid;

SEE ALSO

Top

Egg::Release, Egg::Model, Egg::Model::DBI, Egg::Model::DBI::Base, Class::Accessor::Fast,

AUTHOR

Top

Masatoshi Mizuno, <lushe&64;cpan.org>

COPYRIGHT AND LICENSE

Top


Egg-Release-DBI documentation Contained in the Egg-Release-DBI distribution.

package Egg::Model::DBI::dbh;
#
# Masatoshi Mizuno E<lt>lusheE<64>cpan.orgE<gt>
#
# $Id: dbh.pm 233 2008-01-31 09:46:42Z lushe $
#
use strict;
use warnings;
use base qw/ Class::Accessor::Fast /;

our $VERSION= '0.01';
our $AUTOLOAD;

__PACKAGE__->mk_accessors(qw/ dbh pid tid /);

sub _new {
	my($class, $dbh)= @_;
	bless {
	  dbh=> $dbh, pid=> $$,
	  tid=> ($INC{'threads.pm'} ? threads->tid: 0),
	  AutoCommit=> $dbh->{AutoCommit},
	  }, $class;
}
sub _connected {
	my($self)= @_;
	return 0 if ($self->tid and $self->tid ne threads->tid);
	my $dbh= $self->dbh || die q{Data base handler is empty.};
	return CORE::do { $dbh->{InactiveDestroy}= 1; 0 } if $self->pid ne $$;
	_connected_active($dbh);
}
sub _disconnect {
	my $dbh= $_[0]->dbh || return 0;
	_connected_active($dbh) || return 0;
	eval{ $dbh->rollback unless $dbh->{AutoCommit} };
	$@ and warn $@;
	$dbh->disconnect;
	1;
}
sub _connected_active {
	($_[0] and $_[0]->{Active} and $_[0]->ping) ? 1: 0;
}
sub AUTOLOAD {
	my $self= shift;
	my($method)= $AUTOLOAD=~/([^\:]+)$/;
	no strict 'refs';  ## no critic
	no warnings 'redefine';
	*{__PACKAGE__."::$method"}=
	(($method eq 'commit' or $method eq 'rollback') and $self->{AutoCommit})
	   ? sub { 1 } : sub { shift->dbh->$method(@_) };
	$self->$method(@_);
}
sub DESTROY {}

1;

__END__