You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by Chris Baynes <ch...@contiamo.com> on 2017/05/19 10:21:46 UTC

Sql dialect specific operator unparsing

Currently there appears to be only one way for a sql operator to be
unparsed.
This is a problem for operations that look different depending on the
dialect currently used.

A good example is "FLOOR(datetime to timeUnit)"

In postgres this is: date_trunc('year', my_datetime)
In hsqldb: TRUNC ( my_datetime, 'YYYY' )
In oracle: TRUNC(my_datetime, 'YEAR')
In mysql: There's no direct equivalent in mysql

Right now if this would break if executed against a jdbc datasource, since
the sql generated just contains the "FLOOR(...".

I'm sure there must be other sql functions that also require similar
dialect switching.

I think it would be nice to be able to override the sql operator unparse
method on a dialect basis.
Right now the sql writer takes a dialect argument, but that's really just
for quoting and small formatting differences. The unparse method of every
operator could take a dialect argument, but I think there's probably a
better way.

Has anyone had any similar ideas and know how this could be approached?

Re: Sql dialect specific operator unparsing

Posted by Julian Hyde <jh...@apache.org>.
I think that using the dialect inside the writer would be ideal. I see the AS operator already does this[1].

Julian

[1] https://insight.io/github.com/apache/calcite/blob/a11d14054e9c1d2ce22f60e11536f1885faaae7c/core/src/main/java/org/apache/calcite/sql/SqlAsOperator.java?line=79 



> On May 19, 2017, at 6:21 AM, Chris Baynes <ch...@contiamo.com> wrote:
> 
> Currently there appears to be only one way for a sql operator to be
> unparsed.
> This is a problem for operations that look different depending on the
> dialect currently used.
> 
> A good example is "FLOOR(datetime to timeUnit)"
> 
> In postgres this is: date_trunc('year', my_datetime)
> In hsqldb: TRUNC ( my_datetime, 'YYYY' )
> In oracle: TRUNC(my_datetime, 'YEAR')
> In mysql: There's no direct equivalent in mysql
> 
> Right now if this would break if executed against a jdbc datasource, since
> the sql generated just contains the "FLOOR(...".
> 
> I'm sure there must be other sql functions that also require similar
> dialect switching.
> 
> I think it would be nice to be able to override the sql operator unparse
> method on a dialect basis.
> Right now the sql writer takes a dialect argument, but that's really just
> for quoting and small formatting differences. The unparse method of every
> operator could take a dialect argument, but I think there's probably a
> better way.
> 
> Has anyone had any similar ideas and know how this could be approached?