Hey, I have raised a ticket here -
https://issues.apache.org/jira/browse/CALCITE-5271 and it has a link to PR
as well that reproduces this issue. Took some time to figure out the test
case hence the reply got delayed. Thanks

On Thu, Sep 1, 2022 at 10:24 PM Julian Hyde <jhyde.apa...@gmail.com> wrote:

> Parag, I think you’ve found a bug. Please follow the usual process: Log a
> jira case. Provide a PR with a test case, or, better, a PR with a test case
> and a fix.
>
>
> > On Sep 1, 2022, at 8:41 AM, Parag Jain <paragjai...@gmail.com> wrote:
> >
> > I think the biggest difference is I am calling toSql on SqlNode whereas
> the
> > test case calls toSql on RelNode here
> > <
> https://github.com/apache/calcite/blob/main/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java#L6724
> >
> > - SqlCall
> > for the FLOOR function in the RelNode contains YEAR as SqlLiteral in
> > operandList so it passes. This means its failing in unparsing the parsed
> > SqlCall which contains "YEAR" as SqlIntervalQualifier. Let me know if you
> > need more information. Thanks
> >
> > On Thu, Sep 1, 2022 at 8:57 PM Benchao Li <libenc...@apache.org> wrote:
> >
> >> Hi Parag,
> >>
> >> I added this test to `RelToSqlConverterTest`:
> >> ```java
> >> @Test void testTest() {
> >>  final String sql = "select FLOOR(TIMESTAMP '2022-08-01' TO Year)";
> >>  final String expected = "SELECT DATE_TRUNC('YEAR', TIMESTAMP
> '2022-08-01
> >> 00:00:00')\nFROM " +
> >>      "(VALUES (0)) AS \"t\" (\"ZERO\")";
> >>  sql(sql)
> >>      .withPostgresql()
> >>      .ok(expected);
> >> }
> >> ```
> >> And it passed both on the latest main branch and 1.30.0 tag.
> >>
> >> I don't know what I'm missing, could you give us an example which could
> >> reproduce this?
> >>
> >>
> >> Parag Jain <pja...@apache.org> 于2022年9月1日周四 19:34写道:
> >>
> >>> Using Calcite(1.30.0) to parse this query - select FLOOR(TIMESTAMP
> >>> '2022-08-01' TO Year)
> >>>
> >>> Parsing is successful but while doing
> >>> `toSqlString(PostgresqlSqlDialect.DEFAULT).getSql()`. on the parsed
> >> SqlNode
> >>> I am getting following exception -
> >>>
> >>> Request failed: java.lang.ClassCastException: class
> >>> org.apache.calcite.sql.SqlIntervalQualifier cannot be cast to class
> >>> org.apache.calcite.sql.SqlLiteral
> >>> at
> >>>
> >>>
> >>
> org.apache.calcite.sql.dialect.PostgresqlSqlDialect.unparseCall(PostgresqlSqlDialect.java:128)
> >>> at org.apache.calcite.sql.SqlCall.unparse(SqlCall.java:126)
> >>> at
> >>>
> >>>
> >>
> org.apache.calcite.sql.pretty.SqlPrettyWriter$FrameImpl.list2(SqlPrettyWriter.java:1303)
> >>> at
> >>>
> >>>
> >>
> org.apache.calcite.sql.pretty.SqlPrettyWriter$FrameImpl.list(SqlPrettyWriter.java:1283)
> >>> at
> >>>
> >>>
> >>
> org.apache.calcite.sql.pretty.SqlPrettyWriter.list(SqlPrettyWriter.java:1080)
> >>> at
> >>>
> >>>
> >>
> org.apache.calcite.sql.SqlSelectOperator.unparse(SqlSelectOperator.java:154)
> >>> at org.apache.calcite.sql.SqlDialect.unparseCall(SqlDialect.java:460)
> >>> at
> >>>
> >>>
> >>
> org.apache.calcite.sql.dialect.PostgresqlSqlDialect.unparseCall(PostgresqlSqlDialect.java:137)
> >>> at org.apache.calcite.sql.SqlSelect.unparse(SqlSelect.java:261)
> >>> at org.apache.calcite.sql.SqlNode.toSqlString(SqlNode.java:156)
> >>> at org.apache.calcite.sql.SqlNode.toSqlString(SqlNode.java:178)
> >>> at org.apache.calcite.sql.SqlNode.toSqlString(SqlNode.java:187)
> >>>
> >>> Looks like a bug as the "Year" token gets parsed to
> SqlIntervalQualifier
> >>> but expectation is of SqlLiteral ?
> >>>
> >>
> >>
> >> --
> >>
> >> Best,
> >> Benchao Li
> >>
>
>

Reply via email to