sub _maybe_parenthesise {
my ($self, $dq) = @_;
for ($dq) {
- return is_Select() || is_Slice()
+ return is_Select() || is_Group() || is_Slice() || is_Having()
? [ '(', $self->_render($dq), ')' ]
: $self->_render($dq);
}
if (@args == 3) {
my ($lhs, $rhs1, $rhs2) = (map $self->_maybe_parenthesise($_), @args);
[ '(', $lhs, $op_name, $rhs1, 'AND', $rhs2, ')' ];
- } elsif (@args == 2 and is_Literal $args[1]->{type}) {
+ } elsif (@args == 2 and is_Literal $args[1]) {
my ($lhs, $rhs) = (map $self->_render($_), @args);
[ '(', $lhs, $op_name, $rhs, ')' ];
} else {
}
return [
$self->_maybe_parenthesise($dq->{from}),
- $as || ' ',
+ $as || '',
$self->_render_identifier({ elements => [ $dq->{to} ] })
];
}
sub _render_where {
my ($self, $dq) = @_;
my ($from, $where) = @{$dq}{qw(from where)};
+ while (is_Where $from) {
+ $where = Operator({ 'SQL.Naive' => 'and' }, [ $where, $from->{where} ]);
+ $from = $from->{from};
+ }
my $keyword = (is_Group($from) ? 'HAVING' : 'WHERE');
[
($from ? $self->_render($from) : ()),