Skip to content

Commit

Permalink
fix: sqlformatter to correctly handle describe (#3074)
Browse files Browse the repository at this point in the history
  • Loading branch information
big-andy-coates authored Jul 16, 2019
1 parent 3168150 commit 8de57bd
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -245,9 +245,8 @@ protected Void visitExplain(final Explain node, final Integer indent) {

@Override
protected Void visitShowColumns(final ShowColumns node, final Integer context) {
builder.append("SHOW COLUMNS FROM ")
builder.append("DESCRIBE ")
.append(node.getTable());

return null;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -340,17 +340,15 @@ public void shouldFormatOuterJoinWithoutJoinWindow() {
public void shouldFormatSelectQueryCorrectly() {
final String statementString =
"CREATE STREAM S AS SELECT a.address->city FROM address a;";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);
assertThat(SqlFormatter.formatSql(statement), equalTo("CREATE STREAM S AS SELECT FETCH_FIELD_FROM_STRUCT(A.ADDRESS, 'CITY') \"ADDRESS__CITY\"\n"
+ "FROM ADDRESS A"));
}

@Test
public void shouldFormatSelectStarCorrectly() {
final String statementString = "CREATE STREAM S AS SELECT * FROM address;";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);
assertThat(SqlFormatter.formatSql(statement),
equalTo("CREATE STREAM S AS SELECT *\n"
+ "FROM ADDRESS ADDRESS"));
Expand All @@ -359,8 +357,7 @@ public void shouldFormatSelectStarCorrectly() {
@Test
public void shouldFormatSelectStarCorrectlyWithOtherFields() {
final String statementString = "CREATE STREAM S AS SELECT *, address AS city FROM address;";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);
assertThat(SqlFormatter.formatSql(statement),
equalTo("CREATE STREAM S AS SELECT\n"
+ " *,\n"
Expand All @@ -372,8 +369,7 @@ public void shouldFormatSelectStarCorrectlyWithOtherFields() {
public void shouldFormatSelectStarCorrectlyWithJoin() {
final String statementString = "CREATE STREAM S AS SELECT address.*, itemid.* "
+ "FROM address INNER JOIN itemid ON address.address = itemid.address->address;";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);
assertThat(SqlFormatter.formatSql(statement),
equalTo("CREATE STREAM S AS SELECT\n"
+ " ADDRESS.*,\n"
Expand All @@ -386,8 +382,7 @@ public void shouldFormatSelectStarCorrectlyWithJoin() {
public void shouldFormatSelectStarCorrectlyWithJoinOneSidedStar() {
final String statementString = "CREATE STREAM S AS SELECT address.*, itemid.ordertime "
+ "FROM address INNER JOIN itemid ON address.address = itemid.address->address;";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);
assertThat(SqlFormatter.formatSql(statement),
equalTo("CREATE STREAM S AS SELECT\n"
+ " ADDRESS.*,\n"
Expand All @@ -399,8 +394,7 @@ public void shouldFormatSelectStarCorrectlyWithJoinOneSidedStar() {
@Test
public void shouldFormatSelectCorrectlyWithDuplicateFields() {
final String statementString = "CREATE STREAM S AS SELECT address AS one, address AS two FROM address;";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);
assertThat(SqlFormatter.formatSql(statement),
equalTo("CREATE STREAM S AS SELECT\n"
+ " ADDRESS.ADDRESS \"ONE\",\n"
Expand All @@ -411,8 +405,7 @@ public void shouldFormatSelectCorrectlyWithDuplicateFields() {
@Test
public void shouldFormatCsasWithClause() {
final String statementString = "CREATE STREAM S WITH(partitions=4) AS SELECT * FROM address;";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);

final String result = SqlFormatter.formatSql(statement);

Expand All @@ -422,8 +415,7 @@ public void shouldFormatCsasWithClause() {
@Test
public void shouldFormatCtasWithClause() {
final String statementString = "CREATE TABLE S WITH(partitions=4) AS SELECT * FROM address;";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);

final String result = SqlFormatter.formatSql(statement);

Expand All @@ -433,8 +425,7 @@ public void shouldFormatCtasWithClause() {
@Test
public void shouldFormatCsasPartitionBy() {
final String statementString = "CREATE STREAM S AS SELECT * FROM ADDRESS PARTITION BY ADDRESS;";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);

final String result = SqlFormatter.formatSql(statement);

Expand All @@ -446,8 +437,7 @@ public void shouldFormatCsasPartitionBy() {
@Test
public void shouldFormatInsertIntoPartitionBy() {
final String statementString = "INSERT INTO ADDRESS SELECT * FROM ADDRESS PARTITION BY ADDRESS;";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);

final String result = SqlFormatter.formatSql(statement);

Expand All @@ -459,8 +449,7 @@ public void shouldFormatInsertIntoPartitionBy() {
@Test
public void shouldFormatExplainQuery() {
final String statementString = "EXPLAIN foo;";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);

final String result = SqlFormatter.formatSql(statement);

Expand All @@ -470,8 +459,7 @@ public void shouldFormatExplainQuery() {
@Test
public void shouldFormatExplainStatement() {
final String statementString = "EXPLAIN SELECT * FROM ADDRESS;";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);

final String result = SqlFormatter.formatSql(statement);

Expand Down Expand Up @@ -529,8 +517,7 @@ public void shouldFormatDropTableStatement() {
@Test
public void shouldFormatInsertValuesStatement() {
final String statementString = "INSERT INTO ADDRESS (NUMBER, STREET, CITY) VALUES (2, 'high', 'palo alto');";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);

final String result = SqlFormatter.formatSql(statement);

Expand All @@ -540,8 +527,7 @@ public void shouldFormatInsertValuesStatement() {
@Test
public void shouldFormatInsertValuesNoSchema() {
final String statementString = "INSERT INTO ADDRESS VALUES (2);";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);

final String result = SqlFormatter.formatSql(statement);

Expand All @@ -565,8 +551,7 @@ public void shouldNotParseArbitraryExpressions() {
public void shouldFormatTumblingWindow() {
// Given:
final String statementString = "CREATE STREAM S AS SELECT ITEMID, COUNT(*) FROM ORDERS WINDOW TUMBLING (SIZE 7 DAYS) GROUP BY ITEMID;";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);

final String result = SqlFormatter.formatSql(statement);

Expand All @@ -582,8 +567,7 @@ public void shouldFormatTumblingWindow() {
public void shouldFormatHoppingWindow() {
// Given:
final String statementString = "CREATE STREAM S AS SELECT ITEMID, COUNT(*) FROM ORDERS WINDOW HOPPING (SIZE 20 SECONDS, ADVANCE BY 5 SECONDS) GROUP BY ITEMID;";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(statementString);

final String result = SqlFormatter.formatSql(statement);

Expand All @@ -598,9 +582,8 @@ public void shouldFormatHoppingWindow() {
@Test
public void shouldFormatSessionWindow() {
// Given:
final String statementString = "CREATE STREAM S AS SELECT ITEMID, COUNT(*) FROM ORDERS WINDOW SESSION (15 MINUTES) GROUP BY ITEMID;";
final Statement statement = KsqlParserTestUtil.buildSingleAst(statementString, metaStore)
.getStatement();
final Statement statement = parseSingle(
"CREATE STREAM S AS SELECT ITEMID, COUNT(*) FROM ORDERS WINDOW SESSION (15 MINUTES) GROUP BY ITEMID;");

final String result = SqlFormatter.formatSql(statement);

Expand All @@ -612,6 +595,22 @@ public void shouldFormatSessionWindow() {
+ "GROUP BY ORDERS.ITEMID"));
}

@Test
public void shouldFormatDescribeSource() {
// Given:
final Statement statement = parseSingle("DESCRIBE ORDERS;");

// When:
final String result = SqlFormatter.formatSql(statement);

// Then:
assertThat(result, is("DESCRIBE ORDERS"));
}

private Statement parseSingle(final String statementString) {
return KsqlParserTestUtil.buildSingleAst(statementString, metaStore).getStatement();
}

private void assertValidSql(final String sql) {
// Will throw if invalid
KsqlParserTestUtil.buildAst(sql, metaStore);
Expand Down

0 comments on commit 8de57bd

Please sign in to comment.