builder.append("IF NOT EXISTS "); String tableName = formatName(node.getName()); builder.append(tableName).append(" (\n"); String elementIndent = indentString(indent + 1); String columnList = node.getElements().stream() .map(element -> { if (element instanceof ColumnDefinition) { ColumnDefinition column = (ColumnDefinition) element; return elementIndent + formatColumnDefinition(column); StringBuilder builder = new StringBuilder(elementIndent); builder.append("LIKE ") .append(formatName(likeClause.getTableName())); if (likeClause.getPropertiesOption().isPresent()) { builder.append(" ") builder.append(formatPropertiesMultiLine(node.getProperties()));
append(indent, "WITH"); if (with.isRecursive()) { builder.append(" RECURSIVE"); while (queries.hasNext()) { WithQuery query = queries.next(); append(indent, query.getName()); appendAliasColumns(builder, query.getColumnNames()); builder.append(" AS "); process(new TableSubquery(query.getQuery()), indent); builder.append('\n'); if (queries.hasNext()) { processRelation(node.getQueryBody(), indent);
builder.append("IF NOT EXISTS "); String tableName = formatName(node.getName()); builder.append(tableName).append(" (\n"); String elementIndent = indentString(indent + 1); String columnList = node.getElements().stream() .map(element -> { if (element instanceof ColumnDefinition) { ColumnDefinition column = (ColumnDefinition) element; return elementIndent + formatColumnDefinition(column); StringBuilder builder = new StringBuilder(elementIndent); builder.append("LIKE ") .append(formatName(likeClause.getTableName())); if (likeClause.getPropertiesOption().isPresent()) { builder.append(" ") builder.append(formatPropertiesMultiLine(node.getProperties()));
append(indent, "WITH"); if (with.isRecursive()) { builder.append(" RECURSIVE"); while (queries.hasNext()) { WithQuery query = queries.next(); append(indent, formatExpression(query.getName(), parameters)); query.getColumnNames().ifPresent(columnNames -> appendAliasColumns(builder, columnNames)); builder.append(" AS "); process(new TableSubquery(query.getQuery()), indent); builder.append('\n'); if (queries.hasNext()) { processRelation(node.getQueryBody(), indent); process(node.getOrderBy().get(), indent);
@Override protected Void visitSelect(Select node, Integer indent) { append(indent, "SELECT"); if (node.isDistinct()) { builder.append(" DISTINCT"); } if (node.getSelectItems().size() > 1) { boolean first = true; for (SelectItem item : node.getSelectItems()) { builder.append("\n") .append(indentString(indent)) .append(first ? " " : ", "); process(item, indent); first = false; } } else { builder.append(' '); process(getOnlyElement(node.getSelectItems()), indent); } builder.append('\n'); return null; }
@Override protected Void visitSelect(Select node, Integer indent) { append(indent, "SELECT"); if (node.isDistinct()) { builder.append(" DISTINCT"); } if (node.getSelectItems().size() > 1) { boolean first = true; for (SelectItem item : node.getSelectItems()) { builder.append("\n") .append(indentString(indent)) .append(first ? " " : ", "); process(item, indent); first = false; } } else { builder.append(' '); process(getOnlyElement(node.getSelectItems()), indent); } builder.append('\n'); return null; }
@Override protected Void visitCreateTableAsSelect(CreateTableAsSelect node, Integer indent) { builder.append("CREATE TABLE "); if (node.isNotExists()) { builder.append("IF NOT EXISTS "); } builder.append(formatName(node.getName())); if (node.getColumnAliases().isPresent()) { String columnList = node.getColumnAliases().get().stream().map(element -> formatExpression(element, parameters)).collect(joining(", ")); builder.append(format("( %s )", columnList)); } if (node.getComment().isPresent()) { builder.append("\nCOMMENT " + formatStringLiteral(node.getComment().get())); } builder.append(formatPropertiesMultiLine(node.getProperties())); builder.append(" AS "); process(node.getQuery(), indent); if (!node.isWithData()) { builder.append(" WITH NO DATA"); } return null; }
@Override protected Void visitSampledRelation(SampledRelation node, Integer indent) { process(node.getRelation(), indent); builder.append(" TABLESAMPLE ") .append(node.getType()) .append(" (") .append(node.getSamplePercentage()) .append(')'); if (node.getColumnsToStratifyOn().isPresent()) { builder.append(" STRATIFY ON ") .append(" (") .append(Joiner.on(",").join(node.getColumnsToStratifyOn().get())); builder.append(')'); } return null; }
@Override protected Void visitCall(Call node, Integer indent) { builder.append("CALL ") .append(node.getName()) .append("("); Iterator<CallArgument> arguments = node.getArguments().iterator(); while (arguments.hasNext()) { process(arguments.next(), indent); if (arguments.hasNext()) { builder.append(", "); } } builder.append(")"); return null; }
@Override protected Void visitCall(Call node, Integer indent) { builder.append("CALL ") .append(node.getName()) .append("("); Iterator<CallArgument> arguments = node.getArguments().iterator(); while (arguments.hasNext()) { process(arguments.next(), indent); if (arguments.hasNext()) { builder.append(", "); } } builder.append(")"); return null; }
@Override protected Void visitUnion(Union node, Integer indent) { Iterator<Relation> relations = node.getRelations().iterator(); while (relations.hasNext()) { processRelation(relations.next(), indent); if (relations.hasNext()) { builder.append("UNION "); if (!node.isDistinct()) { builder.append("ALL "); } } } return null; }
@Override protected Void visitRow(Row node, Integer indent) { builder.append("ROW("); boolean firstItem = true; for (Expression item : node.getItems()) { if (!firstItem) { builder.append(", "); } process(item, indent); firstItem = false; } builder.append(")"); return null; }
@Override protected Void visitUnion(Union node, Integer indent) { Iterator<Relation> relations = node.getRelations().iterator(); while (relations.hasNext()) { processRelation(relations.next(), indent); if (relations.hasNext()) { builder.append("UNION "); if (!node.isDistinct()) { builder.append("ALL "); } } } return null; }
@Override protected Void visitValues(Values node, Integer indent) { builder.append(" VALUES "); boolean first = true; for (Expression row : node.getRows()) { builder.append("\n") .append(indentString(indent)) .append(first ? " " : ", "); builder.append(formatExpression(row)); first = false; } builder.append('\n'); return null; }