NAME

SQL::Composer - sql builder

SYNOPSIS

DESCRIPTION

Raw SQL

my $expr = SQL::Composer::Expression->new(expr => \'a = b');

my $sql = $expr->to_sql;   # 'a = b'
my @bind = $expr->to_bind; # []

Raw SQL with bind

my $expr = SQL::Composer::Expression->new(expr => \['a = ?', 'b']);

my $sql = $expr->to_sql;   # 'a = ?'
my @bind = $expr->to_bind; # 'b'

Simple SQL

my $expr = SQL::Composer::Expression->new(expr => [a => 'b']);

my $sql = $expr->to_sql;
is $sql, '`a` = ?';
my @bind = $expr->to_bind;
is_deeply \@bind, ['b'];

Expression with custom operator

my $expr = SQL::Composer::Expression->new(expr => [a => {'>' => 'b'}]);

my $sql = $expr->to_sql;
is $sql, '`a` > ?';

my @bind = $expr->to_bind;
is_deeply \@bind, ['b'];

Expression with column name

my $expr = SQL::Composer::Expression->new(expr => [a => {'-col' => 'b'}]);

my $sql = $expr->to_sql;
is $sql, '`a` = `b`';

my @bind = $expr->to_bind;
is_deeply \@bind, [];

Mixed logical expression

my $expr =
  SQL::Composer::Expression->new(
    expr => [-or => [a => 'b', -and => [c => 'd', 'e' => 'f']]]);

my $sql = $expr->to_sql;   # '(`a` = ? OR (`c` = ? AND `e` = ?))'
my @bind = $expr->to_bind; # ['b', 'd', 'f']

IN

my $expr = SQL::Composer::Expression->new(expr => [a => ['b', 'c', 'd']]);

my $sql = $expr->to_sql;   # '`a` IN (?,?,?)'
my @bind = $expr->to_bind; # ['b', 'c', 'd']