NAME
DBIx::TempDB - Create a temporary database
VERSION
0.02
SYNOPSIS
use Test::More;
use DBIx::TempDB;
use DBI;
# create a temp database
my $tmpdb = DBIx::TempDB->new("postgresql://postgres@localhost");
# print complete url to db server with database name
diag $tmpdb->url;
# useful for reading in fixtures
$tmpdb->execute("create table users (name text)");
$tmpdb->execute_file("path/to/file.sql");
# connect to the temp database
my $db = DBI->connect($tmpdb->dsn);
# run tests...
done_testing;
# database is cleaned up when test exit
DESCRIPTION
DBIx::TempDB is a module which allow you to create a temporary database, which only lives as long as your process is alive. This can be very convenient when you want to run tests in parallel, without messing up the state between tests.
This module currently support PostgreSQL and MySQL by installing the optional modules DBD::Pg and/or DBD::mysql. Let me know if you want another database to be supported.
This module is currently EXPERIMENTAL. That means that if any major design flaws have been made, they will be fixed without warning.
METHODS
create_database
$self = $self->create_database;
This method will create a temp database for the current process. Calling this method multiple times will simply do nothing. This method is normally automatically called by "new".
This method will also set DBIX_TEMP_DB_URL
to a URL suited for modules such as Mojo::Pg and Mojo::mysql.
The database name generated is subject for change, but currently it looks like something like this: tmp_${UID}_${0}_${HOSTNAME}
.
dsn
($dsn, $user, $pass, $attrs) = $self->dsn;
($dsn, $user, $pass, $attrs) = DBIx::TempDB->dsn($url);
Will parse "url" or $url
, and return a list of arguments suitable for "connect" in DBI.
Note that this method cannot be called as an object method before "create_database" is called. You can on the other hand call it as a class method, with an Mojo::URL or URL string as input.
execute
$self = $self->execute($sql);
This method will execute the given $sql
statements in the temporary SQL server.
execute_file
$self = $self->execute_file("relative/to/executable.sql");
$self = $self->execute_file("/absolute/path/stmt.sql");
This method will read the contents of a file and execute the SQL statements in the temporary server.
This method is a thin wrapper around "execute".
new
$self = DBIx::TempDB->new($url, %args);
$self = DBIx::TempDB->new("mysql://127.0.0.1");
$self = DBIx::TempDB->new("postgresql://postgres@db.example.com");
Creates a new object after checking the $url
is valid. %args
can be:
auto_create
"create_database" will be called automatically, unless
auto_create
is set to a false value.
url
$url = $self->url;
Returns the input URL as URL object, with path set to the temp database name.
Note that this method cannot be called before "create_database" is called.
COPYRIGHT AND LICENSE
Copyright (C) 2014, Jan Henning Thorsen
This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.
AUTHOR
Jan Henning Thorsen - jhthorsen@cpan.org