public static DremioFieldTrimmer of(RelOptCluster cluster) { RelBuilder builder = DremioRelFactories.CALCITE_LOGICAL_BUILDER.create(cluster, null); return new DremioFieldTrimmer(builder); }
public static RelNode trimFields(final RelNode relNode, boolean shouldLog) { final Stopwatch w = Stopwatch.createStarted(); final RelFieldTrimmer trimmer = DremioFieldTrimmer.of(relNode.getCluster()); final RelNode trimmed = trimmer.trim(relNode); if(shouldLog) { log(PlannerType.HEP, PlannerPhase.FIELD_TRIMMING, trimmed, logger, w); } return trimmed; }
@Override public TrimResult trimFields( SetOp setOp, ImmutableBitSet fieldsUsed, Set<RelDataTypeField> extraFields) { if(!setOp.all) { return result(setOp, Mappings.createIdentity(setOp.getRowType().getFieldCount())); } return super.trimFields(setOp, fieldsUsed, extraFields); }
final TrimResult trimResult = trimChild(window, input, inputFieldsUsed, inputExtraFields); RelNode newInput = trimResult.left; Mapping inputMapping = trimResult.right; return result(window, Mappings.createIdentity(fieldCount)); final TrimResult dummyResult = dummyProject(inputFieldCount, newInput); newInput = dummyResult.left; inputMapping = dummyResult.right; return result(newInput, mapping); RexWinAggCall newCall = permuteWinAggCall(agg, shuttle, newCalls.size()); newCalls.add(newCall); mapping.set(oldOffset, newOffset); return result(newWindow, mapping);
final TrimResult trimResult = trimChild(multiJoin, input, inputFieldsUsed.build(), Collections.emptySet()); newInputs.add(trimResult.left); result(multiJoin, Mappings.createIdentity(fieldCount)); computeJoinFieldRefCounts(newInputs, newFieldCount, newJoinFilter); newPostJoinFilter); return result(newMultiJoin, mapping);