[ https://issues.apache.org/jira/browse/CALCITE-2276?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16456991#comment-16456991 ]
Julian Hyde commented on CALCITE-2276: -------------------------------------- I meant to say conformance, not compliance. There are several places in the parser that do conformance checks, e.g. {{if (!this.conformance.isLimitStartCountAllowed())}}. > 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)