-or => '_expand_op_andor',
-nest => '_expand_nest',
-bind => sub { shift; +{ @_ } },
+ -in => '_expand_in',
+ -not_in => '_expand_in',
};
$opt{expand_op} = {
),
(not => '_render_op_not'),
(map +($_ => '_render_op_andor'), qw(and or)),
+ ',' => '_render_op_multop',
};
return bless \%opt, $class;
}
sub _expand_in {
- my ($self, $op, $vv, $k) = @_;
+ my ($self, $raw, $vv, $k) = @_;
+ $k = shift @{$vv = [ @$vv ]} unless defined $k;
+ local our $Cur_Col_Meta = $k;
+ my $op = $self->_normalize_op($raw);
if (my $literal = is_literal_value($vv)) {
my ($sql, @bind) = @$literal;
my $opened_sql = $self->_open_outer_paren($sql);
;
puke("Argument passed to the '${\uc($op)}' operator can not be undefined")
if !defined($vv);
- my @rhs = map $self->_expand_expr($_),
- map { ref($_) ? $_ : { -bind => [ $k, $_ ] } }
+ my @rhs = map $self->expand_expr($_, -value),
map { defined($_) ? $_: puke($undef_err) }
(ref($vv) eq 'ARRAY' ? @$vv : $vv);
return $self->${\($op =~ /^not/ ? 'sqltrue' : 'sqlfalse')} unless @rhs;
),
map $self->expand_expr($_, -ident),
map ref($_) eq 'ARRAY' ? @$_ : $_, @to_expand;
- return (@exp > 1 ? { -list => \@exp } : $exp[0]);
+ return (@exp > 1 ? { -op => [ ',', @exp ] } : $exp[0]);
};
local @{$self->{expand}}{qw(-asc -desc)} = (($expander) x 2);
if $expanded->{-ident} or @{$expanded->{-literal}||[]} == 1;
for ($expanded) {
- if (ref() eq 'HASH' and my $l = $_->{-list}) {
- return map $self->_chunkify_order_by($_), @$l;
+ if (ref() eq 'HASH' and $_->{-op} and $_->{-op}[0] eq ',') {
+ my ($comma, @list) = @{$_->{-op}};
+ return map $self->_chunkify_order_by($_), @list;
}
return [ $self->render_aqt($_) ];
}