diff options
author | Dilip Biswal <dbiswal@us.ibm.com> | 2016-05-31 15:49:45 -0700 |
---|---|---|
committer | Davies Liu <davies.liu@gmail.com> | 2016-05-31 15:49:45 -0700 |
commit | dfe2cbeb437a4fa69bec3eca4ac9242f3eb51c81 (patch) | |
tree | d8e4dc60ec5aaf443ac50c13456d0eb67b7eb793 /NOTICE | |
parent | 2df6ca848e99b90acd11c3a3de342fa4d77015d6 (diff) | |
download | spark-dfe2cbeb437a4fa69bec3eca4ac9242f3eb51c81.tar.gz spark-dfe2cbeb437a4fa69bec3eca4ac9242f3eb51c81.tar.bz2 spark-dfe2cbeb437a4fa69bec3eca4ac9242f3eb51c81.zip |
[SPARK-15557] [SQL] cast the string into DoubleType when it's used together with decimal
In this case, the result type of the expression becomes DECIMAL(38, 36) as we promote the individual string literals to DECIMAL(38, 18) when we handle string promotions for `BinaryArthmaticExpression`.
I think we need to cast the string literals to Double type instead. I looked at the history and found that this was changed to use decimal instead of double to avoid potential loss of precision when we cast decimal to double.
To double check i ran the query against hive, mysql. This query returns non NULL result for both the databases and both promote the expression to use double.
Here is the output.
- Hive
```SQL
hive> create table l2 as select (cast(99 as decimal(19,6)) + '2') from l1;
OK
hive> describe l2;
OK
_c0 double
```
- MySQL
```SQL
mysql> create table foo2 as select (cast(99 as decimal(19,6)) + '2') from test;
Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> describe foo2;
+-----------------------------------+--------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------------------+--------+------+-----+---------+-------+
| (cast(99 as decimal(19,6)) + '2') | double | NO | | 0 | |
+-----------------------------------+--------+------+-----+---------+-------+
```
## How was this patch tested?
Added a new test in SQLQuerySuite
Author: Dilip Biswal <dbiswal@us.ibm.com>
Closes #13368 from dilipbiswal/spark-15557.
Diffstat (limited to 'NOTICE')
0 files changed, 0 insertions, 0 deletions