John created CALCITE-5522:
-----------------------------

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


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)

Reply via email to