[ 
https://issues.apache.org/jira/browse/TRAFODION-2840?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16339619#comment-16339619
 ] 

ASF GitHub Bot commented on TRAFODION-2840:
-------------------------------------------

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

    https://github.com/apache/trafodion/pull/1414#discussion_r163930312
  
    --- 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();
    --- End diff --
    
    Hmmmm... Suppose the parent is different at normalize time than it is here. 
(I don't think that ever happens but let's suppose in the future some Optimizer 
rule might make that happen.) Suppose further that the order requirement for 
the parent is different. We can generate a valid plan by doing a sort before 
doing first n (satisfying the first n + ORDER BY semantic) and then doing 
another sort with different criteria afterward (satisfying the different sort 
order of the parent). I think that's what this code achieves. If I remove this 
line, then we won't generate a plan (which might be OK because there might be 
other plan alternatives, but it might not in which case we'll get an error 
2235). So my take is that leaving this line here is slightly more robust. What 
do you think?


> ORDER BY clause on a view circumvents [first n] updatability check
> ------------------------------------------------------------------
>
>                 Key: TRAFODION-2840
>                 URL: https://issues.apache.org/jira/browse/TRAFODION-2840
>             Project: Apache Trafodion
>          Issue Type: Bug
>          Components: sql-cmp
>    Affects Versions: 2.3
>         Environment: All
>            Reporter: David Wayne Birdsall
>            Assignee: David Wayne Birdsall
>            Priority: Major
>
> The following script fails:
> >>create table t1 (a int not null, b int, primary key (a));
> --- SQL operation complete.
> >>
> >>insert into t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6);
> --- 6 row(s) inserted.
> >>
> >>create view v1 as select [first 5] * from t1 order by a;
> --- SQL operation complete.
> >>
> >>create view v2 as select [first 5] * from t1;
> --- SQL operation complete.
> >>
> >>update v1 set b = 6;
> --- 6 row(s) updated.
> >> -- should fail; v1 should be non-updatable
> >>
> >>update v2 set b = 7;
> *** ERROR[4028] Table or view TRAFODION.SEABASE.V2 is not updatable.
> *** ERROR[8822] The statement was not prepared.
> >>-- does fail; v2 is non-updatable (correctly)
> >>
> It seems the presence of the ORDER BY clause in the view definition 
> circumvents the [first n] updatability check.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to