@Override protected String visitRow(Row node, Void context) { return "ROW (" + Joiner.on(", ").join(node.getItems().stream() .map((child) -> process(child, context)) .collect(toList())) + ")"; }
@Override protected String visitLambdaExpression(LambdaExpression node, Void context) { StringBuilder builder = new StringBuilder(); builder.append('('); Joiner.on(", ").appendTo(builder, node.getArguments()); builder.append(") -> "); builder.append(process(node.getBody(), context)); return builder.toString(); }
@Override protected String visitSearchedCaseExpression(SearchedCaseExpression node, Void context) { ImmutableList.Builder<String> parts = ImmutableList.builder(); parts.add("CASE"); for (WhenClause whenClause : node.getWhenClauses()) { parts.add(process(whenClause, context)); } node.getDefaultValue() .ifPresent((value) -> parts.add("ELSE").add(process(value, context))); parts.add("END"); return "(" + Joiner.on(' ').join(parts.build()) + ")"; }
@Override protected String visitLambdaExpression(LambdaExpression node, Void context) { StringBuilder builder = new StringBuilder(); builder.append('('); Joiner.on(", ").appendTo(builder, node.getArguments()); builder.append(") -> "); builder.append(process(node.getBody(), context)); return builder.toString(); }
@Override protected String visitExtract(Extract node, Void context) { return "EXTRACT(" + node.getField() + " FROM " + process(node.getExpression(), context) + ")"; }
@Override protected String visitIsNullPredicate(IsNullPredicate node, Void context) { return "(" + process(node.getValue(), context) + " IS NULL)"; }
@Override public String visitCast(Cast node, Void context) { return (node.isSafe() ? "TRY_CAST" : "CAST") + "(" + process(node.getExpression(), context) + " AS " + node.getType() + ")"; }
@Override protected String visitTryExpression(TryExpression node, Void context) { return "TRY(" + process(node.getInnerExpression(), context) + ")"; }
@Override protected String visitNotExpression(NotExpression node, Void context) { return "(NOT " + process(node.getValue(), context) + ")"; }
@Override protected String visitBindExpression(BindExpression node, Void context) { StringBuilder builder = new StringBuilder(); builder.append("\"$INTERNAL$BIND\"("); for (Expression value : node.getValues()) { builder.append(process(value, context) + ", "); } builder.append(process(node.getFunction(), context) + ")"); return builder.toString(); }
@Override protected String visitParameter(Parameter node, Void context) { if (parameters.isPresent()) { checkArgument(node.getPosition() < parameters.get().size(), "Invalid parameter number %s. Max value is %s", node.getPosition(), parameters.get().size() - 1); return process(parameters.get().get(node.getPosition()), context); } return "?"; }