private SqlTypeName getAggTypeForScalarSub(RexSubQuery e) { assert(e.getKind() == SqlKind.SCALAR_QUERY); assert(e.rel.getInputs().size() == 1); Aggregate relAgg = (Aggregate)e.rel.getInput(0); assert(relAgg.getAggCallList().size() == 1); //should only have one aggregate return relAgg.getAggCallList().get(0).getType().getSqlTypeName(); }
private SqlTypeName getAggTypeForScalarSub(RexSubQuery e) { assert(e.getKind() == SqlKind.SCALAR_QUERY); assert(e.rel.getInputs().size() == 1); Aggregate relAgg = (Aggregate)e.rel.getInput(0); assert( relAgg.getAggCallList().size() == 1); //should only have one aggregate return relAgg.getAggCallList().get(0).getType().getSqlTypeName(); }
false, newArgs, aggCall.getType(), aggCall.getName()); newAggCalls.set(i, newAggCall);
false, newArgs, aggCall.getType(), aggCall.getName()); newAggCalls.set(i, newAggCall);
RelDataType fieldType = aggCall.getType(); SqlAggFunction newAgg = aggCall.getAggregation();
final ValueType valueType = Calcites.getValueTypeForSqlTypeName(aggregateCall.getType().getSqlTypeName()); final ExprMacroTable macroTable = plannerContext.getExprMacroTable();
final ValueType valueType = Calcites.getValueTypeForSqlTypeName(aggregateCall.getType().getSqlTypeName()); final ExprMacroTable macroTable = plannerContext.getExprMacroTable();
final ValueType valueType = Calcites.getValueTypeForSqlTypeName(aggregateCall.getType().getSqlTypeName()); final ExprMacroTable macroTable = plannerContext.getExprMacroTable();
ImmutableList.of(newProjects.size() - 2), newProjects.size() - 1, aggregateCall.getType(), aggregateCall.getName() ); ImmutableList.of(), newProjects.size() - 1, aggregateCall.getType(), aggregateCall.getName() ); ImmutableList.of(newProjects.size() - 2), newProjects.size() - 1, aggregateCall.getType(), aggregateCall.getName() ); newCasts.add(rexBuilder.makeInputRef(oldType, i)); } else { newCasts.add(rexBuilder.makeCast(oldType, rexBuilder.makeInputRef(newCall.getType(), i)));
if (SqlTypeName.INT_TYPES.contains(aggregateCall.getType().getSqlTypeName())) { sumType = ValueType.LONG; } else {
originalGroupSet.cardinality(), relBuilder.peek(), aggCall.getType(), aggCall.name); } else { aggCall.isApproximate(), newArgs, -1, originalGroupSet.cardinality(), relBuilder.peek(), aggCall.getType(), aggCall.getName()); } else { newCall = aggCall.isApproximate(), newArgs, -1, originalGroupSet.cardinality(), relBuilder.peek(), aggCall.getType(), aggCall.name);
getFieldType(oldAggRel.getInput(), iAvgInput), true); final RelDataType sumReturnType = getSumReturnType( rexBuilder.getTypeFactory(), sum0InputType, oldCall.getType()); final AggregateCall sumCall = AggregateCall.create( aggCallMapping, ImmutableList.of(sum0InputType)); refSum = rexBuilder.ensureType(oldCall.getType(), refSum, true); return rexBuilder.makeCast(oldCall.getType(), coalesce);
final RelDataType argOrdinalType = getFieldType(oldAggRel.getInput(), argOrdinal); final RelDataType oldCallType = typeFactory.createTypeWithNullability(oldCall.getType(), true); final int argRefOrdinal = lookupOrAdd(inputExprs, argRef); final RelDataType sumReturnType = getSumReturnType( rexBuilder.getTypeFactory(), argRef.getType(), oldCall.getType()); final int argSquaredOrdinal = lookupOrAdd(inputExprs, argSquared); final RelDataType sumSquaredReturnType = getSumReturnType( rexBuilder.getTypeFactory(), argSquared.getType(), oldCall.getType()); newCalls, aggCallMapping, ImmutableList.of(sumArgSquaredAggCall.getType())); newCalls, aggCallMapping, ImmutableList.of(sumArgAggCall.getType())); final RexNode sumArgCast = rexBuilder.ensureType(oldCallType, sumArg, true); final RexNode sumSquaredArg = oldCall.getType(), result);
getFieldType(oldAggRel.getInput(), iAvgInput), true); final RelDataType sumReturnType = getSumReturnType( rexBuilder.getTypeFactory(), avgInputType, oldCall.getType()); final AggregateCall sumCall = AggregateCall.create( ImmutableList.of(avgInputType)); numeratorRef = rexBuilder.ensureType(oldCall.getType(), numeratorRef, true); final RexNode divideRef = rexBuilder.makeCall(SqlStdOperatorTable.DIVIDE, numeratorRef, denominatorRef); return rexBuilder.makeCast(oldCall.getType(), divideRef);
@Override public boolean matches(RelOptRuleCall call) { DrillAggregateRel oldAggRel = (DrillAggregateRel) call.rels[0]; for (AggregateCall aggregateCall : oldAggRel.getAggCallList()) { if (isConversionToSumZeroNeeded(aggregateCall.getAggregation(), aggregateCall.getType())) { return true; } } return false; }
public Object toJson(AggregateCall node) { final Map<String, Object> map = jsonBuilder.map(); map.put("agg", toJson(node.getAggregation())); map.put("type", toJson(node.getType())); map.put("distinct", node.isDistinct()); map.put("operands", node.getArgList()); return map; }
public Object toJson(AggregateCall node) { final Map<String, Object> map = jsonBuilder.map(); map.put("agg", toJson(node.getAggregation())); map.put("type", toJson(node.getType())); map.put("distinct", node.isDistinct()); map.put("operands", node.getArgList()); return map; }
private RexNode getSumAggregatedRexNodeWithBinding(Aggregate oldAggRel, AggregateCall oldCall, List<AggregateCall> newCalls, Map<AggregateCall, RexNode> aggCallMapping, RelDataType operandType, int argOrdinal, int filter) { RelOptCluster cluster = oldAggRel.getCluster(); final AggregateCall sumArgSquaredAggCall = createAggregateCallWithBinding(cluster.getTypeFactory(), SqlStdOperatorTable.SUM, operandType, oldAggRel, oldCall, argOrdinal, filter); return cluster.getRexBuilder().addAggCall(sumArgSquaredAggCall, oldAggRel.getGroupCount(), oldAggRel.indicator, newCalls, aggCallMapping, ImmutableList.of(sumArgSquaredAggCall.getType())); }
private AggregateCall copyOf(AggregateCall call) { return AggregateCall.create( call.getAggregation(), // doesn't look we need to copy this call.isDistinct(), call.getArgList(), call.filterArg, copyOf(call.getType()), call.getName()); }