@Override protected Boolean visitIfExpression(IfExpression node, Void context) { ImmutableList.Builder<Expression> expressions = ImmutableList.<Expression>builder() .add(node.getCondition()) .add(node.getTrueValue()); if (node.getFalseValue().isPresent()) { expressions.add(node.getFalseValue().get()); } return expressions.build().stream().allMatch(expression -> process(expression, context)); }
@Override protected String visitIfExpression(IfExpression node, Void context) { StringBuilder builder = new StringBuilder(); builder.append("IF(") .append(process(node.getCondition(), context)) .append(", ") .append(process(node.getTrueValue(), context)); if (node.getFalseValue().isPresent()) { builder.append(", ") .append(process(node.getFalseValue().get(), context)); } builder.append(")"); return builder.toString(); }
@Override protected R visitIfExpression(IfExpression node, C context) { process(node.getCondition(), context); process(node.getTrueValue(), context); if (node.getFalseValue().isPresent()) { process(node.getFalseValue().get(), context); } return null; }
@Override protected RowExpression visitIfExpression(IfExpression node, Void context) { ImmutableList.Builder<RowExpression> arguments = ImmutableList.builder(); arguments.add(process(node.getCondition(), context)) .add(process(node.getTrueValue(), context)); if (node.getFalseValue().isPresent()) { arguments.add(process(node.getFalseValue().get(), context)); } else { arguments.add(constantNull(getType(node))); } return call(Signatures.ifSignature(getType(node)), getType(node), arguments.build()); }
@Override public Expression rewriteIfExpression(IfExpression node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { Expression condition = treeRewriter.rewrite(node.getCondition(), context); Expression trueValue = treeRewriter.rewrite(node.getTrueValue(), context); Optional<Expression> falseValue = node.getFalseValue().map((value) -> treeRewriter.rewrite(value, context)); return new SearchedCaseExpression(ImmutableList.of(new WhenClause(condition, trueValue)), falseValue); }
@Override protected Type visitIfExpression(IfExpression node, StackableAstVisitorContext<Context> context) { coerceType(context, node.getCondition(), BOOLEAN, "IF condition"); Type type; if (node.getFalseValue().isPresent()) { type = coerceToSingleType(context, node, "Result types for IF must be the same: %s vs %s", node.getTrueValue(), node.getFalseValue().get()); } else { type = process(node.getTrueValue(), context); } return setExpressionType(node, type); }
@Override protected Object visitIfExpression(IfExpression node, Object context) { Object trueValue = processWithExceptionHandling(node.getTrueValue(), context); Object falseValue = processWithExceptionHandling(node.getFalseValue().orElse(null), context); Object condition = processWithExceptionHandling(node.getCondition(), context); if (condition instanceof Expression) { Expression falseValueExpression = (falseValue == null) ? null : toExpression(falseValue, type(node.getFalseValue().get())); return new IfExpression( toExpression(condition, type(node.getCondition())), toExpression(trueValue, type(node.getTrueValue())), falseValueExpression); } else if (Boolean.TRUE.equals(condition)) { return trueValue; } else { return falseValue; } }
@Override protected String visitIfExpression(IfExpression node, Void context) { StringBuilder builder = new StringBuilder(); builder.append("IF(") .append(process(node.getCondition(), context)) .append(", ") .append(process(node.getTrueValue(), context)); if (node.getFalseValue().isPresent()) { builder.append(", ") .append(process(node.getFalseValue().get(), context)); } builder.append(")"); return builder.toString(); }
@Override protected Boolean visitIfExpression(IfExpression node, Void context) { ImmutableList.Builder<Expression> expressions = ImmutableList.<Expression>builder() .add(node.getCondition()) .add(node.getTrueValue()); if (node.getFalseValue().isPresent()) { expressions.add(node.getFalseValue().get()); } return expressions.build().stream().allMatch(expression -> process(expression, context)); }
@Override protected String visitIfExpression(IfExpression node, Void context) { StringBuilder builder = new StringBuilder(); builder.append("IF(") .append(process(node.getCondition(), context)) .append(", ") .append(process(node.getTrueValue(), context)); if (node.getFalseValue().isPresent()) { builder.append(", ") .append(process(node.getFalseValue().get(), context)); } builder.append(")"); return builder.toString(); }
@Override protected String visitIfExpression(IfExpression node, Boolean unmangleNames) { StringBuilder builder = new StringBuilder(); builder.append("IF(") .append(process(node.getCondition(), unmangleNames)) .append(", ") .append(process(node.getTrueValue(), unmangleNames)); if (node.getFalseValue().isPresent()) { builder.append(", ") .append(process(node.getFalseValue().get(), unmangleNames)); } builder.append(")"); return builder.toString(); }
@Override protected String visitIfExpression(IfExpression node, Boolean unmangleNames) { StringBuilder builder = new StringBuilder(); builder.append("IF(") .append(process(node.getCondition(), unmangleNames)) .append(", ") .append(process(node.getTrueValue(), unmangleNames)); if (node.getFalseValue().isPresent()) { builder.append(", ") .append(process(node.getFalseValue().get(), unmangleNames)); } builder.append(")"); return builder.toString(); }
@Override protected RowExpression visitIfExpression(IfExpression node, Void context) { ImmutableList.Builder<RowExpression> arguments = ImmutableList.builder(); arguments.add(process(node.getCondition(), context)) .add(process(node.getTrueValue(), context)); if (node.getFalseValue().isPresent()) { arguments.add(process(node.getFalseValue().get(), context)); } else { arguments.add(constantNull(types.get(node))); } return call(Signatures.ifSignature(types.get(node)), types.get(node), arguments.build()); }
@Override protected R visitIfExpression(IfExpression node, C context) { process(node.getCondition(), context); process(node.getTrueValue(), context); if (node.getFalseValue().isPresent()) { process(node.getFalseValue().get(), context); } return null; }
@Override protected R visitIfExpression(IfExpression node, C context) { process(node.getCondition(), context); process(node.getTrueValue(), context); if (node.getFalseValue().isPresent()) { process(node.getFalseValue().get(), context); } return null; }
@Override protected Type visitIfExpression(IfExpression node, StackableAstVisitorContext<AnalysisContext> context) { coerceType(context, node.getCondition(), BOOLEAN, "IF condition"); Type type; if (node.getFalseValue().isPresent()) { type = coerceToSingleType(context, node, "Result types for IF must be the same: %s vs %s", node.getTrueValue(), node.getFalseValue().get()); } else { type = process(node.getTrueValue(), context); } expressionTypes.put(node, type); return type; }
@Override public Expression rewriteIfExpression(IfExpression node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { Expression condition = treeRewriter.rewrite(node.getCondition(), context); Expression trueValue = treeRewriter.rewrite(node.getTrueValue(), context); Optional<Expression> falseValue = node.getFalseValue() .map((value) -> treeRewriter.rewrite(value, context)); return new SearchedCaseExpression(ImmutableList.of(new WhenClause(condition, trueValue)), falseValue); }