private Expression handleNullUnboxingIfNecessary( Expression input, RexImpTable.NullAs nullAs, Type storageType) { if (RexImpTable.NullAs.NOT_POSSIBLE == nullAs && input.type.equals(storageType)) { // When we asked for not null input that would be stored as box, avoid // unboxing which may occur in the handleNull method below. return input; } return handleNull(input, nullAs); }
private static Expression implementCall( final RexToLixTranslator translator, RexCall call, NotNullImplementor implementor, final NullAs nullAs) { List<Expression> translatedOperands = translator.translateList(call.getOperands()); // Make sure the operands marked not null in the translator have all been // handled for nulls before being passed to the NotNullImplementor. if (nullAs == NullAs.NOT_POSSIBLE) { List<Expression> nullHandled = translatedOperands; for (int i = 0; i < translatedOperands.size(); i++) { RexNode arg = call.getOperands().get(i); Expression e = translatedOperands.get(i); if (!translator.isNullable(arg)) { if (nullHandled == translatedOperands) { nullHandled = new ArrayList<>(translatedOperands.subList(0, i)); } nullHandled.add(translator.handleNull(e, nullAs)); } else if (nullHandled != translatedOperands) { nullHandled.add(e); } } translatedOperands = nullHandled; } Expression result = implementor.implement(translator, call, translatedOperands); return translator.handleNull(result, nullAs); }
private static Expression implementCall( final RexToLixTranslator translator, RexCall call, NotNullImplementor implementor, final NullAs nullAs) { List<Expression> translatedOperands = translator.translateList(call.getOperands()); // Make sure the operands marked not null in the translator have all been // handled for nulls before being passed to the NotNullImplementor. if (nullAs == NullAs.NOT_POSSIBLE) { List<Expression> nullHandled = translatedOperands; for (int i = 0; i < translatedOperands.size(); i++) { RexNode arg = call.getOperands().get(i); Expression e = translatedOperands.get(i); if (!translator.isNullable(arg)) { if (nullHandled == translatedOperands) { nullHandled = new ArrayList<>(translatedOperands.subList(0, i)); } nullHandled.add(translator.handleNull(e, nullAs)); } else if (nullHandled != translatedOperands) { nullHandled.add(e); } } translatedOperands = nullHandled; } Expression result = implementor.implement(translator, call, translatedOperands); return translator.handleNull(result, nullAs); }
return handleNull(input, nullAs); case LOCAL_REF: return translate(