Your first point is a good one.

For your second, validation doesn't need dialect knowledge with my
suggestion. If the return type of MIN/MAX is inferred to be BOOLEAN, set
the unparseOperator. This may or may not get used later, depending on
dialect.

Tanner

On Tue, Jan 23, 2024 at 1:03 PM Mihai Budiu <mbu...@gmail.com> wrote:

> I think that unparse is supposed to work even if you haven't validated.
>
> Also, validation does not really know about dialects.
>
> Mihai
> ________________________________
> From: Tanner Clary <tannercl...@google.com.INVALID>
> Sent: Tuesday, January 23, 2024 1:00 PM
> To: dev@calcite.apache.org <dev@calcite.apache.org>
> Subject: Re: Unparsing based on operand type
>
> One idea I had was: during validation when the return type for a call is
> derived, you could have a property in `SqlBasicCall` called something like
> "unparseOperator". You could have some logic that determines the value of
> this operator, and then set it accordingly. Later, during unparsing, you
> can choose to utilize this "unparseOperator" if it is relevant (e.g. the
> target dialect is Postgres or Redshift in this example.)
>
> A downside of this is that you're no longer strictly validating, are there
> other pitfalls?
>
> Tanner
>
> On Tue, Jan 23, 2024 at 12:52 PM Mihai Budiu <mbu...@gmail.com> wrote:
>
> > My guess would be that this is not possible.
> > At the SqlNode level there are no types.
> > Even if there is some type information, it may be wrong or incomplete,
> > since type inference has not been executed yet.
> >
> > I am afraid that even going from RelNode to SqlNode to unparsing won't
> > make this problem much simpler, although there you can at least count on
> > the representation being properly typed.
> >
> > Mihai
> > ________________________________
> > From: Tanner Clary <tannercl...@google.com.INVALID>
> > Sent: Tuesday, January 23, 2024 12:32 PM
> > To: dev@calcite.apache.org <dev@calcite.apache.org>
> > Subject: Unparsing based on operand type
> >
> > Hey Calcite Devs,
> >
> > I'm working on CALCITE-6220
> > <https://issues.apache.org/jira/browse/CALCITE-6220> and the summary is
> > that we should unparse MIN/MAX differently for Postgres/Redshift
> depending
> > on its operand type (if the type is BOOLEAN, it should be rewritten as
> > BOOL_AND/OR).
> >
> > This problem seems simple enough, but I've been having trouble deriving
> the
> > operand type during unparsing, which has me wondering whether there's a
> > better place for this translation to occur. My second thought was that
> this
> > could occur in StandardConvertletTable but this does not account for the
> > case where the incoming dialect is NOT Redshift/Postgres (but the target
> > dialect is.)
> >
> > With that being said, my question is: where should this translation occur
> > (a.k.a. where can I properly access the operand type in order to decide
> > what the call should be unparsed as)?
> >
> > Thanks as always,
> > Tanner
> >
>

Reply via email to