- Follow on to https://github.com/apache/datafusion/issues/17448 ### Is your feature request related to a problem or challenge? One form of Case statements look like ```sql CASE WHEN <expr> THEN <expr> WHEN <expr> THEN <expr> ... ELSE END ``` If there is a `WHEN true` then all subsequent case statements can not execute. So for example ```sql CASE WHEN x=y THEN 1 WHEN true THEN 2 ELSE 3 -- can not be hit END ``` Simplified to ```sql CASE WHEN x=y THEN 1 ELSE 2 END ``` And likewise ```sql CASE WHEN x=y THEN 1 WHEN y=z THEN 2 WHEN true THEN 3 WHEN a=b THEN 5 -- can not be hit ELSE 5 -- can not be hit END ``` Simplified to ```sql CASE WHEN x=y THEN 1 WHEN y=z THEN 2 ELSE 3 END ``` ### Describe the solution you'd like Implement the above simplifcation / optimization along with tests: 1. Unit tests in the simplifier 2. sqllogictests ### Describe alternatives you've considered in https://github.com/apache/datafusion/pull/17450 @EeshanBembi implemented one form of this simplification and I think it could be extended fairly straightforwardly: You can see this by running an explain plan (see that the name is changed to `1`): ```sql > explain select CASE WHEN true then 1 else 2 END; +---------------+-------------------------------+ | plan_type | plan | +---------------+-------------------------------+ | physical_plan | ┌───────────────────────────┐ | | | │ ProjectionExec │ | | | │ -------------------- │ | | | │ CASE WHEN Boolean(true) │ | | | │ THEN Int64(1) ELSE │ | | | │ Int64(2) END: │ | | | │ 1 │ | | | └─────────────┬─────────────┘ | | | ┌─────────────┴─────────────┐ | | | │ PlaceholderRowExec │ | | | └───────────────────────────┘ | | | | +---------------+-------------------------------+ 1 row(s) fetched. Elapsed 0.002 seconds. ``` However, it doesn't handle the case ### Additional context _No response_
Activity
alamb commentedon Sep 16, 2025
This is well sepcified and there is an example PR so I think it would make agood first PR
petern48 commentedon Sep 16, 2025
take