[
https://issues.apache.org/jira/browse/DERBY-3634?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12745732#action_12745732
]
Dag H. Wanvik edited comment on DERBY-3634 at 8/20/09 5:01 PM:
---------------------------------------------------------------
Attaching version "b" of this patch. Relative to "a", it adds:
- formatting cleanup, whitespace, long lines etc.
- Makes ROW_NUMBER work inside an ORDER BY clause in the presence of
a WHERE clause. It was optimized away because it was erroneously
found to be constant relative to the restriction, see SelectNode's
call to orderByList.removeConstantColumns(wherePredicates).
Letting WdwFunctionNode overload methods isConstantExpression and
constantExpression to return "false" solved the problem. A new test
case has been added to OLAPTest to verify this use case.
The patch it not production-ready, it lacks some Javadocs still, but
otherwise, I think it is ready for a review.
was (Author: dagw):
Attaching version "b" of this patch. Relative to "a", it adds:
- formatting cleanup, whitespace, long lines etc.
- Makes ROW_NUMBER work inside and ORDER BY clause in the presence of
a WHERE clause. It was optimized away because it was erroneously
found to be constant relative to the restriction, see SelectNode's
call to orderByList.removeConstantColumns(wherePredicates).
Letting WdwFunctionNode overload methods isConstantExpression and
constantExpression to return "false" solved the problem. A new test
case has been added to OLAPTest to verify this use case.
The patch it not production-ready, it lacks some Javadocs still, but
otherwise, I think it is ready for a review.
> Cannot use row_number() in ORDER BY clause
> ------------------------------------------
>
> Key: DERBY-3634
> URL: https://issues.apache.org/jira/browse/DERBY-3634
> Project: Derby
> Issue Type: Bug
> Components: SQL
> Affects Versions: 10.4.1.3
> Reporter: Rick Hillegas
> Assignee: Dag H. Wanvik
> Attachments: derby-3634-a.diff, derby-3634-a.stat, derby-3634-a.txt,
> derby-3634-b.diff, derby-3634-b.stat
>
>
> The following query works correctly:
> select abs(a), row_number() over ()
> from t
> where a > 100 and a < 111
> order by abs(a)
> I expected the following query to also work, but it raised an exception:
> select abs(a), row_number() over ()
> from t
> where a > 100 and a < 111
> order by row_number() over ()
> This is the error I saw: "ERROR 42X01: Syntax error: Encountered "over" at
> line 5, column 23".
> Here are the reasons why I think that this syntax is supposed to be supported:
> According to my reading of the 2003 SQL spec, the ORDER BY clause should be
> able to sort on any expression in the SELECT list. That includes OLAP
> expressions. I believe this is so because, according to part 2, section 10.10
> (<sort specification>), a <sort key> can be any <value expression> and if you
> follow the grammar for <value expression>, it can resolve to be a <value
> expression primary> (see section 6.3), which can in turn resolve to be a
> <window function>. This reasoning is supported by tracing the hotlinks on the
> following page which lays out the SQL 2003 BNF:
> http://savage.net.au/SQL/sql-2003-2.bnf.html This interpretation is further
> supported by the example of an ORDER BY clause referencing an OLAP expression
> which is provided on page 23 of the introduction to OLAP written by Fred
> Zemke, Krishna Kulkarni, Andy Witkowski, and Bob Lyle:
> www.cse.iitb.ac.in/dbms/Data/Papers-Other/SQL1999/OLAP-99-154r2.pdf
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.