@Override public Expr transform(ExprAggregator eAgg) { return eAgg.getAggVar() ; } } ;
void info() { if ( opSlice != null ) System.out.printf("slice: (%d, %d)\n", opSlice.getStart(), opSlice.getLength()) ; if ( opDistinct != null ) System.out.printf("distinct\n") ; if ( opReduced != null ) System.out.printf("reduced\n") ; if ( opProject != null ) System.out.printf("project: %s\n", opProject.getVars()) ; if ( opOrder != null ) System.out.printf("order: %s\n", opOrder.getConditions()) ; if ( opHaving != null ) System.out.printf("having: %s\n", opHaving.getExprs()) ; if ( opExtends != null && !opExtends.isEmpty() ) { List<VarExprList> z = opExtends.stream().map(x -> x.getVarExprList()).collect(Collectors.toList()) ; System.out.printf("assigns: %s\n", z) ; } if ( opGroup != null ) { List<ExprAggregator> aggregators = opGroup.getAggregators() ; List<Var> aggVars = aggregators.stream().map(x -> x.getAggVar().asVar()).collect(Collectors.toList()) ; System.out.printf("group: %s |-| %s\n", opGroup.getGroupVars(), opGroup.getAggregators()) ; System.out.printf("group agg vars: %s\n", aggVars) ; } }
@Override public void visit(ExprAggregator eAgg) { // This is the assignment variable of the aggregation // not a normal variable of an expression. visitAssignVar(eAgg.getAggVar().asVar()) ; if ( exprVisitor != null ) eAgg.visit(exprVisitor) ; } }
public Expr _transform(ExprAggregator eAgg) { ExprList newAggExpr = this.transformMM(eAgg.getAggregator().getExprList()); Aggregator newAgg = eAgg.getAggregator().copy(newAggExpr); Expr newAggVar = this.transformMM(eAgg.getAggVar()); //ExprCopy.getInstance().copy(expr, eAgg.get) Expr result = new ExprAggregator(newAggVar.asVar(), newAgg); return result; //System.out.println("Aggregate"); //eAgg.getAggregator(). //AggCount //eAgg.get //throw new NotImplementedException(); } }
query.getGroupBy().addAll(level.opGroup.getGroupVars()) ; level.opGroup.getAggregators().forEach(eAgg -> { ExprVar v = eAgg.getAggVar() ; Aggregator agg = eAgg.getAggregator() ; aggVarExprMap.put(v, eAgg) ;
@Override public void visit(OpGroup opGroup) { List<ExprAggregator> a = opGroup.getAggregators(); // Aggregators are broken up in the algebra, split between a // group and an assignment (extend or assign) using a generated var. // We record them here and insert later. for (ExprAggregator ea : a) { // Substitute generated var for actual Var givenVar = ea.getAggVar().asVar(); // Copy aggregator across (?) Expr myAggr = query.allocAggregate(ea.getAggregator()); varExpression.put(givenVar, myAggr); } VarExprList b = opGroup.getGroupVars(); for (Var v : b.getVars()) { Expr e = b.getExpr(v); if (e != null) { query.addGroupBy(v, e); } else { query.addGroupBy(v); } } opGroup.getSubOp().visit(this); }
Expr eVar = agg.getAggVar() ; // Not .getExprVar() Expr eVar2 = transform(eVar) ; if ( eVar != eVar2 )