final List<ExprAggregator> exprAgg = query.getAggregators(); for (ExprAggregator expr : exprAgg) { if (expr.getAggregator().getName().contains("COUNT")) { if (!query.toString().contains("GROUP")) { if (expr.getAggregator().toString().contains("DISTINCT")) traversal = traversal.dedup(expr.getAggregator().getExprList().get(0).toString().substring(1)); else traversal = traversal.select(expr.getAggregator().getExprList().get(0).toString().substring(1)); if (expr.getAggregator().getName().contains("MAX")) { traversal = traversal.max();
/** * Add and expression aggregator and variable to the mapping. * * if the expr parameter is not an instance of ExprAggregator then no action is taken. * * @param expr The expression to add. * @param var The variable that it is bound to. */ public void add(Expr expr, Var var) { if (expr instanceof ExprAggregator) { ExprAggregator eAgg = (ExprAggregator)expr; Expr expr2 = query.allocAggregate( eAgg.getAggregator() ); aggMap.put(var, (ExprAggregator)expr2); } }
/** * Add and expression aggregator and variable to the mapping. * * if the expr parameter is not an instance of ExprAggregator then no action is taken. * * @param expr The expression to add. * @param var The variable that it is bound to. */ public void add(Expr expr, Var var) { if (expr instanceof ExprAggregator) { ExprAggregator eAgg = (ExprAggregator)expr; Expr expr2 = query.allocAggregate( eAgg.getAggregator() ); aggMap.put(var, (ExprAggregator)expr2); } }
/** * Add all the aggregations from the other handler. * @param handler The other handler. * @return This handler for chaining. */ public AggregationHandler addAll(AggregationHandler handler) { for (ExprAggregator agg : handler.query.getAggregators()) { query.allocAggregate(agg.getAggregator()); } for (Map.Entry<Var, ExprAggregator> entry : handler.aggMap.entrySet()) { aggMap.put( entry.getKey(), entry.getValue()); } return this; }
/** * Add all the aggregations from the other handler. * @param handler The other handler. * @return This handler for chaining. */ public AggregationHandler addAll(AggregationHandler handler) { for (ExprAggregator agg : handler.query.getAggregators()) { query.allocAggregate(agg.getAggregator()); } for (Map.Entry<Var, ExprAggregator> entry : handler.aggMap.entrySet()) { aggMap.put( entry.getKey(), entry.getValue()); } return this; }
@Override public void visit(ExprAggregator eAgg) { out.print(eAgg.getAggregator().toPrefixString()) ; }
public Expr allocAggregate(Aggregator agg) { // We need to track the aggregators in case one aggregator is used twice, e.g. in HAVING and in SELECT expression // (is that much harm to do twice? Yes, if distinct.) String key = agg.key() ; Var v = aggregatorsAllocated.get(key); if ( v != null ) { ExprAggregator eAgg = aggregatorsMap.get(v) ; if ( ! agg.equals(eAgg.getAggregator()) ) Log.warn(Query.class, "Internal inconsistency: Aggregator: "+agg) ; return eAgg ; } // Allocate. v = allocInternVar() ; ExprAggregator aggExpr = new ExprAggregator(v, agg) ; aggregatorsAllocated.put(key, v) ; aggregatorsMap.put(v, aggExpr) ; aggregators.add(aggExpr) ; return aggExpr ; }
@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); }
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(); } }
public static Mapping applyAggregators(Mapping mapping, List<ExprAggregator> aggregators, Generator generator, TypeSystem typeSystem, SqlTranslator sqlTranslator) { Multimap<Var, RestrictedExpr> varDef2 = HashMultimap.create(); varDef2.putAll(mapping.getVarDefinition().getMap()); Projection proj2 = new Projection(); for(ExprAggregator exprAgg : aggregators) { Var var = exprAgg.getVar(); Aggregator agg = exprAgg.getAggregator(); ExprSqlRewrite rewrite = MappingOpsImpl.rewrite(mapping, agg, generator, typeSystem, sqlTranslator); E_RdfTerm rdfTerm = rewrite.getRdfTermExpr(); varDef2.put(var, new RestrictedExpr(rdfTerm)); proj2.add(rewrite.getProjection()); } //SqlOpExtend sqlOpExtend2 = SqlOpExtend.create(sqlOpExtend, proj2); SqlOpExtend sqlOpExtend2 = SqlOpExtend.create(mapping.getSqlOp(), proj2); VarDefinition vd2 = new VarDefinition(varDef2); Mapping result = new Mapping(vd2, sqlOpExtend2); return result; }
Aggregator agg = exprAgg.getAggregator();
Aggregator agg = ((ExprAggregator) expr).getAggregator(); expr = query.allocAggregate(agg);
Aggregator agg = ((ExprAggregator) expr).getAggregator(); expr = query.allocAggregate(agg);
@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); }
level.opGroup.getAggregators().forEach(eAgg -> { ExprVar v = eAgg.getAggVar() ; Aggregator agg = eAgg.getAggregator() ; aggVarExprMap.put(v, eAgg) ; }) ;
Aggregator aggregator = agg.getAggregator() ; Var v = agg.getVar() ;
Node value = agg.getAggregator().getValueEmpty(); if ( value == null ) continue; Accumulator x = agg.getAggregator().createAccumulator(); Var v = agg.getVar(); accumulators.put(key, Pair.create(v, x));
@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) ; }
Aggregator ag = query.getAggregators().get(0).getAggregator(); if(ag==null || !query.getHavingExprs().isEmpty() || !query.getGroupBy().isEmpty() || query.hasLimit() || query.hasOffset() || !( (ag instanceof AggCount) || (ag instanceof AggCountVar) || (ag instanceof AggCountDistinct) || (ag instanceof AggCountVarDistinct)) ) { return null;