Name

DBIx::Connector::Driver - Database-specific connection interface

Description

Some of the things that DBIx::Connector does are implemented differently by different drivers, or the official interface provided by the \s-1DBI\s0 may not be implemented for a particular driver. The driver-specific code therefore is encapsulated in this separate driver class.

Most of the \s-1DBI\s0 drivers work uniformly, so in most cases the implementation provided here in DBIx::Connector::Driver will work just fine. It's only when something is different that a driver subclass needs to be added. In such a case, the subclass's name is the same as the \s-1DBI\s0 driver. For example the driver for DBD::Pg is DBIx::Connector::Driver::Pg and the driver for DBD::mysql is DBIx::Connector::Driver::mysql.

If you're just a user of DBIx::Connector, you can ignore the driver classes. DBIx::Connector uses them internally to do its magic, so you needn't worry about them.

Interface

In case you need to implement a driver, here's the interface you can modify.

Constructor

\*(C`new\*(C'

  my $driver = DBIx::Connector::Driver->new( $driver );

Constructs and returns a driver object. Each driver class is implemented as a singleton, so the same driver object is always returned for the same driver. The \*(C`driver\*(C' parameter should be a Perl \s-1DBI\s0 driver name, such as \*(C`Pg\*(C' for DBD::Pg or \*(C`SQLite\*(C' for DBD::SQLite. If a subclass has been defined for $driver, then the object will be of that class. Otherwise it will be an instance of the driver base class.

Instance Methods

\*(C`ping\*(C'

$driver->ping($dbh);

Calls \*(C`$dbh->ping\*(C'. Override if for some reason the \s-1DBI\s0 driver doesn't do it right.

\*(C`begin_work\*(C'

$driver->begin_work($dbh);

Calls \*(C`$dbh->begin_work\*(C'. Override if for some reason the \s-1DBI\s0 driver doesn't do it right.

\*(C`commit\*(C'

$driver->commit($dbh);

Calls \*(C`$dbh->commit\*(C'. Override if for some reason the \s-1DBI\s0 driver doesn't do it right.

\*(C`rollback\*(C'

$driver->rollback($dbh);

Calls \*(C`$dbh->rollback\*(C'. Override if for some reason the \s-1DBI\s0 driver doesn't do it right.

\*(C`savepoint\*(C'

$driver->savepoint($dbh, $name);

A no-op. Override if your database does in fact support savepoints. The driver subclass should create a savepoint with the given $name. See the implementations in DBIx::Connector::Driver::Pg and DBIx::Connector::Driver::Oracle for examples.

\*(C`release\*(C'

$driver->release($dbh, $name);

A no-op. Override if your database does in fact support savepoints. The driver subclass should release the savepoint with the given $name. See the implementations in DBIx::Connector::Driver::Pg and DBIx::Connector::Driver::Oracle for examples.

\*(C`rollback_to\*(C'

$driver->rollback_to($dbh, $name);

A no-op. Override if your database does in fact support savepoints. The driver subclass should rollback to the savepoint with the given $name. See the implementations in DBIx::Connector::Driver::Pg and DBIx::Connector::Driver::Oracle for examples.

Authors

This module was written and is maintained by:

David E. Wheeler <[email protected]>

It is based on code written by:

Matt S. Trout <[email protected]>
Peter Rabbitson <[email protected]>

Copyright and License

Copyright (c) 2009-2010 David E. Wheeler. Some Rights Reserved.

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