DBIx-DR
view release on metacpan or search on metacpan
lib/DBIx/DR/PlPlaceHolders.pm view on Meta::CPAN
use utf8;
use strict;
use warnings;
package DBIx::DR::PlPlaceHolders;
use Mouse;
extends 'DBIx::DR::PerlishTemplate';
use DBIx::DR::ByteStream;
use Carp ();
use File::Spec ();
use Digest::MD5 ();
use Encode qw(encode);
has sql_dir => (is => 'bare', isa => 'Str');
has file_suffix => (is => 'rw', isa => 'Str', default => '.sql.ep');
has helpers => (is => 'ro', isa => 'HashRef', default => sub {{}});
sub sql_dir {
my ($self, $dir) = @_;
if (defined $dir) {
Carp::croak "Diectory $dir is not found or a dir" unless -d $dir;
$self->{sql_dir} = File::Spec->rel2abs($dir);
} elsif(@_ >= 2) {
$self->{sql_dir} = undef;
}
return $self->{sql_dir};
}
sub BUILD {
my ($self) = @_;
# add default helpers
$self->set_helper(
include => sub {
my ($tpl, $file, @args) = @_;
my $res = ref($self)->new(
pretokens => $self->prepretokens,
prepretokens => $self->prepretokens,
helpers => $self->helpers,
sql_dir => $self->sql_dir,
file_suffix => $self->file_suffix,
)->sql_transform(
-f => $file,
@args
);
$tpl->immediate($res->sql);
$tpl->add_bind_value($res->bind_values);
return DBIx::DR::ByteStream->new('');
},
list => sub {
my ($tpl, @args) = @_;
$tpl->immediate(join ',' => map '?', @args);
$tpl->add_bind_value(@args);
return DBIx::DR::ByteStream->new('');
},
hlist => sub {
my ($tpl, @args) = @_;
if ('ARRAY' eq ref $args[0]) {
my $filter = shift @args;
$tpl->immediate(
join ',' => (
'(' .
join(',' => ('?')x @$filter) .
')'
)x @args
);
for my $a (@args) {
$tpl->add_bind_value( map { $a->{$_} } @$filter );
}
return DBIx::DR::ByteStream->new('');
}
( run in 2.263 seconds using v1.01-cache-2.11-cpan-d7f47b0818f )