Skip to content

Commit

Permalink
Move Hive tests into smoke tests class
Browse files Browse the repository at this point in the history
  • Loading branch information
electrum committed Oct 11, 2017
1 parent 4a0c0ee commit c37d97c
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 106 deletions.
Expand Up @@ -13,16 +13,9 @@
*/ */
package com.facebook.presto.hive; package com.facebook.presto.hive;


import com.facebook.presto.Session;
import com.facebook.presto.testing.MaterializedResult;
import com.facebook.presto.tests.AbstractTestDistributedQueries; import com.facebook.presto.tests.AbstractTestDistributedQueries;
import org.testng.annotations.Test;


import static com.facebook.presto.hive.HiveQueryRunner.createQueryRunner; import static com.facebook.presto.hive.HiveQueryRunner.createQueryRunner;
import static com.facebook.presto.hive.HiveSessionProperties.RCFILE_OPTIMIZED_WRITER_ENABLED;
import static com.facebook.presto.spi.type.CharType.createCharType;
import static com.facebook.presto.testing.MaterializedResult.resultBuilder;
import static com.facebook.presto.testing.assertions.Assert.assertEquals;
import static io.airlift.tpch.TpchTable.getTables; import static io.airlift.tpch.TpchTable.getTables;


public class TestHiveDistributedQueries public class TestHiveDistributedQueries
Expand All @@ -40,103 +33,5 @@ public void testDelete()
// Hive connector currently does not support row-by-row delete // Hive connector currently does not support row-by-row delete
} }


@Test // Hive specific tests should normally go in TestHiveIntegrationSmokeTest
public void testOrderByChar()
throws Exception
{
assertUpdate("CREATE TABLE char_order_by (c_char char(2))");
assertUpdate("INSERT INTO char_order_by (c_char) VALUES" +
"(CAST('a' as CHAR(2)))," +
"(CAST('a\0' as CHAR(2)))," +
"(CAST('a ' as CHAR(2)))", 3);

MaterializedResult actual = computeActual(getSession(),
"SELECT * FROM char_order_by ORDER BY c_char ASC");

assertUpdate("DROP TABLE char_order_by");

MaterializedResult expected = resultBuilder(getSession(), createCharType(2))
.row("a\0")
.row("a ")
.row("a ")
.build();

assertEquals(actual, expected);
}

/**
* Tests correctness of comparison of char(x) and varchar pushed down to a table scan as a TupleDomain
*/
@Test
public void testPredicatePushDownToTableScan()
throws Exception
{
// Test not specific to Hive, but needs a connector supporting table creation

assertUpdate("CREATE TABLE test_table_with_char (a char(20))");
try {
assertUpdate("INSERT INTO test_table_with_char (a) VALUES" +
"(cast('aaa' as char(20)))," +
"(cast('bbb' as char(20)))," +
"(cast('bbc' as char(20)))," +
"(cast('bbd' as char(20)))", 4);

assertQuery(
"SELECT a, a <= 'bbc' FROM test_table_with_char",
"VALUES (cast('aaa' as char(20)), true), " +
"(cast('bbb' as char(20)), true), " +
"(cast('bbc' as char(20)), false), " +
"(cast('bbd' as char(20)), false)");

assertQuery(
"SELECT a FROM test_table_with_char WHERE a <= 'bbc'",
"VALUES cast('aaa' as char(20)), " +
"cast('bbb' as char(20))");
}
finally {
assertUpdate("DROP TABLE test_table_with_char");
}
}

@Test
public void testRcTextCharDecoding()
throws Exception
{
testRcTextCharDecoding(false);
testRcTextCharDecoding(true);
}

@Test
public void testInvalidPartitionValue()
throws Exception
{
assertUpdate("CREATE TABLE invalid_partition_value (a int, b varchar) WITH (partitioned_by = ARRAY['b'])");
assertQueryFails(
"INSERT INTO invalid_partition_value VALUES (4, '\n')",
"Cannot use \n as value of a partition column in Hive. Partition keys in Hive can only contain characters in the range of 0x20 - 0x7E.");
assertUpdate("DROP TABLE invalid_partition_value");

assertQueryFails(
"CREATE TABLE invalid_partition_value (a, b) WITH (partitioned_by = ARRAY['b']) AS SELECT 4, '\n'",
"Cannot use \n as value of a partition column in Hive. Partition keys in Hive can only contain characters in the range of 0x20 - 0x7E.");
}

private void testRcTextCharDecoding(boolean rcFileOptimizedWriterEnabled)
throws Exception
{
String catalog = getSession().getCatalog().get();
Session session = Session.builder(getSession())
.setCatalogSessionProperty(catalog, RCFILE_OPTIMIZED_WRITER_ENABLED, Boolean.toString(rcFileOptimizedWriterEnabled))
.build();

assertUpdate(session, "CREATE TABLE test_table_with_char_rc WITH (format = 'RCTEXT') AS SELECT CAST('khaki' AS CHAR(7)) char_column", 1);
try {
assertQuery(session,
"SELECT * FROM test_table_with_char_rc WHERE char_column = 'khaki '",
"VALUES (CAST('khaki' AS CHAR(7)))");
}
finally {
assertUpdate(session, "DROP TABLE test_table_with_char_rc");
}
}
} }
Expand Up @@ -52,6 +52,7 @@
import static com.facebook.presto.hive.HiveQueryRunner.TPCH_SCHEMA; import static com.facebook.presto.hive.HiveQueryRunner.TPCH_SCHEMA;
import static com.facebook.presto.hive.HiveQueryRunner.createBucketedSession; import static com.facebook.presto.hive.HiveQueryRunner.createBucketedSession;
import static com.facebook.presto.hive.HiveQueryRunner.createQueryRunner; import static com.facebook.presto.hive.HiveQueryRunner.createQueryRunner;
import static com.facebook.presto.hive.HiveSessionProperties.RCFILE_OPTIMIZED_WRITER_ENABLED;
import static com.facebook.presto.hive.HiveTableProperties.BUCKETED_BY_PROPERTY; import static com.facebook.presto.hive.HiveTableProperties.BUCKETED_BY_PROPERTY;
import static com.facebook.presto.hive.HiveTableProperties.BUCKET_COUNT_PROPERTY; import static com.facebook.presto.hive.HiveTableProperties.BUCKET_COUNT_PROPERTY;
import static com.facebook.presto.hive.HiveTableProperties.PARTITIONED_BY_PROPERTY; import static com.facebook.presto.hive.HiveTableProperties.PARTITIONED_BY_PROPERTY;
Expand Down Expand Up @@ -1928,6 +1929,106 @@ public void testAvroTypeValidation()
assertQueryFails("CREATE TABLE test_avro_types WITH (format = 'AVRO') AS SELECT cast(42 AS smallint) z", "Column z is smallint, which is not supported by Avro. Use integer instead."); assertQueryFails("CREATE TABLE test_avro_types WITH (format = 'AVRO') AS SELECT cast(42 AS smallint) z", "Column z is smallint, which is not supported by Avro. Use integer instead.");
} }


@Test
public void testOrderByChar()
throws Exception
{
assertUpdate("CREATE TABLE char_order_by (c_char char(2))");
assertUpdate("INSERT INTO char_order_by (c_char) VALUES" +
"(CAST('a' as CHAR(2)))," +
"(CAST('a\0' as CHAR(2)))," +
"(CAST('a ' as CHAR(2)))", 3);

MaterializedResult actual = computeActual(getSession(),
"SELECT * FROM char_order_by ORDER BY c_char ASC");

assertUpdate("DROP TABLE char_order_by");

MaterializedResult expected = resultBuilder(getSession(), createCharType(2))
.row("a\0")
.row("a ")
.row("a ")
.build();

assertEquals(actual, expected);
}

/**
* Tests correctness of comparison of char(x) and varchar pushed down to a table scan as a TupleDomain
*/
@Test
public void testPredicatePushDownToTableScan()
throws Exception
{
// Test not specific to Hive, but needs a connector supporting table creation

assertUpdate("CREATE TABLE test_table_with_char (a char(20))");
try {
assertUpdate("INSERT INTO test_table_with_char (a) VALUES" +
"(cast('aaa' as char(20)))," +
"(cast('bbb' as char(20)))," +
"(cast('bbc' as char(20)))," +
"(cast('bbd' as char(20)))", 4);

assertQuery(
"SELECT a, a <= 'bbc' FROM test_table_with_char",
"VALUES (cast('aaa' as char(20)), true), " +
"(cast('bbb' as char(20)), true), " +
"(cast('bbc' as char(20)), false), " +
"(cast('bbd' as char(20)), false)");

assertQuery(
"SELECT a FROM test_table_with_char WHERE a <= 'bbc'",
"VALUES cast('aaa' as char(20)), " +
"cast('bbb' as char(20))");
}
finally {
assertUpdate("DROP TABLE test_table_with_char");
}
}

@Test
public void testRcTextCharDecoding()
throws Exception
{
testRcTextCharDecoding(false);
testRcTextCharDecoding(true);
}

private void testRcTextCharDecoding(boolean rcFileOptimizedWriterEnabled)
throws Exception
{
String catalog = getSession().getCatalog().get();
Session session = Session.builder(getSession())
.setCatalogSessionProperty(catalog, RCFILE_OPTIMIZED_WRITER_ENABLED, Boolean.toString(rcFileOptimizedWriterEnabled))
.build();

assertUpdate(session, "CREATE TABLE test_table_with_char_rc WITH (format = 'RCTEXT') AS SELECT CAST('khaki' AS CHAR(7)) char_column", 1);
try {
assertQuery(session,
"SELECT * FROM test_table_with_char_rc WHERE char_column = 'khaki '",
"VALUES (CAST('khaki' AS CHAR(7)))");
}
finally {
assertUpdate(session, "DROP TABLE test_table_with_char_rc");
}
}

@Test
public void testInvalidPartitionValue()
throws Exception
{
assertUpdate("CREATE TABLE invalid_partition_value (a int, b varchar) WITH (partitioned_by = ARRAY['b'])");
assertQueryFails(
"INSERT INTO invalid_partition_value VALUES (4, '\n')",
"Cannot use \n as value of a partition column in Hive. Partition keys in Hive can only contain characters in the range of 0x20 - 0x7E.");
assertUpdate("DROP TABLE invalid_partition_value");

assertQueryFails(
"CREATE TABLE invalid_partition_value (a, b) WITH (partitioned_by = ARRAY['b']) AS SELECT 4, '\n'",
"Cannot use \n as value of a partition column in Hive. Partition keys in Hive can only contain characters in the range of 0x20 - 0x7E.");
}

private Session getParallelWriteSession() private Session getParallelWriteSession()
{ {
return Session.builder(getSession()) return Session.builder(getSession())
Expand Down

0 comments on commit c37d97c

Please sign in to comment.