sub _where_ARRAYREF {
- my ($self, $where, $logic) = @_;
+ my ($self, $where, $_logic) = @_;
- $logic = uc($logic || $self->{logic});
+ my $logic = uc($_logic || $self->{logic});
$logic eq 'AND' or $logic eq 'OR' or puke "unknown logic: $logic";
+ my $orig_logic = $self->{logic};
+
my @clauses = @$where;
my (@sql_clauses, @all_bind);
push @all_bind, @bind;
}
}
+ $logic = $self->{logic} if $orig_logic ne $self->{logic} and !$_logic;
return $self->_join_sql_clauses($logic, \@sql_clauses, \@all_bind);
}
},
FALLBACK => sub { # CASE: col => {op => $scalar}
+ if ($val =~ /^ - ( AND|OR ) $/ix) {
+ $self->{logic} = uc $1;
+ delete $v->{$op};
+ return '', ();
+ }
$sql = join ' ', $self->_convert($self->_quote($k)),
$self->_sqlcase($op),
$self->_convert('?');
# test column multi-cond in arrayref (even more useful)
{
where => { x => { '!=' => [ -and => (1 .. 3) ] } },
- stmt => 'WHERE x != ? AND x != ? AND x != ?',
+ stmt => 'WHERE ( ( x != ? AND x != ? AND x != ? ) )',
bind => [1..3],
},