NAME
SQL::Stash - A stash for SQL queries
SYNOPSIS
package SQL::Stash::Foo;
use base qw(SQL::Stash);
__PACKAGE__->stash('select_foo', 'SELECT * FROM Foo');
1;
package main;
my $dbh = DBI->connect('dbi:SQLite:dbname=:memory:', '', '');
my $stash = SQL::Stash::Foo->new();
my $sth = $stash->retrieve('select_foo');
$sth->execute();
while(my $row = $sth->fetchrow_arrayref()) {
print("$_\n") for @$row;
}
DESCRIPTION
SQL::Stash is a simple query library for SQL statements. SQL statements are populated at the class level. SQL::Stash objects prepare these statements as late as possible (i.e. before they are executed).
SQL::Stash is in concept very similar to Ima::DBI, but differs by having instance-specific database handles and statements, and by supporting externally defined database handles.
METHODS
new
SQL::Stash->new(%args);
Designated constructor. Instantiates a new SQL::Stash object. The dbh
argument, a DBI-like object, must be provided.
my $dbh = DBI->connect('dbi:SQLite:dbname=:memory:', '', '');
my $stash = SQL::Stash->new('dbh' => $dbh);
stash
SQL::Stash::Foo->stash($name, $statement, $should_cache);
$stash->stash($name, $statement, $should_cache);
Stash an SQL statement
. The method can be called both on the class and instance. If the class method is called the statement
will be added to the global stash. If the instance method is called the statement
will only be added to the instance-specific stash
.
The name
is used as an identifier in order to later retrieve it. The should_cache
parameter is optional and specifies whether prepare()
or prepare_cached()
is used to prepare the statement
. It defaults to true
.
SQL::Stash::Foo->stash('select_foo', 'SELECT * FROM Foo');
retrieve
$stash->retrieve($name, @_);
Prepare the statement stored via stash, identified by name
, and return a prepared statement handle. The SQL statement may be modified by transform_sql before it is prepared.
transform_sql
$stash->transform_sql($sql, @_)
Transform the SQL statement before it is prepared to enable dynamically generated statements. The default implementation is to use sprintf, but sub-classes may override this method to perform any transformation.
$stash->transform_sql("SELECT * FROM %s", "table");
#=> SELECT * FROM table
SEE ALSO
Ima::DBI SQL::Bibliosoph SQL::Snippet
AUTHOR
Sebastian Nowicki <sebnow@gmail.com>