[ 
https://issues.apache.org/jira/browse/DERBY-2998?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12574793#action_12574793
 ] 

A B commented on DERBY-2998:
----------------------------

I applied "d2998-followup-distinct.diff" and verified that both the DISTINCT 
issue and the ArrayIndexOutOfBounds issue are resolved.

That said, in re-reading the comments in ProjectRestrictNode I noticed this:

    /*
     * We have a window function column in the RCL of our child
     * PRN, and need to regenerate the VCNs.
     */

Out of curiosity I made a quick change so that, instead of checking for 
instances of WindowNode and DIstinctNode, the code just checked the condition 
described in the comment, i.e. "do we have a window function column in the RCL 
of our child PRN?".  So I replaced:

        boolean regenVCN = false;
        ProjectRestrictNode prn = (ProjectRestrictNode)childResult;
        if (prn.childResult instanceof WindowNode){
            regenVCN = true;
        }
        if (prn.childResult instanceof DistinctNode){
            DistinctNode dn = (DistinctNode)prn.childResult;
            if (dn.childResult instanceof WindowNode){
                regenVCN = true;
            }
        }
        if (regenVCN){
            ...

with

        ProjectRestrictNode prn = (ProjectRestrictNode)childResult;
        if (prn.childResult.getResultColumns()
                .containsWindowFunctionResultColumn())
        {
            ...

>From what I can tell this change still makes all of the queries pass 
>(including OLAPTest).  Would this be a viable alternative, or would such an 
>approach be too broad?  I admit I didn't do any tracing with this particular 
>change, I just ran the tests and noted that they appear to run to correctly.  
>The code seems cleaner and matches the comment, so I thought I'd throw it out 
>there...

On a completely unrelated note, I accidentally discovered that queries of the 
form:

   select * from (select row_number() over() as r, ... from t) x where r < ...

can actually return different results depending on the presence of indexes.  
This is because the rows returned from the subquery have no guaranteed ordering 
(Derby doesn't allow ORDER BY in subqueries), and thus any predicate which 
restricts based on row_number() will restrict the rows based on an undefined 
order.  Since the order of the rows from the subquery may depend on the 
presence of indexes, the set of rows which survives a row_order()-based 
restriction may depend on the indexes, as well.  In the end I do _not_ think 
this is a bug--but it does strike me as a probable point of confusion for 
users.  It seems that anyone who wants "the first x rows only" has to either 
accept the fact that "first" does not imply "ordered" (and thus results can 
vary depending on what conglomerate the optimizer chooses), or else s/he has to 
use optimizer ovverides to force the optimizer to use an index which is ordered 
on the desired columns.  Is that an accurate assessment? I'm not saying 
anything needs to be done to address this, I'm just curious as to whether or 
not I've understood this correctly.

But all of that aside, thanks for resolving the DISTINCT issue, Thomas! :)

> Add support for ROW_NUMBER() window function
> --------------------------------------------
>
>                 Key: DERBY-2998
>                 URL: https://issues.apache.org/jira/browse/DERBY-2998
>             Project: Derby
>          Issue Type: Sub-task
>          Components: SQL
>            Reporter: Thomas Nielsen
>            Assignee: Thomas Nielsen
>            Priority: Minor
>         Attachments: d2998-10.diff, d2998-10.stat, d2998-11.diff, 
> d2998-12.diff, d2998-12.stat, d2998-13.diff, d2998-13.stat, d2998-14.diff, 
> d2998-14.stat, d2998-15.diff, d2998-15.stat, d2998-16.diff, d2998-16.stat, 
> d2998-17.diff, d2998-17.stat, d2998-18.diff, d2998-18.stat, d2998-19.diff, 
> d2998-19.stat, d2998-4.diff, d2998-4.stat, d2998-5.diff, d2998-5.stat, 
> d2998-6.diff, d2998-6.stat, d2998-7.diff, d2998-7.stat, d2998-8.diff, 
> d2998-8.stat, d2998-9-derby.log, d2998-9.diff, d2998-9.stat, 
> d2998-doc-1.diff, d2998-doc-1.stat, d2998-doc-2.diff, d2998-doc-2.stat, 
> d2998-followup-2.diff, d2998-followup-2.stat, d2998-followup-distinct.diff, 
> d2998-followup-distinct.stat, d2998-followup-issue1.diff, 
> d2998-followup-issue1.stat, d2998-followup-issue4.diff, 
> d2998-followup-issue4.stat, d2998-followup-testsuite.diff, 
> d2998-followup-testsuite.stat, d2998-test.diff, d2998-test.stat, 
> d2998-test2.diff, d2998-test2.stat, d2998-test3.diff, d2998-test3.stat, 
> d2998-test4.diff, d2998-test4.stat, d2998-test6.diff, d2998-test7.diff, 
> d2998-test8.diff, d2998-test9.diff
>
>
> As part of implementing the overall OLAP Operations features of SQL 
> (DERBY-581), implement the ROW_NUMBER() window function.
> More information about this feature is available at 
> http://wiki.apache.org/db-derby/OLAPRowNumber

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to