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

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

> Is this something that has been fixed with patch 17? Or is it still work in 
> progress?

Okay, I ran the same queries with patch 17 and can see for myself that this 
particular change has not yet been made.

On patch 17 itself I have a few more comments:

1) The patch adds the following to ResultColumnList:

   /*
    * To avoid messing up the correlation flags we should determine if any
    * of this RCLs columns are either:
    * - A windowfunction column
    * - A virtual column node pointing to window function column
    */

I think it would be nice to expand a bit on *why* this code is necessary. The 
comments indicate that without the code we could "mess up the correlation 
flags", but it doesn't say how. At a minimum it would be good to have a pointer 
to the correlation code that is affected by this.

2) Code in WindowNode.generate(...) ends with a check and a comment about 
positioned updates and deletes. Are there test cases to ensure all is okay with 
such operations?

3) On more a general level, and especially with respect to comment # 5 in my 
Feb 25th post, it seems like the changes for this issue rely heavily on the 
expected appearance of a WindowFunctionColumnNode in the query tree. Namely, 
the fact that

  ResultColumn -> WindowFunctionColumn

is expected in some places and

  ResultColumn -> VirtualColumnNode -> WindowFunctionColumn

is expected in others makes me nervous. My experience with 
optimization/compilation is that VirtualColumnNodes, ResultColumns, and 
ColumnReferences are often stacked on top of each other in rather gratuitous 
fashion. Code which accesses these types of nodes is usually (or at least, 
often) written with the expectation that it could be dealing with VCN, 
ResultColumn, and/or ColRef chains of arbitrary length, and so must walk the 
chain when retrieving certain information.

But the changes for ROW_NUMBER() take a different approach, one in which the 
assumption is that we will always have either 1) a ResultColumn whose child is 
a WindowFunctionColumn, or 2) a ResultColumn whose child is a VirtualColumnNode 
whose child is a WindowFunctionColumn. But how confident are we that this will 
_always_ be the case?

With this thought in my head I can't help but feel that queries which involve 
ROW_NUMBER() and which are larger or more complex are at a high risk for column 
"mis-information", which could cause issues. I applied patch 17 and tried 
writing some more complicated queries that use ROW_NUMBER(), and it wasn't long 
before I hit the ASSERT failure that we've seen before. Esp:

-- OK
select row_number() over () from t1 union all select row_number() over () from 
t1;
select 2 * r from (select row_number() over () from t1) x(r);

-- Fail.
select count(*) from (select row_number() over() from t1) x;
select count(*) from (select row_number() over () as r from t1) as t(r) where r 
<=3;

-- OK
select c3, c1, c2 from
  (select i, j, row_number() over() as r from t1) x1 (c1, c2, r1),
  (select row_number() over() as r, j, i from t1) x2 (r2, c3, c4);

-- OK
select c3, c1, c2 from
  (select i, j, row_number() over() as r from t1) x1 (c1, c2, r1),
  (select row_number() over() as r, j, i from t1) x2 (r2, c3, c4),
  t1;

-- OK
select c3, c1, c2 from
  (select i, j, row_number() over() as r from t1) x1 (c1, c2, r1),
  (select row_number() over() as r, j, i from t1) x2 (r2, c3, c4),
  t1
 where x1.r1 = 2 * x2.r2;

-- Fails
select c3, c1, c2 from
  (select i, j, row_number() over() as r from t1) x1 (c1, c2, r1),
  (select row_number() over() as r, j, i from t1) x2 (r2, c3, c4),
  t1
 where x2.c4 = t1.i;

-- Fails
select c3, c1, c2 from
  (select i, j, row_number() over() as r from t1) x1 (c1, c2, r1),
  (select row_number() over() as r, j, i from t1) x2 (r2, c3, c4),
  t1
 where x1.r1 = 2 * x2.r2 and x2.c4 = t1.i;

Perhaps these failures have nothing to do with my "fear" outlined above--in 
which case I apologize of the misdirection. But in any event, there are still 
some failures that I see with patch 17. I'm not sure to what extent these need 
to be resolved before code can be committed, as they (appear to) only occur 
when ROW_NUMBER() is in use and thus shouldn't affect existing apps. But I'm 
not the one to say for sure one way or the other...

> 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-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-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
>
>
> 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