Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Run SQL statements to set up a database

branch: master

This branch is 0 commits ahead and 0 commits behind master

Fetching latest commit…

Cannot retrieve the latest commit at this time



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


#!/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


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


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;


=head1 NAME - Create the database


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.


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:

--help --man

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


If you find yourself wanting to write SELECT statements, consider looking at 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 or potentially DBIx::SQLHandler.




Max Maischein


Copyright 2009-2010 by Max Maischein


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

Something went wrong with that request. Please try again.