Those cases you have found are indeed regressions. Please log a JIRA case.

For the record, I am still a strong believer in the Sarg approach.
Expressions such as

  (deptno <> 20 OR deptno IS NULL) AND deptno = 10

are complex when expressed as ANDs and ORs but can become a single
Sarg and therefore are easy to optimize. I suspect that we regressed
on these particular expressions because we did not have tests, and
converting part of the expression to a Sarg broke some delicate
simplification that was looking for a particular pattern of ANDs and
ORs.

Julian

On Fri, Oct 9, 2020 at 9:23 AM Igor Lozynskyi <[email protected]> wrote:
>
> Hi all!
>
> In a downstream project, we are trying to migrate from Calcite 1.25 to 1.26.
> The migration took us a bit longer than usual, so we could not give feedback 
> during the release voting time frame. The migration seems to be successful 
> except for one issue with filter simplification.
>
> Now, the Rex expressions like follows:
> `(deptno = 20 OR deptno IS NULL) AND deptno = 10`
> Are simplified to:
> `deptno IS NULL`
> Instead of:
> `FALSE`
>
> Similarly, the following expression:
> `(deptno <> 20 OR deptno IS NULL) AND deptno = 10`
> Is simplified to:
> `deptno = 10 OR deptno IS NULL`
> Instead of:
> `deptno = 10`
>
> These discrepancies were identified by our test suites.
>
> A diff with related unit tests (for RelBuilderTest.java) is in the attachment.
>
> Is this change is desired, or this is an issue?
>
> With best regards,
> Igor Lozynskyi

Reply via email to