Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Scope::Container::DBI(User Contributed Perl DocumentatScope::Container::DBI(3)

NAME
       Scope::Container::DBI - DB connection manager with Scope::Container

SYNOPSIS
	 use Scope::Container::DBI;
	 use Scope::Container;

	 FOO: {
	     my	$contaier = start_scope_container();

	     # first connect
	     my	$dbh = Scope::Container::DBI->connect(
		 'dbi:mysql:mydb;host=myhost', 'myuser', 'mypasswd',
		 { RaiseError => 1, mysql_connect_timeout => 4,	mysql_enable_utf8 => 1 }
	     );

	     # same dsn, user/pass, and	attributes, reuse connection
	     my	$dbh2 =	Scope::Container::DBI->connect(
		 'dbi:mysql:mydb;host=myhost', 'myuser', 'mypasswd',
		 { RaiseError => 1, mysql_connect_timeout => 4,	mysql_enable_utf8 => 1 }
	     );

	     #disconnect
	 }

	 BAR: {
	     my	$contaier = start_scope_container();

	     # connect randomly
	     my	$dbh = Scope::Container::DBI->connect(
		 ['dbi:mysql:mydb;host=myslave01', 'myuser', 'mypasswd', {..}],
		 ['dbi:mysql:mydb;host=myslave02', 'myuser', 'mypasswd', {..}],
		 ['dbi:mysql:mydb;host=myslave03', 'myuser', 'mypasswd', {..}],
	     );

	     # reuse randomly connected
	     my	$dbh2 =	Scope::Container::DBI->connect(
		 ['dbi:mysql:mydb;host=myslave01', 'myuser', 'mypasswd', {..}],
		 ['dbi:mysql:mydb;host=myslave02', 'myuser', 'mypasswd', {..}],
		 ['dbi:mysql:mydb;host=myslave03', 'myuser', 'mypasswd', {..}],
	     );

	 }

DESCRIPTION
       Scope::Container::DBI is	DB connection manager that uses
       Scope::Container.  You can control DB connection	within any scope.

METHOD
       $dbh = Scope::Container::DBI->connect();
	   connect to databases	and cache connections.

	     $dbh = Scope::Container::DBI->connect($dsn,$user,$password,$attr);

	   You can give	multiple dsn with arrayref, Scope::Container::DBI
	   chooses database randomly.

	     $dbh = Scope::Container::DBI->connect(
		 [$dsn,$user,$password,$attr],
		 [$dsn,$user,$password,$attr],
		 [$dsn,$user,$password,$attr]
	     );

ADDITIONAL ATTRIBUTES
       ScopeContainerConnectRetry
	   number of connection	retry, if failed connection.

	     my	$dbh = Scope::Container::DBI->connect(
		 'dbi:mysql:mydb;host=myhost', 'myuser', 'mypasswd',
		 { RaiseError => 1, mysql_connect_timeout => 4,	ScopeContainerConnectRetry => 2	}
	     );

	   If connection failed, Scope::Container::DBI retries 2 times
	   internally.

       ScopeContainerConnectRetrySleep
	   millisecond.	interval seconds of connection retry.

NOTE
       Fork/Thread Safety
	   Scope::Container::DBI checks	pid or thread id when reuses database
	   connections.	If pid is different, sets InactiveDestroy to true and
	   don't reuse it.

       Callbacks
	   Scope::Container::DBI doesn't have callback function, but you can
	   set callbacks after connect with DBI's Callbacks function.

	     my	$dbh = Scope::Container::DBI->connect($dsn, $username, $password, {
		 RaiseError => 1,
		 Callbacks  => {
		     connected => sub {
			 shift->do(q{SET NAMES utf8});
		     },
		 },
	     });

       USING DBI SUBCLASSES
	   There is two	way of using DBI subclass with Scope::Container::DBI.
	   One is DBI's	RootClass attribute, other is
	   $Scope::Container::DBI::DBI_CLASS.

	     # use RootClass

	     my	$dbh = Scope::Container::DBI->connect($dsn, $username, $password, {
		 RootClass => 'MySubDBI',
	     });

	     # use $Scope::Container::DBI::DBI_CLASS

	     local $Scope::Container::DBI::DBI_CLASS = 'MySubDBI';
	     my	$dbh = Scope::Container::DBI->connect($dsn, $username, $password);
	     # ref($dbh) is 'MySubDBI::db'

AUTHOR
       Masahiro	Nagano <kazeburo {at} gmail.com>

SEE ALSO
       Scope::Container, Plack::Middleware::Scope::Container

LICENSE
       This library is free software; you can redistribute it and/or modify it
       under the same terms as Perl itself.

perl v5.32.0			  2013-04-08	      Scope::Container::DBI(3)

NAME | SYNOPSIS | DESCRIPTION | METHOD | ADDITIONAL ATTRIBUTES | NOTE | AUTHOR | SEE ALSO | LICENSE

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Scope::Container::DBI&sektion=3&manpath=FreeBSD+12.1-RELEASE+and+Ports>

home | help