NAME
    DBIx::TempDB - Create a temporary database

VERSION
    0.03

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 allows 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 to 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.

    *   drop_from_child

        Setting "drop_from_child" to a true value will create a child
        process which will remove the temporary database, when the main
        process ends.

        TODO: This might become the default.

  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) 2015, 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"

