diff options
author | Dongjoon Hyun <dongjoon@apache.org> | 2016-04-02 17:48:53 -0700 |
---|---|---|
committer | Reynold Xin <rxin@databricks.com> | 2016-04-02 17:48:53 -0700 |
commit | f705037617d55bb479ec60bcb1e55c736224be94 (patch) | |
tree | 530cce0cd7b48a5a87e0f659c7a8cc3d0cb37126 /core/src | |
parent | a3e293542a6e7df9bcc7d9bbd22b3c93a81bcc38 (diff) | |
download | spark-f705037617d55bb479ec60bcb1e55c736224be94.tar.gz spark-f705037617d55bb479ec60bcb1e55c736224be94.tar.bz2 spark-f705037617d55bb479ec60bcb1e55c736224be94.zip |
[SPARK-14338][SQL] Improve `SimplifyConditionals` rule to handle `null` in IF/CASEWHEN
## What changes were proposed in this pull request?
Currently, `SimplifyConditionals` handles `true` and `false` to optimize branches. This PR improves `SimplifyConditionals` to take advantage of `null` conditions for `if` and `CaseWhen` expressions, too.
**Before**
```
scala> sql("SELECT IF(null, 1, 0)").explain()
== Physical Plan ==
WholeStageCodegen
: +- Project [if (null) 1 else 0 AS (IF(CAST(NULL AS BOOLEAN), 1, 0))#4]
: +- INPUT
+- Scan OneRowRelation[]
scala> sql("select case when cast(null as boolean) then 1 else 2 end").explain()
== Physical Plan ==
WholeStageCodegen
: +- Project [CASE WHEN null THEN 1 ELSE 2 END AS CASE WHEN CAST(NULL AS BOOLEAN) THEN 1 ELSE 2 END#14]
: +- INPUT
+- Scan OneRowRelation[]
```
**After**
```
scala> sql("SELECT IF(null, 1, 0)").explain()
== Physical Plan ==
WholeStageCodegen
: +- Project [0 AS (IF(CAST(NULL AS BOOLEAN), 1, 0))#4]
: +- INPUT
+- Scan OneRowRelation[]
scala> sql("select case when cast(null as boolean) then 1 else 2 end").explain()
== Physical Plan ==
WholeStageCodegen
: +- Project [2 AS CASE WHEN CAST(NULL AS BOOLEAN) THEN 1 ELSE 2 END#4]
: +- INPUT
+- Scan OneRowRelation[]
```
**Hive**
```
hive> select if(null,1,2);
OK
2
hive> select case when cast(null as boolean) then 1 else 2 end;
OK
2
```
## How was this patch tested?
Pass the Jenkins tests (including new extended test cases).
Author: Dongjoon Hyun <dongjoon@apache.org>
Closes #12122 from dongjoon-hyun/SPARK-14338.
Diffstat (limited to 'core/src')
0 files changed, 0 insertions, 0 deletions