# NAME

DBIx::RunSQL - run SQL to create a database schema

# SYNOPSIS

    #!/usr/bin/perl -w
    use strict;
    use lib 'lib';
    use DBIx::RunSQL;

    my $test_dbh = DBIx::RunSQL->create(
        dsn     => 'dbi:SQLite:dbfile=:memory:',
        sql     => 'sql/setup.sql',
        verbose => 1,
    );
    

    ... # run your tests with a DB setup fresh from setup.sql

# METHODS

## C<< DBIx::RunSQL->create ARGS >>

Creates the database and returns the database handle

- *

`sql` - name of the file containing the SQL statements

If `sql` is a reference to a glob or a filehandle,
the SQL will be read from that. __not implemented__

If `sql` is undefined, the `$::DATA` or the `0` filehandle will
be read until exhaustion.  __not implemented__

This allows to create SQL-as-programs as follows:

  #!/usr/bin/perl -w -MDBIx::RunSQL=create
  create table ...

- *

`dsn`, `user`, `password` - DBI parameters for connecting to the DB

- *

`dbh` - a premade database handle to be used instead of `dsn`

- *

`verbose` - print each SQL statement as it is run

# PROGRAMMER USAGE

This module abstracts away the "run these SQL statements to set up 
your database" into a module. In some situations you want to give the
setup SQL to a database admin, but in other situations, for example testing,
you want to run the SQL statements against an in-memory database. This
module abstracts away the reading of SQL from a file and allows for various
command line parameters to be passed in. A skeleton `create-db.sql`
looks like this:

    #!/usr/bin/perl -w
    use strict;
    use lib 'lib';
    use DBIx::RunSQL;

    DBIx::RunSQL->handle_command_line('myapp');

    =head1 NAME

    create-db.pl - Create the database

    =head1 ABSTRACT

    This sets up the database. The following
    options are recognized:

    =over 4

    =item C<--user> USERNAME

    =item C<--password> PASSWORD

    =item C<--dsn> DSN

    The DBI DSN to use for connecting to
    the database

    =item C<--sql> SQLFILE

    The alternative SQL file to use
    instead of C<sql/create.sql>.

    =item C<--help>

    Show this message.

    =cut

## C<< DBIx::RunSQL->handle_command_line >>

Parses the command line. This is a convenience method, which
passes the following command line arguments to `->create`:

  --user
  --password
  --dsn
  --sql
  --verbose

In addition, it handles the following switches through [Pod::Usage](http://search.cpan.org/search?mode=module&query=Pod::Usage):

  --help
  --man

See also the section PROGRAMMER USAGE for a sample program to set
up a database from an SQL file.

# NOTES

If you find yourself wanting to write SELECT statements,
consider looking at [Querylet](http://search.cpan.org/search?mode=module&query=Querylet) instead, which is geared towards that
and even has an interface for Excel or HTML output.

If you find yourself wanting to write parametrized queries as
`.sql` files, consider looking at [Data::Phrasebook::SQL](http://search.cpan.org/search?mode=module&query=Data::Phrasebook::SQL)
or potentially [DBIx::SQLHandler](http://search.cpan.org/search?mode=module&query=DBIx::SQLHandler).

# SEE ALSO

[ORLite::Migrate](http://search.cpan.org/search?mode=module&query=ORLite::Migrate)

# AUTHOR

Max Maischein `corion@cpan.org`

# COPYRIGHT (c)

Copyright 2009-2010 by Max Maischein `corion@cpan.org`.

# LICENSE

This module is released under the same terms as Perl itself.