NAME

DBIx::Custom::SQLTemplate - DBIx::Custom SQL Template

SYNOPSIS

my $sql_tmpl = DBIx::Custom::SQLTemplate->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

resist_tag_processor

Add tag processor

$sql_tmpl = $sql_tmpl->resist_tag_processor($tag_processor);

The following is resist_tag_processor sample

$sql_tmpl->resist_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::SQLTemplate source code.

clone

Clone DBIx::Custom::SQLTemplate 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 = ?;"