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