Github user zellerh commented on a diff in the pull request:

    https://github.com/apache/trafodion/pull/1414#discussion_r163898763
  
    --- Diff: core/sql/optimizer/OptPhysRelExpr.cpp ---
    @@ -15499,6 +15499,95 @@ GenericUtilExpr::synthPhysicalProperty(const 
Context* myContext,
       return sppForMe;
     } //  GenericUtilExpr::synthPhysicalProperty()
     
    +// -----------------------------------------------------------------------
    +// FirstN::createContextForAChild()
    +// The FirstN node may have an order by requirement that it needs to
    +// pass to its child context. Other than that, this method is quite
    +// similar to the default implementation, RelExpr::createContextForAChild.
    +// The arity of FirstN is always 1, so some logic from the default
    +// implementation that deals with childIndex > 0 is unnecessary and has
    +// been removed.
    +// -----------------------------------------------------------------------
    +Context * FirstN::createContextForAChild(Context* myContext,
    +                                 PlanWorkSpace* pws,
    +                                 Lng32& childIndex)
    +{
    +  const ReqdPhysicalProperty* rppForMe =
    +                                    myContext->getReqdPhysicalProperty();
    +
    +  CMPASSERT(getArity() == 1);
    +
    +  childIndex = getArity() - pws->getCountOfChildContexts() - 1;
    +
    +  // return if we are done
    +  if (childIndex < 0)
    +    return NULL;
    +
    +  RequirementGenerator rg(child(childIndex), rppForMe);
    +
    +  if (reqdOrder().entries() > 0)
    +    {
    +      // replace our sort requirement with that implied by our ORDER BY 
clause
    +
    +      rg.removeSortKey();
    +
    +      ValueIdList sortKey;
    +      sortKey.insert(reqdOrder());
    --- End diff --
    
    Just a nit: It isn't really necessary to make a copy of the required order 
here, reqdOrder() could be passed directly to the rg.addSortKey method below?


---

Reply via email to