Ejemplo n.º 1
0
 /** Extract a minimal set of WindowGroups from analyticExprs. */
 private List<WindowGroup> collectWindowGroups() {
   List<Expr> analyticExprs = analyticInfo_.getAnalyticExprs();
   List<WindowGroup> groups = Lists.newArrayList();
   for (int i = 0; i < analyticExprs.size(); ++i) {
     AnalyticExpr analyticExpr = (AnalyticExpr) analyticExprs.get(i);
     // Do not generate the plan for non-materialized analytic exprs.
     if (!analyticInfo_.getOutputTupleDesc().getSlots().get(i).isMaterialized()) {
       continue;
     }
     boolean match = false;
     for (WindowGroup group : groups) {
       if (group.isCompatible(analyticExpr)) {
         group.add(
             (AnalyticExpr) analyticInfo_.getAnalyticExprs().get(i),
             analyticInfo_.getOutputTupleDesc().getSlots().get(i),
             analyticInfo_.getIntermediateTupleDesc().getSlots().get(i));
         match = true;
         break;
       }
     }
     if (!match) {
       groups.add(
           new WindowGroup(
               (AnalyticExpr) analyticInfo_.getAnalyticExprs().get(i),
               analyticInfo_.getOutputTupleDesc().getSlots().get(i),
               analyticInfo_.getIntermediateTupleDesc().getSlots().get(i)));
     }
   }
   return groups;
 }