NAME
DBIx::Custom::SQL::Template - DBIx::Custom SQL Template
SYNOPSIS
my $sql_tmpl = DBIx::Custom::SQL::Template->new;
my $tmpl = "select from table {= k1} && {<> k2} || {like k3}";
my $param = {k1 => 1, k2 => 2, k3 => 3};
my $query = $sql_template->create_query($tmpl);
ATTRIBUTES
tag_processors
$sql_tmpl = $sql_tmpl->tag_processors($name1 => $tag_processor1
$name2 => $tag_processor2);
$tag_processors = $sql_tmpl->tag_processors;
tag_start
$sql_tmpl = $sql_tmpl->tag_start('{');
$tag_start = $sql_tmpl->tag_start;
Default is '{'
tag_end
$sql_tmpl = $sql_tmpl->tag_start('}');
$tag_end = $sql_tmpl->tag_start;
Default is '}'
tag_syntax
$sql_tmpl = $sql_tmpl->tag_syntax($tag_syntax);
$tag_syntax = $sql_tmpl->tag_syntax;
METHODS
This class is Object::Simple subclass. You can use all methods of Object::Simple
create_query
Create DBIx::Custom::Query object parsing SQL template
$query = $sql_tmpl->create_query($tmpl);
# Sample
$query = $sql_tmpl->create_sql(
"select * from table where {= title} && {like author} || {<= price}")
# Expanded
$qeury->sql : "select * from table where title = ? && author like ? price <= ?;"
$query->key_infos : [['title'], ['author'], ['price']]
# Sample with table name
($sql, @bind_values) = $sql_tmpl->create_sql(
"select * from table where {= table.title} && {like table.author}",
{table => {title => 'Perl', author => '%Taro%'}}
)
# Expanded
$query->sql : "select * from table where table.title = ? && table.title like ?;"
$query->key_infos :[ [['table.title'],['table', 'title']],
[['table.author'],['table', 'author']] ]
This method create query using by DBIx::Custom. query has two infomation
1. sql : SQL
2. key_infos : Parameter access key information
add_tag_processor
Add tag processor
$sql_tmpl = $sql_tmpl->add_tag_processor($tag_processor);
The following is add_tag_processor sample
$sql_tmpl->add_tag_processor(
'?' => sub {
my ($tag_name, $tag_args) = @_;
my $key1 = $tag_args->[0];
my $key2 = $tag_args->[1];
my $key_infos = [];
# Expand tag and create key informations
# Return expand tags and key informations
return ($expand, $key_infos);
}
);
Tag processor recieve 2 argument
1. Tag name (?, =, <>, or etc)
2. Tag arguments (arg1 and arg2 in {tag_name arg1 arg2})
Tag processor return 2 value
1. Expanded Tag (For exsample, '{= title}' is expanded to 'title = ?')
2. Key infomations
You must be return expanded tag and key infomations.
Key information is a little complex. so I will explan this in future.
If you want to know more, Please see DBIx::Custom::SQL::Template source code.
clone
Clone DBIx::Custom::SQL::Template object
$clone = $sql_tmpl->clone;
Available Tags
Available Tags
[tag] [expand]
{? name} ?
{= name} name = ?
{<> name} name <> ?
{< name} name < ?
{> name} name > ?
{>= name} name >= ?
{<= name} name <= ?
{like name} name like ?
{in name} name in [?, ?, ..]
{insert} (key1, key2, key3) values (?, ?, ?)
{update} set key1 = ?, key2 = ?, key3 = ?
The following is insert SQL sample
$query = $sql_tmpl->create_sql(
"insert into table {insert key1 key2}"
);
# Expanded
$query->sql : "insert into table (key1, key2) values (?, ?)"
The following is update SQL sample
$query = $sql_tmpl->create_sql(
"update table {update key1 key2} where {= key3}"
);
# Expanded
$query->sql : "update table set key1 = ?, key2 = ? where key3 = ?;"