/** * rewrites the subop of group. */ @Override public void visit(final OpGroup opGroup) { if (LOG.isDebugEnabled()) { LOG.debug("Starting visiting OpGroup"); } addOp(OpGroup.create(rewriteOp1(opGroup), opGroup.getGroupVars(), opGroup.getAggregators())); }
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(OpGroup op) { List<ExprAggregator> exprAggs = op.getAggregators(); Multimap<Var, Var> updates = HashMultimap.create(); exprAggs.forEach(ea -> { Var v = ea.getVar(); ExprList el = ea.getAggregator().getExprList(); Set<Var> vars = ExprVars.getVarsMentioned(el); Set<Var> origVars = MultimapUtils.getAll(varDeps, vars); // It is possible that a variable did not occurr in the sub tree under investigation // in that case add it to the mapping if(origVars.isEmpty()) { origVars = Collections.singleton(v); } //referencedVars.addAll(origVars); updates.putAll(v, origVars); }); updates.asMap().forEach((k, w) -> { nonUnique.addAll(w); varDeps.replaceValues(k, w); }); VarExprList groupVars = op.getGroupVars(); processExtend(groupVars); }
@Override public void visit(OpGroup op) { List<ExprAggregator> exprAggs = op.getAggregators(); Multimap<Var, Var> updates = HashMultimap.create(); exprAggs.forEach(ea -> { Var v = ea.getVar(); ExprList el = ea.getAggregator().getExprList(); Set<Var> vars = ExprVars.getVarsMentioned(el); Set<Var> origVars = MultimapUtils.getAll(varDeps, vars); // It is possible that a variable did not occurr in the sub tree under investigation // in that case add it to the mapping if(origVars.isEmpty()) { origVars = Collections.singleton(v); } //referencedVars.addAll(origVars); updates.putAll(v, origVars); }); updates.asMap().forEach((k, w) -> { nonUnique.addAll(w); varDeps.replaceValues(k, w); }); VarExprList groupVars = op.getGroupVars(); processExtend(groupVars); }
protected QueryIterator execute(OpGroup opGroup, QueryIterator input) { QueryIterator qIter = exec(opGroup.getSubOp(), input) ; qIter = new QueryIterGroup(qIter, opGroup.getGroupVars(), opGroup.getAggregators(), execCxt) ; return qIter ; }
@Override public Op transform(OpGroup opGroup, Op subOp) { VarExprList groupVars = opGroup.getGroupVars(); VarExprList groupVars2 = NodeTransformLib.transformVars(transform, groupVars); if ( groupVars2 == groupVars ) return super.transform(opGroup, subOp); return OpGroup.create(subOp, groupVars2, opGroup.getAggregators()); } }
@Override public default void visit(OpGroup opGroup) { visitVarExpr(opGroup.getGroupVars()) ; visitAggregators(opGroup.getAggregators()) ; visit1(opGroup); }
/** * The aggregators need to be wrapped with an appropriate term ctor. * E.g. count(*) -> typedLiteral(count(*), xsd:long) * * @param op * @return */ public Mapping rewrite(OpGroup op) { Mapping a = rewrite(op.getSubOp()); Mapping result = ops.groupBy(a, op.getGroupVars(), op.getAggregators()); return result; }
public Op getApplicableViews(OpGroup op, RestrictionManagerImpl restrictions) { return new OpGroup(_getApplicableViews(op.getSubOp(), restrictions), op.getGroupVars(), op.getAggregators()); }
public Op getApplicableViews(OpGroup op, RestrictionManagerImpl restrictions) { return new OpGroup(_getApplicableViews(op.getSubOp(), restrictions), op.getGroupVars(), op.getAggregators()); }
public static Op _replace(OpGroup op) { return new OpGroup(replace(op.getSubOp()), op.getGroupVars(), op.getAggregators()); }
public static Op _optimize(OpGroup op, Set<Set<Expr>> cnf) { return new OpGroup(optimize(op.getSubOp(), cnf), op.getGroupVars(), op.getAggregators()); }
public Op _optimize(OpGroup op, RestrictionManagerImpl cnf) { return new OpGroup(optimize(op.getSubOp(), cnf), op.getGroupVars(), op.getAggregators()); }
@Override public void visit(OpGroup opGroup) { Table table = eval(opGroup.getSubOp()) ; table = evaluator.groupBy(table, opGroup.getGroupVars(), opGroup.getAggregators()) ; push(table) ; }
@Override public void visit(OpGroup opGroup) { opGroup.getSubOp().visit(this); ExprRewriter expRewriter = new ExprRewriter(values); VarExprList groupVars = rewrite(opGroup.getGroupVars()); List<ExprAggregator> aggregators = new ArrayList<>(); for (ExprAggregator ea : opGroup.getAggregators()) { ea.visit(expRewriter); aggregators.add((ExprAggregator) expRewriter.pop()); } push(new OpGroup(pop(), groupVars, aggregators)); }
@Override public void visit(OpGroup opGroup) { opGroup.getSubOp().visit(this); ExprRewriter expRewriter = new ExprRewriter(values); VarExprList groupVars = rewrite(opGroup.getGroupVars()); List<ExprAggregator> aggregators = new ArrayList<>(); for (ExprAggregator ea : opGroup.getAggregators()) { ea.visit(expRewriter); aggregators.add((ExprAggregator) expRewriter.pop()); } push(new OpGroup(pop(), groupVars, aggregators)); }
level.opGroup.getAggregators().forEach(eAgg -> { ExprVar v = eAgg.getAggVar() ; Aggregator agg = eAgg.getAggregator() ; aggVarExprMap.put(v, eAgg) ; }) ; query.getAggregators().addAll(level.opGroup.getAggregators()) ;
@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); }
changed = true ; List<ExprAggregator> aggs = opGroup.getAggregators() ; List<ExprAggregator> aggs2 = aggs ;
@Override public void visit(OpGroup opGroup) { start(opGroup, NoNL) ; writeNamedExprList(opGroup.getGroupVars()) ; if ( !opGroup.getAggregators().isEmpty() ) { // --- Aggregators out.print(" ") ; start() ; out.incIndent() ; boolean first = true ; for ( ExprAggregator agg : opGroup.getAggregators() ) { if ( !first ) { out.print(" ") ; } first = false ; Var v = agg.getVar() ; String str = agg.getAggregator().toPrefixString() ; start() ; out.print(v.toString()) ; out.print(" ") ; out.print(str) ; finish() ; } finish() ; out.decIndent() ; } out.println() ; printOp(opGroup.getSubOp()) ; finish(opGroup) ; }