Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
io.prestosql.tests.AbstractTestIntegrationSmokeTest Maven / Gradle / Ivy
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.prestosql.tests;
import io.prestosql.testing.MaterializedResult;
import org.intellij.lang.annotations.Language;
import org.testng.annotations.Test;
import static io.prestosql.spi.type.VarcharType.VARCHAR;
import static io.prestosql.testing.assertions.Assert.assertEquals;
import static io.prestosql.tests.QueryAssertions.assertContains;
public abstract class AbstractTestIntegrationSmokeTest
extends AbstractTestQueryFramework
{
protected AbstractTestIntegrationSmokeTest(QueryRunnerSupplier supplier)
{
super(supplier);
}
protected boolean isDateTypeSupported()
{
return true;
}
protected boolean isParameterizedVarcharSupported()
{
return true;
}
@Test
public void testAggregateSingleColumn()
{
assertQuery("SELECT SUM(orderkey) FROM orders");
assertQuery("SELECT SUM(totalprice) FROM orders");
assertQuery("SELECT MAX(comment) FROM orders");
}
@Test
public void testColumnsInReverseOrder()
{
assertQuery("SELECT shippriority, clerk, totalprice FROM orders");
}
@Test
public void testCountAll()
{
assertQuery("SELECT COUNT(*) FROM orders");
}
@Test
public void testExactPredicate()
{
assertQuery("SELECT * FROM orders WHERE orderkey = 10");
}
@Test
public void testInListPredicate()
{
assertQuery("SELECT * FROM orders WHERE orderkey IN (10, 11, 20, 21)");
}
@Test
public void testIsNullPredicate()
{
assertQuery("SELECT * FROM orders WHERE orderkey = 10 OR orderkey IS NULL");
}
@Test
public void testLimit()
{
assertEquals(computeActual("SELECT * FROM orders LIMIT 10").getRowCount(), 10);
}
@Test
public void testMultipleRangesPredicate()
{
assertQuery("SELECT * FROM orders WHERE orderkey BETWEEN 10 AND 50 OR orderkey BETWEEN 100 AND 150");
}
@Test
public void testRangePredicate()
{
assertQuery("SELECT * FROM orders WHERE orderkey BETWEEN 10 AND 50");
}
@Test
public void testSelectAll()
{
assertQuery("SELECT * FROM orders");
}
@Test
public void testShowSchemas()
{
MaterializedResult actualSchemas = computeActual("SHOW SCHEMAS").toTestTypes();
MaterializedResult.Builder resultBuilder = MaterializedResult.resultBuilder(getQueryRunner().getDefaultSession(), VARCHAR)
.row(getQueryRunner().getDefaultSession().getSchema().orElse("tpch"));
assertContains(actualSchemas, resultBuilder.build());
}
@Test
public void testShowTables()
{
MaterializedResult actualTables = computeActual("SHOW TABLES").toTestTypes();
MaterializedResult expectedTables = MaterializedResult.resultBuilder(getQueryRunner().getDefaultSession(), VARCHAR)
.row("orders")
.build();
assertContains(actualTables, expectedTables);
}
@Test
public void testDescribeTable()
{
MaterializedResult actualColumns = computeActual("DESC orders").toTestTypes();
assertEquals(actualColumns, getExpectedOrdersTableDescription(isDateTypeSupported(), isParameterizedVarcharSupported()));
}
@Test
public void testSelectInformationSchemaTables()
{
String catalog = getSession().getCatalog().get();
String schema = getSession().getSchema().get();
String schemaPattern = schema.replaceAll("^.", "_");
assertQuery("SELECT table_name FROM information_schema.tables WHERE table_schema = '" + schema + "' AND table_name = 'orders'", "VALUES 'orders'");
assertQuery("SELECT table_name FROM information_schema.tables WHERE table_schema LIKE '" + schema + "' AND table_name LIKE '%rders'", "VALUES 'orders'");
assertQuery("SELECT table_name FROM information_schema.tables WHERE table_schema LIKE '" + schemaPattern + "' AND table_name LIKE '%rders'", "VALUES 'orders'");
assertQuery(
"SELECT table_name FROM information_schema.tables " +
"WHERE table_catalog = '" + catalog + "' AND table_schema LIKE '" + schema + "' AND table_name LIKE '%orders'",
"VALUES 'orders'");
assertQuery("SELECT table_name FROM information_schema.tables WHERE table_catalog = 'something_else'", "SELECT '' WHERE false");
}
@Test
public void testSelectInformationSchemaColumns()
{
String catalog = getSession().getCatalog().get();
String schema = getSession().getSchema().get();
String schemaPattern = schema.replaceAll(".$", "_");
@Language("SQL") String ordersTableWithColumns = "VALUES " +
"('orders', 'orderkey'), " +
"('orders', 'custkey'), " +
"('orders', 'orderstatus'), " +
"('orders', 'totalprice'), " +
"('orders', 'orderdate'), " +
"('orders', 'orderpriority'), " +
"('orders', 'clerk'), " +
"('orders', 'shippriority'), " +
"('orders', 'comment')";
assertQuery("SELECT table_schema FROM information_schema.columns WHERE table_schema = '" + schema + "' GROUP BY table_schema", "VALUES '" + schema + "'");
assertQuery("SELECT table_name FROM information_schema.columns WHERE table_name = 'orders' GROUP BY table_name", "VALUES 'orders'");
assertQuery("SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = '" + schema + "' AND table_name = 'orders'", ordersTableWithColumns);
assertQuery("SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = '" + schema + "' AND table_name LIKE '%rders'", ordersTableWithColumns);
assertQuery("SELECT table_name, column_name FROM information_schema.columns WHERE table_schema LIKE '" + schemaPattern + "' AND table_name LIKE '_rder_'", ordersTableWithColumns);
assertQuery(
"SELECT table_name, column_name FROM information_schema.columns " +
"WHERE table_catalog = '" + catalog + "' AND table_schema = '" + schema + "' AND table_name LIKE '%orders%'",
ordersTableWithColumns);
assertQuerySucceeds("SELECT * FROM information_schema.columns");
assertQuery("SELECT DISTINCT table_name, column_name FROM information_schema.columns WHERE table_name LIKE '_rders'", ordersTableWithColumns);
assertQuerySucceeds("SELECT * FROM information_schema.columns WHERE table_catalog = '" + catalog + "'");
assertQuerySucceeds("SELECT * FROM information_schema.columns WHERE table_catalog = '" + catalog + "' AND table_schema = '" + schema + "'");
assertQuery("SELECT table_name, column_name FROM information_schema.columns WHERE table_catalog = '" + catalog + "' AND table_schema = '" + schema + "' AND table_name LIKE '_rders'", ordersTableWithColumns);
assertQuerySucceeds("SELECT * FROM information_schema.columns WHERE table_catalog = '" + catalog + "' AND table_name LIKE '%'");
assertQuery("SELECT column_name FROM information_schema.columns WHERE table_catalog = 'something_else'", "SELECT '' WHERE false");
}
@Test
public void testDuplicatedRowCreateTable()
{
assertQueryFails("CREATE TABLE test (a integer, a integer)",
"line 1:31: Column name 'a' specified more than once");
assertQueryFails("CREATE TABLE test (a integer, orderkey integer, LIKE orders INCLUDING PROPERTIES)",
"line 1:49: Column name 'orderkey' specified more than once");
assertQueryFails("CREATE TABLE test (a integer, A integer)",
"line 1:31: Column name 'A' specified more than once");
assertQueryFails("CREATE TABLE test (a integer, OrderKey integer, LIKE orders INCLUDING PROPERTIES)",
"line 1:49: Column name 'orderkey' specified more than once");
}
private MaterializedResult getExpectedOrdersTableDescription(boolean dateSupported, boolean parametrizedVarchar)
{
String orderDateType;
if (dateSupported) {
orderDateType = "date";
}
else {
orderDateType = "varchar";
}
if (parametrizedVarchar) {
return MaterializedResult.resultBuilder(getQueryRunner().getDefaultSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR)
.row("orderkey", "bigint", "", "")
.row("custkey", "bigint", "", "")
.row("orderstatus", "varchar(1)", "", "")
.row("totalprice", "double", "", "")
.row("orderdate", orderDateType, "", "")
.row("orderpriority", "varchar(15)", "", "")
.row("clerk", "varchar(15)", "", "")
.row("shippriority", "integer", "", "")
.row("comment", "varchar(79)", "", "")
.build();
}
else {
return MaterializedResult.resultBuilder(getQueryRunner().getDefaultSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR)
.row("orderkey", "bigint", "", "")
.row("custkey", "bigint", "", "")
.row("orderstatus", "varchar", "", "")
.row("totalprice", "double", "", "")
.row("orderdate", orderDateType, "", "")
.row("orderpriority", "varchar", "", "")
.row("clerk", "varchar", "", "")
.row("shippriority", "integer", "", "")
.row("comment", "varchar", "", "")
.build();
}
}
}