The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

SQLib - A simple module to manage and store SQL queries in separate files.

VERSION

Version 0.05

AUTHOR

Mateusz Szczyrzyca, mateusz at szczyrzyca.pl

SYNOPSIS

The module allows to store SQL queries in separate files and provides easy access to them. This functionality is helpful if you want to separate a Perl code from a SQL code.

A file with list of queries has the following syntax:

 [NAME_OF_QUERY1]
 -- A SQL query with {vars} to replace 
 [/NAME_OF_QUERY1]

 [NAME_OF_QUERY2]
 -- A SQL query with {vars} to replace
 [/NAME_OF_QUERY2]

 ...

 [NAME_OF_QUERY_N]
 -- A SQL query with {vars} to replace
 [/NAME_OF_QUERY_N]

 [     QUERIES_WITH_SPACES_IN_NAME_ARE_POSSIBLE  ]
                -- A SQL query with spaces
 [     /   QUERIES_WITH_SPACES_IN_NAME_ARE_POSSIBLE       ]

First parenthesis "[" always starts from a new line (don't use whitespaces).

Empty lines between queries are ignored. If there are two or more SQL queries with same [NAME], then only one (first) will be used.

If a query with a specified name doesn't exist then undef is returned as soon as if a file or query has an invalid syntax.

[QUERY_NAME]A sql code[/QUERY_NAME] isn't a valid syntax as well.

Simple example (file_with_queries.sql):

 [CHECK_PASSWORD]
 -- Comments for SQL debug
 -- Some::Program @ CHECK_PASSWORD
 -- Check a user password
 SELECT
  login,password
 FROM
  {table}
 WHERE
 (
   login = '{login}',
  AND
   password = '{password}'
 );
 [/CHECK_PASSWORD]

And how to use it in a perl code:

 use SQLib;
 my $SQLib = SQLib->new( './file_with_queries.sql' );

 my %sql_params =
 (
  table    => 'cms_users',
  login    => 'someuser',
  password => 'somepass'
 );

 my $check_auth_query = $SQLib->get_query( 'CHECK_PASSWORD', \%sql_params );

In the above example $check_auth_query contains:

 -- Comments for SQL debug
 -- Some::Program @ CHECK_PASSWORD
 -- Check a user password
 SELECT
  login,password
 FROM
  cms_users
 WHERE
 (
   login = 'someuser',
  AND
   password = 'somepass'
 );