hive-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From zs...@apache.org
Subject svn commit: r765480 [1/2] - in /hadoop/hive/trunk: ./ ql/src/java/org/apache/hadoop/hive/ql/optimizer/ ql/src/java/org/apache/hadoop/hive/ql/parse/ ql/src/test/queries/clientpositive/ ql/src/test/results/clientpositive/ ql/src/test/results/compiler/plan/
Date Thu, 16 Apr 2009 06:09:58 GMT
Author: zshao
Date: Thu Apr 16 06:09:58 2009
New Revision: 765480

URL: http://svn.apache.org/viewvc?rev=765480&view=rev
Log:
HIVE-421. Fix union followed by multi-table insert. (Namit Jain via zshao).

Added:
    hadoop/hive/trunk/ql/src/test/queries/clientpositive/union17.q
    hadoop/hive/trunk/ql/src/test/queries/clientpositive/union18.q
    hadoop/hive/trunk/ql/src/test/queries/clientpositive/union19.q
    hadoop/hive/trunk/ql/src/test/queries/clientpositive/union20.q
    hadoop/hive/trunk/ql/src/test/results/clientpositive/union17.q.out
    hadoop/hive/trunk/ql/src/test/results/clientpositive/union18.q.out
    hadoop/hive/trunk/ql/src/test/results/clientpositive/union19.q.out
    hadoop/hive/trunk/ql/src/test/results/clientpositive/union20.q.out
Modified:
    hadoop/hive/trunk/CHANGES.txt
    hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java
    hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRProcContext.java
    hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRRedSink3.java
    hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRUnion1.java
    hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
    hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
    hadoop/hive/trunk/ql/src/test/queries/clientpositive/groupby9.q
    hadoop/hive/trunk/ql/src/test/results/compiler/plan/join2.q.xml
    hadoop/hive/trunk/ql/src/test/results/compiler/plan/join4.q.xml
    hadoop/hive/trunk/ql/src/test/results/compiler/plan/join5.q.xml
    hadoop/hive/trunk/ql/src/test/results/compiler/plan/join6.q.xml
    hadoop/hive/trunk/ql/src/test/results/compiler/plan/join8.q.xml

Modified: hadoop/hive/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/CHANGES.txt?rev=765480&r1=765479&r2=765480&view=diff
==============================================================================
--- hadoop/hive/trunk/CHANGES.txt (original)
+++ hadoop/hive/trunk/CHANGES.txt Thu Apr 16 06:09:58 2009
@@ -51,7 +51,9 @@
 
     HIVE-413. Fix multi-table insert. (Namit Jain via zshao)
 
-    HIVE-415. Fix long query parsing problems. (Namit Jain via zshao)
+    HIVE-415. Fix long query parsing problems. (Zheng Shao via namit).
+
+    HIVE-421. Fix union followed by multi-table insert. (Namit Jain via zshao).
 
 Release 0.3.0 - Unreleased
 

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java?rev=765480&r1=765479&r2=765480&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java Thu Apr 16 06:09:58 2009
@@ -24,6 +24,7 @@
 import java.io.Serializable;
 
 import org.apache.hadoop.hive.ql.exec.Operator;
+import org.apache.hadoop.hive.ql.exec.UnionOperator;
 import org.apache.hadoop.hive.ql.exec.Task;
 import org.apache.hadoop.hive.ql.plan.mapredWork;
 import org.apache.hadoop.hive.ql.lib.Node;
@@ -51,6 +52,7 @@
     Task<? extends Serializable> mvTask = ctx.getMvTask();
     Task<? extends Serializable> currTask = ctx.getCurrTask();
     Operator<? extends Serializable> currTopOp = ctx.getCurrTopOp();
+    UnionOperator currUnionOp = ctx.getCurrUnionOp();
     String currAliasId = ctx.getCurrAliasId();
     HashMap<Operator<? extends Serializable>, Task<? extends Serializable>> opTaskMap = ctx.getOpTaskMap();
     List<Operator<? extends Serializable>> seenOps = ctx.getSeenOps();
@@ -68,19 +70,24 @@
       if (mapTask == null) {
         assert (!seenOps.contains(currTopOp));
         seenOps.add(currTopOp);
-        GenMapRedUtils.setTaskPlan(currAliasId, currTopOp, null, (mapredWork) currTask.getWork(), false, ctx);
+        GenMapRedUtils.setTaskPlan(currAliasId, currTopOp, (mapredWork) currTask.getWork(), false, ctx);
         opTaskMap.put(null, currTask);
         rootTasks.add(currTask);
       }
       else {
         if (!seenOps.contains(currTopOp)) {
           seenOps.add(currTopOp);
-          GenMapRedUtils.setTaskPlan(currAliasId, currTopOp, null, (mapredWork) mapTask.getWork(), false, ctx);
+          GenMapRedUtils.setTaskPlan(currAliasId, currTopOp, (mapredWork) mapTask.getWork(), false, ctx);
         }
         if (ret)
           currTask.removeDependentTask(mvTask);
       }
     }
+    else if (currUnionOp != null) {
+      opTaskMap.put(null, currTask);
+      GenMapRedUtils.initUnionPlan(ctx, currTask);
+    }
+
     return null;
   }
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRProcContext.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRProcContext.java?rev=765480&r1=765479&r2=765480&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRProcContext.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRProcContext.java Thu Apr 16 06:09:58 2009
@@ -29,6 +29,7 @@
 import org.apache.hadoop.hive.ql.exec.Task;
 import org.apache.hadoop.hive.ql.lib.NodeProcessorCtx;
 import org.apache.hadoop.hive.ql.parse.ParseContext;
+import org.apache.hadoop.hive.ql.plan.tableDesc;
 
 /**
  * Processor Context for creating map reduce task. Walk the tree in a DFS manner and process the nodes. Some state is 
@@ -79,8 +80,44 @@
     }
   }
 
+  public static class GenMRUnionCtx {
+    Task<? extends Serializable>         uTask;
+    List<String>                         taskTmpDir;
+    List<tableDesc>                      tt_desc; 
+
+    public GenMRUnionCtx() { 
+      uTask = null;
+      taskTmpDir = new ArrayList<String>();
+      tt_desc = new ArrayList<tableDesc>(); 
+    }
+
+    public Task<? extends Serializable> getUTask() { 
+      return uTask;
+    }
+
+    public void setUTask(Task<? extends Serializable> uTask) { 
+      this.uTask = uTask;
+    }
+    
+    public void addTaskTmpDir(String taskTmpDir) {
+      this.taskTmpDir.add(taskTmpDir);
+    }
+
+    public List<String> getTaskTmpDir() {
+      return taskTmpDir;
+    }
+
+    public void addTTDesc(tableDesc tt_desc) {
+      this.tt_desc.add(tt_desc);
+    }
+
+    public List<tableDesc> getTTDesc() {
+      return tt_desc;
+    }
+  }
+
   private HashMap<Operator<? extends Serializable>, Task<? extends Serializable>> opTaskMap;
-  private HashMap<UnionOperator, Task<? extends Serializable>>   unionTaskMap;
+  private HashMap<UnionOperator, GenMRUnionCtx>  unionTaskMap;
   private List<Operator<? extends Serializable>> seenOps;
 
   private ParseContext                          parseCtx;
@@ -93,6 +130,7 @@
   private Map<Operator<? extends Serializable>, GenMapRedCtx> mapCurrCtx; 
   private Task<? extends Serializable>         currTask;
   private Operator<? extends Serializable>     currTopOp;
+  private UnionOperator                        currUnionOp;
   private String                               currAliasId;
   private List<Operator<? extends Serializable>> rootOps;
 
@@ -126,10 +164,11 @@
     this.mapCurrCtx = mapCurrCtx;
     currTask        = null;
     currTopOp       = null;
+    currUnionOp     = null;
     currAliasId     = null;
     rootOps         = new ArrayList<Operator<? extends Serializable>>();
     rootOps.addAll(parseCtx.getTopOps().values());
-    unionTaskMap = new HashMap<UnionOperator, Task<? extends Serializable>>();
+    unionTaskMap = new HashMap<UnionOperator, GenMRUnionCtx>();
   }
 
   /**
@@ -300,6 +339,17 @@
     this.currTopOp = currTopOp;
   }      
 
+  public UnionOperator getCurrUnionOp() {
+    return currUnionOp;
+  }   
+   
+  /**
+   * @param currUnionOp current union operator
+   */
+  public void setCurrUnionOp(UnionOperator currUnionOp) {
+    this.currUnionOp = currUnionOp;
+  }      
+
   /**
    * @return current top alias
    */
@@ -314,11 +364,11 @@
     this.currAliasId = currAliasId;
   }
 
-  public Task<? extends Serializable> getUnionTask(UnionOperator op) {
+  public GenMRUnionCtx getUnionTask(UnionOperator op) {
     return unionTaskMap.get(op);
   }
 
-  public void setUnionTask(UnionOperator op, Task<? extends Serializable> uTask) {
+  public void setUnionTask(UnionOperator op, GenMRUnionCtx uTask) {
     unionTaskMap.put(op, uTask);
   }
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRRedSink3.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRRedSink3.java?rev=765480&r1=765479&r2=765480&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRRedSink3.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRRedSink3.java Thu Apr 16 06:09:58 2009
@@ -70,19 +70,34 @@
     Task<? extends Serializable> currTask    = mapredCtx.getCurrTask();
     mapredWork plan = (mapredWork) currTask.getWork();
     HashMap<Operator<? extends Serializable>, Task<? extends Serializable>> opTaskMap = ctx.getOpTaskMap();
-    
-    opTaskMap.put(reducer, currTask);
-    plan.setReducer(reducer);
-    reduceSinkDesc desc = (reduceSinkDesc)op.getConf();
-    
-    plan.setNumReduceTasks(desc.getNumReducers());
-    
-    if (reducer.getClass() == JoinOperator.class)
-      plan.setNeedsTagging(true);
+    Task<? extends Serializable> opMapTask = opTaskMap.get(reducer);
     
     ctx.setCurrTask(currTask);
-    ctx.setCurrTopOp(null);
-    ctx.setCurrAliasId(null);
+
+    // If the plan for this reducer does not exist, initialize the plan
+    if (opMapTask == null) {
+      // When the reducer is encountered for the first time
+      if (plan.getReducer() == null)
+        GenMapRedUtils.initUnionPlan(op, ctx);
+      // When union is followed by a multi-table insert
+      else
+        GenMapRedUtils.splitPlan(op, ctx);
+    }
+    // The union is already initialized. However, the union is walked from another input
+    // initUnionPlan is idempotent
+    else if (plan.getReducer() == reducer)
+      GenMapRedUtils.initUnionPlan(op, ctx);
+    // There is a join after union. One of the branches of union has already been initialized.
+    // Initialize the current branch, and join with the original plan.
+    else {
+      GenMapRedUtils.initUnionPlan(ctx, currTask);
+      GenMapRedUtils.joinPlan(op, currTask, opMapTask, ctx);
+    }
+
+    mapCurrCtx.put(op, new GenMapRedCtx(ctx.getCurrTask(), ctx.getCurrTopOp(), ctx.getCurrAliasId()));
+    
+    // the union operator has been processed
+    ctx.setCurrUnionOp(null);
     return null;
   }
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRUnion1.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRUnion1.java?rev=765480&r1=765479&r2=765480&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRUnion1.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRUnion1.java Thu Apr 16 06:09:58 2009
@@ -43,6 +43,7 @@
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.ql.exec.OperatorFactory;
 import org.apache.hadoop.hive.ql.optimizer.GenMRProcContext.GenMapRedCtx;
+import org.apache.hadoop.hive.ql.optimizer.GenMRProcContext.GenMRUnionCtx;
 import org.apache.hadoop.hive.ql.optimizer.unionproc.UnionProcFactory;
 import org.apache.hadoop.hive.ql.optimizer.unionproc.UnionProcContext;
 import org.apache.hadoop.hive.ql.optimizer.unionproc.UnionProcContext.UnionParseContext;
@@ -80,6 +81,8 @@
       return null;
     }
 
+    ctx.setCurrUnionOp(union);
+
     UnionParseContext uPrsCtx = uCtx.getUnionParseContext(union);
     assert uPrsCtx != null;
 
@@ -90,21 +93,26 @@
     if (uPrsCtx.getRootTask(pos) && (!ctx.getRootTasks().contains(currTask)))
       ctx.getRootTasks().add(currTask);
     
-    Task<? extends Serializable> uTask = ctx.getUnionTask(union);
+    GenMRUnionCtx uCtxTask = ctx.getUnionTask(union);
+    Task<? extends Serializable> uTask = null;
 
     pos = UnionProcFactory.getPositionParent(union, stack);
     Operator<? extends Serializable> parent = union.getParentOperators().get(pos);   
     mapredWork uPlan = null;
 
     // union is encountered for the first time
-    if (uTask == null) {
+    if (uCtxTask == null) {
+      uCtxTask = new GenMRUnionCtx();
       uPlan = GenMapRedUtils.getMapRedWork();
       uTask = TaskFactory.get(uPlan, parseCtx.getConf());
-      ctx.setUnionTask(union, uTask);
+      uCtxTask.setUTask(uTask);
+      ctx.setUnionTask(union, uCtxTask);
     }
-    else 
+    else {
+      uTask = uCtxTask.getUTask();
       uPlan = (mapredWork)uTask.getWork();
-    
+    }
+
     tableDesc tt_desc = 
       PlanUtils.getBinaryTableDesc(PlanUtils.getFieldSchemasFromRowSchema(parent.getSchema(), "temporarycol")); 
     
@@ -119,12 +127,11 @@
     ctx.setPathId(pathid);
     
     // Add the path to alias mapping
-    assert uPlan.getPathToAliases().get(taskTmpDir) == null;
-    uPlan.getPathToAliases().put(taskTmpDir, new ArrayList<String>());
-    uPlan.getPathToAliases().get(taskTmpDir).add(taskTmpDir);
-    uPlan.getPathToPartitionInfo().put(taskTmpDir, new partitionDesc(tt_desc, null));
-    uPlan.getAliasToWork().put(taskTmpDir, union);
-    GenMapRedUtils.setKeyAndValueDesc(uPlan, union);
+    uCtxTask.addTaskTmpDir(taskTmpDir);
+    uCtxTask.addTTDesc(tt_desc);
+
+    // The union task is empty. The files created for all the inputs are assembled in the
+    // union context and later used to initialize the union plan
     
     // Create a file sink operator for this file name
     Operator<? extends Serializable> fs_op =
@@ -144,7 +151,7 @@
 
     // If it is map-only task, add the files to be processed
     if (uPrsCtx.getMapOnlySubq(pos) && uPrsCtx.getRootTask(pos))
-      GenMapRedUtils.setTaskPlan(ctx.getCurrAliasId(), ctx.getCurrTopOp(), union, (mapredWork) currTask.getWork(), false, ctx);
+      GenMapRedUtils.setTaskPlan(ctx.getCurrAliasId(), ctx.getCurrTopOp(), (mapredWork) currTask.getWork(), false, ctx);
 
     ctx.setCurrTask(uTask);
     ctx.setCurrAliasId(null);

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java?rev=765480&r1=765479&r2=765480&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java Thu Apr 16 06:09:58 2009
@@ -36,6 +36,7 @@
 import org.apache.hadoop.hive.ql.exec.FileSinkOperator;
 import org.apache.hadoop.hive.ql.exec.TableScanOperator;
 import org.apache.hadoop.hive.ql.exec.JoinOperator;
+import org.apache.hadoop.hive.ql.exec.UnionOperator;
 import org.apache.hadoop.hive.ql.exec.Task;
 import org.apache.hadoop.hive.ql.exec.TaskFactory;
 import org.apache.hadoop.hive.ql.exec.OperatorFactory;
@@ -50,6 +51,7 @@
 import org.apache.hadoop.hive.ql.exec.Utilities;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.ql.optimizer.GenMRProcContext.GenMapRedCtx;
+import org.apache.hadoop.hive.ql.optimizer.GenMRProcContext.GenMRUnionCtx;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -93,9 +95,9 @@
     assert currTopOp != null;
     List<Operator<? extends Serializable>> seenOps = opProcCtx.getSeenOps();
     String currAliasId = opProcCtx.getCurrAliasId();
-      
+
     seenOps.add(currTopOp);
-    setTaskPlan(currAliasId, currTopOp, op, plan, false, opProcCtx);
+    setTaskPlan(currAliasId, currTopOp, plan, false, opProcCtx);
 
     currTopOp = null;
     currAliasId = null;
@@ -106,6 +108,64 @@
   }
 
   /**
+   * Initialize the current union plan.
+   * 
+   * @param op the reduce sink operator encountered
+   * @param opProcCtx processing context
+   */
+  public static void initUnionPlan(ReduceSinkOperator op, GenMRProcContext opProcCtx) throws SemanticException {
+    Operator<? extends Serializable> reducer = op.getChildOperators().get(0);
+    Map<Operator<? extends Serializable>, GenMapRedCtx> mapCurrCtx = opProcCtx.getMapCurrCtx();
+    GenMapRedCtx mapredCtx = mapCurrCtx.get(op.getParentOperators().get(0));
+    Task<? extends Serializable> currTask    = mapredCtx.getCurrTask();
+    mapredWork plan = (mapredWork) currTask.getWork();
+    HashMap<Operator<? extends Serializable>, Task<? extends Serializable>> opTaskMap = opProcCtx.getOpTaskMap();
+
+    opTaskMap.put(reducer, currTask);
+    plan.setReducer(reducer);
+    reduceSinkDesc desc = (reduceSinkDesc)op.getConf();
+    
+    plan.setNumReduceTasks(desc.getNumReducers());
+
+    List<Task<? extends Serializable>> rootTasks = opProcCtx.getRootTasks();
+
+    //    rootTasks.add(currTask);
+    if (reducer.getClass() == JoinOperator.class)
+      plan.setNeedsTagging(true);
+
+    initUnionPlan(opProcCtx, currTask); 
+  }
+
+  /*
+   * It is a idempotent function to add various intermediate files as the source for the
+   * union. The plan has already been created.
+   */
+  public static void initUnionPlan(GenMRProcContext opProcCtx, Task<? extends Serializable> currTask) {
+    mapredWork plan = (mapredWork) currTask.getWork();
+    UnionOperator currUnionOp = opProcCtx.getCurrUnionOp();
+    assert currUnionOp != null;
+    GenMRUnionCtx uCtx = opProcCtx.getUnionTask(currUnionOp);
+    assert uCtx != null;
+
+    List<String>    taskTmpDirLst = uCtx.getTaskTmpDir();
+    List<tableDesc> tt_descLst    = uCtx.getTTDesc(); 
+    assert !taskTmpDirLst.isEmpty() && !tt_descLst.isEmpty();
+    assert taskTmpDirLst.size() == tt_descLst.size();
+    int size = taskTmpDirLst.size();
+
+    for (int pos = 0; pos < size; pos++) {
+      String taskTmpDir = taskTmpDirLst.get(pos);
+      tableDesc tt_desc = tt_descLst.get(pos); 
+      if (plan.getPathToAliases().get(taskTmpDir) == null) {
+        plan.getPathToAliases().put(taskTmpDir, new ArrayList<String>());
+        plan.getPathToAliases().get(taskTmpDir).add(taskTmpDir);
+        plan.getPathToPartitionInfo().put(taskTmpDir, new partitionDesc(tt_desc, null));
+        plan.getAliasToWork().put(taskTmpDir, currUnionOp);
+      }
+    }
+  }
+
+  /**
    * Merge the current task with the task for the current reducer
    * @param task for the old task for the current reducer
    * @param opProcCtx processing context
@@ -129,7 +189,7 @@
       
       if (!seenOps.contains(currTopOp)) {
         seenOps.add(currTopOp);
-        setTaskPlan(currAliasId, currTopOp, op, plan, false, opProcCtx);
+        setTaskPlan(currAliasId, currTopOp, plan, false, opProcCtx);
       }
       currTopOp = null;
       opProcCtx.setCurrTopOp(currTopOp);
@@ -173,7 +233,7 @@
    * @param local    whether you need to add to map-reduce or local work
    * @param opProcCtx processing context
    */
-  public static void setTaskPlan(String alias_id, Operator<? extends Serializable> topOp, Operator<? extends Serializable> currOp,
+  public static void setTaskPlan(String alias_id, Operator<? extends Serializable> topOp,
       mapredWork plan, boolean local, GenMRProcContext opProcCtx) 
     throws SemanticException {
     ParseContext parseCtx = opProcCtx.getParseCtx();
@@ -219,7 +279,6 @@
         }
       }
       plan.getAliasToWork().put(alias_id, topOp);
-      setKeyAndValueDesc(plan, currOp);
       LOG.debug("Created Map Work for " + alias_id);
     }
     else {
@@ -365,7 +424,6 @@
     cplan.getPathToAliases().get(taskTmpDir).add(streamDesc);
     cplan.getPathToPartitionInfo().put(taskTmpDir, new partitionDesc(tt_desc, null));
     cplan.getAliasToWork().put(streamDesc, op);
-    setKeyAndValueDesc(cplan, op);
 
     // TODO: Allocate work to remove the temporary files and make that
     // dependent on the redTask

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=765480&r1=765479&r2=765480&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Thu Apr 16 06:09:58 2009
@@ -68,6 +68,7 @@
 import org.apache.hadoop.hive.ql.metadata.Partition;
 import org.apache.hadoop.hive.ql.metadata.Table;
 import org.apache.hadoop.hive.ql.optimizer.GenMRFileSink1;
+import org.apache.hadoop.hive.ql.optimizer.GenMapRedUtils;
 import org.apache.hadoop.hive.ql.optimizer.GenMROperator;
 import org.apache.hadoop.hive.ql.optimizer.GenMRProcContext;
 import org.apache.hadoop.hive.ql.optimizer.GenMRRedSink1;
@@ -3436,6 +3437,10 @@
     // For each task, go over all operators recursively
     for(Task<? extends Serializable> rootTask: rootTasks)
       breakTaskTree(rootTask);
+
+    // For each task, set the key descriptor for the reducer
+    for(Task<? extends Serializable> rootTask: rootTasks)
+      setKeyDescTaskTree(rootTask);
   }
 
   // loop over all the tasks recursviely
@@ -3467,6 +3472,23 @@
       breakOperatorTree(op);
   }
 
+  // loop over all the tasks recursviely
+  private void setKeyDescTaskTree(Task<? extends Serializable> task) { 
+    
+    if ((task instanceof MapRedTask) || (task instanceof ExecDriver)) {
+      mapredWork work = (mapredWork)task.getWork();
+      HashMap<String, Operator<? extends Serializable>> opMap = work.getAliasToWork();
+      if (!opMap.isEmpty())
+        for (Operator<? extends Serializable> op: opMap.values())
+          GenMapRedUtils.setKeyAndValueDesc(work, op);
+    }
+
+    if (task.getChildTasks() == null)
+      return;
+    
+    for (Task<? extends Serializable> childTask :  task.getChildTasks())
+      setKeyDescTaskTree(childTask);
+  }
 
   @SuppressWarnings("nls")
   public Phase1Ctx initPhase1Ctx() {

Modified: hadoop/hive/trunk/ql/src/test/queries/clientpositive/groupby9.q
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/queries/clientpositive/groupby9.q?rev=765480&r1=765479&r2=765480&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/test/queries/clientpositive/groupby9.q (original)
+++ hadoop/hive/trunk/ql/src/test/queries/clientpositive/groupby9.q Thu Apr 16 06:09:58 2009
@@ -16,3 +16,5 @@
 SELECT DEST1.* FROM DEST1;
 SELECT DEST2.* FROM DEST2;
 
+drop table DEST1;
+drop table DEST2;

Added: hadoop/hive/trunk/ql/src/test/queries/clientpositive/union17.q
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/queries/clientpositive/union17.q?rev=765480&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/queries/clientpositive/union17.q (added)
+++ hadoop/hive/trunk/ql/src/test/queries/clientpositive/union17.q Thu Apr 16 06:09:58 2009
@@ -0,0 +1,26 @@
+drop table DEST1;
+drop table DEST2;
+
+CREATE TABLE DEST1(key STRING, value STRING) STORED AS TEXTFILE;
+CREATE TABLE DEST2(key STRING, val1 STRING, val2 STRING) STORED AS TEXTFILE;
+
+-- union case:map-reduce sub-queries followed by multi-table insert
+
+explain 
+FROM (select 'tst1' as key, cast(count(1) as string) as value from src s1
+                         UNION  ALL  
+      select s2.key as key, s2.value as value from src s2) unionsrc
+INSERT OVERWRITE TABLE DEST1 SELECT unionsrc.key, COUNT(DISTINCT SUBSTR(unionsrc.value,5)) GROUP BY unionsrc.key
+INSERT OVERWRITE TABLE DEST2 SELECT unionsrc.key, unionsrc.value, COUNT(DISTINCT SUBSTR(unionsrc.value,5)) GROUP BY unionsrc.key, unionsrc.value;
+
+FROM (select 'tst1' as key, cast(count(1) as string) as value from src s1
+                         UNION  ALL  
+      select s2.key as key, s2.value as value from src s2) unionsrc
+INSERT OVERWRITE TABLE DEST1 SELECT unionsrc.key, COUNT(DISTINCT SUBSTR(unionsrc.value,5)) GROUP BY unionsrc.key
+INSERT OVERWRITE TABLE DEST2 SELECT unionsrc.key, unionsrc.value, COUNT(DISTINCT SUBSTR(unionsrc.value,5)) GROUP BY unionsrc.key, unionsrc.value;
+
+SELECT DEST1.* FROM DEST1;
+SELECT DEST2.* FROM DEST2;
+
+drop table DEST1;
+drop table DEST2;

Added: hadoop/hive/trunk/ql/src/test/queries/clientpositive/union18.q
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/queries/clientpositive/union18.q?rev=765480&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/queries/clientpositive/union18.q (added)
+++ hadoop/hive/trunk/ql/src/test/queries/clientpositive/union18.q Thu Apr 16 06:09:58 2009
@@ -0,0 +1,26 @@
+drop table DEST1;
+drop table DEST2;
+
+CREATE TABLE DEST1(key STRING, value STRING) STORED AS TEXTFILE;
+CREATE TABLE DEST2(key STRING, val1 STRING, val2 STRING) STORED AS TEXTFILE;
+
+-- union case:map-reduce sub-queries followed by multi-table insert 
+
+explain 
+FROM (select 'tst1' as key, cast(count(1) as string) as value from src s1
+                         UNION  ALL  
+      select s2.key as key, s2.value as value from src s2) unionsrc
+INSERT OVERWRITE TABLE DEST1 SELECT unionsrc.key, unionsrc.value
+INSERT OVERWRITE TABLE DEST2 SELECT unionsrc.key, unionsrc.value, unionsrc.value;
+
+FROM (select 'tst1' as key, cast(count(1) as string) as value from src s1
+                         UNION  ALL  
+      select s2.key as key, s2.value as value from src s2) unionsrc
+INSERT OVERWRITE TABLE DEST1 SELECT unionsrc.key, unionsrc.value
+INSERT OVERWRITE TABLE DEST2 SELECT unionsrc.key, unionsrc.value, unionsrc.value;
+
+SELECT DEST1.* FROM DEST1;
+SELECT DEST2.* FROM DEST2;
+
+drop table DEST1;
+drop table DEST2;

Added: hadoop/hive/trunk/ql/src/test/queries/clientpositive/union19.q
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/queries/clientpositive/union19.q?rev=765480&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/queries/clientpositive/union19.q (added)
+++ hadoop/hive/trunk/ql/src/test/queries/clientpositive/union19.q Thu Apr 16 06:09:58 2009
@@ -0,0 +1,26 @@
+drop table DEST1;
+drop table DEST2;
+
+CREATE TABLE DEST1(key STRING, value STRING) STORED AS TEXTFILE;
+CREATE TABLE DEST2(key STRING, val1 STRING, val2 STRING) STORED AS TEXTFILE;
+
+-- union case:map-reduce sub-queries followed by multi-table insert
+
+explain 
+FROM (select 'tst1' as key, cast(count(1) as string) as value from src s1
+                         UNION  ALL  
+      select s2.key as key, s2.value as value from src s2) unionsrc
+INSERT OVERWRITE TABLE DEST1 SELECT unionsrc.key, count(unionsrc.value) group by unionsrc.key
+INSERT OVERWRITE TABLE DEST2 SELECT unionsrc.key, unionsrc.value, unionsrc.value;
+
+FROM (select 'tst1' as key, cast(count(1) as string) as value from src s1
+                         UNION  ALL  
+      select s2.key as key, s2.value as value from src s2) unionsrc
+INSERT OVERWRITE TABLE DEST1 SELECT unionsrc.key, count(unionsrc.value) group by unionsrc.key
+INSERT OVERWRITE TABLE DEST2 SELECT unionsrc.key, unionsrc.value, unionsrc.value;
+
+SELECT DEST1.* FROM DEST1;
+SELECT DEST2.* FROM DEST2;
+
+drop table DEST1;
+drop table DEST2;

Added: hadoop/hive/trunk/ql/src/test/queries/clientpositive/union20.q
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/queries/clientpositive/union20.q?rev=765480&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/queries/clientpositive/union20.q (added)
+++ hadoop/hive/trunk/ql/src/test/queries/clientpositive/union20.q Thu Apr 16 06:09:58 2009
@@ -0,0 +1,22 @@
+-- union :map-reduce sub-queries followed by join
+
+explain 
+SELECT unionsrc1.key, unionsrc1.value, unionsrc2.key, unionsrc2.value
+FROM (select 'tst1' as key, cast(count(1) as string) as value from src s1
+                         UNION  ALL  
+      select s2.key as key, s2.value as value from src s2 where s2.key < 10) unionsrc1 
+JOIN 
+     (select 'tst1' as key, cast(count(1) as string) as value from src s3
+                         UNION  ALL  
+      select s4.key as key, s4.value as value from src s4 where s4.key < 10) unionsrc2
+ON (unionsrc1.key = unionsrc2.key);
+
+SELECT unionsrc1.key, unionsrc1.value, unionsrc2.key, unionsrc2.value
+FROM (select 'tst1' as key, cast(count(1) as string) as value from src s1
+                         UNION  ALL  
+      select s2.key as key, s2.value as value from src s2 where s2.key < 10) unionsrc1 
+JOIN 
+     (select 'tst1' as key, cast(count(1) as string) as value from src s3
+                         UNION  ALL  
+      select s4.key as key, s4.value as value from src s4 where s4.key < 10) unionsrc2
+ON (unionsrc1.key = unionsrc2.key);

Added: hadoop/hive/trunk/ql/src/test/results/clientpositive/union17.q.out
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/results/clientpositive/union17.q.out?rev=765480&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/results/clientpositive/union17.q.out (added)
+++ hadoop/hive/trunk/ql/src/test/results/clientpositive/union17.q.out Thu Apr 16 06:09:58 2009
@@ -0,0 +1,866 @@
+ABSTRACT SYNTAX TREE:
+  (TOK_QUERY (TOK_FROM (TOK_SUBQUERY (TOK_UNION (TOK_QUERY (TOK_FROM (TOK_TABREF src s1)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR 'tst1' key) (TOK_SELEXPR (TOK_FUNCTION TOK_STRING (TOK_FUNCTION count 1)) value)))) (TOK_QUERY (TOK_FROM (TOK_TABREF src s2)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF s2 key) key) (TOK_SELEXPR (TOK_COLREF s2 value) value))))) unionsrc)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB DEST1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF unionsrc key)) (TOK_SELEXPR (TOK_FUNCTIONDI COUNT (TOK_FUNCTION SUBSTR (TOK_COLREF unionsrc value) 5)))) (TOK_GROUPBY (TOK_COLREF unionsrc key))) (TOK_INSERT (TOK_DESTINATION (TOK_TAB DEST2)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF unionsrc key)) (TOK_SELEXPR (TOK_COLREF unionsrc value)) (TOK_SELEXPR (TOK_FUNCTIONDI COUNT (TOK_FUNCTION SUBSTR (TOK_COLREF unionsrc value) 5)))) (TOK_GROUPBY (TOK_COLREF unionsrc key) (TOK_COLREF unionsrc value))))
+
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-2 depends on stages: Stage-1, Stage-4
+  Stage-0 depends on stages: Stage-2, Stage-3
+  Stage-3 depends on stages: Stage-2
+  Stage-0 depends on stages: Stage-2, Stage-3
+  Stage-4 is a root stage
+  Stage-2 depends on stages: Stage-1, Stage-4
+  Stage-0 depends on stages: Stage-2, Stage-3
+  Stage-3 depends on stages: Stage-2
+  Stage-0 depends on stages: Stage-2, Stage-3
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Alias -> Map Operator Tree:
+        null-subquery1:unionsrc-subquery1:s1 
+            Select Operator
+              Group By Operator
+                aggregations:
+                      expr: count(1)
+                mode: hash
+                Reduce Output Operator
+                  sort order: 
+                  tag: -1
+                  value expressions:
+                        expr: 0
+                        type: bigint
+      Reduce Operator Tree:
+        Group By Operator
+          aggregations:
+                expr: count(VALUE.0)
+          mode: mergepartial
+          Select Operator
+            expressions:
+                  expr: 'tst1'
+                  type: string
+                  expr: UDFToString(0)
+                  type: string
+            File Output Operator
+              compressed: false
+              GlobalTableId: 0
+              table:
+                  input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                  output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                  name: binary_table
+
+  Stage: Stage-2
+    Map Reduce
+      Alias -> Map Operator Tree:
+        /data/users/njain/hive5/hive5/build/ql/tmp/858427622/1320959025.10002 
+          Union
+            Group By Operator
+              aggregations:
+                    expr: count(DISTINCT substr(1, 5))
+              keys:
+                    expr: 0
+                    type: string
+                    expr: substr(1, 5)
+                    type: string
+              mode: hash
+              Reduce Output Operator
+                key expressions:
+                      expr: 0
+                      type: string
+                      expr: 1
+                      type: string
+                sort order: ++
+                Map-reduce partition columns:
+                      expr: 0
+                      type: string
+                tag: -1
+                value expressions:
+                      expr: 2
+                      type: bigint
+            Group By Operator
+              aggregations:
+                    expr: count(DISTINCT substr(1, 5))
+              keys:
+                    expr: 0
+                    type: string
+                    expr: 1
+                    type: string
+                    expr: substr(1, 5)
+                    type: string
+              mode: hash
+              File Output Operator
+                compressed: false
+                GlobalTableId: 0
+                table:
+                    input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                    output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                    name: binary_table
+        /data/users/njain/hive5/hive5/build/ql/tmp/858427622/1320959025.10004 
+          Union
+            Group By Operator
+              aggregations:
+                    expr: count(DISTINCT substr(1, 5))
+              keys:
+                    expr: 0
+                    type: string
+                    expr: substr(1, 5)
+                    type: string
+              mode: hash
+              Reduce Output Operator
+                key expressions:
+                      expr: 0
+                      type: string
+                      expr: 1
+                      type: string
+                sort order: ++
+                Map-reduce partition columns:
+                      expr: 0
+                      type: string
+                tag: -1
+                value expressions:
+                      expr: 2
+                      type: bigint
+            Group By Operator
+              aggregations:
+                    expr: count(DISTINCT substr(1, 5))
+              keys:
+                    expr: 0
+                    type: string
+                    expr: 1
+                    type: string
+                    expr: substr(1, 5)
+                    type: string
+              mode: hash
+              File Output Operator
+                compressed: false
+                GlobalTableId: 0
+                table:
+                    input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                    output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                    name: binary_table
+      Reduce Operator Tree:
+        Group By Operator
+          aggregations:
+                expr: count(DISTINCT KEY.1)
+          keys:
+                expr: KEY.0
+                type: string
+          mode: mergepartial
+          Select Operator
+            expressions:
+                  expr: 0
+                  type: string
+                  expr: 1
+                  type: bigint
+            File Output Operator
+              compressed: false
+              GlobalTableId: 1
+              table:
+                  input format: org.apache.hadoop.mapred.TextInputFormat
+                  output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                  serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+                  name: dest1
+
+  Stage: Stage-0
+    Move Operator
+      tables:
+            replace: true
+            table:
+                input format: org.apache.hadoop.mapred.TextInputFormat
+                output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+                name: dest1
+            replace: true
+            table:
+                input format: org.apache.hadoop.mapred.TextInputFormat
+                output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+                name: dest2
+
+  Stage: Stage-3
+    Map Reduce
+      Alias -> Map Operator Tree:
+        /data/users/njain/hive5/hive5/build/ql/tmp/858427622/1320959025.10003 
+          Reduce Output Operator
+            key expressions:
+                  expr: 0
+                  type: string
+                  expr: 1
+                  type: string
+                  expr: 2
+                  type: string
+            sort order: +++
+            Map-reduce partition columns:
+                  expr: 0
+                  type: string
+                  expr: 1
+                  type: string
+            tag: -1
+            value expressions:
+                  expr: 3
+                  type: bigint
+      Reduce Operator Tree:
+        Group By Operator
+          aggregations:
+                expr: count(DISTINCT KEY.2)
+          keys:
+                expr: KEY.0
+                type: string
+                expr: KEY.1
+                type: string
+          mode: mergepartial
+          Select Operator
+            expressions:
+                  expr: 0
+                  type: string
+                  expr: 1
+                  type: string
+                  expr: 2
+                  type: bigint
+            File Output Operator
+              compressed: false
+              GlobalTableId: 2
+              table:
+                  input format: org.apache.hadoop.mapred.TextInputFormat
+                  output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                  serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+                  name: dest2
+
+  Stage: Stage-4
+    Map Reduce
+      Alias -> Map Operator Tree:
+        null-subquery2:unionsrc-subquery2:s2 
+            Select Operator
+              expressions:
+                    expr: key
+                    type: string
+                    expr: value
+                    type: string
+              File Output Operator
+                compressed: false
+                GlobalTableId: 0
+                table:
+                    input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                    output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                    name: binary_table
+
+
+0	1
+10	1
+100	1
+103	1
+104	1
+105	1
+11	1
+111	1
+113	1
+114	1
+116	1
+118	1
+119	1
+12	1
+120	1
+125	1
+126	1
+128	1
+129	1
+131	1
+133	1
+134	1
+136	1
+137	1
+138	1
+143	1
+145	1
+146	1
+149	1
+15	1
+150	1
+152	1
+153	1
+155	1
+156	1
+157	1
+158	1
+160	1
+162	1
+163	1
+164	1
+165	1
+166	1
+167	1
+168	1
+169	1
+17	1
+170	1
+172	1
+174	1
+175	1
+176	1
+177	1
+178	1
+179	1
+18	1
+180	1
+181	1
+183	1
+186	1
+187	1
+189	1
+19	1
+190	1
+191	1
+192	1
+193	1
+194	1
+195	1
+196	1
+197	1
+199	1
+2	1
+20	1
+200	1
+201	1
+202	1
+203	1
+205	1
+207	1
+208	1
+209	1
+213	1
+214	1
+216	1
+217	1
+218	1
+219	1
+221	1
+222	1
+223	1
+224	1
+226	1
+228	1
+229	1
+230	1
+233	1
+235	1
+237	1
+238	1
+239	1
+24	1
+241	1
+242	1
+244	1
+247	1
+248	1
+249	1
+252	1
+255	1
+256	1
+257	1
+258	1
+26	1
+260	1
+262	1
+263	1
+265	1
+266	1
+27	1
+272	1
+273	1
+274	1
+275	1
+277	1
+278	1
+28	1
+280	1
+281	1
+282	1
+283	1
+284	1
+285	1
+286	1
+287	1
+288	1
+289	1
+291	1
+292	1
+296	1
+298	1
+30	1
+302	1
+305	1
+306	1
+307	1
+308	1
+309	1
+310	1
+311	1
+315	1
+316	1
+317	1
+318	1
+321	1
+322	1
+323	1
+325	1
+327	1
+33	1
+331	1
+332	1
+333	1
+335	1
+336	1
+338	1
+339	1
+34	1
+341	1
+342	1
+344	1
+345	1
+348	1
+35	1
+351	1
+353	1
+356	1
+360	1
+362	1
+364	1
+365	1
+366	1
+367	1
+368	1
+369	1
+37	1
+373	1
+374	1
+375	1
+377	1
+378	1
+379	1
+382	1
+384	1
+386	1
+389	1
+392	1
+393	1
+394	1
+395	1
+396	1
+397	1
+399	1
+4	1
+400	1
+401	1
+402	1
+403	1
+404	1
+406	1
+407	1
+409	1
+41	1
+411	1
+413	1
+414	1
+417	1
+418	1
+419	1
+42	1
+421	1
+424	1
+427	1
+429	1
+43	1
+430	1
+431	1
+432	1
+435	1
+436	1
+437	1
+438	1
+439	1
+44	1
+443	1
+444	1
+446	1
+448	1
+449	1
+452	1
+453	1
+454	1
+455	1
+457	1
+458	1
+459	1
+460	1
+462	1
+463	1
+466	1
+467	1
+468	1
+469	1
+47	1
+470	1
+472	1
+475	1
+477	1
+478	1
+479	1
+480	1
+481	1
+482	1
+483	1
+484	1
+485	1
+487	1
+489	1
+490	1
+491	1
+492	1
+493	1
+494	1
+495	1
+496	1
+497	1
+498	1
+5	1
+51	1
+53	1
+54	1
+57	1
+58	1
+64	1
+65	1
+66	1
+67	1
+69	1
+70	1
+72	1
+74	1
+76	1
+77	1
+78	1
+8	1
+80	1
+82	1
+83	1
+84	1
+85	1
+86	1
+87	1
+9	1
+90	1
+92	1
+95	1
+96	1
+97	1
+98	1
+tst1	0
+0	val_0	1
+10	val_10	1
+100	val_100	1
+103	val_103	1
+104	val_104	1
+105	val_105	1
+11	val_11	1
+111	val_111	1
+113	val_113	1
+114	val_114	1
+116	val_116	1
+118	val_118	1
+119	val_119	1
+12	val_12	1
+120	val_120	1
+125	val_125	1
+126	val_126	1
+128	val_128	1
+129	val_129	1
+131	val_131	1
+133	val_133	1
+134	val_134	1
+136	val_136	1
+137	val_137	1
+138	val_138	1
+143	val_143	1
+145	val_145	1
+146	val_146	1
+149	val_149	1
+15	val_15	1
+150	val_150	1
+152	val_152	1
+153	val_153	1
+155	val_155	1
+156	val_156	1
+157	val_157	1
+158	val_158	1
+160	val_160	1
+162	val_162	1
+163	val_163	1
+164	val_164	1
+165	val_165	1
+166	val_166	1
+167	val_167	1
+168	val_168	1
+169	val_169	1
+17	val_17	1
+170	val_170	1
+172	val_172	1
+174	val_174	1
+175	val_175	1
+176	val_176	1
+177	val_177	1
+178	val_178	1
+179	val_179	1
+18	val_18	1
+180	val_180	1
+181	val_181	1
+183	val_183	1
+186	val_186	1
+187	val_187	1
+189	val_189	1
+19	val_19	1
+190	val_190	1
+191	val_191	1
+192	val_192	1
+193	val_193	1
+194	val_194	1
+195	val_195	1
+196	val_196	1
+197	val_197	1
+199	val_199	1
+2	val_2	1
+20	val_20	1
+200	val_200	1
+201	val_201	1
+202	val_202	1
+203	val_203	1
+205	val_205	1
+207	val_207	1
+208	val_208	1
+209	val_209	1
+213	val_213	1
+214	val_214	1
+216	val_216	1
+217	val_217	1
+218	val_218	1
+219	val_219	1
+221	val_221	1
+222	val_222	1
+223	val_223	1
+224	val_224	1
+226	val_226	1
+228	val_228	1
+229	val_229	1
+230	val_230	1
+233	val_233	1
+235	val_235	1
+237	val_237	1
+238	val_238	1
+239	val_239	1
+24	val_24	1
+241	val_241	1
+242	val_242	1
+244	val_244	1
+247	val_247	1
+248	val_248	1
+249	val_249	1
+252	val_252	1
+255	val_255	1
+256	val_256	1
+257	val_257	1
+258	val_258	1
+26	val_26	1
+260	val_260	1
+262	val_262	1
+263	val_263	1
+265	val_265	1
+266	val_266	1
+27	val_27	1
+272	val_272	1
+273	val_273	1
+274	val_274	1
+275	val_275	1
+277	val_277	1
+278	val_278	1
+28	val_28	1
+280	val_280	1
+281	val_281	1
+282	val_282	1
+283	val_283	1
+284	val_284	1
+285	val_285	1
+286	val_286	1
+287	val_287	1
+288	val_288	1
+289	val_289	1
+291	val_291	1
+292	val_292	1
+296	val_296	1
+298	val_298	1
+30	val_30	1
+302	val_302	1
+305	val_305	1
+306	val_306	1
+307	val_307	1
+308	val_308	1
+309	val_309	1
+310	val_310	1
+311	val_311	1
+315	val_315	1
+316	val_316	1
+317	val_317	1
+318	val_318	1
+321	val_321	1
+322	val_322	1
+323	val_323	1
+325	val_325	1
+327	val_327	1
+33	val_33	1
+331	val_331	1
+332	val_332	1
+333	val_333	1
+335	val_335	1
+336	val_336	1
+338	val_338	1
+339	val_339	1
+34	val_34	1
+341	val_341	1
+342	val_342	1
+344	val_344	1
+345	val_345	1
+348	val_348	1
+35	val_35	1
+351	val_351	1
+353	val_353	1
+356	val_356	1
+360	val_360	1
+362	val_362	1
+364	val_364	1
+365	val_365	1
+366	val_366	1
+367	val_367	1
+368	val_368	1
+369	val_369	1
+37	val_37	1
+373	val_373	1
+374	val_374	1
+375	val_375	1
+377	val_377	1
+378	val_378	1
+379	val_379	1
+382	val_382	1
+384	val_384	1
+386	val_386	1
+389	val_389	1
+392	val_392	1
+393	val_393	1
+394	val_394	1
+395	val_395	1
+396	val_396	1
+397	val_397	1
+399	val_399	1
+4	val_4	1
+400	val_400	1
+401	val_401	1
+402	val_402	1
+403	val_403	1
+404	val_404	1
+406	val_406	1
+407	val_407	1
+409	val_409	1
+41	val_41	1
+411	val_411	1
+413	val_413	1
+414	val_414	1
+417	val_417	1
+418	val_418	1
+419	val_419	1
+42	val_42	1
+421	val_421	1
+424	val_424	1
+427	val_427	1
+429	val_429	1
+43	val_43	1
+430	val_430	1
+431	val_431	1
+432	val_432	1
+435	val_435	1
+436	val_436	1
+437	val_437	1
+438	val_438	1
+439	val_439	1
+44	val_44	1
+443	val_443	1
+444	val_444	1
+446	val_446	1
+448	val_448	1
+449	val_449	1
+452	val_452	1
+453	val_453	1
+454	val_454	1
+455	val_455	1
+457	val_457	1
+458	val_458	1
+459	val_459	1
+460	val_460	1
+462	val_462	1
+463	val_463	1
+466	val_466	1
+467	val_467	1
+468	val_468	1
+469	val_469	1
+47	val_47	1
+470	val_470	1
+472	val_472	1
+475	val_475	1
+477	val_477	1
+478	val_478	1
+479	val_479	1
+480	val_480	1
+481	val_481	1
+482	val_482	1
+483	val_483	1
+484	val_484	1
+485	val_485	1
+487	val_487	1
+489	val_489	1
+490	val_490	1
+491	val_491	1
+492	val_492	1
+493	val_493	1
+494	val_494	1
+495	val_495	1
+496	val_496	1
+497	val_497	1
+498	val_498	1
+5	val_5	1
+51	val_51	1
+53	val_53	1
+54	val_54	1
+57	val_57	1
+58	val_58	1
+64	val_64	1
+65	val_65	1
+66	val_66	1
+67	val_67	1
+69	val_69	1
+70	val_70	1
+72	val_72	1
+74	val_74	1
+76	val_76	1
+77	val_77	1
+78	val_78	1
+8	val_8	1
+80	val_80	1
+82	val_82	1
+83	val_83	1
+84	val_84	1
+85	val_85	1
+86	val_86	1
+87	val_87	1
+9	val_9	1
+90	val_90	1
+92	val_92	1
+95	val_95	1
+96	val_96	1
+97	val_97	1
+98	val_98	1
+tst1	500	0

Added: hadoop/hive/trunk/ql/src/test/results/clientpositive/union18.q.out
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/results/clientpositive/union18.q.out?rev=765480&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/results/clientpositive/union18.q.out (added)
+++ hadoop/hive/trunk/ql/src/test/results/clientpositive/union18.q.out Thu Apr 16 06:09:58 2009
@@ -0,0 +1,1151 @@
+ABSTRACT SYNTAX TREE:
+  (TOK_QUERY (TOK_FROM (TOK_SUBQUERY (TOK_UNION (TOK_QUERY (TOK_FROM (TOK_TABREF src s1)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR 'tst1' key) (TOK_SELEXPR (TOK_FUNCTION TOK_STRING (TOK_FUNCTION count 1)) value)))) (TOK_QUERY (TOK_FROM (TOK_TABREF src s2)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF s2 key) key) (TOK_SELEXPR (TOK_COLREF s2 value) value))))) unionsrc)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB DEST1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF unionsrc key)) (TOK_SELEXPR (TOK_COLREF unionsrc value)))) (TOK_INSERT (TOK_DESTINATION (TOK_TAB DEST2)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF unionsrc key)) (TOK_SELEXPR (TOK_COLREF unionsrc value)) (TOK_SELEXPR (TOK_COLREF unionsrc value)))))
+
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-2 depends on stages: Stage-1, Stage-3
+  Stage-0 depends on stages: Stage-2
+  Stage-3 is a root stage
+  Stage-2 depends on stages: Stage-1, Stage-3
+  Stage-0 depends on stages: Stage-2
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Alias -> Map Operator Tree:
+        null-subquery1:unionsrc-subquery1:s1 
+            Select Operator
+              Group By Operator
+                aggregations:
+                      expr: count(1)
+                mode: hash
+                Reduce Output Operator
+                  sort order: 
+                  tag: -1
+                  value expressions:
+                        expr: 0
+                        type: bigint
+      Reduce Operator Tree:
+        Group By Operator
+          aggregations:
+                expr: count(VALUE.0)
+          mode: mergepartial
+          Select Operator
+            expressions:
+                  expr: 'tst1'
+                  type: string
+                  expr: UDFToString(0)
+                  type: string
+            File Output Operator
+              compressed: false
+              GlobalTableId: 0
+              table:
+                  input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                  output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                  name: binary_table
+
+  Stage: Stage-2
+    Map Reduce
+      Alias -> Map Operator Tree:
+        /data/users/njain/hive5/hive5/build/ql/tmp/925909570/204404287.10002 
+          Union
+            Select Operator
+              expressions:
+                    expr: 0
+                    type: string
+                    expr: 1
+                    type: string
+              File Output Operator
+                compressed: false
+                GlobalTableId: 1
+                table:
+                    input format: org.apache.hadoop.mapred.TextInputFormat
+                    output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                    serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+                    name: dest1
+            Select Operator
+              expressions:
+                    expr: 0
+                    type: string
+                    expr: 1
+                    type: string
+                    expr: 1
+                    type: string
+              File Output Operator
+                compressed: false
+                GlobalTableId: 2
+                table:
+                    input format: org.apache.hadoop.mapred.TextInputFormat
+                    output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                    serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+                    name: dest2
+        /data/users/njain/hive5/hive5/build/ql/tmp/925909570/204404287.10003 
+          Union
+            Select Operator
+              expressions:
+                    expr: 0
+                    type: string
+                    expr: 1
+                    type: string
+              File Output Operator
+                compressed: false
+                GlobalTableId: 1
+                table:
+                    input format: org.apache.hadoop.mapred.TextInputFormat
+                    output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                    serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+                    name: dest1
+            Select Operator
+              expressions:
+                    expr: 0
+                    type: string
+                    expr: 1
+                    type: string
+                    expr: 1
+                    type: string
+              File Output Operator
+                compressed: false
+                GlobalTableId: 2
+                table:
+                    input format: org.apache.hadoop.mapred.TextInputFormat
+                    output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                    serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+                    name: dest2
+
+  Stage: Stage-0
+    Move Operator
+      tables:
+            replace: true
+            table:
+                input format: org.apache.hadoop.mapred.TextInputFormat
+                output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+                name: dest1
+            replace: true
+            table:
+                input format: org.apache.hadoop.mapred.TextInputFormat
+                output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+                name: dest2
+
+  Stage: Stage-3
+    Map Reduce
+      Alias -> Map Operator Tree:
+        null-subquery2:unionsrc-subquery2:s2 
+            Select Operator
+              expressions:
+                    expr: key
+                    type: string
+                    expr: value
+                    type: string
+              File Output Operator
+                compressed: false
+                GlobalTableId: 0
+                table:
+                    input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                    output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                    name: binary_table
+
+
+tst1	500
+238	val_238
+86	val_86
+311	val_311
+27	val_27
+165	val_165
+409	val_409
+255	val_255
+278	val_278
+98	val_98
+484	val_484
+265	val_265
+193	val_193
+401	val_401
+150	val_150
+273	val_273
+224	val_224
+369	val_369
+66	val_66
+128	val_128
+213	val_213
+146	val_146
+406	val_406
+429	val_429
+374	val_374
+152	val_152
+469	val_469
+145	val_145
+495	val_495
+37	val_37
+327	val_327
+281	val_281
+277	val_277
+209	val_209
+15	val_15
+82	val_82
+403	val_403
+166	val_166
+417	val_417
+430	val_430
+252	val_252
+292	val_292
+219	val_219
+287	val_287
+153	val_153
+193	val_193
+338	val_338
+446	val_446
+459	val_459
+394	val_394
+237	val_237
+482	val_482
+174	val_174
+413	val_413
+494	val_494
+207	val_207
+199	val_199
+466	val_466
+208	val_208
+174	val_174
+399	val_399
+396	val_396
+247	val_247
+417	val_417
+489	val_489
+162	val_162
+377	val_377
+397	val_397
+309	val_309
+365	val_365
+266	val_266
+439	val_439
+342	val_342
+367	val_367
+325	val_325
+167	val_167
+195	val_195
+475	val_475
+17	val_17
+113	val_113
+155	val_155
+203	val_203
+339	val_339
+0	val_0
+455	val_455
+128	val_128
+311	val_311
+316	val_316
+57	val_57
+302	val_302
+205	val_205
+149	val_149
+438	val_438
+345	val_345
+129	val_129
+170	val_170
+20	val_20
+489	val_489
+157	val_157
+378	val_378
+221	val_221
+92	val_92
+111	val_111
+47	val_47
+72	val_72
+4	val_4
+280	val_280
+35	val_35
+427	val_427
+277	val_277
+208	val_208
+356	val_356
+399	val_399
+169	val_169
+382	val_382
+498	val_498
+125	val_125
+386	val_386
+437	val_437
+469	val_469
+192	val_192
+286	val_286
+187	val_187
+176	val_176
+54	val_54
+459	val_459
+51	val_51
+138	val_138
+103	val_103
+239	val_239
+213	val_213
+216	val_216
+430	val_430
+278	val_278
+176	val_176
+289	val_289
+221	val_221
+65	val_65
+318	val_318
+332	val_332
+311	val_311
+275	val_275
+137	val_137
+241	val_241
+83	val_83
+333	val_333
+180	val_180
+284	val_284
+12	val_12
+230	val_230
+181	val_181
+67	val_67
+260	val_260
+404	val_404
+384	val_384
+489	val_489
+353	val_353
+373	val_373
+272	val_272
+138	val_138
+217	val_217
+84	val_84
+348	val_348
+466	val_466
+58	val_58
+8	val_8
+411	val_411
+230	val_230
+208	val_208
+348	val_348
+24	val_24
+463	val_463
+431	val_431
+179	val_179
+172	val_172
+42	val_42
+129	val_129
+158	val_158
+119	val_119
+496	val_496
+0	val_0
+322	val_322
+197	val_197
+468	val_468
+393	val_393
+454	val_454
+100	val_100
+298	val_298
+199	val_199
+191	val_191
+418	val_418
+96	val_96
+26	val_26
+165	val_165
+327	val_327
+230	val_230
+205	val_205
+120	val_120
+131	val_131
+51	val_51
+404	val_404
+43	val_43
+436	val_436
+156	val_156
+469	val_469
+468	val_468
+308	val_308
+95	val_95
+196	val_196
+288	val_288
+481	val_481
+457	val_457
+98	val_98
+282	val_282
+197	val_197
+187	val_187
+318	val_318
+318	val_318
+409	val_409
+470	val_470
+137	val_137
+369	val_369
+316	val_316
+169	val_169
+413	val_413
+85	val_85
+77	val_77
+0	val_0
+490	val_490
+87	val_87
+364	val_364
+179	val_179
+118	val_118
+134	val_134
+395	val_395
+282	val_282
+138	val_138
+238	val_238
+419	val_419
+15	val_15
+118	val_118
+72	val_72
+90	val_90
+307	val_307
+19	val_19
+435	val_435
+10	val_10
+277	val_277
+273	val_273
+306	val_306
+224	val_224
+309	val_309
+389	val_389
+327	val_327
+242	val_242
+369	val_369
+392	val_392
+272	val_272
+331	val_331
+401	val_401
+242	val_242
+452	val_452
+177	val_177
+226	val_226
+5	val_5
+497	val_497
+402	val_402
+396	val_396
+317	val_317
+395	val_395
+58	val_58
+35	val_35
+336	val_336
+95	val_95
+11	val_11
+168	val_168
+34	val_34
+229	val_229
+233	val_233
+143	val_143
+472	val_472
+322	val_322
+498	val_498
+160	val_160
+195	val_195
+42	val_42
+321	val_321
+430	val_430
+119	val_119
+489	val_489
+458	val_458
+78	val_78
+76	val_76
+41	val_41
+223	val_223
+492	val_492
+149	val_149
+449	val_449
+218	val_218
+228	val_228
+138	val_138
+453	val_453
+30	val_30
+209	val_209
+64	val_64
+468	val_468
+76	val_76
+74	val_74
+342	val_342
+69	val_69
+230	val_230
+33	val_33
+368	val_368
+103	val_103
+296	val_296
+113	val_113
+216	val_216
+367	val_367
+344	val_344
+167	val_167
+274	val_274
+219	val_219
+239	val_239
+485	val_485
+116	val_116
+223	val_223
+256	val_256
+263	val_263
+70	val_70
+487	val_487
+480	val_480
+401	val_401
+288	val_288
+191	val_191
+5	val_5
+244	val_244
+438	val_438
+128	val_128
+467	val_467
+432	val_432
+202	val_202
+316	val_316
+229	val_229
+469	val_469
+463	val_463
+280	val_280
+2	val_2
+35	val_35
+283	val_283
+331	val_331
+235	val_235
+80	val_80
+44	val_44
+193	val_193
+321	val_321
+335	val_335
+104	val_104
+466	val_466
+366	val_366
+175	val_175
+403	val_403
+483	val_483
+53	val_53
+105	val_105
+257	val_257
+406	val_406
+409	val_409
+190	val_190
+406	val_406
+401	val_401
+114	val_114
+258	val_258
+90	val_90
+203	val_203
+262	val_262
+348	val_348
+424	val_424
+12	val_12
+396	val_396
+201	val_201
+217	val_217
+164	val_164
+431	val_431
+454	val_454
+478	val_478
+298	val_298
+125	val_125
+431	val_431
+164	val_164
+424	val_424
+187	val_187
+382	val_382
+5	val_5
+70	val_70
+397	val_397
+480	val_480
+291	val_291
+24	val_24
+351	val_351
+255	val_255
+104	val_104
+70	val_70
+163	val_163
+438	val_438
+119	val_119
+414	val_414
+200	val_200
+491	val_491
+237	val_237
+439	val_439
+360	val_360
+248	val_248
+479	val_479
+305	val_305
+417	val_417
+199	val_199
+444	val_444
+120	val_120
+429	val_429
+169	val_169
+443	val_443
+323	val_323
+325	val_325
+277	val_277
+230	val_230
+478	val_478
+178	val_178
+468	val_468
+310	val_310
+317	val_317
+333	val_333
+493	val_493
+460	val_460
+207	val_207
+249	val_249
+265	val_265
+480	val_480
+83	val_83
+136	val_136
+353	val_353
+172	val_172
+214	val_214
+462	val_462
+233	val_233
+406	val_406
+133	val_133
+175	val_175
+189	val_189
+454	val_454
+375	val_375
+401	val_401
+421	val_421
+407	val_407
+384	val_384
+256	val_256
+26	val_26
+134	val_134
+67	val_67
+384	val_384
+379	val_379
+18	val_18
+462	val_462
+492	val_492
+100	val_100
+298	val_298
+9	val_9
+341	val_341
+498	val_498
+146	val_146
+458	val_458
+362	val_362
+186	val_186
+285	val_285
+348	val_348
+167	val_167
+18	val_18
+273	val_273
+183	val_183
+281	val_281
+344	val_344
+97	val_97
+469	val_469
+315	val_315
+84	val_84
+28	val_28
+37	val_37
+448	val_448
+152	val_152
+348	val_348
+307	val_307
+194	val_194
+414	val_414
+477	val_477
+222	val_222
+126	val_126
+90	val_90
+169	val_169
+403	val_403
+400	val_400
+200	val_200
+97	val_97
+tst1	500	500
+238	val_238	val_238
+86	val_86	val_86
+311	val_311	val_311
+27	val_27	val_27
+165	val_165	val_165
+409	val_409	val_409
+255	val_255	val_255
+278	val_278	val_278
+98	val_98	val_98
+484	val_484	val_484
+265	val_265	val_265
+193	val_193	val_193
+401	val_401	val_401
+150	val_150	val_150
+273	val_273	val_273
+224	val_224	val_224
+369	val_369	val_369
+66	val_66	val_66
+128	val_128	val_128
+213	val_213	val_213
+146	val_146	val_146
+406	val_406	val_406
+429	val_429	val_429
+374	val_374	val_374
+152	val_152	val_152
+469	val_469	val_469
+145	val_145	val_145
+495	val_495	val_495
+37	val_37	val_37
+327	val_327	val_327
+281	val_281	val_281
+277	val_277	val_277
+209	val_209	val_209
+15	val_15	val_15
+82	val_82	val_82
+403	val_403	val_403
+166	val_166	val_166
+417	val_417	val_417
+430	val_430	val_430
+252	val_252	val_252
+292	val_292	val_292
+219	val_219	val_219
+287	val_287	val_287
+153	val_153	val_153
+193	val_193	val_193
+338	val_338	val_338
+446	val_446	val_446
+459	val_459	val_459
+394	val_394	val_394
+237	val_237	val_237
+482	val_482	val_482
+174	val_174	val_174
+413	val_413	val_413
+494	val_494	val_494
+207	val_207	val_207
+199	val_199	val_199
+466	val_466	val_466
+208	val_208	val_208
+174	val_174	val_174
+399	val_399	val_399
+396	val_396	val_396
+247	val_247	val_247
+417	val_417	val_417
+489	val_489	val_489
+162	val_162	val_162
+377	val_377	val_377
+397	val_397	val_397
+309	val_309	val_309
+365	val_365	val_365
+266	val_266	val_266
+439	val_439	val_439
+342	val_342	val_342
+367	val_367	val_367
+325	val_325	val_325
+167	val_167	val_167
+195	val_195	val_195
+475	val_475	val_475
+17	val_17	val_17
+113	val_113	val_113
+155	val_155	val_155
+203	val_203	val_203
+339	val_339	val_339
+0	val_0	val_0
+455	val_455	val_455
+128	val_128	val_128
+311	val_311	val_311
+316	val_316	val_316
+57	val_57	val_57
+302	val_302	val_302
+205	val_205	val_205
+149	val_149	val_149
+438	val_438	val_438
+345	val_345	val_345
+129	val_129	val_129
+170	val_170	val_170
+20	val_20	val_20
+489	val_489	val_489
+157	val_157	val_157
+378	val_378	val_378
+221	val_221	val_221
+92	val_92	val_92
+111	val_111	val_111
+47	val_47	val_47
+72	val_72	val_72
+4	val_4	val_4
+280	val_280	val_280
+35	val_35	val_35
+427	val_427	val_427
+277	val_277	val_277
+208	val_208	val_208
+356	val_356	val_356
+399	val_399	val_399
+169	val_169	val_169
+382	val_382	val_382
+498	val_498	val_498
+125	val_125	val_125
+386	val_386	val_386
+437	val_437	val_437
+469	val_469	val_469
+192	val_192	val_192
+286	val_286	val_286
+187	val_187	val_187
+176	val_176	val_176
+54	val_54	val_54
+459	val_459	val_459
+51	val_51	val_51
+138	val_138	val_138
+103	val_103	val_103
+239	val_239	val_239
+213	val_213	val_213
+216	val_216	val_216
+430	val_430	val_430
+278	val_278	val_278
+176	val_176	val_176
+289	val_289	val_289
+221	val_221	val_221
+65	val_65	val_65
+318	val_318	val_318
+332	val_332	val_332
+311	val_311	val_311
+275	val_275	val_275
+137	val_137	val_137
+241	val_241	val_241
+83	val_83	val_83
+333	val_333	val_333
+180	val_180	val_180
+284	val_284	val_284
+12	val_12	val_12
+230	val_230	val_230
+181	val_181	val_181
+67	val_67	val_67
+260	val_260	val_260
+404	val_404	val_404
+384	val_384	val_384
+489	val_489	val_489
+353	val_353	val_353
+373	val_373	val_373
+272	val_272	val_272
+138	val_138	val_138
+217	val_217	val_217
+84	val_84	val_84
+348	val_348	val_348
+466	val_466	val_466
+58	val_58	val_58
+8	val_8	val_8
+411	val_411	val_411
+230	val_230	val_230
+208	val_208	val_208
+348	val_348	val_348
+24	val_24	val_24
+463	val_463	val_463
+431	val_431	val_431
+179	val_179	val_179
+172	val_172	val_172
+42	val_42	val_42
+129	val_129	val_129
+158	val_158	val_158
+119	val_119	val_119
+496	val_496	val_496
+0	val_0	val_0
+322	val_322	val_322
+197	val_197	val_197
+468	val_468	val_468
+393	val_393	val_393
+454	val_454	val_454
+100	val_100	val_100
+298	val_298	val_298
+199	val_199	val_199
+191	val_191	val_191
+418	val_418	val_418
+96	val_96	val_96
+26	val_26	val_26
+165	val_165	val_165
+327	val_327	val_327
+230	val_230	val_230
+205	val_205	val_205
+120	val_120	val_120
+131	val_131	val_131
+51	val_51	val_51
+404	val_404	val_404
+43	val_43	val_43
+436	val_436	val_436
+156	val_156	val_156
+469	val_469	val_469
+468	val_468	val_468
+308	val_308	val_308
+95	val_95	val_95
+196	val_196	val_196
+288	val_288	val_288
+481	val_481	val_481
+457	val_457	val_457
+98	val_98	val_98
+282	val_282	val_282
+197	val_197	val_197
+187	val_187	val_187
+318	val_318	val_318
+318	val_318	val_318
+409	val_409	val_409
+470	val_470	val_470
+137	val_137	val_137
+369	val_369	val_369
+316	val_316	val_316
+169	val_169	val_169
+413	val_413	val_413
+85	val_85	val_85
+77	val_77	val_77
+0	val_0	val_0
+490	val_490	val_490
+87	val_87	val_87
+364	val_364	val_364
+179	val_179	val_179
+118	val_118	val_118
+134	val_134	val_134
+395	val_395	val_395
+282	val_282	val_282
+138	val_138	val_138
+238	val_238	val_238
+419	val_419	val_419
+15	val_15	val_15
+118	val_118	val_118
+72	val_72	val_72
+90	val_90	val_90
+307	val_307	val_307
+19	val_19	val_19
+435	val_435	val_435
+10	val_10	val_10
+277	val_277	val_277
+273	val_273	val_273
+306	val_306	val_306
+224	val_224	val_224
+309	val_309	val_309
+389	val_389	val_389
+327	val_327	val_327
+242	val_242	val_242
+369	val_369	val_369
+392	val_392	val_392
+272	val_272	val_272
+331	val_331	val_331
+401	val_401	val_401
+242	val_242	val_242
+452	val_452	val_452
+177	val_177	val_177
+226	val_226	val_226
+5	val_5	val_5
+497	val_497	val_497
+402	val_402	val_402
+396	val_396	val_396
+317	val_317	val_317
+395	val_395	val_395
+58	val_58	val_58
+35	val_35	val_35
+336	val_336	val_336
+95	val_95	val_95
+11	val_11	val_11
+168	val_168	val_168
+34	val_34	val_34
+229	val_229	val_229
+233	val_233	val_233
+143	val_143	val_143
+472	val_472	val_472
+322	val_322	val_322
+498	val_498	val_498
+160	val_160	val_160
+195	val_195	val_195
+42	val_42	val_42
+321	val_321	val_321
+430	val_430	val_430
+119	val_119	val_119
+489	val_489	val_489
+458	val_458	val_458
+78	val_78	val_78
+76	val_76	val_76
+41	val_41	val_41
+223	val_223	val_223
+492	val_492	val_492
+149	val_149	val_149
+449	val_449	val_449
+218	val_218	val_218
+228	val_228	val_228
+138	val_138	val_138
+453	val_453	val_453
+30	val_30	val_30
+209	val_209	val_209
+64	val_64	val_64
+468	val_468	val_468
+76	val_76	val_76
+74	val_74	val_74
+342	val_342	val_342
+69	val_69	val_69
+230	val_230	val_230
+33	val_33	val_33
+368	val_368	val_368
+103	val_103	val_103
+296	val_296	val_296
+113	val_113	val_113
+216	val_216	val_216
+367	val_367	val_367
+344	val_344	val_344
+167	val_167	val_167
+274	val_274	val_274
+219	val_219	val_219
+239	val_239	val_239
+485	val_485	val_485
+116	val_116	val_116
+223	val_223	val_223
+256	val_256	val_256
+263	val_263	val_263
+70	val_70	val_70
+487	val_487	val_487
+480	val_480	val_480
+401	val_401	val_401
+288	val_288	val_288
+191	val_191	val_191
+5	val_5	val_5
+244	val_244	val_244
+438	val_438	val_438
+128	val_128	val_128
+467	val_467	val_467
+432	val_432	val_432
+202	val_202	val_202
+316	val_316	val_316
+229	val_229	val_229
+469	val_469	val_469
+463	val_463	val_463
+280	val_280	val_280
+2	val_2	val_2
+35	val_35	val_35
+283	val_283	val_283
+331	val_331	val_331
+235	val_235	val_235
+80	val_80	val_80
+44	val_44	val_44
+193	val_193	val_193
+321	val_321	val_321
+335	val_335	val_335
+104	val_104	val_104
+466	val_466	val_466
+366	val_366	val_366
+175	val_175	val_175
+403	val_403	val_403
+483	val_483	val_483
+53	val_53	val_53
+105	val_105	val_105
+257	val_257	val_257
+406	val_406	val_406
+409	val_409	val_409
+190	val_190	val_190
+406	val_406	val_406
+401	val_401	val_401
+114	val_114	val_114
+258	val_258	val_258
+90	val_90	val_90
+203	val_203	val_203
+262	val_262	val_262
+348	val_348	val_348
+424	val_424	val_424
+12	val_12	val_12
+396	val_396	val_396
+201	val_201	val_201
+217	val_217	val_217
+164	val_164	val_164
+431	val_431	val_431
+454	val_454	val_454
+478	val_478	val_478
+298	val_298	val_298
+125	val_125	val_125
+431	val_431	val_431
+164	val_164	val_164
+424	val_424	val_424
+187	val_187	val_187
+382	val_382	val_382
+5	val_5	val_5
+70	val_70	val_70
+397	val_397	val_397
+480	val_480	val_480
+291	val_291	val_291
+24	val_24	val_24
+351	val_351	val_351
+255	val_255	val_255
+104	val_104	val_104
+70	val_70	val_70
+163	val_163	val_163
+438	val_438	val_438
+119	val_119	val_119
+414	val_414	val_414
+200	val_200	val_200
+491	val_491	val_491
+237	val_237	val_237
+439	val_439	val_439
+360	val_360	val_360
+248	val_248	val_248
+479	val_479	val_479
+305	val_305	val_305
+417	val_417	val_417
+199	val_199	val_199
+444	val_444	val_444
+120	val_120	val_120
+429	val_429	val_429
+169	val_169	val_169
+443	val_443	val_443
+323	val_323	val_323
+325	val_325	val_325
+277	val_277	val_277
+230	val_230	val_230
+478	val_478	val_478
+178	val_178	val_178
+468	val_468	val_468
+310	val_310	val_310
+317	val_317	val_317
+333	val_333	val_333
+493	val_493	val_493
+460	val_460	val_460
+207	val_207	val_207
+249	val_249	val_249
+265	val_265	val_265
+480	val_480	val_480
+83	val_83	val_83
+136	val_136	val_136
+353	val_353	val_353
+172	val_172	val_172
+214	val_214	val_214
+462	val_462	val_462
+233	val_233	val_233
+406	val_406	val_406
+133	val_133	val_133
+175	val_175	val_175
+189	val_189	val_189
+454	val_454	val_454
+375	val_375	val_375
+401	val_401	val_401
+421	val_421	val_421
+407	val_407	val_407
+384	val_384	val_384
+256	val_256	val_256
+26	val_26	val_26
+134	val_134	val_134
+67	val_67	val_67
+384	val_384	val_384
+379	val_379	val_379
+18	val_18	val_18
+462	val_462	val_462
+492	val_492	val_492
+100	val_100	val_100
+298	val_298	val_298
+9	val_9	val_9
+341	val_341	val_341
+498	val_498	val_498
+146	val_146	val_146
+458	val_458	val_458
+362	val_362	val_362
+186	val_186	val_186
+285	val_285	val_285
+348	val_348	val_348
+167	val_167	val_167
+18	val_18	val_18
+273	val_273	val_273
+183	val_183	val_183
+281	val_281	val_281
+344	val_344	val_344
+97	val_97	val_97
+469	val_469	val_469
+315	val_315	val_315
+84	val_84	val_84
+28	val_28	val_28
+37	val_37	val_37
+448	val_448	val_448
+152	val_152	val_152
+348	val_348	val_348
+307	val_307	val_307
+194	val_194	val_194
+414	val_414	val_414
+477	val_477	val_477
+222	val_222	val_222
+126	val_126	val_126
+90	val_90	val_90
+169	val_169	val_169
+403	val_403	val_403
+400	val_400	val_400
+200	val_200	val_200
+97	val_97	val_97

Added: hadoop/hive/trunk/ql/src/test/results/clientpositive/union19.q.out
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/results/clientpositive/union19.q.out?rev=765480&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/results/clientpositive/union19.q.out (added)
+++ hadoop/hive/trunk/ql/src/test/results/clientpositive/union19.q.out Thu Apr 16 06:09:58 2009
@@ -0,0 +1,992 @@
+ABSTRACT SYNTAX TREE:
+  (TOK_QUERY (TOK_FROM (TOK_SUBQUERY (TOK_UNION (TOK_QUERY (TOK_FROM (TOK_TABREF src s1)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR 'tst1' key) (TOK_SELEXPR (TOK_FUNCTION TOK_STRING (TOK_FUNCTION count 1)) value)))) (TOK_QUERY (TOK_FROM (TOK_TABREF src s2)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF s2 key) key) (TOK_SELEXPR (TOK_COLREF s2 value) value))))) unionsrc)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB DEST1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF unionsrc key)) (TOK_SELEXPR (TOK_FUNCTION count (TOK_COLREF unionsrc value)))) (TOK_GROUPBY (TOK_COLREF unionsrc key))) (TOK_INSERT (TOK_DESTINATION (TOK_TAB DEST2)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF unionsrc key)) (TOK_SELEXPR (TOK_COLREF unionsrc value)) (TOK_SELEXPR (TOK_COLREF unionsrc value)))))
+
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-2 depends on stages: Stage-1, Stage-3
+  Stage-0 depends on stages: Stage-2
+  Stage-3 is a root stage
+  Stage-2 depends on stages: Stage-1, Stage-3
+  Stage-0 depends on stages: Stage-2
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Alias -> Map Operator Tree:
+        null-subquery1:unionsrc-subquery1:s1 
+            Select Operator
+              Group By Operator
+                aggregations:
+                      expr: count(1)
+                mode: hash
+                Reduce Output Operator
+                  sort order: 
+                  tag: -1
+                  value expressions:
+                        expr: 0
+                        type: bigint
+      Reduce Operator Tree:
+        Group By Operator
+          aggregations:
+                expr: count(VALUE.0)
+          mode: mergepartial
+          Select Operator
+            expressions:
+                  expr: 'tst1'
+                  type: string
+                  expr: UDFToString(0)
+                  type: string
+            File Output Operator
+              compressed: false
+              GlobalTableId: 0
+              table:
+                  input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                  output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                  name: binary_table
+
+  Stage: Stage-2
+    Map Reduce
+      Alias -> Map Operator Tree:
+        /data/users/njain/hive5/hive5/build/ql/tmp/9803368/352635500.10003 
+          Union
+            Group By Operator
+              aggregations:
+                    expr: count(1)
+              keys:
+                    expr: 0
+                    type: string
+              mode: hash
+              Reduce Output Operator
+                key expressions:
+                      expr: 0
+                      type: string
+                sort order: +
+                Map-reduce partition columns:
+                      expr: 0
+                      type: string
+                tag: -1
+                value expressions:
+                      expr: 1
+                      type: bigint
+            Select Operator
+              expressions:
+                    expr: 0
+                    type: string
+                    expr: 1
+                    type: string
+                    expr: 1
+                    type: string
+              File Output Operator
+                compressed: false
+                GlobalTableId: 2
+                table:
+                    input format: org.apache.hadoop.mapred.TextInputFormat
+                    output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                    serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+                    name: dest2
+        /data/users/njain/hive5/hive5/build/ql/tmp/9803368/352635500.10002 
+          Union
+            Group By Operator
+              aggregations:
+                    expr: count(1)
+              keys:
+                    expr: 0
+                    type: string
+              mode: hash
+              Reduce Output Operator
+                key expressions:
+                      expr: 0
+                      type: string
+                sort order: +
+                Map-reduce partition columns:
+                      expr: 0
+                      type: string
+                tag: -1
+                value expressions:
+                      expr: 1
+                      type: bigint
+            Select Operator
+              expressions:
+                    expr: 0
+                    type: string
+                    expr: 1
+                    type: string
+                    expr: 1
+                    type: string
+              File Output Operator
+                compressed: false
+                GlobalTableId: 2
+                table:
+                    input format: org.apache.hadoop.mapred.TextInputFormat
+                    output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                    serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+                    name: dest2
+      Reduce Operator Tree:
+        Group By Operator
+          aggregations:
+                expr: count(VALUE.0)
+          keys:
+                expr: KEY.0
+                type: string
+          mode: mergepartial
+          Select Operator
+            expressions:
+                  expr: 0
+                  type: string
+                  expr: 1
+                  type: bigint
+            File Output Operator
+              compressed: false
+              GlobalTableId: 1
+              table:
+                  input format: org.apache.hadoop.mapred.TextInputFormat
+                  output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                  serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+                  name: dest1
+
+  Stage: Stage-0
+    Move Operator
+      tables:
+            replace: true
+            table:
+                input format: org.apache.hadoop.mapred.TextInputFormat
+                output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+                name: dest1
+            replace: true
+            table:
+                input format: org.apache.hadoop.mapred.TextInputFormat
+                output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+                name: dest2
+
+  Stage: Stage-3
+    Map Reduce
+      Alias -> Map Operator Tree:
+        null-subquery2:unionsrc-subquery2:s2 
+            Select Operator
+              expressions:
+                    expr: key
+                    type: string
+                    expr: value
+                    type: string
+              File Output Operator
+                compressed: false
+                GlobalTableId: 0
+                table:
+                    input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                    output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                    name: binary_table
+
+
+0	3
+10	1
+100	2
+103	2
+104	2
+105	1
+11	1
+111	1
+113	2
+114	1
+116	1
+118	2
+119	3
+12	2
+120	2
+125	2
+126	1
+128	3
+129	2
+131	1
+133	1
+134	2
+136	1
+137	2
+138	4
+143	1
+145	1
+146	2
+149	2
+15	2
+150	1
+152	2
+153	1
+155	1
+156	1
+157	1
+158	1
+160	1
+162	1
+163	1
+164	2
+165	2
+166	1
+167	3
+168	1
+169	4
+17	1
+170	1
+172	2
+174	2
+175	2
+176	2
+177	1
+178	1
+179	2
+18	2
+180	1
+181	1
+183	1
+186	1
+187	3
+189	1
+19	1
+190	1
+191	2
+192	1
+193	3
+194	1
+195	2
+196	1
+197	2
+199	3
+2	1
+20	1
+200	2
+201	1
+202	1
+203	2
+205	2
+207	2
+208	3
+209	2
+213	2
+214	1
+216	2
+217	2
+218	1
+219	2
+221	2
+222	1
+223	2
+224	2
+226	1
+228	1
+229	2
+230	5
+233	2
+235	1
+237	2
+238	2
+239	2
+24	2
+241	1
+242	2
+244	1
+247	1
+248	1
+249	1
+252	1
+255	2
+256	2
+257	1
+258	1
+26	2
+260	1
+262	1
+263	1
+265	2
+266	1
+27	1
+272	2
+273	3
+274	1
+275	1
+277	4
+278	2
+28	1
+280	2
+281	2
+282	2
+283	1
+284	1
+285	1
+286	1
+287	1
+288	2
+289	1
+291	1
+292	1
+296	1
+298	3
+30	1
+302	1
+305	1
+306	1
+307	2
+308	1
+309	2
+310	1
+311	3
+315	1
+316	3
+317	2
+318	3
+321	2
+322	2
+323	1
+325	2
+327	3
+33	1
+331	2
+332	1
+333	2
+335	1
+336	1
+338	1
+339	1
+34	1
+341	1
+342	2
+344	2
+345	1
+348	5
+35	3
+351	1
+353	2
+356	1
+360	1
+362	1
+364	1
+365	1
+366	1
+367	2
+368	1
+369	3
+37	2
+373	1
+374	1
+375	1
+377	1
+378	1
+379	1
+382	2
+384	3
+386	1
+389	1
+392	1
+393	1
+394	1
+395	2
+396	3
+397	2
+399	2
+4	1
+400	1
+401	5
+402	1
+403	3
+404	2
+406	4
+407	1
+409	3
+41	1
+411	1
+413	2
+414	2
+417	3
+418	1
+419	1
+42	2
+421	1
+424	2
+427	1
+429	2
+43	1
+430	3
+431	3
+432	1
+435	1
+436	1
+437	1
+438	3
+439	2
+44	1
+443	1
+444	1
+446	1
+448	1
+449	1
+452	1
+453	1
+454	3
+455	1
+457	1
+458	2
+459	2
+460	1
+462	2
+463	2
+466	3
+467	1
+468	4
+469	5
+47	1
+470	1
+472	1
+475	1
+477	1
+478	2
+479	1
+480	3
+481	1
+482	1
+483	1
+484	1
+485	1
+487	1
+489	4
+490	1
+491	1
+492	2
+493	1
+494	1
+495	1
+496	1
+497	1
+498	3
+5	3
+51	2
+53	1
+54	1
+57	1
+58	2
+64	1
+65	1
+66	1
+67	2
+69	1
+70	3
+72	2
+74	1
+76	2
+77	1
+78	1
+8	1
+80	1
+82	1
+83	2
+84	2
+85	1
+86	1
+87	1
+9	1
+90	3
+92	1
+95	2
+96	1
+97	2
+98	2
+tst1	1
+tst1	500	500
+238	val_238	val_238
+86	val_86	val_86
+311	val_311	val_311
+27	val_27	val_27
+165	val_165	val_165
+409	val_409	val_409
+255	val_255	val_255
+278	val_278	val_278
+98	val_98	val_98
+484	val_484	val_484
+265	val_265	val_265
+193	val_193	val_193
+401	val_401	val_401
+150	val_150	val_150
+273	val_273	val_273
+224	val_224	val_224
+369	val_369	val_369
+66	val_66	val_66
+128	val_128	val_128
+213	val_213	val_213
+146	val_146	val_146
+406	val_406	val_406
+429	val_429	val_429
+374	val_374	val_374
+152	val_152	val_152
+469	val_469	val_469
+145	val_145	val_145
+495	val_495	val_495
+37	val_37	val_37
+327	val_327	val_327
+281	val_281	val_281
+277	val_277	val_277
+209	val_209	val_209
+15	val_15	val_15
+82	val_82	val_82
+403	val_403	val_403
+166	val_166	val_166
+417	val_417	val_417
+430	val_430	val_430
+252	val_252	val_252
+292	val_292	val_292
+219	val_219	val_219
+287	val_287	val_287
+153	val_153	val_153
+193	val_193	val_193
+338	val_338	val_338
+446	val_446	val_446
+459	val_459	val_459
+394	val_394	val_394
+237	val_237	val_237
+482	val_482	val_482
+174	val_174	val_174
+413	val_413	val_413
+494	val_494	val_494
+207	val_207	val_207
+199	val_199	val_199
+466	val_466	val_466
+208	val_208	val_208
+174	val_174	val_174
+399	val_399	val_399
+396	val_396	val_396
+247	val_247	val_247
+417	val_417	val_417
+489	val_489	val_489
+162	val_162	val_162
+377	val_377	val_377
+397	val_397	val_397
+309	val_309	val_309
+365	val_365	val_365
+266	val_266	val_266
+439	val_439	val_439
+342	val_342	val_342
+367	val_367	val_367
+325	val_325	val_325
+167	val_167	val_167
+195	val_195	val_195
+475	val_475	val_475
+17	val_17	val_17
+113	val_113	val_113
+155	val_155	val_155
+203	val_203	val_203
+339	val_339	val_339
+0	val_0	val_0
+455	val_455	val_455
+128	val_128	val_128
+311	val_311	val_311
+316	val_316	val_316
+57	val_57	val_57
+302	val_302	val_302
+205	val_205	val_205
+149	val_149	val_149
+438	val_438	val_438
+345	val_345	val_345
+129	val_129	val_129
+170	val_170	val_170
+20	val_20	val_20
+489	val_489	val_489
+157	val_157	val_157
+378	val_378	val_378
+221	val_221	val_221
+92	val_92	val_92
+111	val_111	val_111
+47	val_47	val_47
+72	val_72	val_72
+4	val_4	val_4
+280	val_280	val_280
+35	val_35	val_35
+427	val_427	val_427
+277	val_277	val_277
+208	val_208	val_208
+356	val_356	val_356
+399	val_399	val_399
+169	val_169	val_169
+382	val_382	val_382
+498	val_498	val_498
+125	val_125	val_125
+386	val_386	val_386
+437	val_437	val_437
+469	val_469	val_469
+192	val_192	val_192
+286	val_286	val_286
+187	val_187	val_187
+176	val_176	val_176
+54	val_54	val_54
+459	val_459	val_459
+51	val_51	val_51
+138	val_138	val_138
+103	val_103	val_103
+239	val_239	val_239
+213	val_213	val_213
+216	val_216	val_216
+430	val_430	val_430
+278	val_278	val_278
+176	val_176	val_176
+289	val_289	val_289
+221	val_221	val_221
+65	val_65	val_65
+318	val_318	val_318
+332	val_332	val_332
+311	val_311	val_311
+275	val_275	val_275
+137	val_137	val_137
+241	val_241	val_241
+83	val_83	val_83
+333	val_333	val_333
+180	val_180	val_180
+284	val_284	val_284
+12	val_12	val_12
+230	val_230	val_230
+181	val_181	val_181
+67	val_67	val_67
+260	val_260	val_260
+404	val_404	val_404
+384	val_384	val_384
+489	val_489	val_489
+353	val_353	val_353
+373	val_373	val_373
+272	val_272	val_272
+138	val_138	val_138
+217	val_217	val_217
+84	val_84	val_84
+348	val_348	val_348
+466	val_466	val_466
+58	val_58	val_58
+8	val_8	val_8
+411	val_411	val_411
+230	val_230	val_230
+208	val_208	val_208
+348	val_348	val_348
+24	val_24	val_24
+463	val_463	val_463
+431	val_431	val_431
+179	val_179	val_179
+172	val_172	val_172
+42	val_42	val_42
+129	val_129	val_129
+158	val_158	val_158
+119	val_119	val_119
+496	val_496	val_496
+0	val_0	val_0
+322	val_322	val_322
+197	val_197	val_197
+468	val_468	val_468
+393	val_393	val_393
+454	val_454	val_454
+100	val_100	val_100
+298	val_298	val_298
+199	val_199	val_199
+191	val_191	val_191
+418	val_418	val_418
+96	val_96	val_96
+26	val_26	val_26
+165	val_165	val_165
+327	val_327	val_327
+230	val_230	val_230
+205	val_205	val_205
+120	val_120	val_120
+131	val_131	val_131
+51	val_51	val_51
+404	val_404	val_404
+43	val_43	val_43
+436	val_436	val_436
+156	val_156	val_156
+469	val_469	val_469
+468	val_468	val_468
+308	val_308	val_308
+95	val_95	val_95
+196	val_196	val_196
+288	val_288	val_288
+481	val_481	val_481
+457	val_457	val_457
+98	val_98	val_98
+282	val_282	val_282
+197	val_197	val_197
+187	val_187	val_187
+318	val_318	val_318
+318	val_318	val_318
+409	val_409	val_409
+470	val_470	val_470
+137	val_137	val_137
+369	val_369	val_369
+316	val_316	val_316
+169	val_169	val_169
+413	val_413	val_413
+85	val_85	val_85
+77	val_77	val_77
+0	val_0	val_0
+490	val_490	val_490
+87	val_87	val_87
+364	val_364	val_364
+179	val_179	val_179
+118	val_118	val_118
+134	val_134	val_134
+395	val_395	val_395
+282	val_282	val_282
+138	val_138	val_138
+238	val_238	val_238
+419	val_419	val_419
+15	val_15	val_15
+118	val_118	val_118
+72	val_72	val_72
+90	val_90	val_90
+307	val_307	val_307
+19	val_19	val_19
+435	val_435	val_435
+10	val_10	val_10
+277	val_277	val_277
+273	val_273	val_273
+306	val_306	val_306
+224	val_224	val_224
+309	val_309	val_309
+389	val_389	val_389
+327	val_327	val_327
+242	val_242	val_242
+369	val_369	val_369
+392	val_392	val_392
+272	val_272	val_272
+331	val_331	val_331
+401	val_401	val_401
+242	val_242	val_242
+452	val_452	val_452
+177	val_177	val_177
+226	val_226	val_226
+5	val_5	val_5
+497	val_497	val_497
+402	val_402	val_402
+396	val_396	val_396
+317	val_317	val_317
+395	val_395	val_395
+58	val_58	val_58
+35	val_35	val_35
+336	val_336	val_336
+95	val_95	val_95
+11	val_11	val_11
+168	val_168	val_168
+34	val_34	val_34
+229	val_229	val_229
+233	val_233	val_233
+143	val_143	val_143
+472	val_472	val_472
+322	val_322	val_322
+498	val_498	val_498
+160	val_160	val_160
+195	val_195	val_195
+42	val_42	val_42
+321	val_321	val_321
+430	val_430	val_430
+119	val_119	val_119
+489	val_489	val_489
+458	val_458	val_458
+78	val_78	val_78
+76	val_76	val_76
+41	val_41	val_41
+223	val_223	val_223
+492	val_492	val_492
+149	val_149	val_149
+449	val_449	val_449
+218	val_218	val_218
+228	val_228	val_228
+138	val_138	val_138
+453	val_453	val_453
+30	val_30	val_30
+209	val_209	val_209
+64	val_64	val_64
+468	val_468	val_468
+76	val_76	val_76
+74	val_74	val_74
+342	val_342	val_342
+69	val_69	val_69
+230	val_230	val_230
+33	val_33	val_33
+368	val_368	val_368
+103	val_103	val_103
+296	val_296	val_296
+113	val_113	val_113
+216	val_216	val_216
+367	val_367	val_367
+344	val_344	val_344
+167	val_167	val_167
+274	val_274	val_274
+219	val_219	val_219
+239	val_239	val_239
+485	val_485	val_485
+116	val_116	val_116
+223	val_223	val_223
+256	val_256	val_256
+263	val_263	val_263
+70	val_70	val_70
+487	val_487	val_487
+480	val_480	val_480
+401	val_401	val_401
+288	val_288	val_288
+191	val_191	val_191
+5	val_5	val_5
+244	val_244	val_244
+438	val_438	val_438
+128	val_128	val_128
+467	val_467	val_467
+432	val_432	val_432
+202	val_202	val_202
+316	val_316	val_316
+229	val_229	val_229
+469	val_469	val_469
+463	val_463	val_463
+280	val_280	val_280
+2	val_2	val_2
+35	val_35	val_35
+283	val_283	val_283
+331	val_331	val_331
+235	val_235	val_235
+80	val_80	val_80
+44	val_44	val_44
+193	val_193	val_193
+321	val_321	val_321
+335	val_335	val_335
+104	val_104	val_104
+466	val_466	val_466
+366	val_366	val_366
+175	val_175	val_175
+403	val_403	val_403
+483	val_483	val_483
+53	val_53	val_53
+105	val_105	val_105
+257	val_257	val_257
+406	val_406	val_406
+409	val_409	val_409
+190	val_190	val_190
+406	val_406	val_406
+401	val_401	val_401
+114	val_114	val_114
+258	val_258	val_258
+90	val_90	val_90
+203	val_203	val_203
+262	val_262	val_262
+348	val_348	val_348
+424	val_424	val_424
+12	val_12	val_12
+396	val_396	val_396
+201	val_201	val_201
+217	val_217	val_217
+164	val_164	val_164
+431	val_431	val_431
+454	val_454	val_454
+478	val_478	val_478
+298	val_298	val_298
+125	val_125	val_125
+431	val_431	val_431
+164	val_164	val_164
+424	val_424	val_424
+187	val_187	val_187
+382	val_382	val_382
+5	val_5	val_5
+70	val_70	val_70
+397	val_397	val_397
+480	val_480	val_480
+291	val_291	val_291
+24	val_24	val_24
+351	val_351	val_351
+255	val_255	val_255
+104	val_104	val_104
+70	val_70	val_70
+163	val_163	val_163
+438	val_438	val_438
+119	val_119	val_119
+414	val_414	val_414
+200	val_200	val_200
+491	val_491	val_491
+237	val_237	val_237
+439	val_439	val_439
+360	val_360	val_360
+248	val_248	val_248
+479	val_479	val_479
+305	val_305	val_305
+417	val_417	val_417
+199	val_199	val_199
+444	val_444	val_444
+120	val_120	val_120
+429	val_429	val_429
+169	val_169	val_169
+443	val_443	val_443
+323	val_323	val_323
+325	val_325	val_325
+277	val_277	val_277
+230	val_230	val_230
+478	val_478	val_478
+178	val_178	val_178
+468	val_468	val_468
+310	val_310	val_310
+317	val_317	val_317
+333	val_333	val_333
+493	val_493	val_493
+460	val_460	val_460
+207	val_207	val_207
+249	val_249	val_249
+265	val_265	val_265
+480	val_480	val_480
+83	val_83	val_83
+136	val_136	val_136
+353	val_353	val_353
+172	val_172	val_172
+214	val_214	val_214
+462	val_462	val_462
+233	val_233	val_233
+406	val_406	val_406
+133	val_133	val_133
+175	val_175	val_175
+189	val_189	val_189
+454	val_454	val_454
+375	val_375	val_375
+401	val_401	val_401
+421	val_421	val_421
+407	val_407	val_407
+384	val_384	val_384
+256	val_256	val_256
+26	val_26	val_26
+134	val_134	val_134
+67	val_67	val_67
+384	val_384	val_384
+379	val_379	val_379
+18	val_18	val_18
+462	val_462	val_462
+492	val_492	val_492
+100	val_100	val_100
+298	val_298	val_298
+9	val_9	val_9
+341	val_341	val_341
+498	val_498	val_498
+146	val_146	val_146
+458	val_458	val_458
+362	val_362	val_362
+186	val_186	val_186
+285	val_285	val_285
+348	val_348	val_348
+167	val_167	val_167
+18	val_18	val_18
+273	val_273	val_273
+183	val_183	val_183
+281	val_281	val_281
+344	val_344	val_344
+97	val_97	val_97
+469	val_469	val_469
+315	val_315	val_315
+84	val_84	val_84
+28	val_28	val_28
+37	val_37	val_37
+448	val_448	val_448
+152	val_152	val_152
+348	val_348	val_348
+307	val_307	val_307
+194	val_194	val_194
+414	val_414	val_414
+477	val_477	val_477
+222	val_222	val_222
+126	val_126	val_126
+90	val_90	val_90
+169	val_169	val_169
+403	val_403	val_403
+400	val_400	val_400
+200	val_200	val_200
+97	val_97	val_97



Mime
View raw message