You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Julian Hyde (Jira)" <ji...@apache.org> on 2023/02/19 20:36:00 UTC

[jira] [Resolved] (CALCITE-5522) DATE_TRUNC: Babel parser behaviour change after update

     [ https://issues.apache.org/jira/browse/CALCITE-5522?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Julian Hyde resolved CALCITE-5522.
----------------------------------
    Fix Version/s: 1.34.0
       Resolution: Fixed

Fixed in [39e2b22d|https://github.com/apache/calcite/commit/39e2b22d298237f1f38051d20108bcea6f6f9dc5].

> DATE_TRUNC: Babel parser behaviour change after update
> ------------------------------------------------------
>
>                 Key: CALCITE-5522
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5522
>             Project: Calcite
>          Issue Type: Bug
>          Components: babel
>    Affects Versions: 1.33.0
>            Reporter: John
>            Assignee: Julian Hyde
>            Priority: Major
>             Fix For: 1.34.0
>
>
> Looks like updating to Calcite 1.33.0 changed parsing behavior for DATE_TRUNC. 
> The following query was parsed successfully with 1.32.0:
>  
> {noformat}
> SELECT DATE_TRUNC('month', orders.order_date) from orders{noformat}
>  
> But with version 1.33.0 it fails with stack trace:
>  
> {noformat}
> Caused by: org.apache.calcite.sql.parser.SqlParseException: Encountered \".\" at line 35, column 35.
> Was expecting:
>     \")\" ...
>     
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.convertException(SqlBabelParserImpl.java:412)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.normalizeException(SqlBabelParserImpl.java:158)
>     at org.apache.calcite.sql.parser.SqlParser.handleException(SqlParser.java:159)
>     at org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:174)
>     at company.x.d.Parser.parse(Parser.java:355)
>     at company.x.d.ProjectContext.lambda$build$4(ProjectContext.java:195)
>     ... 14 common frames omitted
> Caused by: org.apache.calcite.sql.parser.babel.ParseException: Encountered \".\" at line 35, column 35.
> Was expecting:
>     \")\" ...
>     
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.generateParseException(SqlBabelParserImpl.java:37113)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.jj_consume_token(SqlBabelParserImpl.java:36924)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.DateTruncFunctionCall(SqlBabelParserImpl.java:7694)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.BuiltinFunctionCall(SqlBabelParserImpl.java:7022)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.AtomicRowExpression(SqlBabelParserImpl.java:4539)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.Expression3(SqlBabelParserImpl.java:4293)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.AddExpression2b(SqlBabelParserImpl.java:3986)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.Expression2(SqlBabelParserImpl.java:4027)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.Expression(SqlBabelParserImpl.java:3959)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.SelectExpression(SqlBabelParserImpl.java:2189)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.AddSelectItem(SqlBabelParserImpl.java:2154)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.SqlSelect(SqlBabelParserImpl.java:1462)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.LeafQuery(SqlBabelParserImpl.java:709)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.Query(SqlBabelParserImpl.java:3828)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.ExprOrJoinOrOrderedQuery(SqlBabelParserImpl.java:501)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.ParenthesizedExpression(SqlBabelParserImpl.java:741)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.AddWithItem(SqlBabelParserImpl.java:3924)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.WithList(SqlBabelParserImpl.java:3907)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.QueryOrExpr(SqlBabelParserImpl.java:3800)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.OrderedQueryOrExpr(SqlBabelParserImpl.java:566)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.SqlStmt(SqlBabelParserImpl.java:1050)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.SqlStmtEof(SqlBabelParserImpl.java:1078)
>     at org.apache.calcite.sql.parser.babel.SqlBabelParserImpl.parseSqlStmtEof(SqlBabelParserImpl.java:206)
>     at org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:172)
>     ... 16 common frames omitted
>     {noformat}
>  
>  
> I tried including a custom DATE_TRUNC function in the operator table with matching operands, but looks like the parser always tries to interpret *{{{{orders.order_date}}}}* as an interval qualifier?
> Looks like the success with 1.32.0 was accidental since CALCITE-5290 aims to address these kinds of queries. But bringing this to light, in case anyone else relied on the prior behavior.



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