@Override protected Void visitStartTransaction(StartTransaction node, Integer indent) { builder.append("START TRANSACTION"); Iterator<TransactionMode> iterator = node.getTransactionModes().iterator(); while (iterator.hasNext()) { builder.append(" "); process(iterator.next(), indent); if (iterator.hasNext()) { builder.append(","); } } return null; }
@Override protected Void visitInsert(Insert node, Integer indent) { builder.append("INSERT INTO ") .append(node.getTarget()); if (node.getColumns().isPresent()) { builder.append(" (") .append(Joiner.on(", ").join(node.getColumns().get())) .append(")"); } builder.append("\n"); process(node.getQuery(), indent); return null; }
private void processRelation(Relation relation, Integer indent) { // TODO: handle this properly if (relation instanceof Table) { builder.append("TABLE ") .append(((Table) relation).getName()) .append('\n'); } else { process(relation, indent); } }
@Override protected Void visitCreateView(CreateView node, Integer indent) { builder.append("CREATE "); if (node.isReplace()) { builder.append("OR REPLACE "); } builder.append("VIEW ") .append(formatName(node.getName())); node.getSecurity().ifPresent(security -> builder.append(" SECURITY ") .append(security.toString())); builder.append(" AS\n"); process(node.getQuery(), indent); 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; }
private void processRelation(Relation relation, Integer indent) { // TODO: handle this properly if (relation instanceof Table) { builder.append("TABLE ") .append(((Table) relation).getName()) .append('\n'); } else { process(relation, indent); } }
@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; }
@Override protected Void visitTableSubquery(TableSubquery node, Integer indent) { builder.append('(') .append('\n'); process(node.getQuery(), indent + 1); append(indent, ") "); 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(')'); 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(')'); 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; }
@Override protected Void visitShowStats(ShowStats node, Integer context) { builder.append("SHOW STATS FOR "); process(node.getRelation(), 0); builder.append(""); return null; }
@Override protected Void visitTableSubquery(TableSubquery node, Integer indent) { builder.append('(') .append('\n'); process(node.getQuery(), indent + 1); append(indent, ") "); return null; }
public static String formatSql(Node root, Optional<List<Expression>> parameters) { StringBuilder builder = new StringBuilder(); new Formatter(builder, parameters).process(root, 0); return builder.toString(); }
@Override protected Void visitShowStats(ShowStats node, Integer context) { builder.append("SHOW STATS FOR "); process(node.getRelation(), 0); builder.append(""); return null; }
@Override protected Void visitPrepare(Prepare node, Integer indent) { append(indent, "PREPARE "); builder.append(node.getName()); builder.append(" FROM"); builder.append("\n"); process(node.getStatement(), indent + 1); return null; }
@Override protected Void visitLateral(Lateral node, Integer indent) { append(indent, "LATERAL ("); process(node.getQuery(), indent + 1); append(indent, ")"); return null; }
@Override protected Void visitLateral(Lateral node, Integer indent) { append(indent, "LATERAL ("); process(node.getQuery(), indent + 1); append(indent, ")"); return null; }
public static String formatSql(Node root, Optional<List<Expression>> parameters) { StringBuilder builder = new StringBuilder(); new Formatter(builder, parameters).process(root, 0); return builder.toString(); }
@Override protected Void visitPrepare(Prepare node, Integer indent) { append(indent, "PREPARE "); builder.append(node.getName()); builder.append(" FROM"); builder.append("\n"); process(node.getStatement(), indent + 1); return null; }