TAJO-1352: Improve the join order algorithm to consider missed cases of 
associative join operators. (jihoon)

Closes #593


Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/bedce3aa
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/bedce3aa
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/bedce3aa

Branch: refs/heads/master
Commit: bedce3aa0ef3a3d337e7c054c9db0e3af2e15cf4
Parents: a1a9d62
Author: Jihoon Son <[email protected]>
Authored: Mon Jul 20 10:03:39 2015 +0900
Committer: Jihoon Son <[email protected]>
Committed: Mon Jul 20 10:03:39 2015 +0900

----------------------------------------------------------------------
 CHANGES                                         |   3 +
 .../org/apache/tajo/catalog/SchemaUtil.java     |  60 +++
 .../main/java/org/apache/tajo/util/Pair.java    |   5 +
 tajo-core/pom.xml                               |   1 -
 .../apache/tajo/master/exec/DDLExecutor.java    |   5 +-
 .../exec/ExplainPlanPreprocessorForTest.java    |  87 +---
 .../tajo/engine/query/TestInnerJoinQuery.java   |   4 +-
 .../tajo/engine/query/TestOuterJoinQuery.java   |   4 -
 .../tajo/querymaster/TestTaskStatusUpdate.java  |  10 +-
 .../testBroadcastSubquery2.sql                  |   2 +-
 .../TestOuterJoinQuery/testLeftOuterJoin2.sql   |   2 +-
 .../testBroadcastTwoPartJoin.Hash.plan          |  16 +-
 ...stBroadcastTwoPartJoin.Hash_NoBroadcast.plan |  38 +-
 .../testBroadcastTwoPartJoin.Sort.plan          |  16 +-
 ...stBroadcastTwoPartJoin.Sort_NoBroadcast.plan |  38 +-
 .../testComplexJoinCondition1.Hash.plan         |  16 +-
 ...tComplexJoinCondition1.Hash_NoBroadcast.plan |  38 +-
 .../testComplexJoinCondition1.Sort.plan         |  16 +-
 ...tComplexJoinCondition1.Sort_NoBroadcast.plan |  38 +-
 .../testComplexJoinCondition2.Hash.plan         |  16 +-
 ...tComplexJoinCondition2.Hash_NoBroadcast.plan |  38 +-
 .../testComplexJoinCondition2.Sort.plan         |  16 +-
 ...tComplexJoinCondition2.Sort_NoBroadcast.plan |  38 +-
 .../testComplexJoinCondition3.Hash.plan         |  16 +-
 ...tComplexJoinCondition3.Hash_NoBroadcast.plan |  38 +-
 .../testComplexJoinCondition3.Sort.plan         |  16 +-
 ...tComplexJoinCondition3.Sort_NoBroadcast.plan |  38 +-
 .../testComplexJoinCondition4.Hash.plan         |  16 +-
 ...tComplexJoinCondition4.Hash_NoBroadcast.plan |  38 +-
 .../testComplexJoinCondition4.Sort.plan         |  16 +-
 ...tComplexJoinCondition4.Sort_NoBroadcast.plan |  38 +-
 .../testCrossJoin.2.Hash.plan                   |  16 +-
 .../testCrossJoin.2.Hash_NoBroadcast.plan       |  30 +-
 .../testCrossJoin.2.Sort.plan                   |  16 +-
 .../testCrossJoin.2.Sort_NoBroadcast.plan       |  30 +-
 .../TestInnerJoinQuery/testCrossJoin.3.result   |  32 +-
 .../TestInnerJoinQuery/testCrossJoin.5.result   |  36 +-
 .../testCrossJoinAndCaseWhen.Hash.plan          |  16 +-
 ...stCrossJoinAndCaseWhen.Hash_NoBroadcast.plan |  38 +-
 .../testCrossJoinAndCaseWhen.Sort.plan          |  16 +-
 ...stCrossJoinAndCaseWhen.Sort_NoBroadcast.plan |  38 +-
 .../testCrossJoinWithAsterisk1.Hash.plan        |  16 +-
 ...CrossJoinWithAsterisk1.Hash_NoBroadcast.plan |  30 +-
 .../testCrossJoinWithAsterisk1.Sort.plan        |  16 +-
 ...CrossJoinWithAsterisk1.Sort_NoBroadcast.plan |  30 +-
 .../testCrossJoinWithEmptyTable1.Hash.plan      |  16 +-
 ...ossJoinWithEmptyTable1.Hash_NoBroadcast.plan |  38 +-
 .../testCrossJoinWithEmptyTable1.Sort.plan      |  16 +-
 ...ossJoinWithEmptyTable1.Sort_NoBroadcast.plan |  38 +-
 ...sJoinWithThetaJoinConditionInWhere.Hash.plan |  16 +-
 ...taJoinConditionInWhere.Hash_NoBroadcast.plan |  30 +-
 ...sJoinWithThetaJoinConditionInWhere.Sort.plan |  16 +-
 ...taJoinConditionInWhere.Sort_NoBroadcast.plan |  30 +-
 .../testInnerJoinAndCaseWhen.Hash.plan          |  16 +-
 ...stInnerJoinAndCaseWhen.Hash_NoBroadcast.plan |  38 +-
 .../testInnerJoinAndCaseWhen.Sort.plan          |  16 +-
 ...stInnerJoinAndCaseWhen.Sort_NoBroadcast.plan |  38 +-
 .../testInnerJoinWithEmptyTable.Hash.plan       |  16 +-
 ...nnerJoinWithEmptyTable.Hash_NoBroadcast.plan |  38 +-
 .../testInnerJoinWithEmptyTable.Sort.plan       |  16 +-
 ...nnerJoinWithEmptyTable.Sort_NoBroadcast.plan |  38 +-
 .../testJoinAsterisk.Hash.plan                  |  16 +-
 .../testJoinAsterisk.Hash_NoBroadcast.plan      |  38 +-
 .../testJoinAsterisk.Sort.plan                  |  16 +-
 .../testJoinAsterisk.Sort_NoBroadcast.plan      |  38 +-
 .../testJoinCoReferredEvals1.Hash.plan          |  16 +-
 ...stJoinCoReferredEvals1.Hash_NoBroadcast.plan |  38 +-
 .../testJoinCoReferredEvals1.Sort.plan          |  16 +-
 ...stJoinCoReferredEvals1.Sort_NoBroadcast.plan |  38 +-
 .../testJoinOnMultipleDatabases.Hash.plan       | 110 ++--
 ...oinOnMultipleDatabases.Hash_NoBroadcast.plan | 182 +++----
 .../testJoinOnMultipleDatabases.Sort.plan       | 110 ++--
 ...oinOnMultipleDatabases.Sort_NoBroadcast.plan | 182 +++----
 .../testJoinWithMultipleJoinQual1.Hash.plan     |  16 +-
 ...nWithMultipleJoinQual1.Hash_NoBroadcast.plan |  38 +-
 .../testJoinWithMultipleJoinQual1.Sort.plan     |  16 +-
 ...nWithMultipleJoinQual1.Sort_NoBroadcast.plan |  38 +-
 .../TestInnerJoinQuery/testTPCHQ2Join.Hash.plan |  16 +-
 .../testTPCHQ2Join.Hash_NoBroadcast.plan        |  38 +-
 .../TestInnerJoinQuery/testTPCHQ2Join.Sort.plan |  16 +-
 .../testTPCHQ2Join.Sort_NoBroadcast.plan        |  38 +-
 .../testWhereClauseJoin1.Hash.plan              |  16 +-
 .../testWhereClauseJoin1.Hash_NoBroadcast.plan  |  38 +-
 .../testWhereClauseJoin1.Sort.plan              |  16 +-
 .../testWhereClauseJoin1.Sort_NoBroadcast.plan  |  38 +-
 .../testWhereClauseJoin2.Hash.plan              |  16 +-
 .../testWhereClauseJoin2.Hash_NoBroadcast.plan  |  38 +-
 .../testWhereClauseJoin2.Sort.plan              |  16 +-
 .../testWhereClauseJoin2.Sort_NoBroadcast.plan  |  38 +-
 .../testWhereClauseJoin3.Hash.plan              |  16 +-
 .../testWhereClauseJoin3.Hash_NoBroadcast.plan  |  38 +-
 .../testWhereClauseJoin3.Sort.plan              |  16 +-
 .../testWhereClauseJoin3.Sort_NoBroadcast.plan  |  38 +-
 .../testWhereClauseJoin5.Hash.plan              |  18 +-
 .../testWhereClauseJoin5.Hash_NoBroadcast.plan  |  38 +-
 .../testWhereClauseJoin5.Sort.plan              |  18 +-
 .../testWhereClauseJoin5.Sort_NoBroadcast.plan  |  38 +-
 .../testWhereClauseJoin6.Hash.plan              |  16 +-
 .../testWhereClauseJoin6.Hash_NoBroadcast.plan  |  38 +-
 .../testWhereClauseJoin6.Sort.plan              |  16 +-
 .../testWhereClauseJoin6.Sort_NoBroadcast.plan  |  38 +-
 .../testBroadcastSubquery.Hash.plan             |  84 +--
 .../testBroadcastSubquery.Hash_NoBroadcast.plan | 118 ++---
 .../testBroadcastSubquery.Sort.plan             |  84 +--
 .../testBroadcastSubquery.Sort_NoBroadcast.plan | 118 ++---
 .../testBroadcastSubquery2.Hash.plan            | 158 +++---
 ...testBroadcastSubquery2.Hash_NoBroadcast.plan | 276 +++++-----
 .../testBroadcastSubquery2.Sort.plan            | 158 +++---
 ...testBroadcastSubquery2.Sort_NoBroadcast.plan | 276 +++++-----
 .../testJoinWithMultipleJoinQual3.Hash.plan     |  58 +--
 ...nWithMultipleJoinQual3.Hash_NoBroadcast.plan | 134 ++---
 .../testJoinWithMultipleJoinQual3.Sort.plan     |  58 +--
 ...nWithMultipleJoinQual3.Sort_NoBroadcast.plan | 134 ++---
 .../testJoinWithMultipleJoinQual4.Hash.plan     |  58 +--
 ...nWithMultipleJoinQual4.Hash_NoBroadcast.plan | 134 ++---
 .../testJoinWithMultipleJoinQual4.Sort.plan     |  58 +--
 ...nWithMultipleJoinQual4.Sort_NoBroadcast.plan | 134 ++---
 .../TestJoinQuery/testWhereClauseJoin6.result   |   5 +
 .../testComplexJoinsWithCaseWhen.Hash.plan      |  16 +-
 ...mplexJoinsWithCaseWhen.Hash_NoBroadcast.plan |  38 +-
 .../testComplexJoinsWithCaseWhen.Sort.plan      |  16 +-
 ...mplexJoinsWithCaseWhen.Sort_NoBroadcast.plan |  38 +-
 .../testInnerAndOuterWithEmpty.1.Hash.plan      |  16 +-
 ...nerAndOuterWithEmpty.1.Hash_NoBroadcast.plan |  38 +-
 .../testInnerAndOuterWithEmpty.1.Sort.plan      |  16 +-
 ...nerAndOuterWithEmpty.1.Sort_NoBroadcast.plan |  38 +-
 .../testFullOuterJoin1.Hash.plan                |  38 +-
 .../testFullOuterJoin1.Hash_NoBroadcast.plan    |  38 +-
 .../testFullOuterJoin1.Sort.plan                |  38 +-
 .../testFullOuterJoin1.Sort_NoBroadcast.plan    |  38 +-
 ...lOuterJoinPredicationCaseByCase1.1.Hash.plan |  72 +--
 ...edicationCaseByCase1.1.Hash_NoBroadcast.plan |  72 +--
 ...lOuterJoinPredicationCaseByCase1.1.Sort.plan |  72 +--
 ...edicationCaseByCase1.1.Sort_NoBroadcast.plan |  72 +--
 .../testFullOuterJoinWithEmptyTable1.Hash.plan  |  38 +-
 ...terJoinWithEmptyTable1.Hash_NoBroadcast.plan |  38 +-
 .../testFullOuterJoinWithEmptyTable1.Sort.plan  |  38 +-
 ...terJoinWithEmptyTable1.Sort_NoBroadcast.plan |  38 +-
 .../testLeftOuterJoin3.Hash.plan                | 109 ++--
 .../testLeftOuterJoin3.Hash_NoBroadcast.plan    | 118 ++---
 .../testLeftOuterJoin3.Sort.plan                | 109 ++--
 .../testLeftOuterJoin3.Sort_NoBroadcast.plan    | 118 ++---
 ...tOuterJoinPredicationCaseByCase2.1.Hash.plan | 103 ++--
 ...edicationCaseByCase2.1.Hash_NoBroadcast.plan | 114 ++--
 ...tOuterJoinPredicationCaseByCase2.1.Sort.plan | 103 ++--
 ...edicationCaseByCase2.1.Sort_NoBroadcast.plan | 114 ++--
 .../testOuterJoinAndCaseWhen1.Hash.plan         | 109 ++--
 ...tOuterJoinAndCaseWhen1.Hash_NoBroadcast.plan | 118 ++---
 .../testOuterJoinAndCaseWhen1.Sort.plan         | 109 ++--
 ...tOuterJoinAndCaseWhen1.Sort_NoBroadcast.plan | 118 ++---
 ...terJoinWithEmptyIntermediateData.1.Hash.plan |  56 +-
 ...mptyIntermediateData.1.Hash_NoBroadcast.plan |  56 +-
 ...terJoinWithEmptyIntermediateData.1.Sort.plan |  56 +-
 ...mptyIntermediateData.1.Sort_NoBroadcast.plan |  56 +-
 .../testExplainSelectPhysical.2.result          |  32 +-
 .../results/TestTPCH/testQ2FourJoins.plan       |  38 +-
 .../resources/results/TestTPCH/testTPCHQ5.plan  | 142 ++---
 .../results/TestUnionQuery/testUnion12.result   |   3 +-
 .../results/TestUnionQuery/testUnion13.result   |   3 +-
 .../TestUnionQuery/testUnionAll12.result        |   3 +-
 .../TestUnionQuery/testUnionAll13.result        |   3 +-
 tajo-core/src/test/tpch/part.tbl                |   7 +-
 .../org/apache/tajo/plan/LogicalOptimizer.java  | 270 ++++++++--
 .../org/apache/tajo/plan/LogicalPlanner.java    |   2 +-
 .../GreedyHeuristicJoinOrderAlgorithm.java      | 518 +++++++++++--------
 .../apache/tajo/plan/joinorder/JoinEdge.java    |  70 +--
 .../apache/tajo/plan/joinorder/JoinGraph.java   | 150 +-----
 .../tajo/plan/joinorder/JoinGraphContext.java   | 137 +++++
 .../tajo/plan/joinorder/JoinOrderAlgorithm.java |  14 +-
 .../tajo/plan/joinorder/JoinOrderingUtil.java   | 313 +++++++++++
 .../apache/tajo/plan/joinorder/JoinVertex.java  |  32 ++
 .../plan/joinorder/JoinedRelationsVertex.java   | 125 +++++
 .../tajo/plan/joinorder/RelationVertex.java     |  76 +++
 .../org/apache/tajo/plan/logical/JoinNode.java  |  37 +-
 .../org/apache/tajo/plan/logical/JoinSpec.java  | 132 +++++
 .../org/apache/tajo/plan/logical/ScanNode.java  |   1 +
 .../plan/rewrite/rules/FilterPushDownRule.java  |   2 +-
 .../org/apache/tajo/plan/util/PlannerUtil.java  |   9 +-
 .../plan/visitor/BasicLogicalPlanVisitor.java   |   2 +
 179 files changed, 5387 insertions(+), 4212 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 9d3fbe2..890aecf 100644
--- a/CHANGES
+++ b/CHANGES
@@ -29,6 +29,9 @@ Release 0.11.0 - unreleased
 
   IMPROVEMENT
 
+    TAJO-1352: Improve the join order algorithm to consider missed cases of 
+    associative join operators. (jihoon)
+
     TAJO-1677: Remove unnecessary messages for the Travis CI build. (jaehwa)
 
     TAJO-1672: Removing rest api to create table

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/SchemaUtil.java
----------------------------------------------------------------------
diff --git 
a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/SchemaUtil.java
 
b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/SchemaUtil.java
index c6b2f69..44973db 100644
--- 
a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/SchemaUtil.java
+++ 
b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/SchemaUtil.java
@@ -161,4 +161,64 @@ public class SchemaUtil {
     DDLBuilder.buildSchema(sb, schema);
     return sb.toString();
   }
+
+  /**
+   * Calculate the row size from the given schema.
+   *
+   * @param schema input schema
+   * @return estimated row size in bytes
+   */
+  public static int estimateRowByteSizeWithSchema(Schema schema) {
+    int size = 0;
+    for (Column column : schema.fields) {
+      size += getColByteSize(column);
+    }
+    return size;
+  }
+
+  /**
+   * Return the size of the given column. For the variable-length columns, it 
returns a prefixed value.
+   *
+   * @param col input column
+   * @return column length in bytes
+   */
+  public static int getColByteSize(Column col) {
+    if (col.getDataType().getLength() > 0) {
+      return col.getDataType().getLength();
+    }
+    switch (col.getDataType().getType()) {
+      case BOOLEAN:
+        return 1;
+      case CHAR:
+        return 1;
+      case BIT:
+        return 1;
+      case INT2:
+        return 2;
+      case INT4:
+        return 4;
+      case INT8:
+        return 8;
+      case FLOAT4:
+        return 4;
+      case FLOAT8:
+        return 8;
+      case INET4:
+        return 4;
+      case INET6:
+        return 32;
+      case TEXT:
+        return 256;
+      case BLOB:
+        return 256;
+      case DATE:
+        return 4;
+      case TIME:
+        return 8;
+      case TIMESTAMP:
+        return 8;
+      default:
+        return 0;
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-common/src/main/java/org/apache/tajo/util/Pair.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/util/Pair.java 
b/tajo-common/src/main/java/org/apache/tajo/util/Pair.java
index e8852df..b78e5cf 100644
--- a/tajo-common/src/main/java/org/apache/tajo/util/Pair.java
+++ b/tajo-common/src/main/java/org/apache/tajo/util/Pair.java
@@ -29,6 +29,11 @@ public class Pair<T1, T2> {
     this.second = second;
   }
 
+  public void set(T1 first, T2 second) {
+    this.first = first;
+    this.second = second;
+  }
+
   public T1 getFirst() {
     return first;
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/pom.xml
----------------------------------------------------------------------
diff --git a/tajo-core/pom.xml b/tajo-core/pom.xml
index 4b3936e..33e37b6 100644
--- a/tajo-core/pom.xml
+++ b/tajo-core/pom.xml
@@ -78,7 +78,6 @@
             <exclude>src/test/resources/dataset/**</exclude>
             <exclude>src/test/resources/queries/**</exclude>
             <exclude>src/test/resources/results/**</exclude>
-            <exclude>src/test/resources/results/**</exclude>
             <exclude>src/main/resources/META-INF/services/*</exclude>
             <exclude>src/main/resources/webapps/static/js/*</exclude>
           </excludes>

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java 
b/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java
index af8d796..b9814eb 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java
@@ -39,9 +39,9 @@ import org.apache.tajo.master.TajoMaster;
 import org.apache.tajo.plan.LogicalPlan;
 import org.apache.tajo.plan.logical.*;
 import org.apache.tajo.plan.util.PlannerUtil;
-import org.apache.tajo.storage.TablespaceManager;
-import org.apache.tajo.storage.Tablespace;
 import org.apache.tajo.storage.StorageUtil;
+import org.apache.tajo.storage.Tablespace;
+import org.apache.tajo.storage.TablespaceManager;
 import org.apache.tajo.util.Pair;
 
 import java.io.IOException;
@@ -288,7 +288,6 @@ public class DDLExecutor {
    * @param purge     Remove all data if purge is true.
    */
   public boolean dropTable(QueryContext queryContext, String tableName, 
boolean ifExists, boolean purge) {
-    CatalogService catalog = context.getCatalog();
 
     String databaseName;
     String simpleTableName;

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/main/java/org/apache/tajo/master/exec/ExplainPlanPreprocessorForTest.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/main/java/org/apache/tajo/master/exec/ExplainPlanPreprocessorForTest.java
 
b/tajo-core/src/main/java/org/apache/tajo/master/exec/ExplainPlanPreprocessorForTest.java
index b8574fe..bba5c0b 100644
--- 
a/tajo-core/src/main/java/org/apache/tajo/master/exec/ExplainPlanPreprocessorForTest.java
+++ 
b/tajo-core/src/main/java/org/apache/tajo/master/exec/ExplainPlanPreprocessorForTest.java
@@ -27,11 +27,11 @@ import org.apache.tajo.plan.Target;
 import org.apache.tajo.plan.expr.AlgebraicUtil;
 import org.apache.tajo.plan.expr.EvalNode;
 import org.apache.tajo.plan.logical.*;
-import org.apache.tajo.plan.util.PlannerUtil;
 import org.apache.tajo.plan.visitor.BasicLogicalPlanVisitor;
-import org.apache.tajo.util.TUtil;
 
-import java.util.*;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Stack;
 
 /**
  * Tajo's logical planner can generate different shapes of logical plans for 
the same query,
@@ -41,26 +41,11 @@ import java.util.*;
 public class ExplainPlanPreprocessorForTest {
   private static final PlanShapeFixerContext shapeFixerContext = new 
PlanShapeFixerContext();
   private static final PlanShapeFixer shapeFixer = new PlanShapeFixer();
-  private static final PidCollectorContext collectorContext = new 
PidCollectorContext();
-  private static final JoinPidCollector joinPidCollector = new 
JoinPidCollector();
-  private static final PidReseterContext resetContext = new 
PidReseterContext();
-  private static final JoinPidReseter joinPidReseter = new JoinPidReseter();
 
   public void prepareTest(LogicalPlan plan) throws PlanningException {
     // Plan shape fixer
     shapeFixerContext.reset();
     shapeFixer.visit(shapeFixerContext, plan, plan.getRootBlock());
-
-    /*
-     * During join order optimization, new join nodes are created based on the 
chosen join order.
-     * So, they have different pids for each query execution.
-     * JoinPidCollector and JoinPidReseter reset the pids of join nodes.
-     */
-    collectorContext.reset();
-    joinPidCollector.visit(collectorContext, plan, plan.getRootBlock());
-
-    resetContext.reset(collectorContext.joinPids);
-    joinPidReseter.visit(resetContext, plan, plan.getRootBlock());
   }
 
   private static class PlanShapeFixerContext {
@@ -150,18 +135,6 @@ public class ExplainPlanPreprocessorForTest {
       int rightChildNum = context.childNumbers.pop();
       int leftChildNum = context.childNumbers.pop();
 
-      if (PlannerUtil.isCommutativeJoin(node.getJoinType())) {
-
-        if (leftChildNum < rightChildNum) {
-          swapChildren(node);
-        } else if (leftChildNum == rightChildNum) {
-          if 
(node.getLeftChild().getOutSchema().toString().compareTo(node.getRightChild().getOutSchema().toString())
 <
-              0) {
-            swapChildren(node);
-          }
-        }
-      }
-
       if (node.hasTargets()) {
         node.setTargets(sortTargets(node.getTargets()));
       }
@@ -200,12 +173,6 @@ public class ExplainPlanPreprocessorForTest {
       Arrays.sort(targets, targetComparator);
       return targets;
     }
-
-    private static void swapChildren(JoinNode node) {
-      LogicalNode tmpChild = node.getLeftChild();
-      node.setLeftChild(node.getRightChild());
-      node.setRightChild(tmpChild);
-    }
   }
 
   public static class ColumnComparator implements Comparator<Column> {
@@ -232,52 +199,4 @@ public class ExplainPlanPreprocessorForTest {
     }
   }
 
-  private static class PidCollectorContext {
-    List<Integer> joinPids = TUtil.newList();
-    public void reset() {
-      joinPids.clear();
-    }
-  }
-
-  /**
-   * {@link JoinPidCollector} collects the pids of all join
-   * nodes.
-   */
-  private static class JoinPidCollector extends 
BasicLogicalPlanVisitor<PidCollectorContext, LogicalNode> {
-
-    @Override
-    public LogicalNode visitJoin(PidCollectorContext context, LogicalPlan 
plan, LogicalPlan.QueryBlock block,
-                                 JoinNode node, Stack<LogicalNode> stack) 
throws PlanningException {
-      context.joinPids.add(node.getPID());
-      super.visitJoin(context, plan, block, node, stack);
-
-      return null;
-    }
-  }
-
-  private static class PidReseterContext {
-    List<Integer> joinPids;
-
-    public void reset(List<Integer> joinPids) {
-      this.joinPids = joinPids;
-      Collections.sort(this.joinPids);
-    }
-  }
-
-  /**
-   * {@link JoinPidReseter} resets pids of join nodes with the pids collected 
by {@link JoinPidCollector} in ascending
-   * order while traversing the query plan.
-   */
-  private static class JoinPidReseter extends 
BasicLogicalPlanVisitor<PidReseterContext, LogicalNode> {
-
-    @Override
-    public LogicalNode visitJoin(PidReseterContext context, LogicalPlan plan, 
LogicalPlan.QueryBlock block,
-                                 JoinNode node, Stack<LogicalNode> stack) 
throws PlanningException {
-      super.visitJoin(context, plan, block, node, stack);
-      node.setPID(context.joinPids.remove(0));
-      
-      return null;
-    }
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinQuery.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinQuery.java 
b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinQuery.java
index 6eedb42..a0b5d9a 100644
--- 
a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinQuery.java
+++ 
b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinQuery.java
@@ -50,7 +50,7 @@ public class TestInnerJoinQuery extends TestJoinQuery {
   }
 
   @Test
-  @Option(withExplain = true, withExplainGlobal = true, parameterized = true)
+  @Option(withExplain = true, withExplainGlobal = true, parameterized = true, 
sort = true)
   @SimpleTest(queries = {
       @QuerySpec("select n_name, r_name, n_regionkey, r_regionkey from nation, 
region order by n_name, r_name"),
       // testCrossJoinWithAsterisk
@@ -64,7 +64,7 @@ public class TestInnerJoinQuery extends TestJoinQuery {
   }
 
   @Test
-  @Option(withExplain = true, withExplainGlobal = true, parameterized = true)
+  @Option(withExplain = true, withExplainGlobal = true, parameterized = true, 
sort = true)
   @SimpleTest()
   public final void testCrossJoinWithThetaJoinConditionInWhere() throws 
Exception {
     runSimpleTests();

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/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
index 9d0e0bc..53dce3c 100644
--- 
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
@@ -348,7 +348,6 @@ public class TestOuterJoinQuery extends TestJoinQuery {
     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 = {
@@ -363,7 +362,6 @@ public class TestOuterJoinQuery extends TestJoinQuery {
     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 = {
@@ -382,7 +380,6 @@ public class TestOuterJoinQuery extends TestJoinQuery {
     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 = {
@@ -397,7 +394,6 @@ public class TestOuterJoinQuery extends TestJoinQuery {
     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, 
sort = true)
   @SimpleTest(queries = {

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/test/java/org/apache/tajo/querymaster/TestTaskStatusUpdate.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/querymaster/TestTaskStatusUpdate.java 
b/tajo-core/src/test/java/org/apache/tajo/querymaster/TestTaskStatusUpdate.java
index e237139..b468e37 100644
--- 
a/tajo-core/src/test/java/org/apache/tajo/querymaster/TestTaskStatusUpdate.java
+++ 
b/tajo-core/src/test/java/org/apache/tajo/querymaster/TestTaskStatusUpdate.java
@@ -95,15 +95,15 @@ public class TestTaskStatusUpdate extends QueryTestCaseBase 
{
       |-eb_1404143727281_0002_000005
          |-eb_1404143727281_0002_000004        (order by)
             |-eb_1404143727281_0002_000003     (join)
-               |-eb_1404143727281_0002_000002  (scan)
-               |-eb_1404143727281_0002_000001  (scan, filter)
+               |-eb_1404143727281_0002_000002  (scan, filter)
+               |-eb_1404143727281_0002_000001  (scan)
        */
       res = executeQuery();
 
       // in/out * stage(4)
-      long[] expectedNumRows = new long[]{2, 2, 5, 5, 7, 2, 2, 2};
-      long[] expectedNumBytes = new long[]{8, 34, 20, 75, 109, 34, 34, 18};
-      long[] expectedReadBytes = new long[]{8, 8, 20, 20, 109, 0, 34, 0};
+      long[] expectedNumRows = new long[]{5, 5, 2, 2, 7, 2, 2, 2};
+      long[] expectedNumBytes = new long[]{20, 75, 8, 34, 109, 34, 34, 18};
+      long[] expectedReadBytes = new long[]{20, 20, 8, 8, 109, 0, 34, 0};
 
       assertStatus(4, expectedNumRows, expectedNumBytes, expectedReadBytes);
     } finally {

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/test/resources/queries/TestInnerJoinWithSubQuery/testBroadcastSubquery2.sql
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/queries/TestInnerJoinWithSubQuery/testBroadcastSubquery2.sql
 
b/tajo-core/src/test/resources/queries/TestInnerJoinWithSubQuery/testBroadcastSubquery2.sql
index ae85bdd..f3b0995 100644
--- 
a/tajo-core/src/test/resources/queries/TestInnerJoinWithSubQuery/testBroadcastSubquery2.sql
+++ 
b/tajo-core/src/test/resources/queries/TestInnerJoinWithSubQuery/testBroadcastSubquery2.sql
@@ -1,6 +1,6 @@
 select sum(b.l_quantity)
 from (
-      select a.l_orderkey, a.l_quantity
+      select a.l_orderkey, a.l_quantity, a.l_linenumber
         from lineitem a
         join part on a.l_partkey = p_partkey) b
 join orders c on c.o_orderkey = b.l_orderkey

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/test/resources/queries/TestOuterJoinQuery/testLeftOuterJoin2.sql
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/queries/TestOuterJoinQuery/testLeftOuterJoin2.sql
 
b/tajo-core/src/test/resources/queries/TestOuterJoinQuery/testLeftOuterJoin2.sql
index 54090b2..6c2d66a 100644
--- 
a/tajo-core/src/test/resources/queries/TestOuterJoinQuery/testLeftOuterJoin2.sql
+++ 
b/tajo-core/src/test/resources/queries/TestOuterJoinQuery/testLeftOuterJoin2.sql
@@ -2,4 +2,4 @@ select a.l_orderkey, b.c_custkey, b.c_name, b.c_nationkey, 
d.n_name
 from lineitem a
 left outer join customer b on a.l_orderkey = b.c_custkey
 left outer join orders c on b.c_custkey = c.o_custkey
-left outer join nation d on a.l_orderkey = d.n_nationkey
+left outer join nation d on a.l_orderkey = d.n_nationkey
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash.plan
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash.plan
 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash.plan
index fa8c71e..bd3ba1a 100644
--- 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash.plan
+++ 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash.plan
@@ -34,14 +34,14 @@ SORT(6)
            => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)
            => out schema: {(3) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)}
            => in schema: {(4) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
-            SCAN(0) on default.lineitem
-              => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
-              => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
-              => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
             SCAN(1) on default.orders
               => target list: default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)
               => out schema: {(2) default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
               => in schema: {(9) default.orders.o_clerk (TEXT), 
default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), 
default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), 
default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), 
default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+            SCAN(0) on default.lineitem
+              => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
+              => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
+              => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
 explain
 -------------------------------
 -------------------------------------------------------------------------------
@@ -105,14 +105,14 @@ SORT(26)
            => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)
            => out schema: {(3) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)}
            => in schema: {(4) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
-            SCAN(0) on default.lineitem
-              => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
-              => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
-              => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
             SCAN(1) on default.orders
               => target list: default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)
               => out schema: {(2) default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
               => in schema: {(9) default.orders.o_clerk (TEXT), 
default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), 
default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), 
default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), 
default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+            SCAN(0) on default.lineitem
+              => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
+              => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
+              => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000010 [ROOT]

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash_NoBroadcast.plan
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash_NoBroadcast.plan
 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash_NoBroadcast.plan
index cf69c4a..fc5e3e3 100644
--- 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash_NoBroadcast.plan
+++ 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash_NoBroadcast.plan
@@ -34,14 +34,14 @@ SORT(6)
            => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)
            => out schema: {(3) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)}
            => in schema: {(4) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
-            SCAN(0) on default.lineitem
-              => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
-              => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
-              => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
             SCAN(1) on default.orders
               => target list: default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)
               => out schema: {(2) default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
               => in schema: {(9) default.orders.o_clerk (TEXT), 
default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), 
default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), 
default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), 
default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+            SCAN(0) on default.lineitem
+              => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
+              => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
+              => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
 explain
 -------------------------------
 -------------------------------------------------------------------------------
@@ -79,32 +79,32 @@ Block Id: eb_0000000000000_0000_000001 [LEAF]
 =======================================================
 
 [Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, 
key=default.orders.o_orderkey (INT4), num=32)
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, 
key=default.lineitem.l_orderkey (INT4), num=32)
 
-SCAN(1) on default.orders
-  => target list: default.orders.o_custkey (INT4), default.orders.o_orderkey 
(INT4)
-  => out schema: {(2) default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
-  => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment 
(TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), 
default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), 
default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), 
default.orders.o_totalprice (FLOAT8)}
+SCAN(0) on default.lineitem
+  => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
+  => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
+  => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000002 [LEAF]
 =======================================================
 
 [Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, 
key=default.lineitem.l_orderkey (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, 
key=default.orders.o_orderkey (INT4), num=32)
 
-SCAN(0) on default.lineitem
-  => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
-  => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
-  => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
+SCAN(1) on default.orders
+  => target list: default.orders.o_custkey (INT4), default.orders.o_orderkey 
(INT4)
+  => out schema: {(2) default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
+  => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment 
(TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), 
default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), 
default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), 
default.orders.o_totalprice (FLOAT8)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
 =======================================================
 
 [Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, 
key=default.orders.o_orderkey (INT4), num=32)
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, 
key=default.lineitem.l_orderkey (INT4), num=32)
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, 
key=default.lineitem.l_orderkey (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, 
key=default.orders.o_orderkey (INT4), num=32)
 
 [Outgoing]
 [q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, 
key=default.lineitem.l_partkey (INT4), num=32)
@@ -115,11 +115,11 @@ JOIN(13)(INNER)
   => out schema: {(3) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)}
   => in schema: {(4) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
    SCAN(19) on eb_0000000000000_0000_000002
-     => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
-     => in schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
-   SCAN(18) on eb_0000000000000_0000_000001
      => out schema: {(2) default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
      => in schema: {(2) default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
+   SCAN(18) on eb_0000000000000_0000_000001
+     => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
+     => in schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000004 [LEAF]

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort.plan
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort.plan
 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort.plan
index fa8c71e..bd3ba1a 100644
--- 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort.plan
+++ 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort.plan
@@ -34,14 +34,14 @@ SORT(6)
            => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)
            => out schema: {(3) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)}
            => in schema: {(4) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
-            SCAN(0) on default.lineitem
-              => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
-              => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
-              => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
             SCAN(1) on default.orders
               => target list: default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)
               => out schema: {(2) default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
               => in schema: {(9) default.orders.o_clerk (TEXT), 
default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), 
default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), 
default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), 
default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+            SCAN(0) on default.lineitem
+              => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
+              => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
+              => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
 explain
 -------------------------------
 -------------------------------------------------------------------------------
@@ -105,14 +105,14 @@ SORT(26)
            => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)
            => out schema: {(3) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)}
            => in schema: {(4) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
-            SCAN(0) on default.lineitem
-              => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
-              => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
-              => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
             SCAN(1) on default.orders
               => target list: default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)
               => out schema: {(2) default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
               => in schema: {(9) default.orders.o_clerk (TEXT), 
default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), 
default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), 
default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), 
default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+            SCAN(0) on default.lineitem
+              => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
+              => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
+              => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000010 [ROOT]

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort_NoBroadcast.plan
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort_NoBroadcast.plan
 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort_NoBroadcast.plan
index cf69c4a..fc5e3e3 100644
--- 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort_NoBroadcast.plan
+++ 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort_NoBroadcast.plan
@@ -34,14 +34,14 @@ SORT(6)
            => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)
            => out schema: {(3) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)}
            => in schema: {(4) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
-            SCAN(0) on default.lineitem
-              => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
-              => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
-              => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
             SCAN(1) on default.orders
               => target list: default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)
               => out schema: {(2) default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
               => in schema: {(9) default.orders.o_clerk (TEXT), 
default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), 
default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), 
default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), 
default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+            SCAN(0) on default.lineitem
+              => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
+              => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
+              => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
 explain
 -------------------------------
 -------------------------------------------------------------------------------
@@ -79,32 +79,32 @@ Block Id: eb_0000000000000_0000_000001 [LEAF]
 =======================================================
 
 [Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, 
key=default.orders.o_orderkey (INT4), num=32)
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, 
key=default.lineitem.l_orderkey (INT4), num=32)
 
-SCAN(1) on default.orders
-  => target list: default.orders.o_custkey (INT4), default.orders.o_orderkey 
(INT4)
-  => out schema: {(2) default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
-  => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment 
(TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), 
default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), 
default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), 
default.orders.o_totalprice (FLOAT8)}
+SCAN(0) on default.lineitem
+  => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
+  => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
+  => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000002 [LEAF]
 =======================================================
 
 [Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, 
key=default.lineitem.l_orderkey (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, 
key=default.orders.o_orderkey (INT4), num=32)
 
-SCAN(0) on default.lineitem
-  => target list: default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)
-  => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
-  => in schema: {(16) default.lineitem.l_comment (TEXT), 
default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), 
default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber 
(INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey 
(INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity 
(FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag 
(TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct 
(TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), 
default.lineitem.l_tax (FLOAT8)}
+SCAN(1) on default.orders
+  => target list: default.orders.o_custkey (INT4), default.orders.o_orderkey 
(INT4)
+  => out schema: {(2) default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
+  => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment 
(TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), 
default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), 
default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), 
default.orders.o_totalprice (FLOAT8)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
 =======================================================
 
 [Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, 
key=default.orders.o_orderkey (INT4), num=32)
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, 
key=default.lineitem.l_orderkey (INT4), num=32)
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, 
key=default.lineitem.l_orderkey (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, 
key=default.orders.o_orderkey (INT4), num=32)
 
 [Outgoing]
 [q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, 
key=default.lineitem.l_partkey (INT4), num=32)
@@ -115,11 +115,11 @@ JOIN(13)(INNER)
   => out schema: {(3) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)}
   => in schema: {(4) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
    SCAN(19) on eb_0000000000000_0000_000002
-     => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
-     => in schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
-   SCAN(18) on eb_0000000000000_0000_000001
      => out schema: {(2) default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
      => in schema: {(2) default.orders.o_custkey (INT4), 
default.orders.o_orderkey (INT4)}
+   SCAN(18) on eb_0000000000000_0000_000001
+     => out schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
+     => in schema: {(2) default.lineitem.l_orderkey (INT4), 
default.lineitem.l_partkey (INT4)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000004 [LEAF]

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash.plan
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash.plan
 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash.plan
index e5b8455..ae3d2c2 100644
--- 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash.plan
+++ 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash.plan
@@ -7,14 +7,14 @@ SORT(3)
      => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), 
default.n2.n_name (TEXT)
      => out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), default.n2.n_name (TEXT)}
      => in schema: {(4) ?upper_1 (TEXT), default.n1.n_name (TEXT), 
default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
-      SCAN(1) on default.nation as n2
-        => target list: default.n2.n_name (TEXT), upper(default.n2.n_name 
(TEXT)) as ?upper_1
-        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
-        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
       SCAN(0) on default.nation as n1
         => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)
         => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4)}
         => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name 
(TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+      SCAN(1) on default.nation as n2
+        => target list: default.n2.n_name (TEXT), upper(default.n2.n_name 
(TEXT)) as ?upper_1
+        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
+        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
 explain
 -------------------------------
 -------------------------------------------------------------------------------
@@ -48,14 +48,14 @@ SORT(10)
      => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), 
default.n2.n_name (TEXT)
      => out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), default.n2.n_name (TEXT)}
      => in schema: {(4) ?upper_1 (TEXT), default.n1.n_name (TEXT), 
default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
-      SCAN(1) on default.nation as n2
-        => target list: default.n2.n_name (TEXT), upper(default.n2.n_name 
(TEXT)) as ?upper_1
-        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
-        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
       SCAN(0) on default.nation as n1
         => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)
         => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4)}
         => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name 
(TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+      SCAN(1) on default.nation as n2
+        => target list: default.n2.n_name (TEXT), upper(default.n2.n_name 
(TEXT)) as ?upper_1
+        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
+        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000004 [ROOT]

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash_NoBroadcast.plan
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash_NoBroadcast.plan
 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash_NoBroadcast.plan
index 79b3cab..7705f67 100644
--- 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash_NoBroadcast.plan
+++ 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash_NoBroadcast.plan
@@ -7,14 +7,14 @@ SORT(3)
      => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), 
default.n2.n_name (TEXT)
      => out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), default.n2.n_name (TEXT)}
      => in schema: {(4) ?upper_1 (TEXT), default.n1.n_name (TEXT), 
default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
-      SCAN(1) on default.nation as n2
-        => target list: default.n2.n_name (TEXT), upper(default.n2.n_name 
(TEXT)) as ?upper_1
-        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
-        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
       SCAN(0) on default.nation as n1
         => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)
         => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4)}
         => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name 
(TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+      SCAN(1) on default.nation as n2
+        => target list: default.n2.n_name (TEXT), upper(default.n2.n_name 
(TEXT)) as ?upper_1
+        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
+        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
 explain
 -------------------------------
 -------------------------------------------------------------------------------
@@ -40,32 +40,32 @@ Block Id: eb_0000000000000_0000_000001 [LEAF]
 =======================================================
 
 [Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.n1.n_name 
(TEXT), num=32)
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=?upper_1 (TEXT), num=32)
 
-SCAN(0) on default.nation as n1
-  => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)
-  => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)}
-  => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), 
default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+SCAN(1) on default.nation as n2
+  => target list: default.n2.n_name (TEXT), upper(default.n2.n_name (TEXT)) as 
?upper_1
+  => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
+  => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), 
default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000002 [LEAF]
 =======================================================
 
 [Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=?upper_1 (TEXT), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.n1.n_name 
(TEXT), num=32)
 
-SCAN(1) on default.nation as n2
-  => target list: default.n2.n_name (TEXT), upper(default.n2.n_name (TEXT)) as 
?upper_1
-  => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
-  => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), 
default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
+SCAN(0) on default.nation as n1
+  => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)
+  => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)}
+  => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), 
default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
 =======================================================
 
 [Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.n1.n_name 
(TEXT), num=32)
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=?upper_1 (TEXT), num=32)
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=?upper_1 (TEXT), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.n1.n_name 
(TEXT), num=32)
 
 [Outgoing]
 [q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.n1.n_nationkey 
(INT4), num=32)
@@ -78,11 +78,11 @@ SORT(10)
      => out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), default.n2.n_name (TEXT)}
      => in schema: {(4) ?upper_1 (TEXT), default.n1.n_name (TEXT), 
default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
       SCAN(9) on eb_0000000000000_0000_000002
-        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
-        => in schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
-      SCAN(8) on eb_0000000000000_0000_000001
         => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4)}
         => in schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4)}
+      SCAN(8) on eb_0000000000000_0000_000001
+        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
+        => in schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000004 [ROOT]

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort.plan
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort.plan
 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort.plan
index e5b8455..ae3d2c2 100644
--- 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort.plan
+++ 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort.plan
@@ -7,14 +7,14 @@ SORT(3)
      => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), 
default.n2.n_name (TEXT)
      => out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), default.n2.n_name (TEXT)}
      => in schema: {(4) ?upper_1 (TEXT), default.n1.n_name (TEXT), 
default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
-      SCAN(1) on default.nation as n2
-        => target list: default.n2.n_name (TEXT), upper(default.n2.n_name 
(TEXT)) as ?upper_1
-        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
-        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
       SCAN(0) on default.nation as n1
         => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)
         => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4)}
         => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name 
(TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+      SCAN(1) on default.nation as n2
+        => target list: default.n2.n_name (TEXT), upper(default.n2.n_name 
(TEXT)) as ?upper_1
+        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
+        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
 explain
 -------------------------------
 -------------------------------------------------------------------------------
@@ -48,14 +48,14 @@ SORT(10)
      => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), 
default.n2.n_name (TEXT)
      => out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), default.n2.n_name (TEXT)}
      => in schema: {(4) ?upper_1 (TEXT), default.n1.n_name (TEXT), 
default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
-      SCAN(1) on default.nation as n2
-        => target list: default.n2.n_name (TEXT), upper(default.n2.n_name 
(TEXT)) as ?upper_1
-        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
-        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
       SCAN(0) on default.nation as n1
         => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)
         => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4)}
         => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name 
(TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+      SCAN(1) on default.nation as n2
+        => target list: default.n2.n_name (TEXT), upper(default.n2.n_name 
(TEXT)) as ?upper_1
+        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
+        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000004 [ROOT]

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort_NoBroadcast.plan
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort_NoBroadcast.plan
 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort_NoBroadcast.plan
index 79b3cab..7705f67 100644
--- 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort_NoBroadcast.plan
+++ 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort_NoBroadcast.plan
@@ -7,14 +7,14 @@ SORT(3)
      => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), 
default.n2.n_name (TEXT)
      => out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), default.n2.n_name (TEXT)}
      => in schema: {(4) ?upper_1 (TEXT), default.n1.n_name (TEXT), 
default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
-      SCAN(1) on default.nation as n2
-        => target list: default.n2.n_name (TEXT), upper(default.n2.n_name 
(TEXT)) as ?upper_1
-        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
-        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
       SCAN(0) on default.nation as n1
         => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)
         => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4)}
         => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name 
(TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+      SCAN(1) on default.nation as n2
+        => target list: default.n2.n_name (TEXT), upper(default.n2.n_name 
(TEXT)) as ?upper_1
+        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
+        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
 explain
 -------------------------------
 -------------------------------------------------------------------------------
@@ -40,32 +40,32 @@ Block Id: eb_0000000000000_0000_000001 [LEAF]
 =======================================================
 
 [Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.n1.n_name 
(TEXT), num=32)
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=?upper_1 (TEXT), num=32)
 
-SCAN(0) on default.nation as n1
-  => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)
-  => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)}
-  => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), 
default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+SCAN(1) on default.nation as n2
+  => target list: default.n2.n_name (TEXT), upper(default.n2.n_name (TEXT)) as 
?upper_1
+  => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
+  => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), 
default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000002 [LEAF]
 =======================================================
 
 [Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=?upper_1 (TEXT), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.n1.n_name 
(TEXT), num=32)
 
-SCAN(1) on default.nation as n2
-  => target list: default.n2.n_name (TEXT), upper(default.n2.n_name (TEXT)) as 
?upper_1
-  => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
-  => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), 
default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
+SCAN(0) on default.nation as n1
+  => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)
+  => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)}
+  => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), 
default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
 =======================================================
 
 [Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.n1.n_name 
(TEXT), num=32)
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=?upper_1 (TEXT), num=32)
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=?upper_1 (TEXT), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.n1.n_name 
(TEXT), num=32)
 
 [Outgoing]
 [q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.n1.n_nationkey 
(INT4), num=32)
@@ -78,11 +78,11 @@ SORT(10)
      => out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), default.n2.n_name (TEXT)}
      => in schema: {(4) ?upper_1 (TEXT), default.n1.n_name (TEXT), 
default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
       SCAN(9) on eb_0000000000000_0000_000002
-        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
-        => in schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
-      SCAN(8) on eb_0000000000000_0000_000001
         => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4)}
         => in schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4)}
+      SCAN(8) on eb_0000000000000_0000_000001
+        => out schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
+        => in schema: {(2) ?upper_1 (TEXT), default.n2.n_name (TEXT)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000004 [ROOT]

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash.plan
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash.plan
 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash.plan
index 7c88933..9f69697 100644
--- 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash.plan
+++ 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash.plan
@@ -7,14 +7,14 @@ SORT(3)
      => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), 
name (TEXT)
      => out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), name (TEXT)}
      => in schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), name (TEXT)}
-      SCAN(1) on default.nation as n2
-        => target list: upper(default.n2.n_name (TEXT)) as name
-        => out schema: {(1) name (TEXT)}
-        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
       SCAN(0) on default.nation as n1
         => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)
         => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4)}
         => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name 
(TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+      SCAN(1) on default.nation as n2
+        => target list: upper(default.n2.n_name (TEXT)) as name
+        => out schema: {(1) name (TEXT)}
+        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
 explain
 -------------------------------
 -------------------------------------------------------------------------------
@@ -48,14 +48,14 @@ SORT(10)
      => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), 
name (TEXT)
      => out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), name (TEXT)}
      => in schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), name (TEXT)}
-      SCAN(1) on default.nation as n2
-        => target list: upper(default.n2.n_name (TEXT)) as name
-        => out schema: {(1) name (TEXT)}
-        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
       SCAN(0) on default.nation as n1
         => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)
         => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4)}
         => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name 
(TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+      SCAN(1) on default.nation as n2
+        => target list: upper(default.n2.n_name (TEXT)) as name
+        => out schema: {(1) name (TEXT)}
+        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000004 [ROOT]

http://git-wip-us.apache.org/repos/asf/tajo/blob/bedce3aa/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash_NoBroadcast.plan
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash_NoBroadcast.plan
 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash_NoBroadcast.plan
index dad9ec2..53b6430 100644
--- 
a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash_NoBroadcast.plan
+++ 
b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash_NoBroadcast.plan
@@ -7,14 +7,14 @@ SORT(3)
      => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), 
name (TEXT)
      => out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), name (TEXT)}
      => in schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), name (TEXT)}
-      SCAN(1) on default.nation as n2
-        => target list: upper(default.n2.n_name (TEXT)) as name
-        => out schema: {(1) name (TEXT)}
-        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
       SCAN(0) on default.nation as n1
         => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)
         => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4)}
         => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name 
(TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+      SCAN(1) on default.nation as n2
+        => target list: upper(default.n2.n_name (TEXT)) as name
+        => out schema: {(1) name (TEXT)}
+        => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name 
(TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
 explain
 -------------------------------
 -------------------------------------------------------------------------------
@@ -40,32 +40,32 @@ Block Id: eb_0000000000000_0000_000001 [LEAF]
 =======================================================
 
 [Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.n1.n_name 
(TEXT), num=32)
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=name (TEXT), num=32)
 
-SCAN(0) on default.nation as n1
-  => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)
-  => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)}
-  => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), 
default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+SCAN(1) on default.nation as n2
+  => target list: upper(default.n2.n_name (TEXT)) as name
+  => out schema: {(1) name (TEXT)}
+  => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), 
default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000002 [LEAF]
 =======================================================
 
 [Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=name (TEXT), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.n1.n_name 
(TEXT), num=32)
 
-SCAN(1) on default.nation as n2
-  => target list: upper(default.n2.n_name (TEXT)) as name
-  => out schema: {(1) name (TEXT)}
-  => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), 
default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
+SCAN(0) on default.nation as n1
+  => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)
+  => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)}
+  => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), 
default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
 =======================================================
 
 [Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.n1.n_name 
(TEXT), num=32)
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=name (TEXT), num=32)
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=name (TEXT), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.n1.n_name 
(TEXT), num=32)
 
 [Outgoing]
 [q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.n1.n_nationkey 
(INT4), num=32)
@@ -78,11 +78,11 @@ SORT(10)
      => out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), name (TEXT)}
      => in schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4), name (TEXT)}
       SCAN(9) on eb_0000000000000_0000_000002
-        => out schema: {(1) name (TEXT)}
-        => in schema: {(1) name (TEXT)}
-      SCAN(8) on eb_0000000000000_0000_000001
         => out schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4)}
         => in schema: {(2) default.n1.n_name (TEXT), default.n1.n_nationkey 
(INT4)}
+      SCAN(8) on eb_0000000000000_0000_000001
+        => out schema: {(1) name (TEXT)}
+        => in schema: {(1) name (TEXT)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000004 [ROOT]

Reply via email to