DBIx::Custom::SQLTemplate - DBIx::Custom SQL Template
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);
$sql_tmpl = $sql_tmpl->tag_processors($name1 => $tag_processor1 $name2 => $tag_processor2); $tag_processors = $sql_tmpl->tag_processors;
$sql_tmpl = $sql_tmpl->tag_start('{'); $tag_start = $sql_tmpl->tag_start;
Default is '{'
$sql_tmpl = $sql_tmpl->tag_start('}'); $tag_end = $sql_tmpl->tag_start;
Default is '}'
$sql_tmpl = $sql_tmpl->tag_syntax($tag_syntax); $tag_syntax = $sql_tmpl->tag_syntax;
This class is Object::Simple subclass. You can use all methods of Object::Simple
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
$sql_tmpl = $sql_tmpl->register_tag_processor($tag_processor);
The following is register_tag_processor sample
$sql_tmpl->register_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 DBIx::Custom::SQLTemplate object
$clone = $sql_tmpl->clone;
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 = ?;"
To install DBIx::Custom, copy and paste the appropriate command in to your terminal.
cpanm
cpanm DBIx::Custom
CPAN shell
perl -MCPAN -e shell install DBIx::Custom
For more information on module installation, please visit the detailed CPAN module installation guide.