Elon
05/11/2020, 5:07 PMKishore G
Kishore G
// Sanity check group by query: All non-aggregate expression in selection list should be also included in group by list.
for (Expression selectExpression : pinotQuery.getSelectList()) {
if (!isAggregateExpression(selectExpression)) {
boolean foundInGroupByClause = false;
Expression selectionToCheck;
if (selectExpression.getFunctionCall() != null && selectExpression.getFunctionCall().getOperator()
.equalsIgnoreCase(<http://SqlKind.AS|SqlKind.AS>.toString())) {
selectionToCheck = selectExpression.getFunctionCall().getOperands().get(0);
} else {
selectionToCheck = selectExpression;
}
for (Expression groupByExpression : pinotQuery.getGroupByList()) {
if (groupByExpression.equals(selectionToCheck)) {
foundInGroupByClause = true;
}
}
if (!foundInGroupByClause) {
throw new SqlCompilationException(
"'" + RequestUtils.prettyPrint(selectionToCheck) + "' should appear in GROUP BY clause.");
}
}
}
In CalciteSqlParser