
Test::Database::Driver - Base class for Test::Database drivers

package Test::Database::Driver::MyDatabase;
use strict;
use warnings;
use Test::Database::Driver;
our @ISA = qw( Test::Database::Driver );
sub _version {
my ($class) = @_;
...;
return $version;
}
sub create_database {
my ( $self ) = @_;
...;
return $handle;
}
sub drop_database {
my ( $self, $name ) = @_;
...;
}
sub databases {
my ($self) = @_;
...;
return @databases;
}

Test::Database::Driver is a base class for creating Test::Database drivers.

The class provides the following methods:
Create a new Test::Database::Driver object.
If called as Test::Database::Driver->new(), requires a driver parameter to define the actual object class.
Create a new Test::Database::Handle object, attached to an existing database or to a newly created one.
The decision whether to create a new database or not is made by Test::Database::Driver based on the information in the mapper. See "TEMPORARY STORAGE ORGANIZATION" for details.
Return a Data Source Name based on the driver's DSN, with the key/value pairs contained in %args as additional parameters.
This is typically used by dsn() to make a DSN for a specific database, based on the driver's DSN.
The driver's short name (everything after Test::Database::Driver::).
The directory where the driver should store all the files for its databases, if needed. Typically used by file-based database drivers.
version object representing the version of the underlying database enginge. This object is build with the return value of _version().
The version of the DBD used to connect to the database engine, as returned by VERSION().
Return a driver Data Source Name, sufficient to connect to the database engine without specifying an actual database.
Return the connection username.
Return the connection password.
Return the connection information triplet (driver_dsn, username, password).
Return a boolean indicating if the driver's version matches the version constraints in the given request (see Test::Database documentation's section about requests).
The class also provides a few helpful commands that may be useful for driver authors:
Return an unused database name that can be used to create a new database for the driver.
Build a Data Source Name for the database with the given $dbname, based on the driver's DSN.

The SYNOPSIS contains a good template for writing a Test::Database::Driver class.
Creating a driver requires writing the following methods:
Return the version of the underlying database engine.
Create the database for the corresponding DBD driver.
Return a Test::Database::Handle in case of success, and nothing in case of failure to create the database.
Drop the database named $name.
Some methods have defaults implementations in Test::Database::Driver, but those can be overridden in the derived class:
Return a boolean value indicating if the database engine is file-based or not, i.e. if all the database information is stored in a file or a directory, and no external database server is needed.
Return the names of all existing databases for this driver as a list (the default implementation is only valid for file-based drivers).

Subclasses of Test::Database::Driver store useful information in the system's temporary directory, under a directory named Test-Database-$user ($user being the current user's name).
That directory contains the following files:
The database files and directories created by file-based drivers controlled by Test::Database are stored here, under names matching tdd_DRIVER_N, where DRIVER is the lowercased name of the driver and N is a number.
A YAML file containing a cwd() / database name mapping, to enable a given test suite to receive the same database handles in all the test scripts that call the Test::Database-handles()> method.

Philippe Bruhat (BooK), <book@cpan.org>

Copyright 2008-2009 Philippe Bruhat (BooK), all rights reserved.

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