@Override public Expression rewriteExpression(Expression node, NodeContext context, ExpressionTreeRewriter<NodeContext> treeRewriter) { if (context.isRootNode()) { return treeRewriter.rewrite(node, NodeContext.NOT_ROOT_NODE); } return null; }
@Override public Expression rewriteExpression(Expression node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { return treeRewriter.defaultRewrite(node, context); }
private static ExpressionRewriter createRewrite() { return (expression, context) -> ExpressionTreeRewriter.rewriteWith(new com.facebook.presto.sql.tree.ExpressionRewriter<Void>() { @Override public Expression rewriteCurrentUser(CurrentUser node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { return DesugarCurrentUser.getCall(node); } }, expression); }
public static <C, T extends Expression> T rewriteWith(ExpressionRewriter<C> rewriter, T node) { return new ExpressionTreeRewriter<>(rewriter).rewrite(node, null); }
public static <C, T extends Expression> T rewriteWith(ExpressionRewriter<C> rewriter, T node, C context) { return new ExpressionTreeRewriter<>(rewriter).rewrite(node, context); }
public Expression map(Expression value) { return ExpressionTreeRewriter.rewriteWith(new ExpressionRewriter<Void>() { @Override public Expression rewriteSymbolReference(SymbolReference node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { Symbol canonical = map(Symbol.from(node)); return canonical.toSymbolReference(); } }, value); }
private List<Expression> rewrite(List<Expression> items, Context<C> context) { ImmutableList.Builder<Expression> builder = ImmutableList.builder(); for (Expression expression : items) { builder.add(rewrite(expression, context.get())); } return builder.build(); }
public static <C, T extends Expression> T rewriteWith(ExpressionRewriter<C> rewriter, T node) { return new ExpressionTreeRewriter<>(rewriter).rewrite(node, null); }
@Override public Expression rewriteExpression(Expression node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { if (expressionToSymbols.containsKey(node)) { return expressionToSymbols.get(node).toSymbolReference(); } Expression translated = expressionToExpressions.getOrDefault(node, node); return treeRewriter.defaultRewrite(translated, context); } }, mapped);
private static ExpressionRewriter createRewrite() { return (expression, context) -> rewriteWith(new com.facebook.presto.sql.tree.ExpressionRewriter<Void>() { @Override public Expression rewriteCurrentPath(CurrentPath node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { return DesugarCurrentPath.getCall(node); } }, expression); }
@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); }
public static <C, T extends Expression> T rewriteWith(ExpressionRewriter<C> rewriter, T node) { return new ExpressionTreeRewriter<>(rewriter).rewrite(node, null); }
@Override public Expression rewriteLambdaExpression(LambdaExpression node, Context context, ExpressionTreeRewriter<Context> treeRewriter) { return treeRewriter.defaultRewrite(node, new Context(true)); } }, expression, new Context(false));
private Expression canonicalize(Expression value) { return ExpressionTreeRewriter.rewriteWith(new ExpressionRewriter<Void>() { @Override public Expression rewriteSymbolReference(SymbolReference node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { Symbol canonical = canonicalize(Symbol.from(node)); return canonical.toSymbolReference(); } }, value); }
@Override public Expression rewriteLambdaExpression(LambdaExpression node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { return new LambdaExpression(node.getArguments(), treeRewriter.rewrite(node.getBody(), context)); } }, expression);
public static <C, T extends Expression> T rewriteWith(ExpressionRewriter<C> rewriter, T node, C context) { return new ExpressionTreeRewriter<>(rewriter).rewrite(node, context); }
@Override public Expression rewriteLambdaExpression(LambdaExpression node, Context context, ExpressionTreeRewriter<Context> treeRewriter) { return treeRewriter.defaultRewrite(node, new Context(true)); } }, expression, new Context(false));
public static Expression rewriteIdentifiersToSymbolReferences(Expression expression) { return ExpressionTreeRewriter.rewriteWith(new ExpressionRewriter<Void>() { @Override public Expression rewriteIdentifier(Identifier node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { return new SymbolReference(node.getValue()); } @Override public Expression rewriteLambdaExpression(LambdaExpression node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { return new LambdaExpression(node.getArguments(), treeRewriter.rewrite(node.getBody(), context)); } }, expression); } }
@Override public Expression rewriteTryExpression(TryExpression node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { Expression expression = treeRewriter.rewrite(node.getInnerExpression(), context); return new FunctionCall( QualifiedName.of("$internal$try"), ImmutableList.of(new LambdaExpression(ImmutableList.of(), expression))); } }
public static <C, T extends Expression> T rewriteWith(ExpressionRewriter<C> rewriter, T node, C context) { return new ExpressionTreeRewriter<>(rewriter).rewrite(node, context); }