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

Julian Hyde commented on CALCITE-3218:
--------------------------------------

Currently we don't tell Babel which dialect it is trying to parse. (Maybe we'll 
change that someday.)

But that doesn't matter for this change, because operator table is not needed 
by the parser but is needed (and known) by the validator. The parser will see a 
function called DATEADD, parse almost as an ordinary function, just taking care 
to treat argument 1 as a time unit, and return an unresolved function call. The 
function call will be resolved in the dialect-specific operator table that has 
been loaded into the validator.

Assigning to myself for review.

> Syntax error while parsing DATEADD function (which is valid on Redshift)
> ------------------------------------------------------------------------
>
>                 Key: CALCITE-3218
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3218
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Lindsey Meyer
>            Assignee: Julian Hyde
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Syntax error while parsing the {{DATEADD}} function:
> {code:java}
> SELECT 
>       DATE(CONVERT_TIMEZONE('UTC', 'America/Los_Angeles', events.event_date 
> )) AS "events.event_date",
>       COALESCE(SUM(events.daily_user_count ), 0) AS 
> "events.daily_active_users",
>       COALESCE(SUM(events.monthly_user_count ), 0) AS 
> "events.monthly_active_users"
> FROM public.events_proto  AS events
> WHERE 
>       (((events.event_date ) >= ((CONVERT_TIMEZONE('America/Los_Angeles', 
> 'UTC', DATEADD(day,-364, DATE_TRUNC('day',CONVERT_TIMEZONE('UTC', 
> 'America/Los_Angeles', GETDATE())) )))) AND (events.event_date ) < 
> ((CONVERT_TIMEZONE('America/Los_Angeles', 'UTC', DATEADD(day,365, 
> DATEADD(day,-364, DATE_TRUNC('day',CONVERT_TIMEZONE('UTC', 
> 'America/Los_Angeles', GETDATE())) ) ))))))
> GROUP BY 1
> HAVING 
>       NOT (COALESCE(SUM(events.monthly_user_count ), 0) = 0)
> ORDER BY 1 DESC
> LIMIT 500{code}
> throws 
> {noformat}
> `Column 'year' not found in any table`
> `DATEADD(year,1,...`
> {noformat}
> This query is valid on Redshift. Redshift's parser understands that the first 
> argument ({{DAY}}) is intended to be a time unit, not an identifier.



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

Reply via email to