Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -85,19 +85,22 @@ public void testCreateTableAsSelect()
this.assertCreateTableAsSelect(
"test_group",
"SELECT orderstatus, sum(totalprice) x FROM orders GROUP BY orderstatus",
"SELECT count(DISTINCT orderstatus) FROM orders");
"SELECT count(DISTINCT orderstatus) FROM orders",
true);

this.assertCreateTableAsSelect(
"test_with_data",
"SELECT * FROM orders WITH DATA",
"SELECT * FROM orders",
"SELECT count(*) FROM orders");
"SELECT count(*) FROM orders",
true);

this.assertCreateTableAsSelect(
"test_with_no_data",
"SELECT * FROM orders WITH NO DATA",
"SELECT * FROM orders LIMIT 0",
"SELECT 0");
"SELECT 0",
true);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -251,39 +251,46 @@ public void testCreateTableAsSelect()
assertCreateTableAsSelect(
"test_select",
"SELECT orderdate, orderkey, totalprice FROM orders",
"SELECT count(*) FROM orders");
"SELECT count(*) FROM orders",
true);

assertCreateTableAsSelect(
"test_group",
"SELECT orderstatus, sum(totalprice) x FROM orders GROUP BY orderstatus",
"SELECT count(DISTINCT orderstatus) FROM orders");
"SELECT count(DISTINCT orderstatus) FROM orders",
true);

assertCreateTableAsSelect(
"test_join",
"SELECT count(*) x FROM lineitem JOIN orders ON lineitem.orderkey = orders.orderkey",
"SELECT 1");
"SELECT 1",
true);

assertCreateTableAsSelect(
"test_limit",
"SELECT orderkey FROM orders ORDER BY orderkey LIMIT 10",
"SELECT 10");
"SELECT 10",
true);

assertCreateTableAsSelect(
"test_unicode",
"SELECT '\u2603' unicode",
"SELECT 1");
"SELECT 1",
true);

assertCreateTableAsSelect(
"test_with_data",
"SELECT * FROM orders WITH DATA",
"SELECT * FROM orders",
"SELECT count(*) FROM orders");
"SELECT count(*) FROM orders",
true);

assertCreateTableAsSelect(
"test_with_no_data",
"SELECT * FROM orders WITH NO DATA",
"SELECT * FROM orders LIMIT 0",
"SELECT 0");
"SELECT 0",
true);

// Tests for CREATE TABLE with UNION ALL: exercises PushTableWriteThroughUnion optimizer

Expand All @@ -292,7 +299,8 @@ public void testCreateTableAsSelect()
"SELECT orderdate, orderkey, totalprice FROM orders WHERE orderkey % 2 = 0 UNION ALL " +
"SELECT orderdate, orderkey, totalprice FROM orders WHERE orderkey % 2 = 1",
"SELECT orderdate, orderkey, totalprice FROM orders",
"SELECT count(*) FROM orders");
"SELECT count(*) FROM orders",
true);

assertCreateTableAsSelect(
Session.builder(getSession()).setSystemProperty("redistribute_writes", "true").build(),
Expand All @@ -301,7 +309,8 @@ public void testCreateTableAsSelect()
"SELECT DATE '2000-01-01', 1234567890, 1.23",
"SELECT orderdate, orderkey, totalprice FROM orders UNION ALL " +
"SELECT DATE '2000-01-01', 1234567890, 1.23",
"SELECT count(*) + 1 FROM orders");
"SELECT count(*) + 1 FROM orders",
true);

assertCreateTableAsSelect(
Session.builder(getSession()).setSystemProperty("redistribute_writes", "false").build(),
Expand All @@ -310,7 +319,8 @@ public void testCreateTableAsSelect()
"SELECT DATE '2000-01-01', 1234567890, 1.23",
"SELECT orderdate, orderkey, totalprice FROM orders UNION ALL " +
"SELECT DATE '2000-01-01', 1234567890, 1.23",
"SELECT count(*) + 1 FROM orders");
"SELECT count(*) + 1 FROM orders",
true);

assertExplainAnalyze("EXPLAIN ANALYZE CREATE TABLE analyze_test AS SELECT orderstatus FROM orders");
assertQuery("SELECT * from analyze_test", "SELECT orderstatus FROM orders");
Expand Down Expand Up @@ -371,35 +381,6 @@ public void testExplainAnalyzeDDL()
computeActual("EXPLAIN ANALYZE DROP TABLE orders");
}

private void assertExplainAnalyze(@Language("SQL") String query)
{
String value = (String) computeActual(query).getOnlyValue();

assertTrue(value.matches("(?s:.*)CPU:.*, Input:.*, Output(?s:.*)"), format("Expected output to contain \"CPU:.*, Input:.*, Output\", but it is %s", value));

// TODO: check that rendered plan is as expected, once stats are collected in a consistent way
// assertTrue(value.contains("Cost: "), format("Expected output to contain \"Cost: \", but it is %s", value));
}

protected void assertCreateTableAsSelect(String table, @Language("SQL") String query, @Language("SQL") String rowCountQuery)
{
assertCreateTableAsSelect(getSession(), table, query, query, rowCountQuery);
}

protected void assertCreateTableAsSelect(String table, @Language("SQL") String query, @Language("SQL") String expectedQuery, @Language("SQL") String rowCountQuery)
{
assertCreateTableAsSelect(getSession(), table, query, expectedQuery, rowCountQuery);
}

protected void assertCreateTableAsSelect(Session session, String table, @Language("SQL") String query, @Language("SQL") String expectedQuery, @Language("SQL") String rowCountQuery)
{
assertUpdate(session, "CREATE TABLE " + table + " AS " + query, rowCountQuery);
assertQuery(session, "SELECT * FROM " + table, expectedQuery);
assertUpdate(session, "DROP TABLE " + table);

assertFalse(getQueryRunner().tableExists(session, table));
}

// Flaky test: https://github.com/prestodb/presto/issues/20764
@Test(expectedExceptions = RuntimeException.class, expectedExceptionsMessageRegExp = "Regexp matching interrupted", timeOut = 30_000, enabled = false)
public void testRunawayRegexAnalyzerTimeout()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@
import static java.lang.String.format;
import static java.util.Collections.emptyList;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;

public abstract class AbstractTestQueryFramework
Expand Down Expand Up @@ -346,6 +348,36 @@ protected void assertTableColumnNames(String tableName, String... columnNames)
assertEquals(actual, expected);
}

protected void assertCreateTableAsSelect(String table, @Language("SQL") String query, @Language("SQL") String rowCountQuery, boolean allowDropTable)
{
assertCreateTableAsSelect(getSession(), table, query, query, rowCountQuery, allowDropTable);
}

protected void assertCreateTableAsSelect(String table, @Language("SQL") String query, @Language("SQL") String expectedQuery, @Language("SQL") String rowCountQuery, boolean allowDropTable)
{
assertCreateTableAsSelect(getSession(), table, query, expectedQuery, rowCountQuery, allowDropTable);
}

protected void assertCreateTableAsSelect(Session session, String table, @Language("SQL") String query, @Language("SQL") String expectedQuery, @Language("SQL") String rowCountQuery, boolean allowDropTable)
{
assertUpdate(session, "CREATE TABLE " + table + " AS " + query, rowCountQuery);
assertQuery(session, "SELECT * FROM " + table, expectedQuery);
if (allowDropTable) {
assertUpdate(session, "DROP TABLE " + table);
assertFalse(getQueryRunner().tableExists(session, table));
}
}

protected void assertExplainAnalyze(@Language("SQL") String query)
{
String value = (String) computeActual(query).getOnlyValue();

assertTrue(value.matches("(?s:.*)CPU:.*, Input:.*, Output(?s:.*)"), format("Expected output to contain \"CPU:.*, Input:.*, Output\", but it is %s", value));

// TODO: check that rendered plan is as expected, once stats are collected in a consistent way
// assertTrue(value.contains("Cost: "), format("Expected output to contain \"Cost: \", but it is %s", value));
}

private static void assertExceptionMessage(String sql, Exception exception, @Language("RegExp") String regex)
{
if (!nullToEmpty(exception.getMessage()).matches(regex)) {
Expand Down