passos / SQLBuilder

A SQL builder in Perl, simple but enough

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SQLBuilder

A SQL builder in Perl, simple but enough

##SYNOPSIS

use SQLBuilder;
use DBI;
my $dbh = DBI->connect(...);

You can call it like chain

my $query = SQLBuilder->SELECT('col1, col2')->FROM('table1')->WHERE('col1 = ?', $val1);

You can also call it individually, the statements order doesn't matter

my $query = SQLBuilder->SELECT->FROM('table');
$query->LIMIT(100);
$query->WHERE('col2 = ?', $val2);
$query->JOIN('LEFT JOIN table2 ON (...)');

Finally, call build to get SQL and bind vars

my ($sql, $bind_vars) = $query->build();
my $data = $dbh->selectall_arrayref($sql, @$bind_vars);

##SAMPLES

###sample 1

   SQLBuilder->SELECT->FROM('table');
   # SQL: "SELECT * FROM table", bind vars: []

###sample 2

   SQLBuilder->SELECT('c1, c2')->FROM('table')->WHERE('c1 > ?', 0);
   # SQL: "SELECT c1, c2 FROM table WHERE c1 > ?", bind_vars: [0]

###sample 3

   $sb = SQLBuilder->SELECT('t1.c1')->FROM('table t1');
   $sb->SELECT('t2.c1');
   $sb->FROM('table2 t2');
   $sb->WHERE('t1.c1 = ? AND t2.c1 = ?', 'v1', 'v2');
   $sb->JOIN('LEFT JOIN table t3 ON (t2.c1 = t3.c1) AND (t3.c1 = ?)', 'v3');

   $sb->LIMIT(10);
   $sb->ORDERBY('t3.c1');
   $sb->GROUPBY('t3.c1');

   # SQL:
   #    SELECT t1.c1, t2.c1 FROM table t1, table2 t2
   #    LEFT JOIN table t3 ON (t2.c1 = t3.c1) AND (t3.c1 = ?)
   #    WHERE
   #        t1.c1 = ? AND t2.c1 = ?
   #    GROUP BY
   #        t3.c1
   #    ORDER BY
   #        t3.c1, t1.c1 DESC
   #    LIMIT 10
   # bind_vars: [ 'v3', 'v1', 'v2' ];

About

A SQL builder in Perl, simple but enough

License:Apache License 2.0


Languages

Language:Perl 100.0%