if ($k =~ /^-./) {
return $self->_expand_hashpair_op($k, $v);
} elsif ($k =~ /^[^\w]/i) {
- my ($lhs, @rhs) = @$v;
+ my ($lhs, @rhs) = ref($v) eq 'ARRAY' ? @$v : $v;
return $self->_expand_op(
-op, [ $k, $self->expand_expr($lhs, -ident), @rhs ]
);
my $op = $self->_normalize_op($k);
- if (my $exp = $self->{expand}{$op}) {
- return $self->$exp($op, $v);
- }
-
- # Ops prefixed with -not_ get converted
-
- if (my ($rest) = $op =~/^not_(.*)$/) {
- return +{ -op => [
- 'not',
- $self->_expand_expr({ "-${rest}", $v })
- ] };
- }
-
{ # Old SQLA compat
my $op = join(' ', split '_', $op);
) {
puke "Illegal use of top-level '-$op'"
}
+ }
+
+ if (my $exp = $self->{expand}{$op}) {
+ return $self->$exp($op, $v);
+ }
+
+ # Ops prefixed with -not_ get converted
+
+ if (my ($rest) = $op =~/^not_(.*)$/) {
+ return +{ -op => [
+ 'not',
+ $self->_expand_expr({ "-${rest}", $v })
+ ] };
+ }
+
+ { # Old SQLA compat
# the old unary op system means we should touch nothing and let it work
+ my $op = join(' ', split '_', $op);
+
if (my $us = List::Util::first { $op =~ $_->{regex} } @{$self->{unary_ops}}) {
return { -op => [ $op, $v ] };
}
if (ref($vv) eq 'ARRAY') {
my @raw = @$vv;
my $logic = (defined($raw[0]) and $raw[0] =~ /^-(and|or)$/i)
- ? (shift(@raw), $1) : 'or';
+ ? (shift(@raw), lc $1) : 'or';
my @values = map +{ $vk => $_ }, @raw;
if (
$op =~ $self->{inequality_op}