@Override protected String visitExists(ExistsPredicate node, Void context) { return "(EXISTS " + formatSql(node.getSubquery(), parameters) + ")"; }
@Override protected String visitArrayConstructor(ArrayConstructor node, Void context) { ImmutableList.Builder<String> valueStrings = ImmutableList.builder(); for (Expression value : node.getValues()) { valueStrings.add(formatSql(value, parameters)); } return "ARRAY[" + Joiner.on(",").join(valueStrings.build()) + "]"; }
@Override protected String visitSubqueryExpression(SubqueryExpression node, Void context) { return "(" + formatSql(node.getQuery(), parameters) + ")"; }
private static String dropTableSql(QualifiedName table) { return formatSql(new DropTable(table, true), Optional.empty()); }
@Override protected String visitArrayConstructor(ArrayConstructor node, Void context) { ImmutableList.Builder<String> valueStrings = ImmutableList.builder(); for (Expression value : node.getValues()) { valueStrings.add(formatSql(value, parameters)); } return "ARRAY[" + Joiner.on(",").join(valueStrings.build()) + "]"; }
@Override protected String visitSubqueryExpression(SubqueryExpression node, Void context) { return "(" + formatSql(node.getQuery(), parameters) + ")"; }
@Override protected String visitExists(ExistsPredicate node, Void context) { return "(EXISTS " + formatSql(node.getSubquery(), parameters) + ")"; }
protected String formatSqlText(String sql) { return formatSql(sqlParser.createStatement(sql, createParsingOptions(queryRunner.getDefaultSession())), Optional.empty()); }
public static void assertFormattedSql(SqlParser sqlParser, ParsingOptions parsingOptions, Node expected) { String formatted = formatSql(expected, Optional.empty()); // verify round-trip of formatting already-formatted SQL Statement actual = parseFormatted(sqlParser, parsingOptions, formatted, expected); assertEquals(formatSql(actual, Optional.empty()), formatted); // compare parsed tree with parsed tree of formatted SQL if (!actual.equals(expected)) { // simplify finding the non-equal part of the tree assertListEquals(linearizeTree(actual), linearizeTree(expected)); } assertEquals(actual, expected); }
public static void assertFormattedSql(SqlParser sqlParser, ParsingOptions parsingOptions, Node expected) { String formatted = formatSql(expected, Optional.empty()); // verify round-trip of formatting already-formatted SQL Statement actual = parseFormatted(sqlParser, parsingOptions, formatted, expected); assertEquals(formatSql(actual, Optional.empty()), formatted); // compare parsed tree with parsed tree of formatted SQL if (!actual.equals(expected)) { // simplify finding the non-equal part of the tree assertListEquals(linearizeTree(actual), linearizeTree(expected)); } assertEquals(actual, expected); }
private static void assertSqlFormatter(String expression, String formatted) { Expression originalExpression = SQL_PARSER.createExpression(expression, new ParsingOptions()); String real = SqlFormatter.formatSql(originalExpression, Optional.empty()); assertEquals(real, formatted); }
private Query rewriteInsertQuery(Connection connection, Query query, Insert statement) throws SQLException, QueryRewriteException { QualifiedName temporaryTableName = generateTemporaryTableName(statement.getTarget()); Statement createTemporaryTable = new CreateTable(temporaryTableName, ImmutableList.of(new LikeClause(statement.getTarget(), Optional.of(INCLUDING))), true, ImmutableList.of(), Optional.empty()); String createTemporaryTableSql = formatSql(createTemporaryTable, Optional.empty()); String insertSql = formatSql(new Insert(temporaryTableName, statement.getColumns(), statement.getQuery()), Optional.empty()); String checksumSql = checksumSql(getColumnsForTable(connection, query.getCatalog(), query.getSchema(), statement.getTarget().toString()), temporaryTableName); String dropTableSql = dropTableSql(temporaryTableName); return new Query(query.getCatalog(), query.getSchema(), ImmutableList.of(createTemporaryTableSql, insertSql), checksumSql, ImmutableList.of(dropTableSql), query.getUsername(), query.getPassword(), query.getSessionProperties()); }
public static String getFormattedSql(Statement statement, SqlParser sqlParser, Optional<List<Expression>> parameters) { String sql = SqlFormatter.formatSql(statement, parameters); // verify round-trip Statement parsed; try { ParsingOptions parsingOptions = new ParsingOptions(REJECT /* formatted SQL should be unambiguous */); parsed = sqlParser.createStatement(sql, parsingOptions); } catch (ParsingException e) { throw new PrestoException(GENERIC_INTERNAL_ERROR, "Formatted query does not parse: " + statement); } if (!statement.equals(parsed)) { throw new PrestoException(GENERIC_INTERNAL_ERROR, "Query does not round-trip: " + statement); } return sql; } }
private Query rewriteCreateTableAsSelect(Connection connection, Query query, CreateTableAsSelect statement) throws SQLException, QueryRewriteException { QualifiedName temporaryTableName = generateTemporaryTableName(statement.getName()); Statement rewritten = new CreateTableAsSelect(temporaryTableName, statement.getQuery(), statement.isNotExists(), statement.getProperties(), statement.isWithData(), statement.getColumnAliases(), Optional.empty()); String createTableAsSql = formatSql(rewritten, Optional.empty()); String checksumSql = checksumSql(getColumns(connection, statement), temporaryTableName); String dropTableSql = dropTableSql(temporaryTableName); return new Query(query.getCatalog(), query.getSchema(), ImmutableList.of(createTableAsSql), checksumSql, ImmutableList.of(dropTableSql), query.getUsername(), query.getPassword(), query.getSessionProperties()); }
private static void printStatement(String sql) { println(sql.trim()); println(""); ParsingOptions parsingOptions = new ParsingOptions(AS_DOUBLE /* anything */); Statement statement = SQL_PARSER.createStatement(sql, parsingOptions); println(statement.toString()); println(""); println(SqlFormatter.formatSql(statement, Optional.empty())); println(""); assertFormattedSql(SQL_PARSER, statement); println(repeat("=", 60)); println(""); }