@Override public Expr visitBinaryOperator(ExprNormalizedResult ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException { super.visitBinaryOperator(ctx, stack, expr); //////////////////////// // For Left Term //////////////////////// if (isAggregationFunction(expr.getLeft())) { String leftRefName = ctx.block.namedExprsMgr.addExpr(expr.getLeft()); ctx.aggExprs.add(new NamedExpr(expr.getLeft(), leftRefName)); expr.setLeft(new ColumnReferenceExpr(leftRefName)); } //////////////////////// // For Right Term //////////////////////// if (isAggregationFunction(expr.getRight())) { String rightRefName = ctx.block.namedExprsMgr.addExpr(expr.getRight()); ctx.aggExprs.add(new NamedExpr(expr.getRight(), rightRefName)); expr.setRight(new ColumnReferenceExpr(rightRefName)); } return expr; }