NAME
    DBIx::Migration - Seamless database schema up- and downgrades

SYNOPSIS
      my $m = DBIx::Migration->new(
          {
              dsn => 'dbi:SQLite:~/Projects/myapp/db/myapp.db',
              dir => '~/Projects/myapp/db/migrations'
          }
      );

      # Get current version from database
      my $version = $m->version;

      # Migrate database to version 1
      $m->migrate( 1 );

      # Migrate database to the newest/highest version
      $m->migrate;

      # ~/Projects/myapp/db/migrations/schema_1_up.sql
      CREATE TABLE foo (
          id INTEGER PRIMARY KEY,
          bar TEXT
      );

      # ~/Projects/myapp/db/migrations/schema_1_down.sql
      DROP TABLE foo;

      # ~/Projects/myapp/db/migrations/schema_2_up.sql
      CREATE TABLE bar (
          id INTEGER PRIMARY KEY,
          baz TEXT
      );

      # ~/Projects/myapp/db/migrations/schema_2_down.sql
      DROP TABLE bar;

DESCRIPTION
    This module provides seamless database schema up- and downgrades. The
    implementation is based on migrations. A migration is a ".sql" script.
    Although not mandatory the script name begins with a prefix like for
    example "schema_". It follows a version number that is a positive
    integer. After an underscore "_" the script name ends with the migration
    type that is either "up" or "down". Migrations are stored in a directory
    and are applied in order to a database. Usually the version number of
    the first migration is 1. The version numbers of the other migrations
    have to be ascending without gaps. During processing the content of each
    migration is read with the "binmode" of ":raw" into a scalar. The
    content is split into sections using the default SQL delimiter ";". Each
    section is executed independently. All related sections are encapsulated
    in a database transaction.

METHODS
    $self->debug( $debug )
        Enable/Disable debug messages.

    $self->dir( $dir )
        Get/Set directory that contains migrations.

    $self->dsn( $dsn )
        Get/Set dsn.

    $self->dbh( $dbh )
        Get/Set dbh.

    $self->migrate( $version )
        Migrate database to version. Returns true in case of success;
        otherwise false. If called without the version argument the newest
        migration version will be used.

    $self->password( $password )
        Get/Set database password.

    $self->username( $username )
        Get/Set database username.

    $self->version
        Get migration version from database. Will be undef if no migration
        has taken place yet.

CAVEATS
    After the "dbh" was used for the first time changing the "dsn",
    "password", or "username" has no impact. The reason is the mutable
    (offering setter methods) design of this module. Changing this will
    break the backwards compatibility.

AUTHOR
    Sebastian Riedel, <kraihx@gmail.com>

CONTRIBUTORS
    Dan Sully, <dan+github@sully.org>

    Marcus Ramberg, <marcus@nordaaker.com>

    Steven Jenkin, <sjenkin@venda.com>

    Sven Willenbuecher, <sven.willenbuecher@gmx.de>

COPYRIGHT
    Copyright 2004-2005 Sebastian Riedel. All rights reserved.

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