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

xiejiajun commented on CALCITE-4323:
------------------------------------

I found the cause of the problem: *when expanding the view, the view is 
considered not the top node, so the sorting will be lost.*
At the same time, I confirm that top only affects sort and all unit tests pass 
normally.
Only sort related code uses top:

{code:java}
Field
    top
Usages in Project and Libraries  (5 usages found)
    Value read  (4 usages found)
        calcite.core.main  (4 usages found)
            org.apache.calcite.sql2rel  (4 usages found)
                SqlToRelConverter  (4 usages found)
                    convertOrder(SqlSelect, Blackboard, RelCollation, 
List<SqlNode>, SqlNode, SqlNode)  (3 usages found)
                        856 if (removeSortInSubQuery(bb.top)
                        859 assert removeSortInSubQuery(bb.top) || 
collation.getFieldCollations().isEmpty();
                        880 if (orderExprList.size() > 0 && !bb.top) {
                    gatherOrderExprs(Blackboard, SqlSelect, SqlNodeList, 
List<SqlNode>, List<RelFieldCollation>)  (1 usage found)
                        3413 if (removeSortInSubQuery(bb.top)) {
    Value write  (1 usage found)
        calcite.core.main  (1 usage found)
            org.apache.calcite.sql2rel  (1 usage found)
                SqlToRelConverter.Blackboard  (1 usage found)
                    Blackboard(SqlValidatorScope, Map<String, RexNode>, 
boolean)  (1 usage found)
                        4577 this.top = top;
{code}


> View with ORDER BY throws AssertionError during view expansion
> --------------------------------------------------------------
>
>                 Key: CALCITE-4323
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4323
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Julian Hyde
>            Assignee: Jiatao Tao
>            Priority: Major
>              Labels: pull-request-available
>         Attachments: image-2020-10-10-23-58-39-822.png, 
> image-2020-10-10-23-59-22-297.png
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> If you have a view that has an ORDER BY clause, and try to execute a query on 
> that view, SqlToRelConverter throws AssertionError during view expansion. For 
> example,
> {noformat}
> create view v as select * from "EMPLOYEES" order by "deptno";
> select * from V;
> java.lang.AssertionError
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.requiredCollation(SqlToRelConverter.java:634)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.requiredCollation(SqlToRelConverter.java:629)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:578)
>       at 
> org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.expandView(CalcitePrepareImpl.java:1072)
>       at 
> org.apache.calcite.plan.ViewExpanders$1.expandView(ViewExpanders.java:52)
>       at 
> org.apache.calcite.schema.impl.ViewTable.expandView(ViewTable.java:127)
>       at org.apache.calcite.schema.impl.ViewTable.toRel(ViewTable.java:120)
>       at 
> org.apache.calcite.prepare.RelOptTableImpl.toRel(RelOptTableImpl.java:285)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.toRel(SqlToRelConverter.java:3605)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertIdentifier(SqlToRelConverter.java:2522)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2160)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2109)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2066)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:662)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:643)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3458)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:569)
>       at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:242)
> {noformat}
> I suspected that it would be a problem for when the view does not project the 
> sort column(s), but it seems to be a problem even if the columns are 
> projected.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to