@Override public RexNode visitCall(RexCall call) { RexNode node = visit(call); if (node != null) { this.replaced = true; return node; } return super.visitCall(call); }
@Override public RexNode visitInputRef(RexInputRef inputRef) { RexNode node = visit(inputRef); if (node == null) { return super.visitInputRef(inputRef); } this.replaced = true; return node; }
private static List<RexNode> transformRex( List<RexNode> nodes, final List<RelDataTypeField> oldFields, final List<RelDataTypeField> newFields) { RexShuttle shuttle = new RexShuttle() { @Override public RexNode visitInputRef(RexInputRef ref) { RelDataTypeField f = oldFields.get(ref.getIndex()); for (int index = 0; index < newFields.size(); index++) { RelDataTypeField newf = newFields.get(index); if (f.getKey().equals(newf.getKey()) && f.getValue() == newf.getValue()) { return new RexInputRef(index, f.getValue()); } } throw MatchFailed.INSTANCE; } }; return shuttle.apply(nodes); } }
@Override public RexNode visitFieldAccess(RexFieldAccess fieldAccess) { foundFieldAccess = true; return super.visitFieldAccess(fieldAccess); } }
@Override public RexNode visitSubQuery(RexSubQuery subQuery) { foundRexSubQuery = true; return super.visitSubQuery(subQuery); }
@Override public RexNode visitCorrelVariable(RexCorrelVariable variable) { foundCorrelVariable = true; return super.visitCorrelVariable(variable); }
public RexNode visitOver(RexOver over) { final RexNode expr = super.visitOver(over); return registerInternal(expr, false); }
public RexNode visitFieldAccess(RexFieldAccess fieldAccess) { final RexNode expr = super.visitFieldAccess(fieldAccess); return registerInternal(expr, false); }
@Override public RexNode visitSubQuery(RexSubQuery subQuery) { if (relShuttle != null) { subQuery.rel.accept(relShuttle); // look inside sub-queries } return super.visitSubQuery(subQuery); } }
public RexNode visitCorrelVariable(RexCorrelVariable variable) { final RexNode expr = super.visitCorrelVariable(variable); return registerInternal(expr, false); } }
public RexNode visitOver(RexOver over) { final RexNode expr = super.visitOver(over); return registerInternal(expr, false); }
@Override public RexNode visitCall(RexCall call) { RexNode node = visit(call); if (node != null) { this.replaced = true; return node; } return super.visitCall(call); }
@Override public RelNode accept(RexShuttle shuttle) { RexNode joinFilter = shuttle.apply(this.condition); if (joinFilter == this.condition) { return this; } return new HiveMultiJoin( getCluster(), inputs, joinFilter, rowType, joinInputs, joinTypes, filters); }
@Override public RexNode visitInputRef(RexInputRef inputRef) { RexNode node = visit(inputRef); if (node == null) { return super.visitInputRef(inputRef); } this.replaced = true; return node; }
public RexNode visitFieldAccess(RexFieldAccess fieldAccess) { final RexNode expr = super.visitFieldAccess(fieldAccess); return registerInternal(expr, false); }
@Override public RexNode visitSubQuery(RexSubQuery subQuery) { if (relShuttle != null) { subQuery.rel.accept(relShuttle); // look inside sub-queries } return super.visitSubQuery(subQuery); } }
public RexNode visitCorrelVariable(RexCorrelVariable variable) { final RexNode expr = super.visitCorrelVariable(variable); return registerInternal(expr, false); } }
public RexNode visitOver(RexOver over) { return toReplace(over) ? replace(over) : super.visitOver(over); }
@Override public RexNode visitCall(RexCall inputCall) { RexNode node = super.visitCall(inputCall); if (node instanceof RexCall) { RexCall call = (RexCall) node; switch (call.getKind()) { case OR: try { RexNode newNode = transformIntoInClauseCondition(rexBuilder, call, minNumORClauses); if (newNode != null) { return newNode; } } catch (SemanticException e) { LOG.error("Exception in HivePointLookupOptimizerRule", e); return call; } default: break; } } return node; }
@Override public RelNode accept(RexShuttle shuttle) { RexNode joinFilter = shuttle.apply(this.condition); if (joinFilter == this.condition) { return this; } return new HiveMultiJoin( getCluster(), inputs, joinFilter, rowType, joinInputs, joinTypes, filters); }