aboutsummaryrefslogtreecommitdiff
path: root/sql/core/src/test/resources/sql-tests/results/union.sql.out
diff options
context:
space:
mode:
authorHerman van Hovell <hvanhovell@databricks.com>2016-11-30 15:25:33 +0800
committerWenchen Fan <wenchen@databricks.com>2016-11-30 15:25:33 +0800
commit879ba71110b6c85a4e47133620fbae7580650a6f (patch)
treeb904f08822212e24e916e92d4f269679c5fdcb4f /sql/core/src/test/resources/sql-tests/results/union.sql.out
parenta1d9138ab286dc58d7f61c27419de7ecbf5b828b (diff)
downloadspark-879ba71110b6c85a4e47133620fbae7580650a6f.tar.gz
spark-879ba71110b6c85a4e47133620fbae7580650a6f.tar.bz2
spark-879ba71110b6c85a4e47133620fbae7580650a6f.zip
[SPARK-18622][SQL] Fix the datatype of the Sum aggregate function
## What changes were proposed in this pull request? The result of a `sum` aggregate function is typically a Decimal, Double or a Long. Currently the output dataType is based on input's dataType. The `FunctionArgumentConversion` rule will make sure that the input is promoted to the largest type, and that also ensures that the output uses a (hopefully) sufficiently large output dataType. The issue is that sum is in a resolved state when we cast the input type, this means that rules assuming that the dataType of the expression does not change anymore could have been applied in the mean time. This is what happens if we apply `WidenSetOperationTypes` before applying the casts, and this breaks analysis. The most straight forward and future proof solution is to make `sum` always output the widest dataType in its class (Long for IntegralTypes, Decimal for DecimalTypes & Double for FloatType and DoubleType). This PR implements that solution. We should move expression specific type casting rules into the given Expression at some point. ## How was this patch tested? Added (regression) tests to SQLQueryTestSuite's `union.sql`. Author: Herman van Hovell <hvanhovell@databricks.com> Closes #16063 from hvanhovell/SPARK-18622.
Diffstat (limited to 'sql/core/src/test/resources/sql-tests/results/union.sql.out')
-rw-r--r--sql/core/src/test/resources/sql-tests/results/union.sql.out80
1 files changed, 80 insertions, 0 deletions
diff --git a/sql/core/src/test/resources/sql-tests/results/union.sql.out b/sql/core/src/test/resources/sql-tests/results/union.sql.out
new file mode 100644
index 0000000000..c57028cabe
--- /dev/null
+++ b/sql/core/src/test/resources/sql-tests/results/union.sql.out
@@ -0,0 +1,80 @@
+-- Automatically generated by SQLQueryTestSuite
+-- Number of queries: 7
+
+
+-- !query 0
+CREATE OR REPLACE TEMPORARY VIEW t1 AS VALUES (1, 'a'), (2, 'b') tbl(c1, c2)
+-- !query 0 schema
+struct<>
+-- !query 0 output
+
+
+
+-- !query 1
+CREATE OR REPLACE TEMPORARY VIEW t2 AS VALUES (1.0, 1), (2.0, 4) tbl(c1, c2)
+-- !query 1 schema
+struct<>
+-- !query 1 output
+
+
+
+-- !query 2
+SELECT *
+FROM (SELECT * FROM t1
+ UNION ALL
+ SELECT * FROM t1)
+-- !query 2 schema
+struct<c1:int,c2:string>
+-- !query 2 output
+1 a
+1 a
+2 b
+2 b
+
+
+-- !query 3
+SELECT *
+FROM (SELECT * FROM t1
+ UNION ALL
+ SELECT * FROM t2
+ UNION ALL
+ SELECT * FROM t2)
+-- !query 3 schema
+struct<c1:decimal(11,1),c2:string>
+-- !query 3 output
+1 1
+1 1
+1 a
+2 4
+2 4
+2 b
+
+
+-- !query 4
+SELECT a
+FROM (SELECT 0 a, 0 b
+ UNION ALL
+ SELECT SUM(1) a, CAST(0 AS BIGINT) b
+ UNION ALL SELECT 0 a, 0 b) T
+-- !query 4 schema
+struct<a:bigint>
+-- !query 4 output
+0
+0
+1
+
+
+-- !query 5
+DROP VIEW IF EXISTS t1
+-- !query 5 schema
+struct<>
+-- !query 5 output
+
+
+
+-- !query 6
+DROP VIEW IF EXISTS t2
+-- !query 6 schema
+struct<>
+-- !query 6 output
+