@Override public final String toString() { return ExpressionFormatter.formatExpression(this, Optional.empty()); // This will not replace parameters, but we don't have access to them here } }
@Override public void serialize(Expression expression, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeString(ExpressionFormatter.formatExpression(expression, Optional.empty())); } }
@Override protected Void visitExpression(Expression node, Integer indent) { checkArgument(indent == 0, "visitExpression should only be called at root"); builder.append(formatExpression(node, parameters)); return null; }
@Override public void serialize(Expression expression, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeString(ExpressionFormatter.formatExpression(expression, Optional.empty())); } }
private static String formatGroupingSet(List<Expression> groupingSet, Optional<List<Expression>> parameters) { return format("(%s)", Joiner.on(", ").join(groupingSet.stream() .map(e -> formatExpression(e, parameters)) .iterator())); }
@Override protected String visitLambdaArgumentDeclaration(LambdaArgumentDeclaration node, Void context) { return formatExpression(node.getName(), parameters); }
private String formatPropertiesMultiLine(List<Property> properties) { if (properties.isEmpty()) { return ""; } String propertyList = properties.stream() .map(element -> INDENT + formatExpression(element.getName(), parameters) + " = " + formatExpression(element.getValue(), parameters)) .collect(joining(",\n")); return "\nWITH (\n" + propertyList + "\n)"; }
@Override protected String visitLambdaArgumentDeclaration(LambdaArgumentDeclaration node, Void context) { return formatExpression(node.getName(), parameters); }
@Override protected Void visitSingleColumn(SingleColumn node, Integer indent) { builder.append(formatExpression(node.getExpression(), parameters)); if (node.getAlias().isPresent()) { builder.append(' ') .append(formatExpression(node.getAlias().get(), parameters)); } return null; }
@Override protected Void visitCallArgument(CallArgument node, Integer indent) { if (node.getName().isPresent()) { builder.append(node.getName().get()) .append(" => "); } builder.append(formatExpression(node.getValue(), parameters)); return null; }
@Override protected Void visitRenameSchema(RenameSchema node, Integer context) { builder.append("ALTER SCHEMA ") .append(formatName(node.getSource())) .append(" RENAME TO ") .append(formatExpression(node.getTarget(), parameters)); return null; }
@Override protected Void visitDropColumn(DropColumn node, Integer context) { builder.append("ALTER TABLE ") .append(formatName(node.getTable())) .append(" DROP COLUMN ") .append(formatExpression(node.getColumn(), parameters)); return null; }
@Override protected Void visitDropColumn(DropColumn node, Integer context) { builder.append("ALTER TABLE ") .append(formatName(node.getTable())) .append(" DROP COLUMN ") .append(formatExpression(node.getColumn(), parameters)); return null; }
@Override protected Void visitRenameSchema(RenameSchema node, Integer context) { builder.append("ALTER SCHEMA ") .append(formatName(node.getSource())) .append(" RENAME TO ") .append(formatExpression(node.getTarget(), parameters)); return null; }
@Override protected Void visitDelete(Delete node, Integer context) { builder.append("DELETE FROM ") .append(formatName(node.getTable().getName())); if (node.getWhere().isPresent()) { builder.append(" WHERE ") .append(formatExpression(node.getWhere().get(), parameters)); } return null; }
@Override protected Void visitDelete(Delete node, Integer context) { builder.append("DELETE FROM ") .append(formatName(node.getTable().getName())); if (node.getWhere().isPresent()) { builder.append(" WHERE ") .append(formatExpression(node.getWhere().get(), parameters)); } return null; }
@Override protected Void visitAliasedRelation(AliasedRelation node, Integer indent) { process(node.getRelation(), indent); builder.append(' ') .append(formatExpression(node.getAlias(), parameters)); appendAliasColumns(builder, node.getColumnNames()); return null; }
private String formatColumnDefinition(ColumnDefinition column) { return formatExpression(column.getName(), parameters) + " " + column.getType() + column.getComment() .map(comment -> " COMMENT " + formatStringLiteral(comment)) .orElse("") + formatPropertiesSingleLine(column.getProperties()); }
private String formatColumnDefinition(ColumnDefinition column) { return formatExpression(column.getName(), parameters) + " " + column.getType() + column.getComment() .map(comment -> " COMMENT " + formatStringLiteral(comment)) .orElse("") + formatPropertiesSingleLine(column.getProperties()); }
private static void assertRoundTrip(String expression) { ParsingOptions parsingOptions = createParsingOptions(TEST_SESSION); assertEquals(SQL_PARSER.createExpression(expression, parsingOptions), SQL_PARSER.createExpression(formatExpression(SQL_PARSER.createExpression(expression, parsingOptions), Optional.empty()), parsingOptions)); }