SQL-Format
view release on metacpan or search on metacpan
lib/SQL/Format.pm view on Meta::CPAN
'%w' => '_where',
'%o' => '_options',
'%j' => '_join',
'%s' => '_set',
};
my $OP_ALIAS = {
-IN => 'IN',
-NOT_IN => 'NOT IN',
-BETWEEN => 'BETWEEN',
-NOT_BETWEEN => 'NOT BETWEEN',
-LIKE => 'LIKE',
-NOT_LIKE => 'NOT LIKE',
-LIKE_BINARY => 'LIKE BINARY',
-NOT_LIKE_BINARY => 'NOT LIKE BINARY',
};
my $OP_TYPE_MAP = {
in => {
'IN' => 1,
'NOT IN' => 1,
},
between => {
'BETWEEN' => 1,
'NOT BETWEEN' => 1,
},
like => {
'LIKE' => 1,
'NOT LIKE' => 1,
'LIKE BINARY' => 1,
'NOT LIKE BINARY' => 1,
},
};
my $SORT_OP_ALIAS = {
-ASC => 'ASC',
-DESC => 'DESC',
};
my $SUPPORTED_INDEX_TYPE_MAP = {
USE => 1,
FORCE => 1,
IGNORE => 1,
};
use constant {
_LIMIT_OFFSET => 1,
_LIMIT_XY => 2,
_LIMIT_YX => 3,
};
my $LIMIT_DIALECT_MAP = {
LimitOffset => _LIMIT_OFFSET, # PostgreSQL, SQLite, MySQL 5.0
LimitXY => _LIMIT_XY, # MySQL
LimitYX => _LIMIT_YX, # SQLite
};
sub sqlf {
my $format = shift;
my @bind;
my @tokens = split m#(%[ctwosj])(?=\W|$)#, $format;
for (my $i = 1; $i < @tokens; $i += 2) {
my $spec = $tokens[$i];
my $method = $SPEC_TO_METHOD_MAP->{$spec};
croak "'$spec' does not supported format" unless $method;
croak sprintf "missing arguments nummber of %i and '%s' format in sqlf",
($i + 1) / 2, $spec unless @_;
$tokens[$i] = $SELF->$method(shift(@_), \@bind);
}
return join('',@tokens), @bind;
}
sub _columns {
my ($self, $val, $bind) = @_;
my $ret;
if (!defined $val) {
$ret = '*';
}
elsif (ref $val eq 'ARRAY') {
if (@$val) {
$ret = join $DELIMITER, map {
my $ret;
my $ref = ref $_;
if ($ref eq 'HASH') {
my ($term, $col) = %$_;
$ret = _quote($term).' '._quote($col);
}
elsif ($ref eq 'ARRAY') {
my ($term, $col) = @$_;
my @params;
if (ref $term eq 'ARRAY') {
($term, @params) = @$term;
}
elsif (ref $term eq 'REF' && ref $$term eq 'ARRAY') {
($term, @params) = @{$$term};
}
$ret = (
ref $term eq 'SCALAR' ? $$term : _quote($term)
).' '._quote($col);
push @$bind, @params;
}
elsif ($ref eq 'REF' && ref $$_ eq 'ARRAY') {
my ($term, $col, @params) = @{$$_};
$ret = (
ref $term eq 'SCALAR' ? $$term : _quote($term)
).' '._quote($col);
push @$bind, @params;
}
else {
$ret = _quote($_)
}
$ret;
} @$val;
}
else {
$ret = '*';
}
( run in 1.921 second using v1.01-cache-2.11-cpan-71847e10f99 )