use of com.actiontech.dble.plan.Order in project dble by actiontech.
the class OrderedGroupByHandler method prepareSumAggregators.
/**
* see Sql_executor.cc
*
* @return
*/
protected void prepareSumAggregators(List<ItemSum> functions, List<ItemSum> sumFunctions, List<FieldPacket> packets, boolean isAllPushDown, boolean needDistinct, MySQLConnection conn) {
LOGGER.info("prepare_sum_aggregators");
for (int i = 0; i < functions.size(); i++) {
ItemSum func = functions.get(i);
ResultStore store = null;
if (func.hasWithDistinct()) {
ItemSum selFunc = sumFunctions.get(i);
List<Order> orders = HandlerTool.makeOrder(selFunc.arguments());
RowDataComparator distinctCmp = new RowDataComparator(packets, orders, isAllPushDown, this.type());
store = new DistinctLocalResult(pool, packets.size(), distinctCmp, this.charset).setMemSizeController(session.getOtherBufferMC());
distinctStores.add(store);
}
func.setAggregator(needDistinct && func.hasWithDistinct() ? AggregatorType.DISTINCT_AGGREGATOR : AggregatorType.SIMPLE_AGGREGATOR, store);
}
}
use of com.actiontech.dble.plan.Order in project dble by actiontech.
the class PushDownVisitor method buildGroupBy.
protected void buildGroupBy(PlanNode query) {
if (nodeHasGroupBy(query)) {
// push down group by
if (!existUnPushDownGroup) {
if (!query.getGroupBys().isEmpty()) {
sqlBuilder.append(" GROUP BY ");
for (Order group : query.getGroupBys()) {
// store the order by's order
pushDownOrderBy.add(group.copy());
Item groupCol = group.getItem();
String pdName = "";
if (groupCol.basicConstItem())
pdName = "'" + groupCol.toString() + "'";
if (pdName.isEmpty())
pdName = visitUnSelPushDownName(groupCol, true);
sqlBuilder.append(pdName).append(" ").append(group.getSortOrder()).append(",");
}
sqlBuilder.deleteCharAt(sqlBuilder.length() - 1);
}
} else {
// change to push down order by
pushDownOrderBy.addAll(query.getGroupBys());
if (pushDownOrderBy.size() > 0) {
sqlBuilder.append(" ORDER BY ");
for (Order order : pushDownOrderBy) {
Item orderSel = order.getItem();
String pdName = "";
if (orderSel.basicConstItem())
pdName = "'" + orderSel.toString() + "'";
if (pdName.isEmpty())
pdName = visitUnSelPushDownName(orderSel, true);
sqlBuilder.append(pdName).append(" ").append(order.getSortOrder()).append(",");
}
sqlBuilder.deleteCharAt(sqlBuilder.length() - 1);
}
}
}
}
Aggregations