[ 
https://issues.apache.org/jira/browse/CALCITE-5271?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17609876#comment-17609876
 ] 

Mou Wu commented on CALCITE-5271:
---------------------------------

[~pjain1] Could you check testFloor in RelToSqlConverterTest.java? in this unit 
test, you can see the correct unit test to check unparsing FLOOR using Postgres 
dialect.

SqlParserTest is for convert SqlNode to sql, and RelToSqlConverterTest is for 
convert RelNode to sql, 'YEAR' will be a SqlLiteral in RelNode, so testFloor in 
RelToSqlConverterTest will pass. And 'Year' will be a SqlIntervalQualifier in 
SqlNode, so your unit test will fail.

> Error while unparsing FLOOR function using Postgres dialect
> -----------------------------------------------------------
>
>                 Key: CALCITE-5271
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5271
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Parag Jain
>            Assignee: Mou Wu
>            Priority: Minor
>
> 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* 
> getting following exception -
>  
> {code:java}
> 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){code}
> Looks like a bug as the "Year" token gets parsed to SqlIntervalQualifier but 
> expectation is of SqlLiteral. Here's a 
> [PR|https://github.com/apache/calcite/pull/2897] with test case to reproduce 
> the issue.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to