use SQL::ReservedWords;
use Data::Query::Constants qw(
DQ_IDENTIFIER DQ_OPERATOR DQ_VALUE DQ_JOIN DQ_ALIAS DQ_ORDER DQ_LITERAL
+ DQ_GROUP
);
use Moo;
sub _render_where {
my ($self, $dq) = @_;
my ($from, $where) = @{$dq}{qw(from where)};
+ my $keyword = ($from && $from->{type} eq DQ_GROUP) ? 'HAVING' : 'WHERE';
[
($from ? $self->_render($from) : ()),
- $self->_format_keyword('WHERE'),
+ $self->_format_keyword($keyword),
$self->_render($where)
]
}
\@ret;
}
+sub _render_group {
+ my ($self, $dq) = @_;
+ # this could also squash like order does. but I dunno whether that should
+ # move somewhere else just yet.
+ my @ret = (
+ ($dq->{from} ? $self->_render($dq->{from}) : ()),
+ $self->_format_keyword('GROUP BY'),
+ intersperse(',', map $self->_render($_), @{$dq->{by}})
+ );
+ \@ret;
+}
+
sub _render_delete {
my ($self, $dq) = @_;
my ($target, $where) = @{$dq}{qw(target where)};