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 >
