diff options
author | Reynold Xin <rxin@databricks.com> | 2016-11-02 15:53:02 -0700 |
---|---|---|
committer | Reynold Xin <rxin@databricks.com> | 2016-11-02 15:53:02 -0700 |
commit | fd90541c35af2bccf0155467bec8cea7c8865046 (patch) | |
tree | 628164701b38ddebfd0e916a53bffba01c716a00 /sql/core/src/test/resources/sql-tests/results/sql-compatibility-functions.sql.out | |
parent | 37d95227a21de602b939dae84943ba007f434513 (diff) | |
download | spark-fd90541c35af2bccf0155467bec8cea7c8865046.tar.gz spark-fd90541c35af2bccf0155467bec8cea7c8865046.tar.bz2 spark-fd90541c35af2bccf0155467bec8cea7c8865046.zip |
[SPARK-18214][SQL] Simplify RuntimeReplaceable type coercion
## What changes were proposed in this pull request?
RuntimeReplaceable is used to create aliases for expressions, but the way it deals with type coercion is pretty weird (each expression is responsible for how to handle type coercion, which does not obey the normal implicit type cast rules).
This patch simplifies its handling by allowing the analyzer to traverse into the actual expression of a RuntimeReplaceable.
## How was this patch tested?
- Correctness should be guaranteed by existing unit tests already
- Removed SQLCompatibilityFunctionSuite and moved it sql-compatibility-functions.sql
- Added a new test case in sql-compatibility-functions.sql for verifying explain behavior.
Author: Reynold Xin <rxin@databricks.com>
Closes #15723 from rxin/SPARK-18214.
Diffstat (limited to 'sql/core/src/test/resources/sql-tests/results/sql-compatibility-functions.sql.out')
-rw-r--r-- | sql/core/src/test/resources/sql-tests/results/sql-compatibility-functions.sql.out | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/sql/core/src/test/resources/sql-tests/results/sql-compatibility-functions.sql.out b/sql/core/src/test/resources/sql-tests/results/sql-compatibility-functions.sql.out new file mode 100644 index 0000000000..9f0b95994b --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/results/sql-compatibility-functions.sql.out @@ -0,0 +1,124 @@ +-- Automatically generated by SQLQueryTestSuite +-- Number of queries: 13 + + +-- !query 0 +SELECT ifnull(null, 'x'), ifnull('y', 'x'), ifnull(null, null) +-- !query 0 schema +struct<ifnull(NULL, 'x'):string,ifnull('y', 'x'):string,ifnull(NULL, NULL):null> +-- !query 0 output +x y NULL + + +-- !query 1 +SELECT nullif('x', 'x'), nullif('x', 'y') +-- !query 1 schema +struct<nullif('x', 'x'):string,nullif('x', 'y'):string> +-- !query 1 output +NULL x + + +-- !query 2 +SELECT nvl(null, 'x'), nvl('y', 'x'), nvl(null, null) +-- !query 2 schema +struct<nvl(NULL, 'x'):string,nvl('y', 'x'):string,nvl(NULL, NULL):null> +-- !query 2 output +x y NULL + + +-- !query 3 +SELECT nvl2(null, 'x', 'y'), nvl2('n', 'x', 'y'), nvl2(null, null, null) +-- !query 3 schema +struct<nvl2(NULL, 'x', 'y'):string,nvl2('n', 'x', 'y'):string,nvl2(NULL, NULL, NULL):null> +-- !query 3 output +y x NULL + + +-- !query 4 +SELECT ifnull(1, 2.1d), ifnull(null, 2.1d) +-- !query 4 schema +struct<ifnull(1, 2.1D):double,ifnull(NULL, 2.1D):double> +-- !query 4 output +1.0 2.1 + + +-- !query 5 +SELECT nullif(1, 2.1d), nullif(1, 1.0d) +-- !query 5 schema +struct<nullif(1, 2.1D):int,nullif(1, 1.0D):int> +-- !query 5 output +1 NULL + + +-- !query 6 +SELECT nvl(1, 2.1d), nvl(null, 2.1d) +-- !query 6 schema +struct<nvl(1, 2.1D):double,nvl(NULL, 2.1D):double> +-- !query 6 output +1.0 2.1 + + +-- !query 7 +SELECT nvl2(null, 1, 2.1d), nvl2('n', 1, 2.1d) +-- !query 7 schema +struct<nvl2(NULL, 1, 2.1D):double,nvl2('n', 1, 2.1D):double> +-- !query 7 output +2.1 1.0 + + +-- !query 8 +explain extended +select ifnull(id, 'x'), nullif(id, 'x'), nvl(id, 'x'), nvl2(id, 'x', 'y') +from range(2) +-- !query 8 schema +struct<plan:string> +-- !query 8 output +== Parsed Logical Plan == +'Project [unresolvedalias('ifnull('id, x), None), unresolvedalias('nullif('id, x), None), unresolvedalias('nvl('id, x), None), unresolvedalias('nvl2('id, x, y), None)] ++- 'UnresolvedTableValuedFunction range, [2] + +== Analyzed Logical Plan == +ifnull(`id`, 'x'): string, nullif(`id`, 'x'): bigint, nvl(`id`, 'x'): string, nvl2(`id`, 'x', 'y'): string +Project [ifnull(id#xL, x) AS ifnull(`id`, 'x')#x, nullif(id#xL, x) AS nullif(`id`, 'x')#xL, nvl(id#xL, x) AS nvl(`id`, 'x')#x, nvl2(id#xL, x, y) AS nvl2(`id`, 'x', 'y')#x] ++- Range (0, 2, step=1, splits=None) + +== Optimized Logical Plan == +Project [coalesce(cast(id#xL as string), x) AS ifnull(`id`, 'x')#x, id#xL AS nullif(`id`, 'x')#xL, coalesce(cast(id#xL as string), x) AS nvl(`id`, 'x')#x, x AS nvl2(`id`, 'x', 'y')#x] ++- Range (0, 2, step=1, splits=None) + +== Physical Plan == +*Project [coalesce(cast(id#xL as string), x) AS ifnull(`id`, 'x')#x, id#xL AS nullif(`id`, 'x')#xL, coalesce(cast(id#xL as string), x) AS nvl(`id`, 'x')#x, x AS nvl2(`id`, 'x', 'y')#x] ++- *Range (0, 2, step=1, splits=None) + + +-- !query 9 +SELECT boolean(1), tinyint(1), smallint(1), int(1), bigint(1) +-- !query 9 schema +struct<CAST(1 AS BOOLEAN):boolean,CAST(1 AS TINYINT):tinyint,CAST(1 AS SMALLINT):smallint,CAST(1 AS INT):int,CAST(1 AS BIGINT):bigint> +-- !query 9 output +true 1 1 1 1 + + +-- !query 10 +SELECT float(1), double(1), decimal(1) +-- !query 10 schema +struct<CAST(1 AS FLOAT):float,CAST(1 AS DOUBLE):double,CAST(1 AS DECIMAL(10,0)):decimal(10,0)> +-- !query 10 output +1.0 1.0 1 + + +-- !query 11 +SELECT date("2014-04-04"), timestamp(date("2014-04-04")) +-- !query 11 schema +struct<CAST(2014-04-04 AS DATE):date,CAST(CAST(2014-04-04 AS DATE) AS TIMESTAMP):timestamp> +-- !query 11 output +2014-04-04 2014-04-04 00:00:00 + + +-- !query 12 +SELECT string(1, 2) +-- !query 12 schema +struct<> +-- !query 12 output +org.apache.spark.sql.AnalysisException +Function string accepts only one argument; line 1 pos 7 |