@Test public final void testFindDistinctAggFunctions() throws TajoException { String query = "select sum(score) + max(age) from people"; Expr expr = analyzer.parse(query); LogicalPlan plan = planner.createPlan(defaultContext, expr); GroupbyNode groupByNode = plan.getRootBlock().getNode(NodeType.GROUP_BY); List aggEvals = groupByNode.getAggFunctions(); List<AggregationFunctionCallEval> list = new ArrayList<>(); for (Object aggEval : aggEvals) { list.addAll(EvalTreeUtil.findDistinctAggFunction((EvalNode) aggEval)); } assertEquals(2, list.size()); Set<String> result = Sets.newHashSet("max", "sum"); for (AggregationFunctionCallEval eval : list) { assertTrue(result.contains(eval.getName())); } }
RewrittenFunctions rewritten = null; if (function.getName().equalsIgnoreCase("count")) { rewritten = new RewrittenFunctions(1); rewritten.firstStageTargets.add(0, new Target(fieldEval)); rewritten.secondStageEvals = createSumFunction(new EvalNode[]{fieldEval}); } else if (function.getName().equalsIgnoreCase("sum")) { rewritten = new RewrittenFunctions(1); rewritten.secondStageEvals = createSumFunction(new EvalNode[]{fieldEval}); } else if (function.getName().equals("max")) { rewritten = new RewrittenFunctions(1); rewritten.secondStageEvals = createMaxFunction(new EvalNode[]{fieldEval}); } else if (function.getName().equals("min")) {
for (SortAggregateExec aggExec: aggregateExecs) { for (int i = 0; i < aggExec.aggFunctionsNum; i++, tupleIndex++) { String funcName = aggExec.aggFunctions.get(i).getName(); if ("min".equals(funcName) || "max".equals(funcName) || "avg".equals(funcName) || "sum".equals(funcName)) { outTuple.put(resultColumnIdIndexes[tupleIndex], DatumFactory.createNullDatum());
for (SortAggregateExec aggExec: aggregateExecs) { for (int i = 0; i < aggExec.aggFunctionsNum; i++, tupleIndex++) { String funcName = aggExec.aggFunctions[i].getName(); if ("min".equals(funcName) || "max".equals(funcName) || "avg".equals(funcName) || "sum".equals(funcName)) { outTuple.put(resultColumnIdIndexes[tupleIndex], DatumFactory.createNullDatum());
RewrittenFunctions rewritten = null; if (function.getName().equalsIgnoreCase("count")) { rewritten = new RewrittenFunctions(1); rewritten.firstStageTargets[0] = new Target(fieldEval); rewritten.secondStageEvals = createSumFunction(new EvalNode[]{fieldEval}); } else if (function.getName().equalsIgnoreCase("sum")) { rewritten = new RewrittenFunctions(1); rewritten.secondStageEvals = createSumFunction(new EvalNode[]{fieldEval}); } else if (function.getName().equals("max")) { rewritten = new RewrittenFunctions(1); rewritten.secondStageEvals = createMaxFunction(new EvalNode[]{fieldEval}); } else if (function.getName().equals("min")) {