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;
}