[
https://issues.apache.org/jira/browse/CALCITE-6944?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17942247#comment-17942247
]
Julian Hyde commented on CALCITE-6944:
--------------------------------------
I don't know, either, whether you should fix the parser or toSqlString. But
SqlParserTest makes sure that the round trip works. If someone had added a test
to SqlParserTest in the first place, this bug would not exist.
Can you link to the Jira case that added support for PARTITION BY in function
parameters? That was the change that was inadequately tested. You should review
that change and beef up the tests if necessary.
> After calling toSqlString, the table function with partition by argument in
> SqlNode cannot be parsed
> ----------------------------------------------------------------------------------------------------
>
> Key: CALCITE-6944
> URL: https://issues.apache.org/jira/browse/CALCITE-6944
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.34.0
> Reporter: juntaozhang
> Priority: Major
> Labels: pull-request-available
>
> Test example:
> {code:java}
> String sqlExpected = "f(a => TABLE t PARTITION BY f1 ORDER BY f2, b =>
> 1)";
> String sqlActual = parseExpression(sqlExpected)
> .toSqlString(new AnsiSqlDialect(SqlDialect.EMPTY_CONTEXT)).getSql();
> parseExpression(sqlActual);
> {code}
> Exception details:
> {code:java}
> Caused by: org.apache.calcite.sql.parser.impl.ParseException: Encountered
> "PARTITION" at line 1, column 17.
> Was expecting one of:
> "EXCEPT" ...
> "FETCH" ...
> "INTERSECT" ...
> "LIMIT" ...
> "OFFSET" ...
> "ORDER" ...
> "MINUS" ...
> "UNION" ...
> ")" ...
> "," ...
> "." ...
>
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.generateParseException(SqlParserImpl.java:44126)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_consume_token(SqlParserImpl.java:43937)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.ParenthesizedQueryOrCommaList(SqlParserImpl.java:899)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.Expression3(SqlParserImpl.java:18702)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.AddExpression2b(SqlParserImpl.java:17806)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.Expression2(SqlParserImpl.java:17848)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.Expression(SqlParserImpl.java:17779)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.LeafQueryOrExpr(SqlParserImpl.java:17756)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.QueryOrExpr(SqlParserImpl.java:17108)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.OrderedQueryOrExpr(SqlParserImpl.java:585)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.PartitionedQueryOrQueryOrExpr(SqlParserImpl.java:6912)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.AddArg0(SqlParserImpl.java:2522)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.FunctionParameterList(SqlParserImpl.java:1962)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.NamedCall(SqlParserImpl.java:32128)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.NamedFunctionCall(SqlParserImpl.java:31690)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.AtomicRowExpression(SqlParserImpl.java:19461)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.Expression3(SqlParserImpl.java:18666)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.AddExpression2b(SqlParserImpl.java:17806)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.Expression2(SqlParserImpl.java:17848)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.Expression(SqlParserImpl.java:17779)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.SqlExpressionEof(SqlParserImpl.java:17070)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.parseSqlExpressionEof(SqlParserImpl.java:204)
> at
> org.apache.calcite.sql.parser.SqlParser.parseExpression(SqlParser.java:139)
> ... 62 more
> {code}
> After to *_toSqlString_* table argument cannot be recognized when parentheses
> are added:
> F(A => {color:#FF0000}({color}TABLE T PARTITION BY F1 ORDER BY
> F2{color:#FF0000}){color}, B => 1)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)