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

Julian Hyde commented on CALCITE-2276:
--------------------------------------

In CALCITE-877 (which is when those lines in misc.iq were added) I state that 
ROW is only allowed inside VALUES. So, my statement contradicts your statement 
that ROW(...) and (...) are equivalent. Can you read the standard, so we know 
where we stand?

Even if the standard disallows ROW, I'm open to the idea of adding a compliance 
flag to allow it.

[~danny0405], Your change looks good, but please use the same indentation as 
the other code.

> Calcite unable to parse ROW value constructor in certain scenario
> -----------------------------------------------------------------
>
>                 Key: CALCITE-2276
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2276
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>            Reporter: Shuyi Chen
>            Assignee: Julian Hyde
>            Priority: Major
>
> h2. Original dev mailing list question:
> Now for our production, we can parse a query successfully like this :
> {code}
> -- correlated IN subquery
> -- TC 01.01
> SELECT t1a,
>        t1b,
>        t1h
> FROM   t1
> WHERE  ( t1a, t1h ) NOT IN (SELECT t2a,
>                                    t2h
>                             FROM   t2
>                             WHERE  t2a = t1a
>                             ORDER  BY t2a)
> AND t1a = 'val1a'
> {code}
> but if we add in `Row`:
> {code}
> -- correlated IN subquery
> -- TC 01.01
> SELECT t1a,
>        t1b,
>        t1h
> FROM   t1
> WHERE  ROW( t1a, t1h ) NOT IN (SELECT t2a,
>                                    t2h
>                             FROM   t2
>                             WHERE  t2a = t1a
>                             ORDER  BY t2a)
> AND t1a = 'val1a'
> {code}
>  it will throw exception:
> {noformat}
> Caused by: org.apache.calcite.sql.parser.SqlParseException: ROW expression
> encountered in illegal context
>   at 
> org.apache.calcite.sql.parser.impl.SqlParserImpl.convertException(SqlParserImpl.java:351)
>   at 
> org.apache.calcite.sql.parser.impl.SqlParserImpl.normalizeException(SqlParserImpl.java:133)
>   at org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:138)
>   at org.apache.calcite.sql.parser.SqlParser.parseStmt(SqlParser.java:163)
>   at 
> org.apache.flink.table.calcite.FlinkPlannerImpl.parse(FlinkPlannerImpl.scala:81)
> ... 8 more
> {noformat}
> For the success query, if we exec parsed AST tree rootNode.toString(), it
> will return a query like:
> {code}
> SELECT `t1a`,
>        `t1b`,
>        `t1h`
> FROM `t1`
> WHERE ROW(`t1a`, `t1h`) NOT IN (SELECT `t2a`, `t2h`
>                                 FROM `t2`
>                                 WHERE `t2a` = `t1a`
>                                 ORDER BY `t2a`)
> AND `t1a` = 'val1a'
> {code}
> This is inconsistent  by Calcite itself semantic.



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

Reply via email to