http://git-wip-us.apache.org/repos/asf/tajo/blob/4b1b7799/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java index 7ac25ea..0e42412 100644 --- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java +++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java @@ -18,42 +18,48 @@ package org.apache.tajo.engine.query; -import junit.framework.Assert; -import org.apache.tajo.IntegrationTest; +import com.google.protobuf.ServiceException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.hadoop.fs.FileStatus; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; import org.apache.tajo.QueryTestCaseBase; import org.apache.tajo.TajoConstants; import org.apache.tajo.TajoTestingCluster; +import org.apache.tajo.catalog.Column; import org.apache.tajo.catalog.Schema; -import org.apache.tajo.common.TajoDataTypes.Type; +import org.apache.tajo.catalog.TableDesc; +import org.apache.tajo.catalog.TableMeta; +import org.apache.tajo.common.TajoDataTypes; import org.apache.tajo.conf.TajoConf.ConfVars; -import org.apache.tajo.storage.StorageConstants; +import org.apache.tajo.datum.Datum; +import org.apache.tajo.datum.Int4Datum; +import org.apache.tajo.datum.TextDatum; +import org.apache.tajo.storage.*; +import org.apache.tajo.util.FileUtil; import org.apache.tajo.util.KeyValueSet; -import org.junit.AfterClass; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; -import java.sql.ResultSet; +import java.io.File; +import java.io.OutputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; -@Category(IntegrationTest.class) -@RunWith(Parameterized.class) public class TestJoinQuery extends QueryTestCaseBase { + private static final Log LOG = LogFactory.getLog(TestJoinQuery.class); + private static int reference = 0; - public TestJoinQuery(String joinOption) { - super(TajoConstants.DEFAULT_DATABASE_NAME); + public TestJoinQuery(String joinOption) throws Exception { + super(TajoConstants.DEFAULT_DATABASE_NAME, joinOption); - testingCluster.setAllTajoDaemonConfValue(ConfVars.$TEST_BROADCAST_JOIN_ENABLED.varname, - ConfVars.$TEST_BROADCAST_JOIN_ENABLED.defaultVal); - testingCluster.setAllTajoDaemonConfValue(ConfVars.$DIST_QUERY_BROADCAST_JOIN_THRESHOLD.varname, - ConfVars.$DIST_QUERY_BROADCAST_JOIN_THRESHOLD.defaultVal); + testingCluster.setAllTajoDaemonConfValue(ConfVars.$TEST_BROADCAST_JOIN_ENABLED.varname, "true"); + testingCluster.setAllTajoDaemonConfValue(ConfVars.$DIST_QUERY_BROADCAST_JOIN_THRESHOLD.varname, "" + (5 * 1024)); testingCluster.setAllTajoDaemonConfValue( ConfVars.$EXECUTOR_HASH_JOIN_SIZE_THRESHOLD.varname, @@ -97,8 +103,13 @@ public class TestJoinQuery extends QueryTestCaseBase { }); } - @AfterClass - public static void classTearDown() { + public static void setup() throws Exception { + if (reference++ == 0) { + createCommonTables(); + } + } + + public static void classTearDown() throws ServiceException { testingCluster.setAllTajoDaemonConfValue(ConfVars.$TEST_BROADCAST_JOIN_ENABLED.varname, ConfVars.$TEST_BROADCAST_JOIN_ENABLED.defaultVal); testingCluster.setAllTajoDaemonConfValue(ConfVars.$DIST_QUERY_BROADCAST_JOIN_THRESHOLD.varname, @@ -112,1096 +123,192 @@ public class TestJoinQuery extends QueryTestCaseBase { ConfVars.$EXECUTOR_HASH_JOIN_SIZE_THRESHOLD.defaultVal); testingCluster.setAllTajoDaemonConfValue(ConfVars.$EXECUTOR_GROUPBY_INMEMORY_HASH_THRESHOLD.varname, ConfVars.$EXECUTOR_GROUPBY_INMEMORY_HASH_THRESHOLD.defaultVal); - } - - @Test - public final void testCrossJoin() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testCrossJoinWithThetaJoinConditionInWhere() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testInnerJoinWithThetaJoinConditionInWhere() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinWithThetaJoinConditionInWhere() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testRightOuterJoinWithThetaJoinConditionInWhere() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testWhereClauseJoin1() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testWhereClauseJoin2() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testWhereClauseJoin3() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testWhereClauseJoin4() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testWhereClauseJoin5() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testWhereClauseJoin6() throws Exception { - ResultSet res = executeQuery(); - System.out.println(resultSetToString(res)); - cleanupQuery(res); - } - - @Test - public final void testTPCHQ2Join() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testJoinWithMultipleJoinQual1() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testJoinWithMultipleJoinQual2() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testJoinWithMultipleJoinQual3() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testJoinWithMultipleJoinQual4() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testJoinWithMultipleJoinTypes() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoin1() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinWithConstantExpr1() throws Exception { - // outer join with constant projections - // - // select c_custkey, orders.o_orderkey, 'val' as val from customer - // left outer join orders on c_custkey = o_orderkey; - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinWithConstantExpr2() throws Exception { - // outer join with constant projections - // - // select c_custkey, o.o_orderkey, 'val' as val from customer left outer join - // (select * from orders) o on c_custkey = o.o_orderkey - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinWithConstantExpr3() throws Exception { - // outer join with constant projections - // - // select a.c_custkey, 123::INT8 as const_val, b.min_name from customer a - // left outer join ( select c_custkey, min(c_name) as min_name from customer group by c_custkey) b - // on a.c_custkey = b.c_custkey; - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinWithConstantExpr4() throws Exception { - // outer join with constant projections - // - // select - // c_custkey, - // orders.o_orderkey, - // 1 as key1 - // from customer left outer join orders on c_custkey = o_orderkey and key1 = 1; - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinWithConstantExpr5() throws Exception { - // outer join with constant projections - // - // select - // c_custkey, - // orders.o_orderkey, - // 1 as key1 - // from customer left outer join orders on c_custkey = o_orderkey and key1 = 1; - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testRightOuterJoin1() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testFullOuterJoin1() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public void testJoinCoReferredEvals1() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public void testJoinCoReferredEvalsWithSameExprs1() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public void testJoinCoReferredEvalsWithSameExprs2() throws Exception { - // including grouping operator - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public void testInnerJoinAndCaseWhen() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public void testComplexJoinsWithCaseWhen() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public void testComplexJoinsWithCaseWhen2() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public void testOuterJoinAndCaseWhen1() throws Exception { - executeDDL("oj_table1_ddl.sql", "table1"); - executeDDL("oj_table2_ddl.sql", "table2"); - try { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } finally { - executeString("DROP TABLE table1"); - executeString("DROP TABLE table2"); - } - } - - @Test - public void testCrossJoinWithAsterisk1() throws Exception { - // select region.*, customer.* from region, customer; - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public void testCrossJoinWithAsterisk2() throws Exception { - // select region.*, customer.* from customer, region; - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public void testCrossJoinWithAsterisk3() throws Exception { - // select * from customer, region - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public void testCrossJoinWithAsterisk4() throws Exception { - // select length(r_comment) as len, *, c_custkey*10 from customer, region order by len,r_regionkey,r_name - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testInnerJoinWithEmptyTable() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinWithEmptyTable1() throws Exception { - /* - select - c_custkey, - empty_orders.o_orderkey, - empty_orders.o_orderstatus, - empty_orders.o_orderdate - from - customer left outer join empty_orders on c_custkey = o_orderkey - order by - c_custkey, o_orderkey; - */ - - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinWithEmptyTable2() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinWithEmptyTable3() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinWithEmptyTable4() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinWithEmptyTable5() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testRightOuterJoinWithEmptyTable1() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinWithEmptySubquery1() throws Exception { - // Empty Null Supplying table - KeyValueSet tableOptions = new KeyValueSet(); - tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER); - tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N"); - - Schema schema = new Schema(); - schema.addColumn("id", Type.INT4); - schema.addColumn("name", Type.TEXT); - String[] data = new String[]{ "1|table11-1", "2|table11-2", "3|table11-3", "4|table11-4", "5|table11-5" }; - TajoTestingCluster.createTable("table11", schema, tableOptions, data, 2); - - data = new String[]{ "1|table11-1", "2|table11-2" }; - TajoTestingCluster.createTable("table12", schema, tableOptions, data, 2); - - try { - testingCluster.setAllTajoDaemonConfValue(ConfVars.$TEST_MIN_TASK_NUM.varname, "2"); - - ResultSet res = executeString("select a.id, b.id from table11 a " + - "left outer join (" + - "select table12.id from table12 inner join lineitem on table12.id = lineitem.l_orderkey and table12.id > 10) b " + - "on a.id = b.id order by a.id"); - - String expected = "id,id\n" + - "-------------------------------\n" + - "1,null\n" + - "2,null\n" + - "3,null\n" + - "4,null\n" + - "5,null\n"; - - assertEquals(expected, resultSetToString(res)); - cleanupQuery(res); - } finally { - testingCluster.setAllTajoDaemonConfValue(ConfVars.$TEST_MIN_TASK_NUM.varname, - ConfVars.$TEST_MIN_TASK_NUM.defaultVal); - executeString("DROP TABLE table11 PURGE").close(); - executeString("DROP TABLE table12 PURGE").close(); - } - } - - @Test - public final void testLeftOuterJoinWithEmptySubquery2() throws Exception { - //Empty Preserved Row table - KeyValueSet tableOptions = new KeyValueSet(); - tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER); - tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N"); - - Schema schema = new Schema(); - schema.addColumn("id", Type.INT4); - schema.addColumn("name", Type.TEXT); - String[] data = new String[]{ "1|table11-1", "2|table11-2", "3|table11-3", "4|table11-4", "5|table11-5" }; - TajoTestingCluster.createTable("table11", schema, tableOptions, data, 2); - - data = new String[]{ "1|table11-1", "2|table11-2" }; - TajoTestingCluster.createTable("table12", schema, tableOptions, data, 2); - - try { - testingCluster.setAllTajoDaemonConfValue(ConfVars.$TEST_MIN_TASK_NUM.varname, "2"); - - ResultSet res = executeString("select a.id, b.id from " + - "(select table12.id, table12.name, lineitem.l_shipdate " + - "from table12 inner join lineitem on table12.id = lineitem.l_orderkey and table12.id > 10) a " + - "left outer join table11 b " + - "on a.id = b.id"); - - String expected = "id,id\n" + - "-------------------------------\n"; - - assertEquals(expected, resultSetToString(res)); - cleanupQuery(res); - } finally { - testingCluster.setAllTajoDaemonConfValue(ConfVars.$TEST_MIN_TASK_NUM.varname, - ConfVars.$TEST_MIN_TASK_NUM.defaultVal); - executeString("DROP TABLE table11 PURGE"); - executeString("DROP TABLE table12 PURGE"); - } - } - - @Test - public final void testFullOuterJoinWithEmptyTable1() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testCrossJoinWithEmptyTable1() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testJoinOnMultipleDatabases() throws Exception { - executeString("CREATE DATABASE JOINS"); - assertDatabaseExists("joins"); - executeString("CREATE TABLE JOINS.part_ as SELECT * FROM part"); - assertTableExists("joins.part_"); - executeString("CREATE TABLE JOINS.supplier_ as SELECT * FROM supplier"); - assertTableExists("joins.supplier_"); - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - - executeString("DROP TABLE JOINS.part_ PURGE"); - executeString("DROP TABLE JOINS.supplier_ PURGE"); - executeString("DROP DATABASE JOINS"); - } - - @Test - public final void testJoinWithJson() throws Exception { - // select length(r_comment) as len, *, c_custkey*10 from customer, region order by len,r_regionkey,r_name - ResultSet res = executeJsonQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testJoinWithJson2() throws Exception { - /* - select t.n_nationkey, t.n_name, t.n_regionkey, t.n_comment, ps.ps_availqty, s.s_suppkey - from ( - select n_nationkey, n_name, n_regionkey, n_comment - from nation n - join region r on (n.n_regionkey = r.r_regionkey) - ) t - join supplier s on (s.s_nationkey = t.n_nationkey) - join partsupp ps on (s.s_suppkey = ps.ps_suppkey) - where t.n_name in ('ARGENTINA','ETHIOPIA', 'MOROCCO'); - */ - ResultSet res = executeJsonQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testJoinOnMultipleDatabasesWithJson() throws Exception { - executeString("CREATE DATABASE JOINS"); - assertDatabaseExists("joins"); - executeString("CREATE TABLE JOINS.part_ as SELECT * FROM part"); - assertTableExists("joins.part_"); - executeString("CREATE TABLE JOINS.supplier_ as SELECT * FROM supplier"); - assertTableExists("joins.supplier_"); - ResultSet res = executeJsonQuery(); - assertResultSet(res); - cleanupQuery(res); - - executeString("DROP TABLE JOINS.part_ PURGE"); - executeString("DROP TABLE JOINS.supplier_ PURGE"); - executeString("DROP DATABASE JOINS"); - } - - @Test - public final void testJoinAsterisk() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinWithNull1() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinWithNull2() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinWithNull3() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public final void testLeftOuterJoinPredicationCaseByCase1() throws Exception { - createOuterJoinTestTable(); - try { - ResultSet res = executeString( - "select t1.id, t1.name, t2.id, t3.id\n" + - "from table11 t1\n" + - "left outer join table12 t2\n" + - "on t1.id = t2.id\n" + - "left outer join table13 t3\n" + - "on t1.id = t3.id and t2.id = t3.id"); - - String expected = - "id,name,id,id\n" + - "-------------------------------\n" + - "1,table11-1,1,null\n" + - "2,table11-2,null,null\n" + - "3,table11-3,null,null\n"; - - String result = resultSetToString(res); - - assertEquals(expected, result); - } finally { - dropOuterJoinTestTable(); - } - } - - @Test - public final void testLeftOuterJoinPredicationCaseByCase2() throws Exception { - // outer -> outer -> inner - createOuterJoinTestTable(); - try { - ResultSet res = executeString( - "select t1.id, t1.name, t2.id, t3.id, t4.id\n" + - "from table11 t1\n" + - "left outer join table12 t2\n" + - "on t1.id = t2.id\n" + - "left outer join table13 t3\n" + - "on t2.id = t3.id\n" + - "inner join table14 t4\n" + - "on t2.id = t4.id" - ); - - String expected = - "id,name,id,id,id\n" + - "-------------------------------\n" + - "1,table11-1,1,null,1\n"; - - String result = resultSetToString(res); - - assertEquals(expected, result); - } finally { - dropOuterJoinTestTable(); - } - } - - @Test - public final void testLeftOuterJoinPredicationCaseByCase2_1() throws Exception { - // inner(on predication) -> outer(on predication) -> outer -> where - createOuterJoinTestTable(); - try { - ResultSet res = executeString( - "select t1.id, t1.name, t2.id, t3.id, t4.id\n" + - "from table11 t1\n" + - "inner join table14 t4\n" + - "on t1.id = t4.id and t4.id > 1\n" + - "left outer join table13 t3\n" + - "on t4.id = t3.id and t3.id = 2\n" + - "left outer join table12 t2\n" + - "on t1.id = t2.id \n" + - "where t1.id > 1" - ); - - String expected = - "id,name,id,id,id\n" + - "-------------------------------\n" + - "2,table11-2,null,2,2\n" + - "3,table11-3,null,null,3\n"; - - String result = resultSetToString(res); - - assertEquals(expected, result); - } finally { - dropOuterJoinTestTable(); - } - } - - @Test - public final void testLeftOuterJoinPredicationCaseByCase3() throws Exception { - // https://cwiki.apache.org/confluence/display/Hive/OuterJoinBehavior - // Case J1: Join Predicate on Preserved Row Table - createOuterJoinTestTable(); - try { - ResultSet res = executeString( - "select t1.id, t1.name, t2.id, t3.id\n" + - "from table11 t1\n" + - "left outer join table12 t2 \n" + - "on t1.id = t2.id and (concat(t1.name, cast(t2.id as TEXT)) = 'table11-11' or concat(t1.name, cast(t2.id as TEXT)) = 'table11-33')\n" + - "left outer join table13 t3\n" + - "on t1.id = t3.id " - ); - - String expected = - "id,name,id,id\n" + - "-------------------------------\n" + - "1,table11-1,1,null\n" + - "2,table11-2,null,2\n" + - "3,table11-3,null,3\n"; - - String result = resultSetToString(res); - - assertEquals(expected, result); - } finally { - dropOuterJoinTestTable(); - } - } - - @Test - public final void testLeftOuterJoinPredicationCaseByCase4() throws Exception { - // https://cwiki.apache.org/confluence/display/Hive/OuterJoinBehavior - // Case J2: Join Predicate on Null Supplying Table - createOuterJoinTestTable(); - try { - ResultSet res = executeString( - "select t1.id, t1.name, t2.id, t3.id\n" + - "from table11 t1\n" + - "left outer join table12 t2\n" + - "on t1.id = t2.id and t2.id > 1 \n" + - "left outer join table13 t3\n" + - "on t1.id = t3.id" - ); - - String expected = - "id,name,id,id\n" + - "-------------------------------\n" + - "1,table11-1,null,null\n" + - "2,table11-2,null,2\n" + - "3,table11-3,null,3\n"; - - String result = resultSetToString(res); - - assertEquals(expected, result); - } finally { - dropOuterJoinTestTable(); - } - } - - @Test - public final void testLeftOuterJoinPredicationCaseByCase5() throws Exception { - // https://cwiki.apache.org/confluence/display/Hive/OuterJoinBehavior - // Case W1: Where Predicate on Preserved Row Table - createOuterJoinTestTable(); - try { - ResultSet res = executeString( - "select t1.id, t1.name, t2.id, t3.id\n" + - "from table11 t1\n" + - "left outer join table12 t2\n" + - "on t1.id = t2.id\n" + - "left outer join table13 t3\n" + - "on t1.id = t3.id\n" + - "where t1.name > 'table11-1'" - ); - - String expected = - "id,name,id,id\n" + - "-------------------------------\n" + - "2,table11-2,null,2\n" + - "3,table11-3,null,3\n"; - - String result = resultSetToString(res); - - assertEquals(expected, result); - } finally { - dropOuterJoinTestTable(); - } - } - - @Test - public final void testLeftOuterJoinPredicationCaseByCase6() throws Exception { - // https://cwiki.apache.org/confluence/display/Hive/OuterJoinBehavior - // Case W2: Where Predicate on Null Supplying Table - createOuterJoinTestTable(); - try { - ResultSet res = executeString( - "select t1.id, t1.name, t2.id, t3.id\n" + - "from table11 t1\n" + - "left outer join table12 t2\n" + - "on t1.id = t2.id\n" + - "left outer join table13 t3\n" + - "on t1.id = t3.id\n" + - "where t3.id > 2" - ); - - String expected = - "id,name,id,id\n" + - "-------------------------------\n" + - "3,table11-3,null,3\n"; - - String result = resultSetToString(res); - assertEquals(expected, result); - } finally { - dropOuterJoinTestTable(); + if (--reference == 0) { + dropCommonTables(); } } - @Test - public final void testLeftOuterWithEmptyTable() throws Exception { - // https://cwiki.apache.org/confluence/display/Hive/OuterJoinBehavior - // Case W2: Where Predicate on Null Supplying Table - createOuterJoinTestTable(); - try { - ResultSet res = executeString( - "select t1.id, t1.name, t2.id\n" + - "from table11 t1\n" + - "left outer join table15 t2\n" + - "on t1.id = t2.id" - ); + protected static void createCommonTables() throws Exception { + LOG.info("Create common tables for join tests"); - String expected = - "id,name,id\n" + - "-------------------------------\n" + - "1,table11-1,null\n" + - "2,table11-2,null\n" + - "3,table11-3,null\n"; - - String result = resultSetToString(res); - - assertEquals(expected, result); - } finally { - dropOuterJoinTestTable(); - } - } - - @Test - public final void testRightOuterJoinPredicationCaseByCase1() throws Exception { - createOuterJoinTestTable(); - try { - ResultSet res = executeString( - "select t1.id, t1.name, t2.id, t3.id\n" + - "from table11 t1\n" + - "right outer join table12 t2\n" + - "on t1.id = t2.id\n" + - "right outer join table13 t3\n" + - "on t1.id = t3.id and t2.id = t3.id" - ); - - String expected = - "id,name,id,id\n" + - "-------------------------------\n" + - "null,null,null,2\n" + - "null,null,null,3\n"; - - String result = resultSetToString(res); - - assertEquals(expected, result); - } finally { - dropOuterJoinTestTable(); - } - } - - @Test - public final void testRightOuterJoinPredicationCaseByCase2() throws Exception { - // inner -> right - // Notice: Join order should be preserved with origin order. - // JoinEdge: t1 -> t4, t3 -> t1,t4 - createOuterJoinTestTable(); - try { - ResultSet res = executeString( - "select t1.id, t1.name, t3.id, t4.id\n" + - "from table11 t1\n" + - "inner join table14 t4\n" + - "on t1.id = t4.id and t4.id > 1\n" + - "right outer join table13 t3\n" + - "on t4.id = t3.id and t3.id = 2\n" + - "where t3.id > 1" - ); - - String expected = - "id,name,id,id\n" + - "-------------------------------\n" + - "2,table11-2,2,2\n" + - "null,null,3,null\n"; - - String result = resultSetToString(res); - - assertEquals(expected, result); - } finally { - dropOuterJoinTestTable(); - } - } - - @Test - public final void testRightOuterJoinPredicationCaseByCase3() throws Exception { - createOuterJoinTestTable(); - try { - ResultSet res = executeString( - "select t1.id, t1.name, t2.id, t3.id\n" + - "from table11 t1\n" + - "right outer join table12 t2 \n" + - "on t1.id = t2.id and (concat(t1.name, cast(t2.id as TEXT)) = 'table11-11' or concat(t1.name, cast(t2.id as TEXT)) = 'table11-33')\n" + - "right outer join table13 t3\n" + - "on t1.id = t3.id " - ); - - String expected = - "id,name,id,id\n" + - "-------------------------------\n" + - "null,null,null,2\n" + - "null,null,null,3\n"; - - String result = resultSetToString(res); - - assertEquals(expected, result); - } finally { - dropOuterJoinTestTable(); - } - } - - @Test - public final void testFullOuterJoinPredicationCaseByCase1() throws Exception { - createOuterJoinTestTable(); - - try { - ResultSet res = executeString( - "select t1.id, t1.name, t3.id, t4.id\n" + - "from table11 t1\n" + - "full outer join table13 t3\n" + - "on t1.id = t3.id\n" + - "full outer join table14 t4\n" + - "on t3.id = t4.id \n" + - "order by t4.id" - ); - - String expected = - "id,name,id,id\n" + - "-------------------------------\n" + - "null,null,null,1\n" + - "2,table11-2,2,2\n" + - "3,table11-3,3,3\n" + - "null,null,null,4\n" + - "1,table11-1,null,null\n"; - - String result = resultSetToString(res); - - assertEquals(expected, result); - } finally { - dropOuterJoinTestTable(); - } - } - - private void createOuterJoinTestTable() throws Exception { KeyValueSet tableOptions = new KeyValueSet(); tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER); tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N"); Schema schema = new Schema(); - schema.addColumn("id", Type.INT4); - schema.addColumn("name", Type.TEXT); - String[] data = new String[]{ "1|table11-1", "2|table11-2", "3|table11-3" }; - TajoTestingCluster.createTable("table11", schema, tableOptions, data); + schema.addColumn("id", TajoDataTypes.Type.INT4); + schema.addColumn("name", TajoDataTypes.Type.TEXT); + String[] data = new String[]{"1|table11-1", "2|table11-2", "3|table11-3", "4|table11-4", "5|table11-5"}; + TajoTestingCluster.createTable("jointable11", schema, tableOptions, data, 2); schema = new Schema(); - schema.addColumn("id", Type.INT4); - schema.addColumn("name", Type.TEXT); - data = new String[]{ "1|table12-1" }; - TajoTestingCluster.createTable("table12", schema, tableOptions, data); + schema.addColumn("id", TajoDataTypes.Type.INT4); + schema.addColumn("name", TajoDataTypes.Type.TEXT); + data = new String[]{"1|table12-1", "2|table12-2"}; + TajoTestingCluster.createTable("jointable12", schema, tableOptions, data, 2); schema = new Schema(); - schema.addColumn("id", Type.INT4); - schema.addColumn("name", Type.TEXT); - data = new String[]{"2|table13-2", "3|table13-3" }; - TajoTestingCluster.createTable("table13", schema, tableOptions, data); + schema.addColumn("id", TajoDataTypes.Type.INT4); + schema.addColumn("name", TajoDataTypes.Type.TEXT); + data = new String[]{"2|table13-2", "3|table13-3"}; + TajoTestingCluster.createTable("jointable13", schema, tableOptions, data); schema = new Schema(); - schema.addColumn("id", Type.INT4); - schema.addColumn("name", Type.TEXT); - data = new String[]{"1|table14-1", "2|table14-2", "3|table14-3", "4|table14-4" }; - TajoTestingCluster.createTable("table14", schema, tableOptions, data); + schema.addColumn("id", TajoDataTypes.Type.INT4); + schema.addColumn("name", TajoDataTypes.Type.TEXT); + data = new String[]{"1|table14-1", "2|table14-2", "3|table14-3", "4|table14-4"}; + TajoTestingCluster.createTable("jointable14", schema, tableOptions, data); schema = new Schema(); - schema.addColumn("id", Type.INT4); - schema.addColumn("name", Type.TEXT); + schema.addColumn("id", TajoDataTypes.Type.INT4); + schema.addColumn("name", TajoDataTypes.Type.TEXT); data = new String[]{}; - TajoTestingCluster.createTable("table15", schema, tableOptions, data); - } - - private void dropOuterJoinTestTable() throws Exception { - executeString("DROP TABLE table11 PURGE;"); - executeString("DROP TABLE table12 PURGE;"); - executeString("DROP TABLE table13 PURGE;"); - executeString("DROP TABLE table14 PURGE;"); - executeString("DROP TABLE table15 PURGE;"); - } + TajoTestingCluster.createTable("jointable15", schema, tableOptions, data); - @Test - public void testDifferentTypesJoinCondition() throws Exception { - // select * from table20 t3 join table21 t4 on t3.id = t4.id; - executeDDL("table1_int8_ddl.sql", "table1", "table20"); - executeDDL("table1_int4_ddl.sql", "table1", "table21"); - try { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } finally { - executeString("DROP TABLE table20"); - executeString("DROP TABLE table21"); + schema = new Schema(); + schema.addColumn("id", TajoDataTypes.Type.INT4); + schema.addColumn("name", TajoDataTypes.Type.TEXT); + data = new String[]{"1000000|a", "1000001|b", "2|c", "3|d", "4|e"}; + TajoTestingCluster.createTable("jointable1", schema, tableOptions, data, 1); + + data = new String[10000]; + for (int i = 0; i < data.length; i++) { + data[i] = i + "|" + "this is testLeftOuterJoinLeftSideSmallTabletestLeftOuterJoinLeftSideSmallTable" + i; } + TajoTestingCluster.createTable("jointable_large", schema, tableOptions, data, 2); + + // According to node type(leaf or non-leaf) Broadcast join is determined differently by Repartitioner. + // testMultipleBroadcastDataFileWithZeroLength testcase is for the leaf node + createMultiFile("nation", 2, new TupleCreator() { + public Tuple createTuple(String[] columnDatas) { + return new VTuple(new Datum[]{ + new Int4Datum(Integer.parseInt(columnDatas[0])), + new TextDatum(columnDatas[1]), + new Int4Datum(Integer.parseInt(columnDatas[2])), + new TextDatum(columnDatas[3]) + }); + } + }); + addEmptyDataFile("nation_multifile", false); } - @Test - public void testComplexJoinCondition1() throws Exception { - // select n1.n_nationkey, n1.n_name, n2.n_name from nation n1 join nation n2 on n1.n_name = upper(n2.n_name); - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } - - @Test - public void testComplexJoinCondition2() throws Exception { - // select n1.n_nationkey, n1.n_name, upper(n2.n_name) name from nation n1 join nation n2 - // on n1.n_name = upper(n2.n_name); + protected static void dropCommonTables() throws ServiceException { + LOG.info("Clear common tables for join tests"); - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); + client.executeQuery("DROP TABLE IF EXISTS jointable11 PURGE;"); + client.executeQuery("DROP TABLE IF EXISTS jointable12 PURGE;"); + client.executeQuery("DROP TABLE IF EXISTS jointable13 PURGE;"); + client.executeQuery("DROP TABLE IF EXISTS jointable14 PURGE;"); + client.executeQuery("DROP TABLE IF EXISTS jointable15 PURGE;"); + client.executeQuery("DROP TABLE IF EXISTS jointable1 PURGE"); + client.executeQuery("DROP TABLE IF EXISTS jointable_large PURGE"); + client.executeQuery("DROP TABLE IF EXISTS nation_multifile PURGE"); } - @Test - public void testComplexJoinCondition3() throws Exception { - // select n1.n_nationkey, n1.n_name, n2.n_name from nation n1 join nation n2 on lower(n1.n_name) = lower(n2.n_name); - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); + interface TupleCreator { + Tuple createTuple(String[] columnDatas); } - @Test - public void testComplexJoinCondition4() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); + private static String buildSchemaString(String tableName) throws ServiceException { + TableDesc desc = client.getTableDesc(tableName); + StringBuffer sb = new StringBuffer(); + for (Column column : desc.getSchema().getRootColumns()) { + sb.append(column.getSimpleName()).append(" ").append(column.getDataType().getType()); + TajoDataTypes.DataType dataType = column.getDataType(); + if (dataType.getLength() > 0) { + sb.append("(").append(dataType.getLength()).append(")"); + } + sb.append(","); + } + sb.deleteCharAt(sb.length()-1); + return sb.toString(); } - @Test - public void testComplexJoinCondition5() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); + private static String buildMultifileDDlString(String tableName) throws ServiceException { + String multiTableName = tableName + "_multifile"; + StringBuilder sb = new StringBuilder("create table ").append(multiTableName).append(" ("); + sb.append(buildSchemaString(tableName)).append(" )"); + return sb.toString(); } - @Test - public void testComplexJoinCondition6() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } + protected static void createMultiFile(String tableName, int numRowsEachFile, TupleCreator tupleCreator) throws Exception { + // make multiple small file + String multiTableName = tableName + "_multifile"; + String sql = buildMultifileDDlString(tableName); + client.executeQueryAndGetResult(sql); - @Test - public void testComplexJoinCondition7() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } + TableDesc table = client.getTableDesc(multiTableName); + assertNotNull(table); - @Test - public void testFullOuterJoinWithEmptyIntermediateData() throws Exception { - ResultSet res = executeString( - "select a.l_orderkey \n" + - "from (select * from lineitem where l_orderkey < 0) a\n" + - "full outer join (select * from lineitem where l_orderkey < 0) b\n" + - "on a.l_orderkey = b.l_orderkey" - ); + TableMeta tableMeta = table.getMeta(); + Schema schema = table.getLogicalSchema(); - try { - String expected = - "l_orderkey\n" + - "-------------------------------\n"; + File file = new File("src/test/tpch/" + tableName + ".tbl"); - assertEquals(expected, resultSetToString(res)); - } finally { - cleanupQuery(res); + if (!file.exists()) { + file = new File(System.getProperty("user.dir") + "/tajo-core/src/test/tpch/" + tableName + ".tbl"); } - } - - @Test - public void testJoinWithDifferentShuffleKey() throws Exception { - KeyValueSet tableOptions = new KeyValueSet(); - tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER); - tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N"); - - Schema schema = new Schema(); - schema.addColumn("id", Type.INT4); - schema.addColumn("name", Type.TEXT); - - List<String> data = new ArrayList<String>(); - - int bytes = 0; - for (int i = 0; i < 1000000; i++) { - String row = i + "|" + i + "name012345678901234567890123456789012345678901234567890"; - bytes += row.getBytes().length; - data.add(row); - if (bytes > 2 * 1024 * 1024) { - break; + String[] rows = FileUtil.readTextFile(file).split("\n"); + + assertTrue(rows.length > 0); + + int fileIndex = 0; + + Appender appender = null; + for (int i = 0; i < rows.length; i++) { + if (i % numRowsEachFile == 0) { + if (appender != null) { + appender.flush(); + appender.close(); + } + Path dataPath = new Path(table.getPath().toString(), fileIndex + ".csv"); + fileIndex++; + appender = ((FileStorageManager) TableSpaceManager.getFileStorageManager(conf)) + .getAppender(tableMeta, schema, dataPath); + appender.init(); } + String[] columnDatas = rows[i].split("\\|"); + Tuple tuple = tupleCreator.createTuple(columnDatas); + appender.addTuple(tuple); } - TajoTestingCluster.createTable("large_table", schema, tableOptions, data.toArray(new String[]{})); - - int originConfValue = conf.getIntVar(ConfVars.$DIST_QUERY_JOIN_PARTITION_VOLUME); - testingCluster.setAllTajoDaemonConfValue(ConfVars.$DIST_QUERY_JOIN_PARTITION_VOLUME.varname, "1"); - ResultSet res = executeString( - "select count(b.id) " + - "from (select id, count(*) as cnt from large_table group by id) a " + - "left outer join (select id, count(*) as cnt from large_table where id < 200 group by id) b " + - "on a.id = b.id" - ); - - try { - String expected = - "?count\n" + - "-------------------------------\n" + - "200\n"; - - assertEquals(expected, resultSetToString(res)); - } finally { - testingCluster.setAllTajoDaemonConfValue(ConfVars.$DIST_QUERY_JOIN_PARTITION_VOLUME.varname, "" + originConfValue); - cleanupQuery(res); - executeString("DROP TABLE large_table PURGE").close(); - } + appender.flush(); + appender.close(); } - @Test - public final void testJoinFilterOfRowPreservedTable1() throws Exception { - // this test is for join filter of a row preserved table. - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); - } + protected static void addEmptyDataFile(String tableName, boolean isPartitioned) throws Exception { + TableDesc table = client.getTableDesc(tableName); - @Test - public final void testJoinWithOrPredicates() throws Exception { - ResultSet res = executeQuery(); - assertResultSet(res); - cleanupQuery(res); + Path path = new Path(table.getPath()); + FileSystem fs = path.getFileSystem(conf); + if (isPartitioned) { + List<Path> partitionPathList = getPartitionPathList(fs, path); + for (Path eachPath: partitionPathList) { + Path dataPath = new Path(eachPath, 0 + "_empty.csv"); + OutputStream out = fs.create(dataPath); + out.close(); + } + } else { + Path dataPath = new Path(path, 0 + "_empty.csv"); + OutputStream out = fs.create(dataPath); + out.close(); + } } - @Test - public final void testNaturalJoin() throws Exception { - ResultSet res = null; - try { - res = executeQuery(); - } catch (Exception e) { - Assert.fail(); + protected static List<Path> getPartitionPathList(FileSystem fs, Path path) throws Exception { + FileStatus[] files = fs.listStatus(path); + List<Path> paths = new ArrayList<Path>(); + if (files != null) { + for (FileStatus eachFile: files) { + if (eachFile.isFile()) { + paths.add(path); + return paths; + } else { + paths.addAll(getPartitionPathList(fs, eachFile.getPath())); + } + } } - assertResultSet(res); - cleanupQuery(res); + + return paths; } }
http://git-wip-us.apache.org/repos/asf/tajo/blob/4b1b7799/tajo-core/src/test/java/org/apache/tajo/engine/query/TestMultipleJoinTypes.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestMultipleJoinTypes.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestMultipleJoinTypes.java new file mode 100644 index 0000000..b772d90 --- /dev/null +++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestMultipleJoinTypes.java @@ -0,0 +1,105 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.tajo.engine.query; + +import com.google.protobuf.ServiceException; +import org.apache.tajo.IntegrationTest; +import org.apache.tajo.NamedTest; +import org.apache.tajo.QueryTestCaseBase; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@Category(IntegrationTest.class) +@RunWith(Parameterized.class) +@NamedTest("TestJoinQuery") +public class TestMultipleJoinTypes extends TestJoinQuery { + + public TestMultipleJoinTypes(String joinOption) throws Exception { + super(joinOption); + } + + @BeforeClass + public static void setup() throws Exception { + TestJoinQuery.setup(); + } + + @AfterClass + public static void classTearDown() throws ServiceException { + TestJoinQuery.classTearDown(); + } + + @Test + @QueryTestCaseBase.Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @QueryTestCaseBase.SimpleTest() + public final void testJoinWithMultipleJoinTypes() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public void testComplexJoinsWithCaseWhen() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public void testComplexJoinsWithCaseWhen2() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(prepare = { + "CREATE TABLE customer_broad_parts (" + + " c_nationkey INT4," + + " c_name TEXT," + + " c_address TEXT," + + " c_phone TEXT," + + " c_acctbal FLOAT8," + + " c_mktsegment TEXT," + + " c_comment TEXT" + + ") PARTITION BY COLUMN (c_custkey INT4)", + "INSERT OVERWRITE INTO customer_broad_parts" + + " SELECT" + + " c_nationkey," + + " c_name," + + " c_address," + + " c_phone," + + " c_acctbal," + + " c_mktsegment," + + " c_comment," + + " c_custkey" + + " FROM customer" + }, cleanup = { + "DROP TABLE customer_broad_parts PURGE" + }, queries = { + @QuerySpec("select a.l_orderkey, b.o_orderkey, c.c_custkey from lineitem a " + + "inner join orders b on a.l_orderkey = b.o_orderkey " + + "left outer join customer_broad_parts c on a.l_orderkey = c.c_custkey and c.c_custkey < 0") + }) + public final void testInnerAndOuterWithEmpty() throws Exception { + runSimpleTests(); + } +} http://git-wip-us.apache.org/repos/asf/tajo/blob/4b1b7799/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java new file mode 100644 index 0000000..077b7d2 --- /dev/null +++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java @@ -0,0 +1,462 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.tajo.engine.query; + +import com.google.protobuf.ServiceException; +import org.apache.tajo.IntegrationTest; +import org.apache.tajo.NamedTest; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.sql.ResultSet; + +@Category(IntegrationTest.class) +@RunWith(Parameterized.class) +@NamedTest("TestJoinQuery") +public class TestOuterJoinQuery extends TestJoinQuery { + + public TestOuterJoinQuery(String joinOption) throws Exception { + super(joinOption); + } + + @BeforeClass + public static void setup() throws Exception { + TestJoinQuery.setup(); + } + + @AfterClass + public static void classTearDown() throws ServiceException { + TestJoinQuery.classTearDown(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoinWithThetaJoinConditionInWhere() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testRightOuterJoinWithThetaJoinConditionInWhere() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoin1() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoinWithConstantExpr1() throws Exception { + // outer join with constant projections + // + // select c_custkey, orders.o_orderkey, 'val' as val from customer + // left outer join orders on c_custkey = o_orderkey; + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoinWithConstantExpr4() throws Exception { + // outer join with constant projections + // + // select + // c_custkey, + // orders.o_orderkey, + // 1 as key1 + // from customer left outer join orders on c_custkey = o_orderkey and key1 = 1; + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoinWithConstantExpr5() throws Exception { + // outer join with constant projections + // + // select + // c_custkey, + // orders.o_orderkey, + // 1 as key1 + // from customer left outer join orders on c_custkey = o_orderkey and key1 = 1; + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testRightOuterJoin1() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testFullOuterJoin1() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public void testOuterJoinAndCaseWhen1() throws Exception { + executeDDL("oj_table1_ddl.sql", "table1", "testOuterJoinAndCaseWhen1"); + executeDDL("oj_table2_ddl.sql", "table2", "testOuterJoinAndCaseWhen2"); + try { + runSimpleTests(); + } finally { + executeString("DROP TABLE testOuterJoinAndCaseWhen1"); + executeString("DROP TABLE testOuterJoinAndCaseWhen2"); + } + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoinWithEmptyTable1() throws Exception { + /* + select + c_custkey, + empty_orders.o_orderkey, + empty_orders.o_orderstatus, + empty_orders.o_orderdate + from + customer left outer join empty_orders on c_custkey = o_orderkey + order by + c_custkey, o_orderkey; + */ + + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoinWithEmptyTable2() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoinWithEmptyTable3() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoinWithEmptyTable4() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoinWithEmptyTable5() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testRightOuterJoinWithEmptyTable1() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testFullOuterJoinWithEmptyTable1() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoinWithNull1() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoinWithNull2() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoinWithNull3() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select t1.id, t1.name, t2.id, t3.id\n" + + "from jointable11 t1\n" + + "left outer join jointable12 t2\n" + + "on t1.id = t2.id\n" + + "left outer join jointable13 t3\n" + + "on t1.id = t3.id and t2.id = t3.id") + }) + public final void testLeftOuterJoinPredicationCaseByCase1() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select t1.id, t1.name, t2.id, t3.id, t4.id\n" + + "from jointable11 t1\n" + + "left outer join jointable12 t2\n" + + "on t1.id = t2.id\n" + + "left outer join jointable13 t3\n" + + "on t2.id = t3.id\n" + + "inner join jointable14 t4\n" + + "on t2.id = t4.id") + }) + public final void testLeftOuterJoinPredicationCaseByCase2() throws Exception { + // outer -> outer -> inner + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select t1.id, t1.name, t2.id, t3.id, t4.id\n" + + "from jointable11 t1\n" + + "inner join jointable14 t4\n" + + "on t1.id = t4.id and t4.id > 1\n" + + "left outer join jointable13 t3\n" + + "on t4.id = t3.id and t3.id = 2\n" + + "left outer join jointable12 t2\n" + + "on t1.id = t2.id \n" + + "where t1.id > 1") + }) + public final void testLeftOuterJoinPredicationCaseByCase2_1() throws Exception { + // inner(on predication) -> outer(on predication) -> outer -> where + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select t1.id, t1.name, t2.id, t3.id\n" + + "from jointable11 t1\n" + + "left outer join jointable12 t2 \n" + + "on t1.id = t2.id and (concat(t1.name, cast(t2.id as TEXT)) = 'table11-11' or concat(t1.name, cast(t2.id as TEXT)) = 'table11-33')\n" + + "left outer join jointable13 t3\n" + + "on t1.id = t3.id ") + }) + public final void testLeftOuterJoinPredicationCaseByCase3() throws Exception { + // https://cwiki.apache.org/confluence/display/Hive/OuterJoinBehavior + // Case J1: Join Predicate on Preserved Row Table + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select t1.id, t1.name, t2.id, t3.id\n" + + "from jointable11 t1\n" + + "left outer join jointable12 t2\n" + + "on t1.id = t2.id and t2.id > 1 \n" + + "left outer join jointable13 t3\n" + + "on t1.id = t3.id") + }) + public final void testLeftOuterJoinPredicationCaseByCase4() throws Exception { + // https://cwiki.apache.org/confluence/display/Hive/OuterJoinBehavior + // Case J2: Join Predicate on Null Supplying Table + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select t1.id, t1.name, t2.id, t3.id\n" + + "from jointable11 t1\n" + + "left outer join jointable12 t2\n" + + "on t1.id = t2.id\n" + + "left outer join jointable13 t3\n" + + "on t1.id = t3.id\n" + + "where t1.name > 'table11-1'") + }) + public final void testLeftOuterJoinPredicationCaseByCase5() throws Exception { + // https://cwiki.apache.org/confluence/display/Hive/OuterJoinBehavior + // Case W1: Where Predicate on Preserved Row Table + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select t1.id, t1.name, t2.id, t3.id\n" + + "from jointable11 t1\n" + + "left outer join jointable12 t2\n" + + "on t1.id = t2.id\n" + + "left outer join jointable13 t3\n" + + "on t1.id = t3.id\n" + + "where t3.id > 2") + }) + public final void testLeftOuterJoinPredicationCaseByCase6() throws Exception { + // https://cwiki.apache.org/confluence/display/Hive/OuterJoinBehavior + // Case W2: Where Predicate on Null Supplying Table + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select t1.id, t1.name, t2.id\n" + + "from jointable11 t1\n" + + "left outer join jointable15 t2\n" + + "on t1.id = t2.id") + }) + public final void testLeftOuterWithEmptyTable() throws Exception { + // https://cwiki.apache.org/confluence/display/Hive/OuterJoinBehavior + // Case W2: Where Predicate on Null Supplying Table + runSimpleTests(); + } + + // TODO: this test is disabled due to a bug in broadcast join. It will be enabled after TAJO-1553 +// @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select t1.id, t1.name, t2.id, t3.id\n" + + "from jointable11 t1\n" + + "right outer join jointable12 t2\n" + + "on t1.id = t2.id\n" + + "right outer join jointable13 t3\n" + + "on t1.id = t3.id and t2.id = t3.id") + }) + public final void testRightOuterJoinPredicationCaseByCase1() throws Exception { + runSimpleTests(); + } + + // TODO: this test is disabled due to a bug in broadcast join. It will be enabled after TAJO-1553 +// @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select t1.id, t1.name, t3.id, t4.id\n" + + "from jointable11 t1\n" + + "inner join jointable14 t4\n" + + "on t1.id = t4.id and t4.id > 1\n" + + "right outer join jointable13 t3\n" + + "on t4.id = t3.id and t3.id = 2\n" + + "where t3.id > 1") + }) + public final void testRightOuterJoinPredicationCaseByCase2() throws Exception { + // inner -> right + // Notice: Join order should be preserved with origin order. + // JoinEdge: t1 -> t4, t3 -> t1,t4 + runSimpleTests(); + } + + // TODO: this test is disabled due to a bug in broadcast join. It will be enabled after TAJO-1553 +// @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select t1.id, t1.name, t2.id, t3.id\n" + + "from jointable11 t1\n" + + "right outer join jointable12 t2 \n" + + "on t1.id = t2.id and (concat(t1.name, cast(t2.id as TEXT)) = 'table11-11' or concat(t1.name, cast(t2.id as TEXT)) = 'table11-33')\n" + + "right outer join jointable13 t3\n" + + "on t1.id = t3.id ") + }) + public final void testRightOuterJoinPredicationCaseByCase3() throws Exception { + runSimpleTests(); + } + + // TODO: this test is disabled due to a bug in broadcast join. It will be enabled after TAJO-1553 +// @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select t1.id, t1.name, t3.id, t4.id\n" + + "from jointable11 t1\n" + + "full outer join jointable13 t3\n" + + "on t1.id = t3.id\n" + + "full outer join jointable14 t4\n" + + "on t3.id = t4.id \n" + + "order by t4.id") + }) + public final void testFullOuterJoinPredicationCaseByCase1() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testJoinFilterOfRowPreservedTable1() throws Exception { + // this test is for join filter of a row preserved table. + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoin2() throws Exception { + // large, large, small, small + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoin3() throws Exception { + // large, large, small, large, small, small + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select a.id, b.name from jointable1 a left outer join jointable_large b on a.id = b.id order by a.id") + }) + public final void testLeftOuterJoinLeftSideSmallTable() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest + public void testMultipleBroadcastDataFileWithZeroLength() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true, sort = true) + @SimpleTest + public void testMultipleBroadcastDataFileWithZeroLength2() throws Exception { + runSimpleTests(); + } +} http://git-wip-us.apache.org/repos/asf/tajo/blob/4b1b7799/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinWithSubQuery.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinWithSubQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinWithSubQuery.java new file mode 100644 index 0000000..71db027 --- /dev/null +++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinWithSubQuery.java @@ -0,0 +1,142 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.tajo.engine.query; + +import com.google.protobuf.ServiceException; +import org.apache.tajo.IntegrationTest; +import org.apache.tajo.NamedTest; +import org.apache.tajo.conf.TajoConf; +import org.junit.*; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.assertEquals; + +@Category(IntegrationTest.class) +@RunWith(Parameterized.class) +@NamedTest("TestJoinQuery") +public class TestOuterJoinWithSubQuery extends TestJoinQuery { + + public TestOuterJoinWithSubQuery(String joinOption) throws Exception { + super(joinOption); + } + + @BeforeClass + public static void setup() throws Exception { + TestJoinQuery.setup(); + } + + @AfterClass + public static void classTearDown() throws ServiceException { + TestJoinQuery.classTearDown(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoinWithConstantExpr2() throws Exception { + // outer join with constant projections + // + // select c_custkey, o.o_orderkey, 'val' as val from customer left outer join + // (select * from orders) o on c_custkey = o.o_orderkey + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest() + public final void testLeftOuterJoinWithConstantExpr3() throws Exception { + // outer join with constant projections + // + // select a.c_custkey, 123::INT8 as const_val, b.min_name from customer a + // left outer join ( select c_custkey, min(c_name) as min_name from customer group by c_custkey) b + // on a.c_custkey = b.c_custkey; + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select a.id, b.id from jointable11 a " + + "left outer join (" + + "select jointable12.id from jointable12 inner join lineitem " + + "on jointable12.id = lineitem.l_orderkey and jointable12.id > 10) b " + + "on a.id = b.id order by a.id") + }) + public final void testLeftOuterJoinWithEmptySubquery1() throws Exception { + try { + testingCluster.setAllTajoDaemonConfValue(TajoConf.ConfVars.$TEST_MIN_TASK_NUM.varname, "2"); + runSimpleTests(); + } finally { + testingCluster.setAllTajoDaemonConfValue(TajoConf.ConfVars.$TEST_MIN_TASK_NUM.varname, + TajoConf.ConfVars.$TEST_MIN_TASK_NUM.defaultVal); + } + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select a.id, b.id from " + + "(select jointable12.id, jointable12.name, lineitem.l_shipdate " + + "from jointable12 inner join lineitem on jointable12.id = lineitem.l_orderkey and jointable12.id > 10) a " + + "left outer join jointable11 b on a.id = b.id") + }) + public final void testLeftOuterJoinWithEmptySubquery2() throws Exception { + //Empty Preserved Row table + try { + testingCluster.setAllTajoDaemonConfValue(TajoConf.ConfVars.$TEST_MIN_TASK_NUM.varname, "2"); + runSimpleTests(); + } finally { + testingCluster.setAllTajoDaemonConfValue(TajoConf.ConfVars.$TEST_MIN_TASK_NUM.varname, + TajoConf.ConfVars.$TEST_MIN_TASK_NUM.defaultVal); + } + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select a.l_orderkey \n" + + "from (select * from lineitem where l_orderkey < 0) a\n" + + "full outer join (select * from lineitem where l_orderkey < 0) b\n" + + "on a.l_orderkey = b.l_orderkey") + }) + public void testFullOuterJoinWithEmptyIntermediateData() throws Exception { + runSimpleTests(); + } + + @Test + @Option(withExplain = true, withExplainGlobal = true, parameterized = true) + @SimpleTest(queries = { + @QuerySpec("select count(b.id) " + + "from (select id, count(*) as cnt from jointable_large group by id) a " + + "left outer join (select id, count(*) as cnt from jointable_large where id < 200 group by id) b " + + "on a.id = b.id") + }) + public void testJoinWithDifferentShuffleKey() throws Exception { + int originConfValue = conf.getIntVar(TajoConf.ConfVars.$DIST_QUERY_JOIN_PARTITION_VOLUME); + testingCluster.setAllTajoDaemonConfValue(TajoConf.ConfVars.$DIST_QUERY_JOIN_PARTITION_VOLUME.varname, "1"); + try { + runSimpleTests(); + } finally { + testingCluster.setAllTajoDaemonConfValue(TajoConf.ConfVars.$DIST_QUERY_JOIN_PARTITION_VOLUME.varname, + "" + originConfValue); + } + } +} http://git-wip-us.apache.org/repos/asf/tajo/blob/4b1b7799/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java index 002f05d..c0cf4d9 100644 --- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java +++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java @@ -19,8 +19,13 @@ package org.apache.tajo.engine.query; import com.google.common.collect.Lists; -import org.apache.tajo.*; +import org.apache.tajo.IntegrationTest; +import org.apache.tajo.QueryId; +import org.apache.tajo.QueryTestCaseBase; +import org.apache.tajo.SessionVars; +import org.apache.tajo.TajoConstants; import org.apache.tajo.TajoProtos.QueryState; +import org.apache.tajo.TajoTestingCluster; import org.apache.tajo.catalog.CatalogService; import org.apache.tajo.catalog.Schema; import org.apache.tajo.catalog.TableDesc; @@ -111,22 +116,13 @@ public class TestSelectQuery extends QueryTestCaseBase { @Test @SimpleTest(queries = { - "explain global " + - "select l_orderkey, l_partkey from lineitem", - "explain global " + - "select n1.n_nationkey, n1.n_name, n2.n_name from nation n1 join nation n2 on n1.n_name = upper(n2.n_name) " + - "order by n1.n_nationkey;", - "explain global " + - "select l_linenumber, count(*), count(distinct l_orderkey), sum(distinct l_orderkey) from lineitem " + - "group by l_linenumber having sum(distinct l_orderkey) = 6"}) + @QuerySpec("explain global select l_orderkey, l_partkey from lineitem"), + @QuerySpec("explain global select n1.n_nationkey, n1.n_name, n2.n_name from nation n1 join nation n2 " + + "on n1.n_name = upper(n2.n_name) order by n1.n_nationkey"), + @QuerySpec("explain global select l_linenumber, count(*), count(distinct l_orderkey), sum(distinct l_orderkey) from lineitem " + + "group by l_linenumber having sum(distinct l_orderkey) = 6")}) public final void testExplainSelectPhysical() throws Exception { - // Enable this option to fix the shape of the generated plans. - testingCluster.getConfiguration().set(ConfVars.$TEST_PLAN_SHAPE_FIX_ENABLED.varname, "true"); - try { - runSimpleTests(); - } finally { - testingCluster.getConfiguration().set(ConfVars.$TEST_PLAN_SHAPE_FIX_ENABLED.varname, "false"); - } + runSimpleTests(); } @Test @@ -501,12 +497,13 @@ public class TestSelectQuery extends QueryTestCaseBase { schema.addColumn("id", Type.INT4); schema.addColumn("name", Type.TEXT); String[] data = new String[]{ "1|table11-1", "2|table11-2", "3|table11-3", "4|table11-4", "5|table11-5" }; - TajoTestingCluster.createTable("table11", schema, tableOptions, data, 2); + TajoTestingCluster.createTable("testNowInMultipleTasks".toLowerCase(), schema, tableOptions, data, 2); try { testingCluster.setAllTajoDaemonConfValue(ConfVars.$TEST_MIN_TASK_NUM.varname, "2"); - ResultSet res = executeString("select concat(substr(to_char(now(),'yyyymmddhh24miss'), 1, 14), 'aaa'), sleep(1) from table11"); + ResultSet res = executeString("select concat(substr(to_char(now(),'yyyymmddhh24miss'), 1, 14), 'aaa'), sleep(1) " + + "from testNowInMultipleTasks"); String nowValue = null; int numRecords = 0; @@ -522,7 +519,8 @@ public class TestSelectQuery extends QueryTestCaseBase { res.close(); - res = executeString("select concat(substr(to_char(current_timestamp,'yyyymmddhh24miss'), 1, 14), 'aaa'), sleep(1) from table11"); + res = executeString("select concat(substr(to_char(current_timestamp,'yyyymmddhh24miss'), 1, 14), 'aaa'), sleep(1) " + + "from testNowInMultipleTasks"); nowValue = null; numRecords = 0; @@ -538,7 +536,7 @@ public class TestSelectQuery extends QueryTestCaseBase { } finally { testingCluster.setAllTajoDaemonConfValue(ConfVars.$TEST_MIN_TASK_NUM.varname, ConfVars.$TEST_MIN_TASK_NUM.defaultVal); - executeString("DROP TABLE table11 PURGE"); + executeString("DROP TABLE testNowInMultipleTasks PURGE"); } } http://git-wip-us.apache.org/repos/asf/tajo/blob/4b1b7799/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSortQuery.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSortQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSortQuery.java index 1aee961..fa77fda 100644 --- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSortQuery.java +++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSortQuery.java @@ -243,10 +243,10 @@ public class TestSortQuery extends QueryTestCaseBase { schema.addColumn("id", Type.INT4); schema.addColumn("name", Type.TEXT); String[] data = new String[]{ "1|111", "2|\\N", "3|333" }; - TajoTestingCluster.createTable("table11", schema, tableOptions, data, 1); + TajoTestingCluster.createTable("testSortOnNullColumn2".toLowerCase(), schema, tableOptions, data, 1); try { - ResultSet res = executeString("select * from table11 order by name asc"); + ResultSet res = executeString("select * from testSortOnNullColumn2 order by name asc"); String ascExpected = "id,name\n" + "-------------------------------\n" + "1,111\n" + @@ -256,7 +256,7 @@ public class TestSortQuery extends QueryTestCaseBase { assertEquals(ascExpected, resultSetToString(res)); res.close(); - res = executeString("select * from table11 order by name desc"); + res = executeString("select * from testSortOnNullColumn2 order by name desc"); String descExpected = "id,name\n" + "-------------------------------\n" + "2,null\n" + @@ -266,7 +266,7 @@ public class TestSortQuery extends QueryTestCaseBase { assertEquals(descExpected, resultSetToString(res)); res.close(); } finally { - executeString("DROP TABLE table11 PURGE"); + executeString("DROP TABLE testSortOnNullColumn2 PURGE"); } } @@ -280,10 +280,10 @@ public class TestSortQuery extends QueryTestCaseBase { schema.addColumn("id", Type.INT4); schema.addColumn("name", Type.TEXT); String[] data = new String[]{ "1|111", "2|\\N", "3|333" }; - TajoTestingCluster.createTable("table11", schema, tableOptions, data, 1); + TajoTestingCluster.createTable("testSortOnNullColumn3".toLowerCase(), schema, tableOptions, data, 1); try { - ResultSet res = executeString("select * from table11 order by name null first"); + ResultSet res = executeString("select * from testSortOnNullColumn3 order by name null first"); String ascExpected = "id,name\n" + "-------------------------------\n" + "2,null\n" + @@ -294,7 +294,7 @@ public class TestSortQuery extends QueryTestCaseBase { res.close(); } finally { - executeString("DROP TABLE table11 PURGE"); + executeString("DROP TABLE testSortOnNullColumn3 PURGE"); } }
