Julian Hyde commented on CALCITE-2257:

I think this is great logic, but in the wrong place. RexCall#isAlwaysTrue is a 
simple structural test and should remain so.

RexSimplify is the right place for this. It takes into account predicates that 
are known for the input fields.

You should add tests to RexProgramTest.

> Combination of predicates can be proved to be always true
> ---------------------------------------------------------
>                 Key: CALCITE-2257
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2257
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.16.0
>            Reporter: Vitalii Diravka
>            Assignee: Vitalii Diravka
>            Priority: Major
>              Labels: filter
>             Fix For: 1.17.0
> I have found the case, when Filter operator is not necessary since filter 
> condition is always true, but that is not detected by current version of 
> Calcite.
> {code}
> select SAL from EMPNULLABLES_20 where SAL IS NOT NULL OR SAL is null
> {code}
> {code}
> LogicalProject(SAL=[$5])
>   LogicalFilter(condition=[OR(IS NOT NULL($5), IS NULL($5))])
>     LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], 
> SAL=[$5], COMM=[$6], SLACKER=[$8])
>       LogicalFilter(condition=[AND(=($7, 20), >($5, 1000))])
>         LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])
> {code}
> But filter condition _OR(IS NOT NULL($5), IS NULL($5))_ can be proved to be 
> always true.
> I have tried _ReduceExpressionsRule_, but it doesn't give effect.

This message was sent by Atlassian JIRA

Reply via email to