You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by ji...@apache.org on 2014/01/08 15:48:09 UTC

git commit: TAJO-483: Add getParentCount(), getParents(), getParent() functions to DirectedGraph. (jihoon)

Updated Branches:
  refs/heads/master 7d85f3ae9 -> 3a2416766


TAJO-483: Add getParentCount(), getParents(), getParent() functions to DirectedGraph. (jihoon)


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

Branch: refs/heads/master
Commit: 3a24167667c5b8c9242b3b584358827c5758375e
Parents: 7d85f3a
Author: Jihoon Son <ji...@apache.org>
Authored: Wed Jan 8 23:47:45 2014 +0900
Committer: Jihoon Son <ji...@apache.org>
Committed: Wed Jan 8 23:47:45 2014 +0900

----------------------------------------------------------------------
 CHANGES.txt                                     |  3 ++
 .../apache/tajo/engine/planner/LogicalPlan.java |  2 +-
 .../tajo/engine/planner/global/MasterPlan.java  |  4 +-
 .../engine/planner/graph/DirectedGraph.java     | 10 +++--
 .../planner/graph/SimpleDirectedGraph.java      | 44 +++++++++++++++++---
 .../planner/graph/SimpleUndirectedGraph.java    | 12 +++++-
 .../tajo/engine/planner/TestLogicalPlan.java    |  4 +-
 7 files changed, 64 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/3a241676/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 3c71e57..410ce47 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -114,6 +114,9 @@ Release 0.8.0 - unreleased
 
   IMPROVEMENTS
 
+    TAJO-483: Add getParentCount(), getParents(), getParent() functions to DirectedGraph. 
+    (jihoon)
+
     TAJO-433: Improve integration with Hive. (jaehwa)
 
     TAJO-471: Extract ColumnPartitonUtils class for ColumnPartition rewrite.

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/3a241676/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlan.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlan.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlan.java
index 5bba89b..584fd6e 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlan.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlan.java
@@ -126,7 +126,7 @@ public class LogicalPlan {
   }
 
   public QueryBlock getParentBlock(QueryBlock block) {
-    return queryBlocks.get(queryBlockGraph.getParent(block.getName()));
+    return queryBlocks.get(queryBlockGraph.getParent(block.getName(), 0));
   }
 
   public List<QueryBlock> getChildBlocks(QueryBlock block) {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/3a241676/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/MasterPlan.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/MasterPlan.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/MasterPlan.java
index 2ac2bc9..f6ac2be 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/MasterPlan.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/MasterPlan.java
@@ -146,7 +146,7 @@ public class MasterPlan {
 
   public boolean isRoot(ExecutionBlock execBlock) {
     if (!execBlock.getId().equals(terminalBlock.getId())) {
-      return execBlockGraph.getParent(execBlock.getId()).equals(terminalBlock.getId());
+      return execBlockGraph.getParent(execBlock.getId(), 0).equals(terminalBlock.getId());
     } else {
       return false;
     }
@@ -173,7 +173,7 @@ public class MasterPlan {
   }
 
   public ExecutionBlock getParent(ExecutionBlock executionBlock) {
-    return execBlockMap.get(execBlockGraph.getParent(executionBlock.getId()));
+    return execBlockMap.get(execBlockGraph.getParent(executionBlock.getId(), 0));
   }
 
   public List<ExecutionBlock> getChilds(ExecutionBlock execBlock) {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/3a241676/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/graph/DirectedGraph.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/graph/DirectedGraph.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/graph/DirectedGraph.java
index b6ff71b..c6f4aaa 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/graph/DirectedGraph.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/graph/DirectedGraph.java
@@ -45,13 +45,17 @@ public interface DirectedGraph<V, E> extends Graph<V, E> {
 
   boolean isLeaf(V v);
 
-  @Nullable V getParent(V v);
+  int getParentCount(V block);
 
-  int getChildCount(V v);
+  @Nullable V getParent(V block, int idx);
+
+  List<V> getParents(V block);
+
+  int getChildCount(V block);
 
   @Nullable V getChild(V block, int idx);
 
-  List<V> getChilds(V v);
+  List<V> getChilds(V block);
 
   /**
    * It visits all vertices in a post-order traverse way.

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/3a241676/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/graph/SimpleDirectedGraph.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/graph/SimpleDirectedGraph.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/graph/SimpleDirectedGraph.java
index 12f33cb..586e643 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/graph/SimpleDirectedGraph.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/graph/SimpleDirectedGraph.java
@@ -153,16 +153,39 @@ public class SimpleDirectedGraph<V, E> implements DirectedGraph<V,E> {
 
   @Override
   public V getChild(V block, int idx) {
-    return getChilds(block).get(idx);
+    if (reversedEdges.containsKey(block)) {
+      int i = 0;
+      for (Map.Entry<V, E> entry: reversedEdges.get(block).entrySet()) {
+        if (idx == i++) {
+          return entry.getKey();
+        }
+      }
+    }
+    return null;
   }
 
   @Override
-  public @Nullable V getParent(V v) {
-    if (directedEdges.containsKey(v)) {
-      return directedEdges.get(v).keySet().iterator().next();
-    } else {
-      return null;
+  public @Nullable V getParent(V block, int idx) {
+    if (directedEdges.containsKey(block)) {
+      int i = 0;
+      for (Map.Entry<V, E> entry: directedEdges.get(block).entrySet()) {
+        if (idx == i++) {
+          return entry.getKey();
+        }
+      }
     }
+    return null;
+  }
+
+  @Override
+  public List<V> getParents(V block) {
+    List<V> childBlocks = new ArrayList<V>();
+    if (directedEdges.containsKey(block)) {
+      for (Map.Entry<V, E> entry: directedEdges.get(block).entrySet()) {
+        childBlocks.add(entry.getKey());
+      }
+    }
+    return childBlocks;
   }
 
   @Override
@@ -176,6 +199,15 @@ public class SimpleDirectedGraph<V, E> implements DirectedGraph<V,E> {
   }
 
   @Override
+  public int getParentCount(V block) {
+    if (directedEdges.containsKey(block)) {
+      return directedEdges.get(block).size();
+    } else {
+      return -1;
+    }
+  }
+
+  @Override
   public void accept(V source, DirectedGraphVisitor<V> visitor) {
     Stack<V> stack = new Stack<V>();
     visitRecursive(stack, source, visitor);

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/3a241676/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/graph/SimpleUndirectedGraph.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/graph/SimpleUndirectedGraph.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/graph/SimpleUndirectedGraph.java
index 38a025d..3822ad7 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/graph/SimpleUndirectedGraph.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/graph/SimpleUndirectedGraph.java
@@ -76,7 +76,17 @@ public class SimpleUndirectedGraph<V, E> extends SimpleDirectedGraph<V, E> imple
   }
 
   @Override
-  public V getParent(V v) {
+  public V getParent(V v, int idx) {
+    throw new UnsupportedOperationException("Cannot support getParent(V v) in UndirectedGraph");
+  }
+
+  @Override
+  public int getParentCount(V v) {
+    throw new UnsupportedOperationException("Cannot support getParent(V v) in UndirectedGraph");
+  }
+
+  @Override
+  public List<V> getParents(V v) {
     throw new UnsupportedOperationException("Cannot support getParent(V v) in UndirectedGraph");
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/3a241676/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlan.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlan.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlan.java
index 1b38acd..1d9df14 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlan.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlan.java
@@ -96,8 +96,8 @@ public class TestLogicalPlan {
     SimpleDirectedGraph<String, LogicalPlan.BlockEdge> graph = plan.getQueryBlockGraph();
     assertEquals(2, graph.getChildCount(root.getName()));
 
-    assertEquals(root.getName(), graph.getParent(new1.getName()));
-    assertEquals(root.getName(), graph.getParent(new2.getName()));
+    assertEquals(root.getName(), graph.getParent(new1.getName(), 0));
+    assertEquals(root.getName(), graph.getParent(new2.getName(), 0));
 
     assertTrue(graph.isRoot(root.getName()));
     assertFalse(graph.isRoot(new1.getName()));