use SQL::ReservedWords;
use Data::Query::Constants qw(
DQ_IDENTIFIER DQ_OPERATOR DQ_VALUE DQ_JOIN DQ_ALIAS DQ_ORDER DQ_LITERAL
- DQ_GROUP
+ DQ_GROUP DQ_SELECT DQ_SLICE
);
use Moo;
($dq->{from}
? ($self->_format_keyword('FROM'), @{$self->_render($dq->{from})})
: ()
- )
+ ),
];
}
}
}
}
- return [
- $self->_render($dq->{from}),
+ my %parenthesise = map +($_ => 1), DQ_SELECT, DQ_SLICE;
+ return [ # XXX not sure this is the right place to detect this
+ ($parenthesise{$dq->{from}{type}}
+ ? [ '(', $self->_render($dq->{from}), ')' ]
+ : $self->_render($dq->{from})),
$as || ' ',
$self->_render_identifier({ elements => [ $dq->{to} ] })
];
','
}
};
+ my $rhs = $self->_render($right);
[
- $self->_render($left), $join, $self->_render($right),
+ $self->_render($left), $join,
+ ($right->{type} eq DQ_JOIN ? ('(', $rhs, ')') : $rhs),
($dq->{on}
? ($self->_format_keyword('ON'), $self->_render($dq->{on}))
: ())
my @ret = (
$self->_format_keyword('ORDER BY'),
$self->_render($dq->{by}),
- ($dq->{direction} ? $self->_format_keyword($dq->{direction}) : ())
+ ($dq->{reverse}
+ ? $self->_format_keyword('DESC')
+ : ())
);
my $from;
while ($from = $dq->{from}) {
push @ret, (
',',
$self->_render($dq->{by}),
- ($dq->{direction} ? $self->_format_keyword($dq->{direction}) : ())
+ ($dq->{reverse}
+ ? $self->_format_keyword('DESC')
+ : ())
);
}
unshift @ret, $self->_render($from) if $from;
# move somewhere else just yet.
my @ret = (
($dq->{from} ? $self->_render($dq->{from}) : ()),
- $self->_format_keyword('GROUP BY'),
- intersperse(',', map $self->_render($_), @{$dq->{by}})
+ (@{$dq->{by}}
+ ? (
+ $self->_format_keyword('GROUP BY'),
+ intersperse(',', map $self->_render($_), @{$dq->{by}})
+ )
+ : ())
);
\@ret;
}