DisabledTestOracleDistributedQueries.java
/*
* 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 com.facebook.presto.plugin.oracle;
import com.facebook.presto.testing.MaterializedResult;
import com.facebook.presto.testing.QueryRunner;
import com.facebook.presto.tests.AbstractTestDistributedQueries;
import io.airlift.tpch.TpchTable;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Optional;
import org.testng.annotations.Test;
import static com.facebook.presto.common.type.VarcharType.VARCHAR;
import static com.facebook.presto.plugin.oracle.OracleQueryRunner.createOracleQueryRunner;
import static com.facebook.presto.testing.MaterializedResult.resultBuilder;
import static com.facebook.presto.testing.assertions.Assert.assertEquals;
import static java.lang.String.format;
import static java.util.stream.Collectors.joining;
import static java.util.stream.IntStream.range;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
// Disabled for 7.5 TestNG Upgrade, the constructor takes in parameter
// TestNG 6 silently ignored, TestNG 7.5 fails (correctly), disabling for now
public class DisabledTestOracleDistributedQueries
extends AbstractTestDistributedQueries
{
private final OracleServerTester oracleServer;
private final QueryRunner queryRunner;
protected DisabledTestOracleDistributedQueries(OracleServerTester oracleServer)
throws Exception
{
this.queryRunner = createOracleQueryRunner(oracleServer, TpchTable.getTables());
this.oracleServer = new OracleServerTester();
}
@Override
protected QueryRunner createQueryRunner()
throws Exception
{
return queryRunner;
}
@AfterClass(alwaysRun = true)
public final void destroy()
{
if (oracleServer != null) {
oracleServer.close();
}
}
@Override
protected boolean supportsViews()
{
return false;
}
@Test
@Override
public void testLargeIn()
{
int numberOfElements = 1000;
String longValues = range(0, numberOfElements)
.mapToObj(Integer::toString)
.collect(joining(", "));
assertQuery("SELECT orderkey FROM orders WHERE orderkey IN (" + longValues + ")");
assertQuery("SELECT orderkey FROM orders WHERE orderkey NOT IN (" + longValues + ")");
assertQuery("SELECT orderkey FROM orders WHERE orderkey IN (mod(1000, orderkey), " + longValues + ")");
assertQuery("SELECT orderkey FROM orders WHERE orderkey NOT IN (mod(1000, orderkey), " + longValues + ")");
String arrayValues = range(0, numberOfElements)
.mapToObj(i -> format("ARRAY[%s, %s, %s]", i, i + 1, i + 2))
.collect(joining(", "));
assertQuery("SELECT ARRAY[0, 0, 0] in (ARRAY[0, 0, 0], " + arrayValues + ")", "values true");
assertQuery("SELECT ARRAY[0, 0, 0] in (" + arrayValues + ")", "values false");
}
@Test
@Override
public void testCreateTable()
{
assertUpdate("CREATE TABLE test_create (a bigint, b double, c varchar)");
assertTrue(getQueryRunner().tableExists(getSession(), "test_create"));
assertTableColumnNames("test_create", "a", "b", "c");
assertUpdate("DROP TABLE test_create");
assertFalse(getQueryRunner().tableExists(getSession(), "test_create"));
assertQueryFails("CREATE TABLE test_create (a bad_type)", ".* Unknown type 'bad_type' for column 'a'");
assertFalse(getQueryRunner().tableExists(getSession(), "test_create"));
// Replace test_create_table_if_not_exists with test_create_table_if_not_exist to fetch max size naming on oracle
assertUpdate("CREATE TABLE test_create_table_if_not_exist (a bigint, b varchar, c double)");
assertTrue(getQueryRunner().tableExists(getSession(), "test_create_table_if_not_exist"));
assertTableColumnNames("test_create_table_if_not_exist", "a", "b", "c");
assertUpdate("CREATE TABLE IF NOT EXISTS test_create_table_if_not_exist (d bigint, e varchar)");
assertTrue(getQueryRunner().tableExists(getSession(), "test_create_table_if_not_exist"));
assertTableColumnNames("test_create_table_if_not_exist", "a", "b", "c");
assertUpdate("DROP TABLE test_create_table_if_not_exist");
assertFalse(getQueryRunner().tableExists(getSession(), "test_create_table_if_not_exist"));
// Test CREATE TABLE LIKE
assertUpdate("CREATE TABLE test_create_original (a bigint, b double, c varchar)");
assertTrue(getQueryRunner().tableExists(getSession(), "test_create_original"));
assertTableColumnNames("test_create_original", "a", "b", "c");
assertUpdate("CREATE TABLE test_create_like (LIKE test_create_original, d boolean, e varchar)");
assertTrue(getQueryRunner().tableExists(getSession(), "test_create_like"));
assertTableColumnNames("test_create_like", "a", "b", "c", "d", "e");
assertUpdate("DROP TABLE test_create_original");
assertFalse(getQueryRunner().tableExists(getSession(), "test_create_original"));
assertUpdate("DROP TABLE test_create_like");
assertFalse(getQueryRunner().tableExists(getSession(), "test_create_like"));
}
@Test
@Override
public void testSymbolAliasing()
{
// Replace tablename to less than 30chars, max size naming on oracle
String tableName = "symbol_aliasing" + System.currentTimeMillis();
assertUpdate("CREATE TABLE " + tableName + " AS SELECT 1 foo_1, 2 foo_2_4", 1);
assertQuery("SELECT foo_1, foo_2_4 FROM " + tableName, "SELECT 1, 2");
assertUpdate("DROP TABLE " + tableName);
}
@Test
@Override
public void testRenameColumn()
{
// Replace tablename to less than 30chars, max size naming on oracle
String tableName = "test_renamecol_" + System.currentTimeMillis();
assertUpdate("CREATE TABLE " + tableName + " AS SELECT 'some value' x", 1);
assertUpdate("ALTER TABLE " + tableName + " RENAME COLUMN x TO y");
assertQuery("SELECT y FROM " + tableName, "VALUES 'some value'");
assertUpdate("ALTER TABLE " + tableName + " RENAME COLUMN y TO Z"); // 'Z' is upper-case, not delimited
assertQuery(
"SELECT z FROM " + tableName, // 'z' is lower-case, not delimited
"VALUES 'some value'");
// There should be exactly one column
assertQuery("SELECT * FROM " + tableName, "VALUES 'some value'");
assertUpdate("DROP TABLE " + tableName);
}
@Test
@Override
public void testShowColumns(@Optional("PARQUET") String storageFormat)
{
MaterializedResult actual = computeActual("SHOW COLUMNS FROM orders");
MaterializedResult expectedParametrizedVarchar = resultBuilder(getSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR)
.row("orderkey", "bigint", "", "")
.row("custkey", "bigint", "", "")
.row("orderstatus", "varchar(1)", "", "")
.row("totalprice", "double", "", "")
.row("orderdate", "timestamp", "", "")
.row("orderpriority", "varchar(15)", "", "")
.row("clerk", "varchar(15)", "", "")
.row("shippriority", "bigint", "", "")
.row("comment", "varchar(79)", "", "")
.build();
// Until we migrate all connectors to parametrized varchar we check two options
assertEquals(actual, expectedParametrizedVarchar, format("%s does not matches %s", actual, expectedParametrizedVarchar));
}
}