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