Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into index_support
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/4d01fca9 Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/4d01fca9 Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/4d01fca9 Branch: refs/heads/index_support Commit: 4d01fca9972207e045218ea7a39ac2cbbbea2e0c Parents: 1ad6b6c bbfa076 Author: Jihoon Son <[email protected]> Authored: Mon May 25 23:28:21 2015 +0900 Committer: Jihoon Son <[email protected]> Committed: Mon May 25 23:28:21 2015 +0900 ---------------------------------------------------------------------- CHANGES | 18 +- .../InfoSchemaMetadataDictionary.java | 2 + .../dictionary/SessionTableDescriptor.java | 45 + .../engine/planner/PhysicalPlannerImpl.java | 8 +- .../planner/physical/ColPartitionStoreExec.java | 2 +- .../physical/PartitionMergeScanExec.java | 27 +- .../planner/physical/PhysicalPlanUtil.java | 4 +- .../physical/RangeShuffleFileWriteExec.java | 2 +- .../engine/planner/physical/SeqScanExec.java | 7 +- .../engine/planner/physical/StoreTableExec.java | 2 +- .../org/apache/tajo/master/GlobalEngine.java | 4 +- .../java/org/apache/tajo/master/TajoMaster.java | 6 +- .../apache/tajo/master/exec/DDLExecutor.java | 6 +- .../exec/ExplainPlanPreprocessorForTest.java | 137 +- .../exec/NonForwardQueryResultFileScanner.java | 16 +- .../NonForwardQueryResultSystemScanner.java | 32 +- .../apache/tajo/master/exec/QueryExecutor.java | 4 +- .../tajo/querymaster/QueryMasterTask.java | 4 +- .../apache/tajo/querymaster/Repartitioner.java | 32 +- .../java/org/apache/tajo/querymaster/Stage.java | 12 +- .../org/apache/tajo/session/SessionManager.java | 2 + .../org/apache/tajo/worker/TajoQueryEngine.java | 1 - .../main/java/org/apache/tajo/worker/Task.java | 2 +- .../apache/tajo/ws/rs/ClientApplication.java | 6 +- .../org/apache/tajo/BackendTestingUtil.java | 2 +- .../test/java/org/apache/tajo/NamedTest.java | 27 + .../java/org/apache/tajo/QueryTestCaseBase.java | 195 ++- .../org/apache/tajo/TajoTestingCluster.java | 20 +- .../engine/function/TestBuiltinFunctions.java | 132 +- .../planner/global/TestBroadcastJoinPlan.java | 1044 --------------- .../planner/physical/TestBNLJoinExec.java | 12 +- .../planner/physical/TestExternalSortExec.java | 4 +- .../physical/TestFullOuterHashJoinExec.java | 24 +- .../physical/TestFullOuterMergeJoinExec.java | 38 +- .../planner/physical/TestHashAntiJoinExec.java | 8 +- .../planner/physical/TestHashJoinExec.java | 12 +- .../planner/physical/TestHashSemiJoinExec.java | 8 +- .../physical/TestLeftOuterHashJoinExec.java | 28 +- .../planner/physical/TestMergeJoinExec.java | 8 +- .../engine/planner/physical/TestNLJoinExec.java | 12 +- .../planner/physical/TestPhysicalPlanner.java | 56 +- .../physical/TestProgressExternalSortExec.java | 4 +- .../physical/TestRightOuterHashJoinExec.java | 18 +- .../physical/TestRightOuterMergeJoinExec.java | 36 +- .../engine/planner/physical/TestSortExec.java | 8 +- .../tajo/engine/query/TestGroupByQuery.java | 34 +- .../tajo/engine/query/TestHBaseTable.java | 22 +- .../tajo/engine/query/TestInnerJoinQuery.java | 335 +++++ .../engine/query/TestInnerJoinWithSubQuery.java | 125 ++ .../tajo/engine/query/TestJoinBroadcast.java | 850 ------------ .../query/TestJoinOnPartitionedTables.java | 337 ++++- .../apache/tajo/engine/query/TestJoinQuery.java | 1241 +++-------------- .../engine/query/TestMultipleJoinTypes.java | 105 ++ .../tajo/engine/query/TestOuterJoinQuery.java | 462 +++++++ .../engine/query/TestOuterJoinWithSubQuery.java | 142 ++ .../tajo/engine/query/TestSelectQuery.java | 45 +- .../apache/tajo/engine/query/TestSortQuery.java | 14 +- .../org/apache/tajo/jdbc/TestResultSet.java | 4 +- .../tajo/master/TestExecutionBlockCursor.java | 4 +- .../TestNonForwardQueryResultSystemScanner.java | 1 + .../org/apache/tajo/storage/TestRowFile.java | 4 +- .../customer_large/customer.tbl | 100 -- .../lineitem_large/lineitem.tbl | 97 -- .../TestJoinBroadcast/orders_large/orders.tbl | 300 ----- .../testDistinctAggregationCaseByCase4.sql | 2 +- .../testGroupByWithNullData5.sql | 2 +- .../testGroupByWithNullData6.sql | 2 +- .../testGroupByWithNullData7.sql | 2 +- .../testGroupByWithNullData8.sql | 2 +- .../testBroadcastTwoPartJoin.sql | 19 + .../testCrossJoinAndCaseWhen.sql | 18 + .../testCrossJoinWithAsterisk1.sql | 1 + .../testCrossJoinWithAsterisk2.sql | 1 + .../testCrossJoinWithAsterisk3.sql | 1 + .../testCrossJoinWithAsterisk4.sql | 1 + .../testBroadcastSubquery.sql | 12 + .../testBroadcastSubquery2.sql | 19 + .../create_customer_large_ddl.sql | 7 - .../create_lineitem_large_ddl.sql | 7 - .../create_orders_large_ddl.sql | 7 - .../customer_partition_ddl.sql | 9 - .../insert_into_customer_partition.sql | 11 - .../TestJoinBroadcast/nation_multifile_ddl.sql | 5 - .../queries/TestJoinBroadcast/oj_table1_ddl.sql | 6 - .../queries/TestJoinBroadcast/oj_table2_ddl.sql | 6 - .../TestJoinBroadcast/orders_multifile_ddl.sql | 5 - .../testBroadcastBasicJoin.sql | 11 - .../testBroadcastPartitionTable.sql | 16 - .../TestJoinBroadcast/testBroadcastSubquery.sql | 12 - .../testBroadcastSubquery2.sql | 19 - .../testBroadcastTwoPartJoin.sql | 15 - .../queries/TestJoinBroadcast/testCrossJoin.sql | 1 - .../testCrossJoinAndCaseWhen.sql | 18 - .../testCrossJoinWithAsterisk1.sql | 1 - .../testCrossJoinWithAsterisk2.sql | 1 - .../testCrossJoinWithAsterisk3.sql | 1 - .../testCrossJoinWithAsterisk4.sql | 1 - .../testCrossJoinWithEmptyTable1.sql | 8 - .../TestJoinBroadcast/testFullOuterJoin1.sql | 8 - .../testFullOuterJoinWithEmptyTable1.sql | 8 - .../testInnerJoinWithEmptyTable.sql | 8 - .../testJoinCoReferredEvals1.sql | 11 - .../testJoinCoReferredEvalsWithSameExprs1.sql | 14 - .../testJoinCoReferredEvalsWithSameExprs2.sql | 22 - .../testJoinOnMultipleDatabases.sql | 25 - .../TestJoinBroadcast/testLeftOuterJoin1.sql | 9 - .../TestJoinBroadcast/testLeftOuterJoin2.sql | 5 - .../TestJoinBroadcast/testLeftOuterJoin3.sql | 7 - .../testLeftOuterJoinWithConstantExpr1.sql | 9 - .../testLeftOuterJoinWithConstantExpr2.sql | 9 - .../testLeftOuterJoinWithConstantExpr3.sql | 17 - .../testLeftOuterJoinWithEmptyTable1.sql | 9 - .../testLeftOuterJoinWithEmptyTable2.sql | 9 - .../testLeftOuterJoinWithEmptyTable3.sql | 14 - .../testLeftOuterJoinWithEmptyTable4.sql | 17 - ...tMultipleBroadcastDataFileWithZeroLength.sql | 3 - ...MultipleBroadcastDataFileWithZeroLength2.sql | 5 - ...rtitionedBroadcastDataFileWithZeroLength.sql | 3 - ...titionedBroadcastDataFileWithZeroLength2.sql | 5 - .../testOuterJoinAndCaseWhen1.sql | 12 - .../TestJoinBroadcast/testRightOuterJoin1.sql | 8 - .../testRightOuterJoinWithEmptyTable1.sql | 8 - .../TestJoinBroadcast/testTPCHQ2Join.sql | 25 - .../TestJoinBroadcast/testWhereClauseJoin1.sql | 10 - .../TestJoinBroadcast/testWhereClauseJoin2.sql | 8 - .../TestJoinBroadcast/testWhereClauseJoin3.sql | 9 - .../TestJoinBroadcast/testWhereClauseJoin4.sql | 8 - .../TestJoinBroadcast/testWhereClauseJoin5.sql | 15 - .../TestJoinBroadcast/testWhereClauseJoin6.sql | 19 - .../customer_ddl.sql | 9 - .../insert_into_customer.sql | 11 - .../testBroadcastPartitionTable.sql | 16 + ...rtitionedBroadcastDataFileWithZeroLength.sql | 3 + ...titionedBroadcastDataFileWithZeroLength2.sql | 5 + .../TestJoinQuery/create_customer_large_ddl.sql | 7 + .../TestJoinQuery/create_lineitem_large_ddl.sql | 7 + .../TestJoinQuery/create_orders_large_ddl.sql | 7 + .../TestJoinQuery/customer_partition_ddl.sql | 9 + .../TestJoinQuery/insert_into_customer.sql | 11 + .../insert_into_customer_partition.sql | 11 + .../TestJoinQuery/nation_multifile_ddl.sql | 5 + .../queries/TestJoinQuery/oj_table1_ddl.sql | 2 +- .../queries/TestJoinQuery/oj_table2_ddl.sql | 2 +- .../TestJoinQuery/orders_multifile_ddl.sql | 5 + .../TestJoinQuery/partitioned_customer_ddl.sql | 19 + .../queries/TestJoinQuery/testCrossJoin.sql | 1 - .../testCrossJoinWithAsterisk1.sql | 1 - .../testCrossJoinWithAsterisk2.sql | 1 - .../testCrossJoinWithAsterisk3.sql | 1 - .../testCrossJoinWithAsterisk4.sql | 1 - .../TestJoinQuery/testOuterJoinAndCaseWhen1.sql | 2 +- .../TestOuterJoinQuery/testLeftOuterJoin2.sql | 5 + .../TestOuterJoinQuery/testLeftOuterJoin3.sql | 7 + ...tMultipleBroadcastDataFileWithZeroLength.sql | 3 + ...MultipleBroadcastDataFileWithZeroLength2.sql | 5 + .../testSelectOnSessionTable.sql | 1 + .../create_table_with_date_ddl.sql | 2 +- .../queries/TestSortQuery/testSortWithDate.sql | 2 +- .../testBroadcastTwoPartJoin.Hash.plan | 168 +++ ...stBroadcastTwoPartJoin.Hash_NoBroadcast.plan | 249 ++++ .../testBroadcastTwoPartJoin.Sort.plan | 168 +++ ...stBroadcastTwoPartJoin.Sort_NoBroadcast.plan | 249 ++++ .../testBroadcastTwoPartJoin.result | 7 + .../testComplexJoinCondition1.Hash.plan | 79 ++ ...tComplexJoinCondition1.Hash_NoBroadcast.plan | 105 ++ .../testComplexJoinCondition1.Sort.plan | 79 ++ ...tComplexJoinCondition1.Sort_NoBroadcast.plan | 105 ++ .../testComplexJoinCondition1.result | 27 + .../testComplexJoinCondition2.Hash.plan | 79 ++ ...tComplexJoinCondition2.Hash_NoBroadcast.plan | 105 ++ .../testComplexJoinCondition2.Sort.plan | 79 ++ ...tComplexJoinCondition2.Sort_NoBroadcast.plan | 105 ++ .../testComplexJoinCondition2.result | 27 + .../testComplexJoinCondition3.Hash.plan | 79 ++ ...tComplexJoinCondition3.Hash_NoBroadcast.plan | 105 ++ .../testComplexJoinCondition3.Sort.plan | 79 ++ ...tComplexJoinCondition3.Sort_NoBroadcast.plan | 105 ++ .../testComplexJoinCondition3.result | 27 + .../testComplexJoinCondition4.Hash.plan | 79 ++ ...tComplexJoinCondition4.Hash_NoBroadcast.plan | 105 ++ .../testComplexJoinCondition4.Sort.plan | 79 ++ ...tComplexJoinCondition4.Sort_NoBroadcast.plan | 105 ++ .../testComplexJoinCondition4.result | 29 + .../testCrossJoin.1.Hash.plan | 77 ++ .../testCrossJoin.1.Hash_NoBroadcast.plan | 103 ++ .../testCrossJoin.1.Sort.plan | 77 ++ .../testCrossJoin.1.Sort_NoBroadcast.plan | 103 ++ .../TestInnerJoinQuery/testCrossJoin.1.result | 127 ++ .../testCrossJoin.2.Hash.plan | 52 + .../testCrossJoin.2.Hash_NoBroadcast.plan | 78 ++ .../testCrossJoin.2.Sort.plan | 52 + .../testCrossJoin.2.Sort_NoBroadcast.plan | 78 ++ .../TestInnerJoinQuery/testCrossJoin.2.result | 27 + .../testCrossJoin.3.Hash.plan | 52 + .../testCrossJoin.3.Hash_NoBroadcast.plan | 78 ++ .../testCrossJoin.3.Sort.plan | 52 + .../testCrossJoin.3.Sort_NoBroadcast.plan | 78 ++ .../TestInnerJoinQuery/testCrossJoin.3.result | 27 + .../testCrossJoin.4.Hash.plan | 52 + .../testCrossJoin.4.Hash_NoBroadcast.plan | 78 ++ .../testCrossJoin.4.Sort.plan | 52 + .../testCrossJoin.4.Sort_NoBroadcast.plan | 78 ++ .../TestInnerJoinQuery/testCrossJoin.4.result | 27 + .../testCrossJoin.5.Hash.plan | 77 ++ .../testCrossJoin.5.Hash_NoBroadcast.plan | 103 ++ .../testCrossJoin.5.Sort.plan | 77 ++ .../testCrossJoin.5.Sort_NoBroadcast.plan | 103 ++ .../TestInnerJoinQuery/testCrossJoin.5.result | 27 + .../testCrossJoinAndCaseWhen.Hash.plan | 79 ++ ...stCrossJoinAndCaseWhen.Hash_NoBroadcast.plan | 105 ++ .../testCrossJoinAndCaseWhen.Sort.plan | 79 ++ ...stCrossJoinAndCaseWhen.Sort_NoBroadcast.plan | 105 ++ .../testCrossJoinAndCaseWhen.result | 27 + .../testCrossJoinWithAsterisk1.Hash.plan | 77 ++ ...CrossJoinWithAsterisk1.Hash_NoBroadcast.plan | 103 ++ .../testCrossJoinWithAsterisk1.Sort.plan | 77 ++ ...CrossJoinWithAsterisk1.Sort_NoBroadcast.plan | 103 ++ .../testCrossJoinWithAsterisk1.result | 27 + .../testCrossJoinWithAsterisk2.Hash.plan | 77 ++ ...CrossJoinWithAsterisk2.Hash_NoBroadcast.plan | 103 ++ .../testCrossJoinWithAsterisk2.Sort.plan | 77 ++ ...CrossJoinWithAsterisk2.Sort_NoBroadcast.plan | 103 ++ .../testCrossJoinWithAsterisk2.result | 27 + .../testCrossJoinWithAsterisk3.Hash.plan | 77 ++ ...CrossJoinWithAsterisk3.Hash_NoBroadcast.plan | 103 ++ .../testCrossJoinWithAsterisk3.Sort.plan | 77 ++ ...CrossJoinWithAsterisk3.Sort_NoBroadcast.plan | 103 ++ .../testCrossJoinWithAsterisk3.result | 27 + .../testCrossJoinWithAsterisk4.Hash.plan | 77 ++ ...CrossJoinWithAsterisk4.Hash_NoBroadcast.plan | 103 ++ .../testCrossJoinWithAsterisk4.Sort.plan | 77 ++ ...CrossJoinWithAsterisk4.Sort_NoBroadcast.plan | 103 ++ .../testCrossJoinWithAsterisk4.result | 27 + .../testCrossJoinWithEmptyTable1.Hash.plan | 79 ++ ...ossJoinWithEmptyTable1.Hash_NoBroadcast.plan | 105 ++ .../testCrossJoinWithEmptyTable1.Sort.plan | 79 ++ ...ossJoinWithEmptyTable1.Sort_NoBroadcast.plan | 105 ++ .../testCrossJoinWithEmptyTable1.result | 2 + ...sJoinWithThetaJoinConditionInWhere.Hash.plan | 64 + ...taJoinConditionInWhere.Hash_NoBroadcast.plan | 90 ++ ...sJoinWithThetaJoinConditionInWhere.Sort.plan | 64 + ...taJoinConditionInWhere.Sort_NoBroadcast.plan | 90 ++ ...rossJoinWithThetaJoinConditionInWhere.result | 12 + .../testDifferentTypesJoinCondition.Hash.plan | 54 + ...rentTypesJoinCondition.Hash_NoBroadcast.plan | 80 ++ .../testDifferentTypesJoinCondition.Sort.plan | 54 + ...rentTypesJoinCondition.Sort_NoBroadcast.plan | 80 ++ .../testDifferentTypesJoinCondition.result | 7 + .../testInnerJoinAndCaseWhen.Hash.plan | 79 ++ ...stInnerJoinAndCaseWhen.Hash_NoBroadcast.plan | 105 ++ .../testInnerJoinAndCaseWhen.Sort.plan | 79 ++ ...stInnerJoinAndCaseWhen.Sort_NoBroadcast.plan | 105 ++ .../testInnerJoinAndCaseWhen.result | 27 + .../testInnerJoinWithEmptyTable.Hash.plan | 79 ++ ...nnerJoinWithEmptyTable.Hash_NoBroadcast.plan | 105 ++ .../testInnerJoinWithEmptyTable.Sort.plan | 79 ++ ...nnerJoinWithEmptyTable.Sort_NoBroadcast.plan | 105 ++ .../testInnerJoinWithEmptyTable.result | 2 + ...rJoinWithThetaJoinConditionInWhere.Hash.plan | 58 + ...taJoinConditionInWhere.Hash_NoBroadcast.plan | 84 ++ ...rJoinWithThetaJoinConditionInWhere.Sort.plan | 58 + ...taJoinConditionInWhere.Sort_NoBroadcast.plan | 84 ++ ...nnerJoinWithThetaJoinConditionInWhere.result | 7 + .../testJoinAsterisk.Hash.plan | 54 + .../testJoinAsterisk.Hash_NoBroadcast.plan | 80 ++ .../testJoinAsterisk.Sort.plan | 54 + .../testJoinAsterisk.Sort_NoBroadcast.plan | 80 ++ .../TestInnerJoinQuery/testJoinAsterisk.result | 7 + .../testJoinCoReferredEvals1.Hash.plan | 79 ++ ...stJoinCoReferredEvals1.Hash_NoBroadcast.plan | 105 ++ .../testJoinCoReferredEvals1.Sort.plan | 79 ++ ...stJoinCoReferredEvals1.Sort_NoBroadcast.plan | 105 ++ .../testJoinCoReferredEvals1.result | 27 + ...tJoinCoReferredEvalsWithSameExprs1.Hash.plan | 89 ++ ...redEvalsWithSameExprs1.Hash_NoBroadcast.plan | 115 ++ ...tJoinCoReferredEvalsWithSameExprs1.Sort.plan | 89 ++ ...redEvalsWithSameExprs1.Sort_NoBroadcast.plan | 115 ++ ...testJoinCoReferredEvalsWithSameExprs1.result | 22 + ...tJoinCoReferredEvalsWithSameExprs2.Hash.plan | 120 ++ ...redEvalsWithSameExprs2.Hash_NoBroadcast.plan | 146 ++ ...tJoinCoReferredEvalsWithSameExprs2.Sort.plan | 120 ++ ...redEvalsWithSameExprs2.Sort_NoBroadcast.plan | 146 ++ ...testJoinCoReferredEvalsWithSameExprs2.result | 22 + .../testJoinOnMultipleDatabases.Hash.plan | 168 +++ ...oinOnMultipleDatabases.Hash_NoBroadcast.plan | 249 ++++ .../testJoinOnMultipleDatabases.Sort.plan | 168 +++ ...oinOnMultipleDatabases.Sort_NoBroadcast.plan | 249 ++++ .../testJoinOnMultipleDatabases.result | 5 + .../testJoinOnMultipleDatabasesWithJson.result | 5 + .../TestInnerJoinQuery/testJoinWithJson.result | 27 + .../testJoinWithMultipleJoinQual1.Hash.plan | 168 +++ ...nWithMultipleJoinQual1.Hash_NoBroadcast.plan | 249 ++++ .../testJoinWithMultipleJoinQual1.Sort.plan | 168 +++ ...nWithMultipleJoinQual1.Sort_NoBroadcast.plan | 249 ++++ .../testJoinWithMultipleJoinQual1.result | 2 + .../testJoinWithOrPredicates.Hash.plan | 91 ++ ...stJoinWithOrPredicates.Hash_NoBroadcast.plan | 117 ++ .../testJoinWithOrPredicates.Sort.plan | 91 ++ ...stJoinWithOrPredicates.Sort_NoBroadcast.plan | 117 ++ .../testJoinWithOrPredicates.result | 4 + .../testNaturalJoin.Hash.plan | 79 ++ .../testNaturalJoin.Hash_NoBroadcast.plan | 105 ++ .../testNaturalJoin.Sort.plan | 79 ++ .../testNaturalJoin.Sort_NoBroadcast.plan | 105 ++ .../TestInnerJoinQuery/testNaturalJoin.result | 27 + .../TestInnerJoinQuery/testTPCHQ2Join.Hash.plan | 168 +++ .../testTPCHQ2Join.Hash_NoBroadcast.plan | 249 ++++ .../TestInnerJoinQuery/testTPCHQ2Join.Sort.plan | 168 +++ .../testTPCHQ2Join.Sort_NoBroadcast.plan | 249 ++++ .../TestInnerJoinQuery/testTPCHQ2Join.result | 5 + .../testWhereClauseJoin1.Hash.plan | 79 ++ .../testWhereClauseJoin1.Hash_NoBroadcast.plan | 105 ++ .../testWhereClauseJoin1.Sort.plan | 79 ++ .../testWhereClauseJoin1.Sort_NoBroadcast.plan | 105 ++ .../testWhereClauseJoin1.result | 27 + .../testWhereClauseJoin2.Hash.plan | 79 ++ .../testWhereClauseJoin2.Hash_NoBroadcast.plan | 105 ++ .../testWhereClauseJoin2.Sort.plan | 79 ++ .../testWhereClauseJoin2.Sort_NoBroadcast.plan | 105 ++ .../testWhereClauseJoin2.result | 27 + .../testWhereClauseJoin3.Hash.plan | 79 ++ .../testWhereClauseJoin3.Hash_NoBroadcast.plan | 105 ++ .../testWhereClauseJoin3.Sort.plan | 79 ++ .../testWhereClauseJoin3.Sort_NoBroadcast.plan | 105 ++ .../testWhereClauseJoin3.result | 27 + .../testWhereClauseJoin4.Hash.plan | 79 ++ .../testWhereClauseJoin4.Hash_NoBroadcast.plan | 105 ++ .../testWhereClauseJoin4.Sort.plan | 79 ++ .../testWhereClauseJoin4.Sort_NoBroadcast.plan | 105 ++ .../testWhereClauseJoin4.result | 27 + .../testWhereClauseJoin5.Hash.plan | 98 ++ .../testWhereClauseJoin5.Hash_NoBroadcast.plan | 153 +++ .../testWhereClauseJoin5.Sort.plan | 98 ++ .../testWhereClauseJoin5.Sort_NoBroadcast.plan | 153 +++ .../testWhereClauseJoin5.result | 5 + .../testWhereClauseJoin6.Hash.plan | 117 ++ .../testWhereClauseJoin6.Hash_NoBroadcast.plan | 201 +++ .../testWhereClauseJoin6.Sort.plan | 117 ++ .../testWhereClauseJoin6.Sort_NoBroadcast.plan | 201 +++ .../testWhereClauseJoin6.result | 5 + .../testBroadcastSubquery.Hash.plan | 165 +++ .../testBroadcastSubquery.Hash_NoBroadcast.plan | 165 +++ .../testBroadcastSubquery.Sort.plan | 165 +++ .../testBroadcastSubquery.Sort_NoBroadcast.plan | 165 +++ .../testBroadcastSubquery.result | 7 + .../testBroadcastSubquery2.Hash.plan | 276 ++++ ...testBroadcastSubquery2.Hash_NoBroadcast.plan | 328 +++++ .../testBroadcastSubquery2.Sort.plan | 276 ++++ ...testBroadcastSubquery2.Sort_NoBroadcast.plan | 328 +++++ .../testBroadcastSubquery2.result | 3 + .../testComplexJoinCondition5.Hash.plan | 117 ++ ...tComplexJoinCondition5.Hash_NoBroadcast.plan | 117 ++ .../testComplexJoinCondition5.Sort.plan | 117 ++ ...tComplexJoinCondition5.Sort_NoBroadcast.plan | 117 ++ .../testComplexJoinCondition5.result | 29 + .../testComplexJoinCondition6.Hash.plan | 145 ++ ...tComplexJoinCondition6.Hash_NoBroadcast.plan | 145 ++ .../testComplexJoinCondition6.Sort.plan | 145 ++ ...tComplexJoinCondition6.Sort_NoBroadcast.plan | 145 ++ .../testComplexJoinCondition6.result | 56 + .../testComplexJoinCondition7.Hash.plan | 145 ++ ...tComplexJoinCondition7.Hash_NoBroadcast.plan | 145 ++ .../testComplexJoinCondition7.Sort.plan | 145 ++ ...tComplexJoinCondition7.Sort_NoBroadcast.plan | 145 ++ .../testComplexJoinCondition7.result | 56 + .../testJoinWithJson2.result | 5 + .../testJoinWithMultipleJoinQual2.Hash.plan | 116 ++ ...nWithMultipleJoinQual2.Hash_NoBroadcast.plan | 142 ++ .../testJoinWithMultipleJoinQual2.Sort.plan | 116 ++ ...nWithMultipleJoinQual2.Sort_NoBroadcast.plan | 142 ++ .../testJoinWithMultipleJoinQual2.result | 3 + .../testJoinWithMultipleJoinQual3.Hash.plan | 138 ++ ...nWithMultipleJoinQual3.Hash_NoBroadcast.plan | 190 +++ .../testJoinWithMultipleJoinQual3.Sort.plan | 138 ++ ...nWithMultipleJoinQual3.Sort_NoBroadcast.plan | 190 +++ .../testJoinWithMultipleJoinQual3.result | 5 + .../testJoinWithMultipleJoinQual4.Hash.plan | 142 ++ ...nWithMultipleJoinQual4.Hash_NoBroadcast.plan | 194 +++ .../testJoinWithMultipleJoinQual4.Sort.plan | 142 ++ ...nWithMultipleJoinQual4.Sort_NoBroadcast.plan | 194 +++ .../testJoinWithMultipleJoinQual4.result | 4 + .../testBroadcastBasicJoin.result | 99 -- ...estBroadcastMultiColumnPartitionTable.result | 5 - ...castMultiColumnPartitionTableInFilter.result | 0 .../testBroadcastPartitionTable.result | 5 - .../testBroadcastSubquery.result | 15 - .../testBroadcastSubquery2.result | 3 - .../testBroadcastTwoPartJoin.result | 15 - .../TestJoinBroadcast/testCrossJoin.result | 127 -- .../testCrossJoinAndCaseWhen.result | 27 - .../testCrossJoinWithAsterisk1.result | 27 - .../testCrossJoinWithAsterisk2.result | 27 - .../testCrossJoinWithAsterisk3.result | 27 - .../testCrossJoinWithAsterisk4.result | 27 - .../testCrossJoinWithEmptyTable1.result | 2 - .../TestJoinBroadcast/testFullOuterJoin1.result | 7 - .../testFullOuterJoinWithEmptyTable1.result | 7 - .../testInnerJoinWithEmptyTable.result | 2 - .../testJoinCoReferredEvals1.result | 27 - ...testJoinCoReferredEvalsWithSameExprs1.result | 22 - ...testJoinCoReferredEvalsWithSameExprs2.result | 22 - .../testJoinOnMultipleDatabases.result | 5 - .../TestJoinBroadcast/testLeftOuterJoin1.result | 7 - .../TestJoinBroadcast/testLeftOuterJoin2.result | 99 -- .../TestJoinBroadcast/testLeftOuterJoin3.result | 174 --- .../testLeftOuterJoinWithConstantExpr1.result | 7 - .../testLeftOuterJoinWithConstantExpr2.result | 7 - .../testLeftOuterJoinWithConstantExpr3.result | 7 - .../testLeftOuterJoinWithEmptyTable1.result | 7 - .../testLeftOuterJoinWithEmptyTable2.result | 7 - .../testLeftOuterJoinWithEmptyTable3.result | 7 - .../testLeftOuterJoinWithEmptyTable4.result | 4 - ...ltipleBroadcastDataFileWithZeroLength.result | 2 - ...tipleBroadcastDataFileWithZeroLength2.result | 399 ------ ...tionedBroadcastDataFileWithZeroLength.result | 102 -- ...ionedBroadcastDataFileWithZeroLength2.result | 399 ------ .../testOuterJoinAndCaseWhen1.result | 7 - .../testRightOuterJoin1.result | 7 - .../testRightOuterJoinWithEmptyTable1.result | 7 - .../TestJoinBroadcast/testTPCHQ2Join.result | 5 - .../testWhereClauseJoin1.result | 27 - .../testWhereClauseJoin2.result | 27 - .../testWhereClauseJoin3.result | 27 - .../testWhereClauseJoin4.result | 27 - .../testWhereClauseJoin5.result | 5 - .../selfJoinOfPartitionedTable.result | 2 +- .../testBroadcastPartitionTable.result | 5 + ...FilterPushDownPartitionColumnCaseWhen.result | 2 +- ...tionedBroadcastDataFileWithZeroLength.result | 7 + ...ionedBroadcastDataFileWithZeroLength2.result | 7 + .../testNoProjectionJoinQual.result | 2 +- .../testPartialFilterPushDown.result | 2 +- .../testPartialFilterPushDownOuterJoin.result | 2 +- .../testPartialFilterPushDownOuterJoin2.result | 2 +- ...estPartitionMultiplePartitionFilter.1.result | 2 + .../testPartitionTableJoinSmallTable.result | 2 +- .../testComplexJoinCondition1.result | 27 - .../testComplexJoinCondition2.result | 27 - .../testComplexJoinCondition3.result | 27 - .../testComplexJoinCondition4.result | 29 - .../testComplexJoinCondition5.result | 29 - .../testComplexJoinCondition6.result | 56 - .../testComplexJoinCondition7.result | 56 - .../testComplexJoinsWithCaseWhen.result | 27 - .../testComplexJoinsWithCaseWhen2.result | 27 - .../results/TestJoinQuery/testCrossJoin.result | 127 -- .../testCrossJoinWithAsterisk1.result | 27 - .../testCrossJoinWithAsterisk2.result | 27 - .../testCrossJoinWithAsterisk3.result | 27 - .../testCrossJoinWithAsterisk4.result | 27 - .../testCrossJoinWithEmptyTable1.result | 2 - ...rossJoinWithThetaJoinConditionInWhere.result | 12 - .../testDifferentTypesJoinCondition.result | 7 - .../TestJoinQuery/testFullOuterJoin1.result | 7 - .../testFullOuterJoinWithEmptyTable1.result | 7 - .../testInnerJoinAndCaseWhen.result | 27 - .../testInnerJoinWithEmptyTable.result | 2 - ...nnerJoinWithThetaJoinConditionInWhere.result | 7 - .../TestJoinQuery/testJoinAsterisk.result | 7 - .../testJoinCoReferredEvals1.result | 27 - ...testJoinCoReferredEvalsWithSameExprs1.result | 22 - ...testJoinCoReferredEvalsWithSameExprs2.result | 22 - .../testJoinFilterOfRowPreservedTable1.result | 15 - .../testJoinOnMultipleDatabases.result | 5 - .../testJoinOnMultipleDatabasesWithJson.result | 5 - .../TestJoinQuery/testJoinWithJson.result | 27 - .../TestJoinQuery/testJoinWithJson2.result | 5 - .../testJoinWithMultipleJoinQual1.result | 2 - .../testJoinWithMultipleJoinQual2.result | 3 - .../testJoinWithMultipleJoinQual3.result | 5 - .../testJoinWithMultipleJoinQual4.result | 4 - .../testJoinWithMultipleJoinTypes.result | 6 - .../testJoinWithOrPredicates.result | 4 - .../TestJoinQuery/testLeftOuterJoin1.result | 7 - .../testLeftOuterJoinWithConstantExpr1.result | 7 - .../testLeftOuterJoinWithConstantExpr2.result | 7 - .../testLeftOuterJoinWithConstantExpr3.result | 7 - .../testLeftOuterJoinWithConstantExpr4.result | 7 - .../testLeftOuterJoinWithConstantExpr5.result | 6 - .../testLeftOuterJoinWithEmptyTable1.result | 7 - .../testLeftOuterJoinWithEmptyTable2.result | 7 - .../testLeftOuterJoinWithEmptyTable3.result | 7 - .../testLeftOuterJoinWithEmptyTable4.result | 4 - .../testLeftOuterJoinWithEmptyTable5.result | 4 - .../testLeftOuterJoinWithNull1.result | 4 - .../testLeftOuterJoinWithNull2.result | 4 - .../testLeftOuterJoinWithNull3.result | 2 - ...uterJoinWithThetaJoinConditionInWhere.result | 4 - .../TestJoinQuery/testNaturalJoin.result | 27 - .../testOuterJoinAndCaseWhen1.result | 7 - .../TestJoinQuery/testRightOuterJoin1.result | 7 - .../testRightOuterJoinWithEmptyTable1.result | 7 - ...uterJoinWithThetaJoinConditionInWhere.result | 4 - .../results/TestJoinQuery/testTPCHQ2Join.result | 5 - .../TestJoinQuery/testWhereClauseJoin1.result | 27 - .../TestJoinQuery/testWhereClauseJoin2.result | 27 - .../TestJoinQuery/testWhereClauseJoin3.result | 27 - .../TestJoinQuery/testWhereClauseJoin4.result | 27 - .../TestJoinQuery/testWhereClauseJoin5.result | 5 - .../testComplexJoinsWithCaseWhen.Hash.plan | 98 ++ ...mplexJoinsWithCaseWhen.Hash_NoBroadcast.plan | 153 +++ .../testComplexJoinsWithCaseWhen.Sort.plan | 98 ++ ...mplexJoinsWithCaseWhen.Sort_NoBroadcast.plan | 153 +++ .../testComplexJoinsWithCaseWhen.result | 27 + .../testComplexJoinsWithCaseWhen2.Hash.plan | 138 ++ ...plexJoinsWithCaseWhen2.Hash_NoBroadcast.plan | 165 +++ .../testComplexJoinsWithCaseWhen2.Sort.plan | 138 ++ ...plexJoinsWithCaseWhen2.Sort_NoBroadcast.plan | 165 +++ .../testComplexJoinsWithCaseWhen2.result | 27 + .../testInnerAndOuterWithEmpty.1.Hash.plan | 75 ++ ...nerAndOuterWithEmpty.1.Hash_NoBroadcast.plan | 130 ++ .../testInnerAndOuterWithEmpty.1.Sort.plan | 75 ++ ...nerAndOuterWithEmpty.1.Sort_NoBroadcast.plan | 130 ++ .../testInnerAndOuterWithEmpty.1.result | 7 + .../testJoinWithMultipleJoinTypes.Hash.plan | 140 ++ ...nWithMultipleJoinTypes.Hash_NoBroadcast.plan | 140 ++ .../testJoinWithMultipleJoinTypes.Sort.plan | 140 ++ ...nWithMultipleJoinTypes.Sort_NoBroadcast.plan | 140 ++ .../testJoinWithMultipleJoinTypes.result | 6 + .../testFullOuterJoin1.Hash.plan | 79 ++ .../testFullOuterJoin1.Hash_NoBroadcast.plan | 105 ++ .../testFullOuterJoin1.Sort.plan | 79 ++ .../testFullOuterJoin1.Sort_NoBroadcast.plan | 105 ++ .../testFullOuterJoin1.result | 7 + .../testFullOuterJoinWithEmptyTable1.Hash.plan | 79 ++ ...terJoinWithEmptyTable1.Hash_NoBroadcast.plan | 105 ++ .../testFullOuterJoinWithEmptyTable1.Sort.plan | 79 ++ ...terJoinWithEmptyTable1.Sort_NoBroadcast.plan | 105 ++ .../testFullOuterJoinWithEmptyTable1.result | 7 + ...testJoinFilterOfRowPreservedTable1.Hash.plan | 78 ++ ...erOfRowPreservedTable1.Hash_NoBroadcast.plan | 105 ++ ...testJoinFilterOfRowPreservedTable1.Sort.plan | 78 ++ ...erOfRowPreservedTable1.Sort_NoBroadcast.plan | 105 ++ .../testJoinFilterOfRowPreservedTable1.result | 15 + .../testLeftOuterJoin1.Hash.plan | 78 ++ .../testLeftOuterJoin1.Hash_NoBroadcast.plan | 105 ++ .../testLeftOuterJoin1.Sort.plan | 78 ++ .../testLeftOuterJoin1.Sort_NoBroadcast.plan | 105 ++ .../testLeftOuterJoin1.result | 7 + .../testLeftOuterJoin2.Hash.plan | 91 ++ .../testLeftOuterJoin2.Hash_NoBroadcast.plan | 176 +++ .../testLeftOuterJoin2.Sort.plan | 91 ++ .../testLeftOuterJoin2.Sort_NoBroadcast.plan | 176 +++ .../testLeftOuterJoin2.result | 7 + .../testLeftOuterJoin3.Hash.plan | 129 ++ .../testLeftOuterJoin3.Hash_NoBroadcast.plan | 272 ++++ .../testLeftOuterJoin3.Sort.plan | 129 ++ .../testLeftOuterJoin3.Sort_NoBroadcast.plan | 272 ++++ .../testLeftOuterJoin3.result | 9 + ...tLeftOuterJoinLeftSideSmallTable.1.Hash.plan | 105 ++ ...inLeftSideSmallTable.1.Hash_NoBroadcast.plan | 105 ++ ...tLeftOuterJoinLeftSideSmallTable.1.Sort.plan | 105 ++ ...inLeftSideSmallTable.1.Sort_NoBroadcast.plan | 105 ++ ...testLeftOuterJoinLeftSideSmallTable.1.result | 7 + ...tOuterJoinPredicationCaseByCase1.1.Hash.plan | 72 + ...edicationCaseByCase1.1.Hash_NoBroadcast.plan | 128 ++ ...tOuterJoinPredicationCaseByCase1.1.Sort.plan | 72 + ...edicationCaseByCase1.1.Sort_NoBroadcast.plan | 128 ++ ...LeftOuterJoinPredicationCaseByCase1.1.result | 7 + ...tOuterJoinPredicationCaseByCase2.1.Hash.plan | 91 ++ ...edicationCaseByCase2.1.Hash_NoBroadcast.plan | 176 +++ ...tOuterJoinPredicationCaseByCase2.1.Sort.plan | 91 ++ ...edicationCaseByCase2.1.Sort_NoBroadcast.plan | 176 +++ ...LeftOuterJoinPredicationCaseByCase2.1.result | 4 + ...uterJoinPredicationCaseByCase2_1.1.Hash.plan | 98 ++ ...icationCaseByCase2_1.1.Hash_NoBroadcast.plan | 182 +++ ...uterJoinPredicationCaseByCase2_1.1.Sort.plan | 98 ++ ...icationCaseByCase2_1.1.Sort_NoBroadcast.plan | 182 +++ ...ftOuterJoinPredicationCaseByCase2_1.1.result | 5 + ...tOuterJoinPredicationCaseByCase3.1.Hash.plan | 72 + ...edicationCaseByCase3.1.Hash_NoBroadcast.plan | 128 ++ ...tOuterJoinPredicationCaseByCase3.1.Sort.plan | 72 + ...edicationCaseByCase3.1.Sort_NoBroadcast.plan | 128 ++ ...LeftOuterJoinPredicationCaseByCase3.1.result | 7 + ...tOuterJoinPredicationCaseByCase4.1.Hash.plan | 74 ++ ...edicationCaseByCase4.1.Hash_NoBroadcast.plan | 130 ++ ...tOuterJoinPredicationCaseByCase4.1.Sort.plan | 74 ++ ...edicationCaseByCase4.1.Sort_NoBroadcast.plan | 130 ++ ...LeftOuterJoinPredicationCaseByCase4.1.result | 7 + ...tOuterJoinPredicationCaseByCase5.1.Hash.plan | 74 ++ ...edicationCaseByCase5.1.Hash_NoBroadcast.plan | 130 ++ ...tOuterJoinPredicationCaseByCase5.1.Sort.plan | 74 ++ ...edicationCaseByCase5.1.Sort_NoBroadcast.plan | 130 ++ ...LeftOuterJoinPredicationCaseByCase5.1.result | 6 + ...tOuterJoinPredicationCaseByCase6.1.Hash.plan | 76 ++ ...edicationCaseByCase6.1.Hash_NoBroadcast.plan | 132 ++ ...tOuterJoinPredicationCaseByCase6.1.Sort.plan | 76 ++ ...edicationCaseByCase6.1.Sort_NoBroadcast.plan | 132 ++ ...LeftOuterJoinPredicationCaseByCase6.1.result | 3 + ...testLeftOuterJoinWithConstantExpr1.Hash.plan | 86 ++ ...rJoinWithConstantExpr1.Hash_NoBroadcast.plan | 113 ++ ...testLeftOuterJoinWithConstantExpr1.Sort.plan | 86 ++ ...rJoinWithConstantExpr1.Sort_NoBroadcast.plan | 113 ++ .../testLeftOuterJoinWithConstantExpr1.result | 7 + ...testLeftOuterJoinWithConstantExpr4.Hash.plan | 63 + ...rJoinWithConstantExpr4.Hash_NoBroadcast.plan | 90 ++ ...testLeftOuterJoinWithConstantExpr4.Sort.plan | 63 + ...rJoinWithConstantExpr4.Sort_NoBroadcast.plan | 90 ++ .../testLeftOuterJoinWithConstantExpr4.result | 7 + ...testLeftOuterJoinWithConstantExpr5.Hash.plan | 65 + ...rJoinWithConstantExpr5.Hash_NoBroadcast.plan | 92 ++ ...testLeftOuterJoinWithConstantExpr5.Sort.plan | 65 + ...rJoinWithConstantExpr5.Sort_NoBroadcast.plan | 92 ++ .../testLeftOuterJoinWithConstantExpr5.result | 6 + .../testLeftOuterJoinWithEmptyTable1.Hash.plan | 78 ++ ...terJoinWithEmptyTable1.Hash_NoBroadcast.plan | 105 ++ .../testLeftOuterJoinWithEmptyTable1.Sort.plan | 78 ++ ...terJoinWithEmptyTable1.Sort_NoBroadcast.plan | 105 ++ .../testLeftOuterJoinWithEmptyTable1.result | 7 + .../testLeftOuterJoinWithEmptyTable2.Hash.plan | 109 ++ ...terJoinWithEmptyTable2.Hash_NoBroadcast.plan | 136 ++ .../testLeftOuterJoinWithEmptyTable2.Sort.plan | 109 ++ ...terJoinWithEmptyTable2.Sort_NoBroadcast.plan | 136 ++ .../testLeftOuterJoinWithEmptyTable2.result | 7 + .../testLeftOuterJoinWithEmptyTable3.Hash.plan | 160 +++ ...terJoinWithEmptyTable3.Hash_NoBroadcast.plan | 187 +++ .../testLeftOuterJoinWithEmptyTable3.Sort.plan | 160 +++ ...terJoinWithEmptyTable3.Sort_NoBroadcast.plan | 187 +++ .../testLeftOuterJoinWithEmptyTable3.result | 7 + .../testLeftOuterJoinWithEmptyTable4.Hash.plan | 160 +++ ...terJoinWithEmptyTable4.Hash_NoBroadcast.plan | 214 +++ .../testLeftOuterJoinWithEmptyTable4.Sort.plan | 160 +++ ...terJoinWithEmptyTable4.Sort_NoBroadcast.plan | 214 +++ .../testLeftOuterJoinWithEmptyTable4.result | 4 + .../testLeftOuterJoinWithEmptyTable5.Hash.plan | 109 ++ ...terJoinWithEmptyTable5.Hash_NoBroadcast.plan | 136 ++ .../testLeftOuterJoinWithEmptyTable5.Sort.plan | 109 ++ ...terJoinWithEmptyTable5.Sort_NoBroadcast.plan | 136 ++ .../testLeftOuterJoinWithEmptyTable5.result | 4 + .../testLeftOuterJoinWithNull1.Hash.plan | 82 ++ ...LeftOuterJoinWithNull1.Hash_NoBroadcast.plan | 109 ++ .../testLeftOuterJoinWithNull1.Sort.plan | 82 ++ ...LeftOuterJoinWithNull1.Sort_NoBroadcast.plan | 109 ++ .../testLeftOuterJoinWithNull1.result | 4 + .../testLeftOuterJoinWithNull2.Hash.plan | 82 ++ ...LeftOuterJoinWithNull2.Hash_NoBroadcast.plan | 109 ++ .../testLeftOuterJoinWithNull2.Sort.plan | 82 ++ ...LeftOuterJoinWithNull2.Sort_NoBroadcast.plan | 109 ++ .../testLeftOuterJoinWithNull2.result | 4 + .../testLeftOuterJoinWithNull3.Hash.plan | 82 ++ ...LeftOuterJoinWithNull3.Hash_NoBroadcast.plan | 109 ++ .../testLeftOuterJoinWithNull3.Sort.plan | 82 ++ ...LeftOuterJoinWithNull3.Sort_NoBroadcast.plan | 109 ++ .../testLeftOuterJoinWithNull3.result | 2 + ...rJoinWithThetaJoinConditionInWhere.Hash.plan | 57 + ...taJoinConditionInWhere.Hash_NoBroadcast.plan | 84 ++ ...rJoinWithThetaJoinConditionInWhere.Sort.plan | 57 + ...taJoinConditionInWhere.Sort_NoBroadcast.plan | 84 ++ ...uterJoinWithThetaJoinConditionInWhere.result | 4 + .../testLeftOuterWithEmptyTable.1.Hash.plan | 53 + ...tOuterWithEmptyTable.1.Hash_NoBroadcast.plan | 80 ++ .../testLeftOuterWithEmptyTable.1.Sort.plan | 53 + ...tOuterWithEmptyTable.1.Sort_NoBroadcast.plan | 80 ++ .../testLeftOuterWithEmptyTable.1.result | 7 + ...pleBroadcastDataFileWithZeroLength.Hash.plan | 57 + ...DataFileWithZeroLength.Hash_NoBroadcast.plan | 84 ++ ...pleBroadcastDataFileWithZeroLength.Sort.plan | 57 + ...DataFileWithZeroLength.Sort_NoBroadcast.plan | 84 ++ ...ltipleBroadcastDataFileWithZeroLength.result | 2 + ...leBroadcastDataFileWithZeroLength2.Hash.plan | 76 ++ ...ataFileWithZeroLength2.Hash_NoBroadcast.plan | 132 ++ ...leBroadcastDataFileWithZeroLength2.Sort.plan | 76 ++ ...ataFileWithZeroLength2.Sort_NoBroadcast.plan | 132 ++ ...tipleBroadcastDataFileWithZeroLength2.result | 7 + .../testOuterJoinAndCaseWhen1.Hash.plan | 97 ++ ...tOuterJoinAndCaseWhen1.Hash_NoBroadcast.plan | 153 +++ .../testOuterJoinAndCaseWhen1.Sort.plan | 97 ++ ...tOuterJoinAndCaseWhen1.Sort_NoBroadcast.plan | 153 +++ .../testOuterJoinAndCaseWhen1.result | 7 + .../testRightOuterJoin1.Hash.plan | 78 ++ .../testRightOuterJoin1.Hash_NoBroadcast.plan | 105 ++ .../testRightOuterJoin1.Sort.plan | 78 ++ .../testRightOuterJoin1.Sort_NoBroadcast.plan | 105 ++ .../testRightOuterJoin1.result | 7 + .../testRightOuterJoinWithEmptyTable1.Hash.plan | 78 ++ ...terJoinWithEmptyTable1.Hash_NoBroadcast.plan | 105 ++ .../testRightOuterJoinWithEmptyTable1.Sort.plan | 78 ++ ...terJoinWithEmptyTable1.Sort_NoBroadcast.plan | 105 ++ .../testRightOuterJoinWithEmptyTable1.result | 7 + ...rJoinWithThetaJoinConditionInWhere.Hash.plan | 57 + ...taJoinConditionInWhere.Hash_NoBroadcast.plan | 84 ++ ...rJoinWithThetaJoinConditionInWhere.Sort.plan | 57 + ...taJoinConditionInWhere.Sort_NoBroadcast.plan | 84 ++ ...uterJoinWithThetaJoinConditionInWhere.result | 4 + ...terJoinWithEmptyIntermediateData.1.Hash.plan | 108 ++ ...mptyIntermediateData.1.Hash_NoBroadcast.plan | 108 ++ ...terJoinWithEmptyIntermediateData.1.Sort.plan | 108 ++ ...mptyIntermediateData.1.Sort_NoBroadcast.plan | 108 ++ ...lOuterJoinWithEmptyIntermediateData.1.result | 2 + .../testJoinWithDifferentShuffleKey.1.Hash.plan | 199 +++ ...hDifferentShuffleKey.1.Hash_NoBroadcast.plan | 199 +++ .../testJoinWithDifferentShuffleKey.1.Sort.plan | 199 +++ ...hDifferentShuffleKey.1.Sort_NoBroadcast.plan | 199 +++ .../testJoinWithDifferentShuffleKey.1.result | 3 + ...testLeftOuterJoinWithConstantExpr2.Hash.plan | 125 ++ ...rJoinWithConstantExpr2.Hash_NoBroadcast.plan | 125 ++ ...testLeftOuterJoinWithConstantExpr2.Sort.plan | 125 ++ ...rJoinWithConstantExpr2.Sort_NoBroadcast.plan | 125 ++ .../testLeftOuterJoinWithConstantExpr2.result | 7 + ...testLeftOuterJoinWithConstantExpr3.Hash.plan | 156 +++ ...rJoinWithConstantExpr3.Hash_NoBroadcast.plan | 156 +++ ...testLeftOuterJoinWithConstantExpr3.Sort.plan | 156 +++ ...rJoinWithConstantExpr3.Sort_NoBroadcast.plan | 156 +++ .../testLeftOuterJoinWithConstantExpr3.result | 7 + ...tLeftOuterJoinWithEmptySubquery1.1.Hash.plan | 141 ++ ...inWithEmptySubquery1.1.Hash_NoBroadcast.plan | 167 +++ ...tLeftOuterJoinWithEmptySubquery1.1.Sort.plan | 141 ++ ...inWithEmptySubquery1.1.Sort_NoBroadcast.plan | 167 +++ ...testLeftOuterJoinWithEmptySubquery1.1.result | 7 + ...tLeftOuterJoinWithEmptySubquery2.1.Hash.plan | 116 ++ ...inWithEmptySubquery2.1.Hash_NoBroadcast.plan | 142 ++ ...tLeftOuterJoinWithEmptySubquery2.1.Sort.plan | 116 ++ ...inWithEmptySubquery2.1.Sort_NoBroadcast.plan | 142 ++ ...testLeftOuterJoinWithEmptySubquery2.1.result | 2 + .../testExplainSelectPhysical.1.result | 4 +- .../testExplainSelectPhysical.2.result | 42 +- .../testExplainSelectPhysical.3.result | 4 +- .../testSelectOnSessionTable.result | 3 + tajo-dist/src/main/bin/tajo | 4 + .../plan/exprrewrite/rules/ConstantFolding.java | 10 +- .../org/apache/tajo/storage/MergeScanner.java | 2 +- .../org/apache/tajo/storage/StorageManager.java | 389 ------ .../org/apache/tajo/storage/TableSpace.java | 77 -- .../apache/tajo/storage/TableSpaceManager.java | 30 +- .../org/apache/tajo/storage/Tablespace.java | 375 ++++++ .../src/main/resources/storage-default.xml | 4 +- .../src/test/resources/storage-default.xml | 4 +- .../tajo/storage/hbase/HBasePutAppender.java | 4 +- .../apache/tajo/storage/hbase/HBaseScanner.java | 4 +- .../tajo/storage/hbase/HBaseStorageManager.java | 1148 ---------------- .../tajo/storage/hbase/HBaseTablespace.java | 1147 ++++++++++++++++ .../storage/hbase/TestHBaseStorageManager.java | 4 +- .../org/apache/tajo/storage/FileAppender.java | 2 +- .../apache/tajo/storage/FileStorageManager.java | 1251 ------------------ .../org/apache/tajo/storage/FileTablespace.java | 1227 +++++++++++++++++ .../storage/HashShuffleAppenderManager.java | 2 +- .../tajo/storage/TestCompressionStorages.java | 2 +- .../tajo/storage/TestFileStorageManager.java | 10 +- .../apache/tajo/storage/TestFileSystems.java | 4 +- .../apache/tajo/storage/TestMergeScanner.java | 2 +- .../org/apache/tajo/storage/TestStorages.java | 28 +- .../apache/tajo/storage/index/TestBSTIndex.java | 20 +- .../index/TestSingleCSVFileBSTIndex.java | 4 +- .../src/test/resources/storage-default.xml | 4 +- 744 files changed, 46771 insertions(+), 10306 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/CHANGES ---------------------------------------------------------------------- diff --cc CHANGES index b2b457c,f1b7e6e..bad7753 --- a/CHANGES +++ b/CHANGES @@@ -128,10 -136,12 +136,16 @@@ Release 0.11.0 - unrelease BUG FIXES + TAJO-1608: Fix test failure in index_support branch. (jihoon) + + TAJO-1594: Catalog schema is invalid for some databases. (jihoon) + + TAJO-1620: random() in an SQL should generate RANDOM numbers. + (Contributed by Jongyoung Park, Committed by jihoon) + + TAJO-1558: HBASE_LIB/hbase-server-*.jar should be included in the CLASSPATH. + (Contributed by Jongyoung Park, Committed by jaehwa) + TAJO-1605: Fix master build failure on jdk 1.6. (jinho) TAJO-1485: Datum 'Char' returned only 1byte. http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java ---------------------------------------------------------------------- diff --cc tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java index 2f46026,0252051..3d09eb1 --- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java +++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java @@@ -46,12 -47,8 +46,12 @@@ import org.apache.tajo.ipc.TajoWorkerPr import org.apache.tajo.ipc.TajoWorkerProtocol.DistinctGroupbyEnforcer.SortSpecArray; import org.apache.tajo.plan.LogicalPlan; import org.apache.tajo.plan.logical.*; +import org.apache.tajo.plan.serder.LogicalNodeDeserializer; import org.apache.tajo.plan.util.PlannerUtil; - import org.apache.tajo.storage.FileStorageManager; -import org.apache.tajo.storage.*; ++import org.apache.tajo.storage.FileTablespace; +import org.apache.tajo.storage.StorageConstants; - import org.apache.tajo.storage.StorageManager; +import org.apache.tajo.storage.TableSpaceManager; ++import org.apache.tajo.storage.Tablespace; import org.apache.tajo.storage.fragment.FileFragment; import org.apache.tajo.storage.fragment.Fragment; import org.apache.tajo.storage.fragment.FragmentConvertor; http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java ---------------------------------------------------------------------- diff --cc tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java index fc9212c,2cd585f..422d034 --- a/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java +++ b/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java @@@ -53,10 -53,9 +53,10 @@@ import org.apache.tajo.plan.verifier.Lo import org.apache.tajo.plan.verifier.PreLogicalPlanVerifier; import org.apache.tajo.plan.verifier.VerificationState; import org.apache.tajo.plan.verifier.VerifyException; - import org.apache.tajo.storage.StorageManager; + import org.apache.tajo.storage.Tablespace; import org.apache.tajo.storage.TableSpaceManager; import org.apache.tajo.util.CommonTestingUtil; +import org.apache.tajo.util.IPCUtil; import java.io.IOException; import java.sql.SQLException; http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java ---------------------------------------------------------------------- diff --cc tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java index 1150007,6c1399e..3370893 --- a/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java +++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java @@@ -22,13 -23,10 +23,14 @@@ import com.google.protobuf.ByteString import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.tajo.QueryId; + import org.apache.tajo.SessionVars; import org.apache.tajo.TaskAttemptId; import org.apache.tajo.TaskId; -import org.apache.tajo.catalog.*; +import org.apache.tajo.catalog.CatalogUtil; +import org.apache.tajo.catalog.Column; +import org.apache.tajo.catalog.Schema; +import org.apache.tajo.catalog.TableDesc; +import org.apache.tajo.catalog.TableMeta; import org.apache.tajo.catalog.proto.CatalogProtos.*; import org.apache.tajo.catalog.statistics.TableStats; import org.apache.tajo.common.TajoDataTypes.DataType; http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java ---------------------------------------------------------------------- diff --cc tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java index 640ec60,a48f0a0..8441922 --- a/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java +++ b/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java @@@ -50,12 -44,18 +50,12 @@@ import org.apache.tajo.ipc.TajoWorkerPr import org.apache.tajo.master.TajoContainerProxy; import org.apache.tajo.master.event.*; import org.apache.tajo.master.rm.TajoWorkerResourceManager; -import org.apache.tajo.plan.LogicalOptimizer; -import org.apache.tajo.plan.LogicalPlan; -import org.apache.tajo.plan.LogicalPlanner; import org.apache.tajo.plan.logical.LogicalNode; -import org.apache.tajo.plan.logical.LogicalRootNode; import org.apache.tajo.plan.logical.NodeType; import org.apache.tajo.plan.logical.ScanNode; -import org.apache.tajo.plan.rewrite.LogicalPlanRewriteRule; -import org.apache.tajo.plan.util.PlannerUtil; import org.apache.tajo.plan.verifier.VerifyException; import org.apache.tajo.session.Session; - import org.apache.tajo.storage.StorageManager; + import org.apache.tajo.storage.Tablespace; import org.apache.tajo.storage.StorageProperty; import org.apache.tajo.storage.StorageUtil; import org.apache.tajo.storage.TableSpaceManager; http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-core/src/main/java/org/apache/tajo/worker/Task.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-core/src/test/java/org/apache/tajo/QueryTestCaseBase.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java ---------------------------------------------------------------------- diff --cc tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java index 0b12be1,7f92667..82c91a1 --- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java +++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java @@@ -971,19 -970,14 +971,19 @@@ public class TestPhysicalPlanner } public final String [] createIndexStmt = { - "create index idx_employee on employee using bst (name null first, empId desc)" + "create index idx_employee on employee using TWO_LEVEL_BIN_TREE (name null first, empId desc)" }; - //@Test + @Test public final void testCreateIndex() throws IOException, PlanningException { - FileFragment[] frags = FileStorageManager.splitNG(conf, "default.employee", employee.getMeta(), + FileFragment[] frags = FileTablespace.splitNG(conf, "default.employee", employee.getMeta(), new Path(employee.getPath()), Integer.MAX_VALUE); Path workDir = CommonTestingUtil.getTestDir(TajoTestingCluster.DEFAULT_TEST_DIRECTORY + "/testCreateIndex"); + Path indexPath = StorageUtil.concatPath(TajoConf.getWarehouseDir(conf), "default/idx_employee"); + if (sm.getFileSystem().exists(indexPath)) { + sm.getFileSystem().delete(indexPath, true); + } + TaskAttemptContext ctx = new TaskAttemptContext(new QueryContext(conf), LocalTajoTestingUtility.newTaskAttemptId(masterPlan), new FileFragment[] {frags[0]}, workDir); http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestSortExec.java ---------------------------------------------------------------------- diff --cc tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestSortExec.java index a893798,6e0aa8e..eb2c03d --- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestSortExec.java +++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestSortExec.java @@@ -112,9 -110,9 +112,9 @@@ public class TestSortExec @Test public final void testNext() throws IOException, PlanningException { - FileFragment[] frags = FileStorageManager.splitNG(conf, "default.employee", employeeMeta, tablePath, Integer.MAX_VALUE); + FileFragment[] frags = FileTablespace.splitNG(conf, "default.employee", employeeMeta, tablePath, Integer.MAX_VALUE); Path workDir = CommonTestingUtil.getTestDir(TajoTestingCluster.DEFAULT_TEST_DIRECTORY + "/TestSortExec"); - TaskAttemptContext ctx = new TaskAttemptContext(new QueryContext(conf), + TaskAttemptContext ctx = new TaskAttemptContext(queryContext, LocalTajoTestingUtility .newTaskAttemptId(), new FileFragment[] { frags[0] }, workDir); ctx.setEnforcer(new Enforcer()); http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-core/src/test/java/org/apache/tajo/master/TestExecutionBlockCursor.java ---------------------------------------------------------------------- diff --cc tajo-core/src/test/java/org/apache/tajo/master/TestExecutionBlockCursor.java index 35cd612,0a473b5..948ba4e --- a/tajo-core/src/test/java/org/apache/tajo/master/TestExecutionBlockCursor.java +++ b/tajo-core/src/test/java/org/apache/tajo/master/TestExecutionBlockCursor.java @@@ -80,9 -80,9 +80,9 @@@ public class TestExecutionBlockCursor analyzer = new SQLAnalyzer(); logicalPlanner = new LogicalPlanner(catalog); - optimizer = new LogicalOptimizer(conf); + optimizer = new LogicalOptimizer(conf, catalog); - StorageManager sm = TableSpaceManager.getFileStorageManager(conf); + Tablespace sm = TableSpaceManager.getFileStorageManager(conf); dispatcher = new AsyncDispatcher(); dispatcher.init(conf); dispatcher.start(); http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TableSpaceManager.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/Tablespace.java ---------------------------------------------------------------------- diff --cc tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/Tablespace.java index 0000000,0626da8..c89f043 mode 000000,100644..100644 --- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/Tablespace.java +++ b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/Tablespace.java @@@ -1,0 -1,360 +1,375 @@@ + /** + * 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.storage; + + import org.apache.hadoop.fs.Path; + import org.apache.hadoop.fs.PathFilter; + import org.apache.tajo.ExecutionBlockId; + import org.apache.tajo.OverridableConf; + import org.apache.tajo.TajoConstants; + import org.apache.tajo.TaskAttemptId; + import org.apache.tajo.catalog.Schema; + import org.apache.tajo.catalog.SortSpec; + import org.apache.tajo.catalog.TableDesc; + import org.apache.tajo.catalog.TableMeta; + import org.apache.tajo.catalog.proto.CatalogProtos.FragmentProto; + import org.apache.tajo.conf.TajoConf; + import org.apache.tajo.conf.TajoConf.ConfVars; + import org.apache.tajo.plan.LogicalPlan; + import org.apache.tajo.plan.logical.LogicalNode; + import org.apache.tajo.plan.logical.ScanNode; + import org.apache.tajo.plan.rewrite.LogicalPlanRewriteRule; + import org.apache.tajo.storage.fragment.Fragment; + import org.apache.tajo.storage.fragment.FragmentConvertor; + + import java.io.IOException; + import java.util.List; + + /** + * Tablespace manages the functions of storing and reading data. + * Tablespace is a abstract class. + * For supporting such as HDFS, HBASE, a specific Tablespace should be implemented by inheriting this class. + * + */ + public abstract class Tablespace { + + public static final PathFilter hiddenFileFilter = new PathFilter() { + public boolean accept(Path p) { + String name = p.getName(); + return !name.startsWith("_") && !name.startsWith("."); + } + }; + + protected TajoConf conf; + protected String storeType; + + public Tablespace(String storeType) { + this.storeType = storeType; + } + + /** + * Initialize storage manager. + * @throws java.io.IOException + */ + protected abstract void storageInit() throws IOException; + + /** + * This method is called after executing "CREATE TABLE" statement. + * If a storage is a file based storage, a storage manager may create directory. + * + * @param tableDesc Table description which is created. + * @param ifNotExists Creates the table only when the table does not exist. + * @throws java.io.IOException + */ + public abstract void createTable(TableDesc tableDesc, boolean ifNotExists) throws IOException; + + /** + * This method is called after executing "DROP TABLE" statement with the 'PURGE' option + * which is the option to delete all the data. + * + * @param tableDesc + * @throws java.io.IOException + */ + public abstract void purgeTable(TableDesc tableDesc) throws IOException; + + /** + * Returns the splits that will serve as input for the scan tasks. The + * number of splits matches the number of regions in a table. + * @param fragmentId The table name or previous ExecutionBlockId + * @param tableDesc The table description for the target data. + * @param scanNode The logical node for scanning. + * @return The list of input fragments. + * @throws java.io.IOException + */ + public abstract List<Fragment> getSplits(String fragmentId, TableDesc tableDesc, + ScanNode scanNode) throws IOException; + + /** + * It returns the splits that will serve as input for the non-forward query scanner such as 'select * from table1'. + * The result list should be small. If there is many fragments for scanning, TajoMaster uses the paging navigation. + * @param tableDesc The table description for the target data. + * @param currentPage The current page number within the entire list. + * @param numFragments The number of fragments in the result. + * @return The list of input fragments. + * @throws java.io.IOException + */ + public abstract List<Fragment> getNonForwardSplit(TableDesc tableDesc, int currentPage, int numFragments) + throws IOException; + + /** + * It returns the storage property. + * @return The storage property + */ + public abstract StorageProperty getStorageProperty(); + + /** + * Release storage manager resource + */ + public abstract void close(); + + + /** + * It is called by a Repartitioner for range shuffling when the SortRangeType of SortNode is USING_STORAGE_MANAGER. + * In general Repartitioner determines the partition range using previous output statistics data. + * In the special cases, such as HBase Repartitioner uses the result of this method. + * + * @param queryContext The current query context which contains query properties. + * @param tableDesc The table description for the target data. + * @param inputSchema The input schema + * @param sortSpecs The sort specification that contains the sort column and sort order. + * @return The list of sort ranges. + * @throws java.io.IOException + */ + public abstract TupleRange[] getInsertSortRanges(OverridableConf queryContext, TableDesc tableDesc, + Schema inputSchema, SortSpec[] sortSpecs, + TupleRange dataRange) throws IOException; + + /** + * This method is called before executing 'INSERT' or 'CREATE TABLE as SELECT'. + * In general Tajo creates the target table after finishing the final sub-query of CATS. + * But In the special cases, such as HBase INSERT or CAST query uses the target table information. + * That kind of the storage should implements the logic related to creating table in this method. + * + * @param node The child node of the root node. + * @throws java.io.IOException + */ + public abstract void beforeInsertOrCATS(LogicalNode node) throws IOException; + + /** + * It is called when the query failed. + * Each storage manager should implement to be processed when the query fails in this method. + * + * @param node The child node of the root node. + * @throws java.io.IOException + */ + + /** + * Returns the current storage type. + * @return + */ + public String getStoreType() { + return storeType; + } + + /** + * Initialize Tablespace instance. It should be called before using. + * + * @param tajoConf + * @throws java.io.IOException + */ + public void init(TajoConf tajoConf) throws IOException { + this.conf = tajoConf; + storageInit(); + } + + /** + * Returns the splits that will serve as input for the scan tasks. The + * number of splits matches the number of regions in a table. + * + * @param fragmentId The table name or previous ExecutionBlockId + * @param tableDesc The table description for the target data. + * @return The list of input fragments. + * @throws java.io.IOException + */ + public List<Fragment> getSplits(String fragmentId, TableDesc tableDesc) throws IOException { + return getSplits(fragmentId, tableDesc, null); + } + + /** + * Returns Scanner instance. + * + * @param meta The table meta + * @param schema The input schema + * @param fragment The fragment for scanning + * @param target Columns which are selected. + * @return Scanner instance + * @throws java.io.IOException + */ + public Scanner getScanner(TableMeta meta, Schema schema, FragmentProto fragment, Schema target) throws IOException { + return getScanner(meta, schema, FragmentConvertor.convert(conf, fragment), target); + } + + /** + * Returns Scanner instance. + * + * @param meta The table meta + * @param schema The input schema + * @param fragment The fragment for scanning + * @return Scanner instance + * @throws java.io.IOException + */ + public Scanner getScanner(TableMeta meta, Schema schema, Fragment fragment) throws IOException { + return getScanner(meta, schema, fragment, schema); + } + + /** + * Returns Scanner instance. + * + * @param meta The table meta + * @param schema The input schema + * @param fragment The fragment for scanning + * @param target The output schema + * @return Scanner instance + * @throws java.io.IOException + */ + public Scanner getScanner(TableMeta meta, Schema schema, Fragment fragment, Schema target) throws IOException { + if (fragment.isEmpty()) { + Scanner scanner = new NullScanner(conf, schema, meta, fragment); + scanner.setTarget(target.toArray()); + + return scanner; + } + + Scanner scanner; + + Class<? extends Scanner> scannerClass = getScannerClass(meta.getStoreType()); + scanner = TableSpaceManager.newScannerInstance(scannerClass, conf, schema, meta, fragment); + scanner.setTarget(target.toArray()); + + return scanner; + } + + /** ++ * Returns Scanner instance. ++ * ++ * @param meta The table meta ++ * @param schema The input schema ++ * @param fragment The fragment for scanning ++ * @param target The output schema ++ * @return Scanner instance ++ * @throws IOException ++ */ ++ public synchronized SeekableScanner getSeekableScanner(TableMeta meta, Schema schema, FragmentProto fragment, ++ Schema target) throws IOException { ++ return (SeekableScanner)this.getScanner(meta, schema, fragment, target); ++ } ++ ++ /** + * Returns Appender instance. + * @param queryContext Query property. + * @param taskAttemptId Task id. + * @param meta Table meta data. + * @param schema Output schema. + * @param workDir Working directory + * @return Appender instance + * @throws java.io.IOException + */ + public Appender getAppender(OverridableConf queryContext, + TaskAttemptId taskAttemptId, TableMeta meta, Schema schema, Path workDir) + throws IOException { + Appender appender; + + Class<? extends Appender> appenderClass; + + String handlerName = meta.getStoreType().toLowerCase(); + appenderClass = TableSpaceManager.APPENDER_HANDLER_CACHE.get(handlerName); + if (appenderClass == null) { + appenderClass = conf.getClass( + String.format("tajo.storage.appender-handler.%s.class", handlerName), null, Appender.class); + TableSpaceManager.APPENDER_HANDLER_CACHE.put(handlerName, appenderClass); + } + + if (appenderClass == null) { + throw new IOException("Unknown Storage Type: " + meta.getStoreType()); + } + + appender = TableSpaceManager.newAppenderInstance(appenderClass, conf, taskAttemptId, meta, schema, workDir); + + return appender; + } + + /** + * Return the Scanner class for the StoreType that is defined in storage-default.xml. + * + * @param storeType store type + * @return The Scanner class + * @throws java.io.IOException + */ + public Class<? extends Scanner> getScannerClass(String storeType) throws IOException { + String handlerName = storeType.toLowerCase(); + Class<? extends Scanner> scannerClass = TableSpaceManager.SCANNER_HANDLER_CACHE.get(handlerName); + if (scannerClass == null) { + scannerClass = conf.getClass( + String.format("tajo.storage.scanner-handler.%s.class", handlerName), null, Scanner.class); + TableSpaceManager.SCANNER_HANDLER_CACHE.put(handlerName, scannerClass); + } + + if (scannerClass == null) { + throw new IOException("Unknown Storage Type: " + storeType); + } + + return scannerClass; + } + + /** + * Return length of the fragment. + * In the UNKNOWN_LENGTH case get FRAGMENT_ALTERNATIVE_UNKNOWN_LENGTH from the configuration. + * + * @param conf Tajo system property + * @param fragment Fragment + * @return + */ + public static long getFragmentLength(TajoConf conf, Fragment fragment) { + if (fragment.getLength() == TajoConstants.UNKNOWN_LENGTH) { + return conf.getLongVar(ConfVars.FRAGMENT_ALTERNATIVE_UNKNOWN_LENGTH); + } else { + return fragment.getLength(); + } + } + + public abstract void rollbackOutputCommit(LogicalNode node) throws IOException; + + /** + * It is called after making logical plan. Storage manager should verify the schema for inserting. + * + * @param tableDesc The table description of insert target. + * @param outSchema The output schema of select query for inserting. + * @throws java.io.IOException + */ + public abstract void verifyInsertTableSchema(TableDesc tableDesc, Schema outSchema) throws IOException; + + /** + * Returns the list of storage specified rewrite rules. + * This values are used by LogicalOptimizer. + * + * @param queryContext The query property + * @param tableDesc The description of the target table. + * @return The list of storage specified rewrite rules + * @throws java.io.IOException + */ + public abstract List<LogicalPlanRewriteRule> getRewriteRules(OverridableConf queryContext, TableDesc tableDesc) + throws IOException; + + /** + * Finalizes result data. Tajo stores result data in the staging directory. + * If the query fails, clean up the staging directory. + * Otherwise the query is successful, move to the final directory from the staging directory. + * + * @param queryContext The query property + * @param finalEbId The final execution block id + * @param plan The query plan + * @param schema The final output schema + * @param tableDesc The description of the target table + * @return Saved path + * @throws java.io.IOException + */ + public abstract Path commitOutputData(OverridableConf queryContext, ExecutionBlockId finalEbId, + LogicalPlan plan, Schema schema, + TableDesc tableDesc) throws IOException; + } http://git-wip-us.apache.org/repos/asf/tajo/blob/4d01fca9/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/index/TestBSTIndex.java ----------------------------------------------------------------------
