DAG-execplan
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java
index 0103975..1e4fba9 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java
@@ -197,7 +197,7 @@
 
       case TABLE_SUBQUERY: {
         TableSubQueryNode subQueryNode = (TableSubQueryNode) logicalNode;
-        leftExec = createPlanRecursive(ctx, plan, subQueryNode.getSubQuery());
+        leftExec = createPlanRecursive(ctx, plan, plan.getChild(subQueryNode, 0));
         if (plan.getParentCount(logicalNode) > 1) {
           return new MultiOutputExec(ctx, leftExec.getSchema(), leftExec, plan.getParentCount(logicalNode));
         } else {
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PlannerUtil.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PlannerUtil.java
index 5164b65..5936253 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PlannerUtil.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PlannerUtil.java
@@ -492,18 +492,18 @@
     Preconditions.checkNotNull(executionPlan);
     Preconditions.checkNotNull(type);
 
-    if (executionPlan.hasPlanGroup()) {
-      return findTopNode(executionPlan.getFirstPlanGroup().toLinkedLogicalNode(), type);
-    } else {
-      return null;
-    }
-//    LogicalNodeFinderForExecPlan finder = new LogicalNodeFinderForExecPlan(type, executionPlan);
-//    finder.find();
-//
-//    if (finder.getFoundNodes().size() == 0) {
+//    if (executionPlan.hasPlanGroup()) {
+//      return findTopNode(executionPlan.getFirstPlanGroup().toLinkedLogicalNode(), type);
+//    } else {
 //      return null;
 //    }
-//    return (T) finder.getFoundNodes().get(0);
+    LogicalNodeFinderForExecPlan finder = new LogicalNodeFinderForExecPlan(type, executionPlan);
+    finder.find();
+
+    if (finder.getFoundNodes().size() == 0) {
+      return null;
+    }
+    return (T) finder.getFoundNodes().get(0);
   }
 
   /**
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/ExecutionPlan.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/ExecutionPlan.java
index a6c3bcd..84780c6 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/ExecutionPlan.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/ExecutionPlan.java
@@ -495,7 +495,7 @@
       if (node.getChild() != null) {
         LogicalNode child = node.getChild();
         plan.add(child, node, edgeType);
-//        node.setChild(null);
+        node.setChild(null);
         visit(child, edgeType);
       }
     }
@@ -512,13 +512,13 @@
       if (node.getLeftChild() != null) {
         child = node.getLeftChild();
         plan.add(child, node, EdgeType.LEFT);
-//        node.setLeftChild(null);
+        node.setLeftChild(null);
         visit(child, EdgeType.LEFT);
       }
       if (node.getRightChild() != null) {
         child = node.getRightChild();
         plan.add(child, node, EdgeType.RIGHT);
-//        node.setRightChild(null);
+        node.setRightChild(null);
         visit(child, EdgeType.RIGHT);
       }
     }
@@ -526,6 +526,7 @@
     private void visitTableSubQuery(TableSubQueryNode node, EdgeType edgeType) throws PlanningException {
       LogicalNode child = node.getSubQuery();
       plan.add(child, node, edgeType);
+      node.nullifySubQuery();
       visit(child, edgeType);
     }
   }
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
index b9206a1..fe7d177 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
@@ -579,11 +579,11 @@
 
     private LogicalNode handleUnaryNode(GlobalPlanContext context, LogicalNode child, LogicalNode node) {
       ExecutionBlock execBlock = context.execBlockMap.remove(child.getPID());
-//      if (node instanceof UnaryNode) {
-//        ((UnaryNode)node).setChild(execBlock.getPlan().getFirstPlanGroup().toLinkedLogicalNode());
-//      } else if (node instanceof TableSubQueryNode) {
-//        ((TableSubQueryNode) node).setSubQuery(execBlock.getPlan().getFirstPlanGroup().toLinkedLogicalNode());
-//      }
+      if (node instanceof UnaryNode) {
+        ((UnaryNode)node).setChild(execBlock.getPlan().getFirstPlanGroup().toLinkedLogicalNode());
+      } else if (node instanceof TableSubQueryNode) {
+        ((TableSubQueryNode) node).setSubQuery(execBlock.getPlan().getFirstPlanGroup().toLinkedLogicalNode());
+      }
       execBlock.setPlan(node);
       context.execBlockMap.put(node.getPID(), execBlock);
 
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/TableSubQueryNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/TableSubQueryNode.java
index 335d12f..49a4b68 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/TableSubQueryNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/TableSubQueryNode.java
@@ -58,6 +58,10 @@
     setInSchema(subQuery.getInSchema());
   }
 
+  public void nullifySubQuery() {
+    this.subQuery = null;
+  }
+
   public LogicalNode getSubQuery() {
     return subQuery;
   }