[ https://issues.apache.org/jira/browse/PHOENIX-2989?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15326733#comment-15326733 ]
Lars Hofhansl commented on PHOENIX-2989: ---------------------------------------- {{select count(distinct organization_id) from atable order by organization_id}} will not be flagged as error, because we added organization_id as group by expression in GroupByCompiler.compile(...), so technically after the transformation that order by is valid. > Allow DistinctPrefixFilter optimization when HAVING clause only reference > COUNT(DISTINCT) > ----------------------------------------------------------------------------------------- > > Key: PHOENIX-2989 > URL: https://issues.apache.org/jira/browse/PHOENIX-2989 > Project: Phoenix > Issue Type: Sub-task > Reporter: James Taylor > Fix For: 4.8.0 > > > The DistinctPrefixFilter optimization can still be used if a HAVING clause > only references COUNT(DISTINCT) expressions. One way to detect this is to > collect a Set<ParseNode> using a visitor for the SELECT and HAVING which only > collects COUNT(DISTINCT) expressions. This set will then be used as the GROUP > BY nodes if there's no existing GROUP BY. > The check for whether or not to add the filter can then change to something > like this: > {code} > if (... && > ( context.getAggregationManager().isEmpty() || > ( plan.getGroupBy().isUngroupedAggregate() && > plan.getGroupBy().getKeyExpressions().size() == > context.getAggregationManager().getAggregators().getAggregatorCount() > ) ) ) > {code} > That way, it'll only add the filter if all expressions pulled in as a GROUP > BY expression (only the count distinct ones) account for all of the > aggregators. -- This message was sent by Atlassian JIRA (v6.3.4#6332)