package Data::Query::ExprBuilder;
use strictures 1;
-use Data::Query::Constants qw(DQ_OPERATOR DQ_VALUE);
use Scalar::Util ();
+use Data::Query::ExprHelpers qw(perl_scalar_value perl_operator);
use overload (
# unary operators
my $op = $_;
$op => sub {
Data::Query::ExprBuilder->new({
- expr => {
- type => DQ_OPERATOR,
- operator => { Perl => $op },
- args => [ $_[0]->{expr} ]
- }
+ expr => perl_operator($op => $_[0]->{expr})
});
}
} qw(! neg)),
my ($overload, $as) = ref($_) ? @$_ : ($_, $_);
$overload => sub {
Data::Query::ExprBuilder->new({
- expr => {
- type => DQ_OPERATOR,
- operator => { Perl => $as },
- args => [
+ expr => perl_operator(
+ $as,
map {
(Scalar::Util::blessed($_)
&& $_->isa('Data::Query::ExprBuilder'))
? $_->{expr}
- : {
- type => DQ_VALUE,
- subtype => { Perl => 'Scalar' },
- value => $_
- }
+ : perl_scalar_value($_)
# we're called with ($left, $right, 0) or ($right, $left, 1)
} $_[2] ? @_[1,0] : @_[0,1]
- ]
- },
+ )
});
}
}