Thanks for your responses

I will try to invest time here in my spare time and fix the cases (also
will create jira issue for that)

Best regards,
Sergey

On Wed, Jan 21, 2026, 10:27 Sergey Nuyanzin <[email protected]> wrote:

> I agree that it might modify tree
> my point is: if the input sqlNode is valid, after calling validate it
> should stay valid (even if changed)
> right now for some use cases it becomes invalid
>
> On Wed, Jan 21, 2026 at 10:03 AM Mihai Budiu <[email protected]> wrote:
> >
> > The  validator does modify the expression tree, for example to insert
> explicit casts during type coercion. There is no way around this. In
> general, type inference may also modify the expression tree.
> >
> > Mihai
> >
> > ________________________________
> > From: Ruben Q L <[email protected]>
> > Sent: Wednesday, January 21, 2026 1:00 AM
> > To: [email protected] <[email protected]>
> > Subject: Re: [QUESTION] Contract for SqlValidator#validate
> >
> > IMO this seems an unexpected side effect; ideally it should be corrected,
> > at the very least it should be noted on the javadoc with a TODO.
> >
> > Ruben
> >
> >
> > On Tue, Jan 20, 2026 at 9:23 PM Julian Hyde <[email protected]>
> wrote:
> >
> > > I’d say the basic mission of SqlValidator is to detect user errors and
> > > give good messages, and assign types.
> > >
> > > I hate that it sometimes mutates the tree. Do that as little as
> possible.
> > > If you can remove mutations, do it.
> > >
> > > Julian
> > >
> > > > On Jan 20, 2026, at 13:18, Sergey Nuyanzin <[email protected]>
> wrote:
> > > >
> > > > Hi everyone
> > > >
> > > > I faced behavior which seems weird to me, however I would like to
> > > > double check first.
> > > >
> > > > Normally we call
> > > > SqlNode validatedNode = validator.validate(inputNode); //here
> > > > validator is SqlValidatorImpl
> > > > and everything is ok if we do not use inputNode (for whatever reason
> )
> > > >
> > > > However if inputNode is used anywhere after validation then in some
> > > > cases validate method makes this node invalid by adding illegal nodes
> > > >
> > > > From the javadoc for SqlValidator interface it is not clear if this
> > > > method is allowed to mutate SqlNode making it invalid or not[1]
> > > >
> > > > Would be great to get better understanding whether it is expected
> > > > behavior (may be javadoc should be updated then)  or not
> > > >
> > > > P.S. Also I tweaked SqlValidatorTest in a way to make it run
> > > > validator.validate(inputNode) 2 times on the same input: there are a
> > > > few tests failed because of the things mentioned above
> > > >
> > > > [1]
> > >
> https://github.com/apache/calcite/blob/270ba649cfa80228d3f4f6635a08ab06de504399/core/src/main/java/org/apache/calcite/sql/validate/SqlValidator.java#L139-L146
> > > > --
> > > > Best regards,
> > > > Sergey
> > >
>
>
>
> --
> Best regards,
> Sergey
>

Reply via email to