NAME
SQL::Maker - Yet another SQL builder
SYNOPSIS
use SQL::Maker;
my $builder = SQL::Maker->new(
driver => 'SQLite', # or your favorite driver
);
# SELECT
($sql, @binds) = $builder->select($table, \@fields, \%where, \%opt);
# INSERT
($sql, @binds) = $builder->insert($table, \%values);
# DELETE
($sql, @binds) = $builder->delete($table, \%values);
# UPDATE
($sql, @binds) = $builder->update($table, \%set, \%where);
($sql, @binds) = $builder->update($table, \@set, \%where);
DESCRIPTION
SQL::Maker is yet another SQL builder class. It is based on
DBIx::Skinny's SQL generator.
METHODS
my $builder = SQL::Maker->new(%args);
Create new instance of SQL::Maker.
Attributes are following:
driver: Str
Driver name is required. The driver type is needed to create SQL
string.
quote_char: Str
This is the character that a table or column name will be quoted
with.
Default: auto detect from $driver.
name_sep: Str
This is the character that separates a table and column name.
Default: '.'
new_line: Str
This is the character that separates a part of statements.
Default: '\n'
my $select = $builder->new_select(%args|\%args);
Create new instance of SQL::Maker::Select from the settings from
$builder.
This method returns instance of SQL::Maker::Select.
my ($sql, @binds) = $builder->select($table|\@tables, \@fields,
\%where|\@where|$where, \%opt);
my ($sql, @binds) = $builder->select('user', ['*'], {name => 'john'}, {order_by => 'user_id DESC'});
# =>
# SELECT * FROM `user` WHERE (`name` = ?) ORDER BY user_id DESC
# ['john']
This method returns SQL string and bind variables for SELECT
statement.
$table
\@tables
Table name for FROM clause in scalar or arrayref. You can
specify the instance of SQL::Maker::Select for sub-query.
\@fields
This is a list for retrieving fields from database.
\%where
\@where
$where
where clause from hashref or arrayref via SQL::Maker::Condition,
or SQL::Maker::Condition object.
\%opt
This is a options for SELECT statement
$opt->{prefix}
This is a prefix for SELECT statement.
For example, you can provide the 'SELECT SQL_CALC_FOUND_ROWS
'. It's useful for MySQL.
Default Value: 'SELECT '
$opt->{limit}
This option makes 'LIMIT $n' clause.
$opt->{offset}
This option makes 'OFFSET $n' clause.
$opt->{order_by}
This option makes ORDER BY clause
You can write it as following forms:
$builder->select(..., order_by => 'foo DESC, bar ASC');
$builder->select(..., order_by => ['foo DESC', 'bar ASC']);
$builder->select(..., order_by => {foo => 'DESC'});
$builder->select(..., order_by => [{foo => 'DESC'}, {bar => 'ASC'}]);
$opt->{group_by}
This option makes GROUP BY clause
You can write it as following forms:
$builder->select(..., group_by => 'foo DESC, bar ASC');
$builder->select(..., group_by => ['foo DESC', 'bar ASC']);
$builder->select(..., group_by => {foo => 'DESC'});
$builder->select(..., group_by => [{foo => 'DESC'}, {bar => 'ASC'}]);
$opt->{having}
This option makes HAVING clause
$opt->{for_update}
This option makes 'FOR UPDATE" clause.
$opt->{joins}
This option makes 'JOIN' via SQL::Maker::Condition.
my ($sql, @binds) = $builder->insert($table, \%values|\@values);
my ($sql, @binds) = $builder->insert(user => {name => 'john'});
# =>
# INSERT INTO `user` (`name`) VALUES (?)
# ['john']
Generate INSERT query.
$table
Table name in scalar.
\%values
This is a values for INSERT statement.
my ($sql, @binds) = $builder->delete($table, \%where|\@where|$where);
my ($sql, @binds) = $builder->delete($table, \%where);
# =>
# DELETE FROM `user` WHERE (`name` = ?)
# ['john']
Generate DELETE query.
$table
Table name in scalar.
\%where
\@where
$where
where clause from hashref or arrayref via SQL::Maker::Condition,
or SQL::Maker::Condition object.
my ($sql, @binds) = $builder->update($table, \%set|@set,
\%where|\@where|$where);
Generate UPDATE query.
my ($sql, @binds) = $builder->update('user', ['name' => 'john', email => '
[email protected]'], {user_id => 3});
# =>
# 'UPDATE `user` SET `name` = ?, `email` = ? WHERE (`user_id` = ?)'
# ['john','
[email protected]',3]
$table
Table name in scalar.
\%set
Setting values.
\%where
\@where
$where
where clause from hashref or arrayref via SQL::Maker::Condition,
or SQL::Maker::Condition object.
PLUGINS
SQL::Maker supports plugin system. Write the code like following.
package My::SQL::Maker;
use parent qw/SQL::Maker/;
__PACKAGE__->load_plugin('InsertMulti');
FAQ
Why don't you use SQL::Abstract?
I need more extensible one.
So, this module contains SQL::Maker::Select, the extensible SELECT
clause object.
AUTHOR
Tokuhiro Matsuno <tokuhirom AAJKLFJEF@ GMAIL COM>
SEE ALSO
SQL::Abstract
Whole code was taken from DBIx::Skinny by nekokak++.
LICENSE
Copyright (C) Tokuhiro Matsuno
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.