Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,10 @@ abstract class CastBase extends UnaryExpression with TimeZoneAwareExpression wit

def dataType: DataType

override def toString: String = s"cast($child as ${dataType.simpleString})"
override def toString: String = {
val ansi = if (ansiEnabled) "ansi_" else ""
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it should be "ansiCast" or "ANSICast" instead of "ansi_cast"

Copy link
Contributor

@cloud-fan cloud-fan Feb 18, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This follows the existing SQL function naming convention, e.g. FromUTCTimestamp.prettyName is from_utc_timestamp

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But the string of newInstance is newInstance($cls) ..

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NewInstance is not really a SQL function/operator...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see. It is the first expression the overrides toString with 2 words in IDE...haha

s"${ansi}cast($child as ${dataType.simpleString})"
}

override def checkInputDataTypes(): TypeCheckResult = {
if (Cast.canCast(child.dataType, dataType)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,159 +77,159 @@ struct<max_324_78:float>
-- !query
SELECT stddev_pop(udf(b)) FROM aggtest
-- !query schema
struct<stddev_pop(CAST(CAST(udf(cast(b as string)) AS FLOAT) AS DOUBLE)):double>
struct<stddev_pop(CAST(CAST(udf(ansi_cast(b as string)) AS FLOAT) AS DOUBLE)):double>
-- !query output
131.10703231895047


-- !query
SELECT udf(stddev_samp(b)) FROM aggtest
-- !query schema
struct<CAST(udf(cast(stddev_samp(cast(b as double)) as string)) AS DOUBLE):double>
struct<CAST(udf(ansi_cast(stddev_samp(ansi_cast(b as double)) as string)) AS DOUBLE):double>
-- !query output
151.38936080399804


-- !query
SELECT var_pop(udf(b)) FROM aggtest
-- !query schema
struct<var_pop(CAST(CAST(udf(cast(b as string)) AS FLOAT) AS DOUBLE)):double>
struct<var_pop(CAST(CAST(udf(ansi_cast(b as string)) AS FLOAT) AS DOUBLE)):double>
-- !query output
17189.053923482323


-- !query
SELECT udf(var_samp(b)) FROM aggtest
-- !query schema
struct<CAST(udf(cast(var_samp(cast(b as double)) as string)) AS DOUBLE):double>
struct<CAST(udf(ansi_cast(var_samp(ansi_cast(b as double)) as string)) AS DOUBLE):double>
-- !query output
22918.738564643096


-- !query
SELECT udf(stddev_pop(CAST(b AS Decimal(38,0)))) FROM aggtest
-- !query schema
struct<CAST(udf(cast(stddev_pop(cast(cast(b as decimal(38,0)) as double)) as string)) AS DOUBLE):double>
struct<CAST(udf(ansi_cast(stddev_pop(ansi_cast(ansi_cast(b as decimal(38,0)) as double)) as string)) AS DOUBLE):double>
-- !query output
131.18117242958306


-- !query
SELECT stddev_samp(CAST(udf(b) AS Decimal(38,0))) FROM aggtest
-- !query schema
struct<stddev_samp(CAST(CAST(CAST(udf(cast(b as string)) AS FLOAT) AS DECIMAL(38,0)) AS DOUBLE)):double>
struct<stddev_samp(CAST(CAST(CAST(udf(ansi_cast(b as string)) AS FLOAT) AS DECIMAL(38,0)) AS DOUBLE)):double>
-- !query output
151.47497042966097


-- !query
SELECT udf(var_pop(CAST(b AS Decimal(38,0)))) FROM aggtest
-- !query schema
struct<CAST(udf(cast(var_pop(cast(cast(b as decimal(38,0)) as double)) as string)) AS DOUBLE):double>
struct<CAST(udf(ansi_cast(var_pop(ansi_cast(ansi_cast(b as decimal(38,0)) as double)) as string)) AS DOUBLE):double>
-- !query output
17208.5


-- !query
SELECT var_samp(udf(CAST(b AS Decimal(38,0)))) FROM aggtest
-- !query schema
struct<var_samp(CAST(CAST(udf(cast(cast(b as decimal(38,0)) as string)) AS DECIMAL(38,0)) AS DOUBLE)):double>
struct<var_samp(CAST(CAST(udf(ansi_cast(ansi_cast(b as decimal(38,0)) as string)) AS DECIMAL(38,0)) AS DOUBLE)):double>
-- !query output
22944.666666666668


-- !query
SELECT udf(var_pop(1.0)), var_samp(udf(2.0))
-- !query schema
struct<CAST(udf(cast(var_pop(cast(1.0 as double)) as string)) AS DOUBLE):double,var_samp(CAST(CAST(udf(cast(2.0 as string)) AS DECIMAL(2,1)) AS DOUBLE)):double>
struct<CAST(udf(ansi_cast(var_pop(ansi_cast(1.0 as double)) as string)) AS DOUBLE):double,var_samp(CAST(CAST(udf(ansi_cast(2.0 as string)) AS DECIMAL(2,1)) AS DOUBLE)):double>
-- !query output
0.0 NaN


-- !query
SELECT stddev_pop(udf(CAST(3.0 AS Decimal(38,0)))), stddev_samp(CAST(udf(4.0) AS Decimal(38,0)))
-- !query schema
struct<stddev_pop(CAST(CAST(udf(cast(cast(3.0 as decimal(38,0)) as string)) AS DECIMAL(38,0)) AS DOUBLE)):double,stddev_samp(CAST(CAST(CAST(udf(cast(4.0 as string)) AS DECIMAL(2,1)) AS DECIMAL(38,0)) AS DOUBLE)):double>
struct<stddev_pop(CAST(CAST(udf(ansi_cast(ansi_cast(3.0 as decimal(38,0)) as string)) AS DECIMAL(38,0)) AS DOUBLE)):double,stddev_samp(CAST(CAST(CAST(udf(ansi_cast(4.0 as string)) AS DECIMAL(2,1)) AS DECIMAL(38,0)) AS DOUBLE)):double>
-- !query output
0.0 NaN


-- !query
select sum(udf(CAST(null AS int))) from range(1,4)
-- !query schema
struct<sum(CAST(udf(cast(cast(null as int) as string)) AS INT)):bigint>
struct<sum(CAST(udf(ansi_cast(ansi_cast(null as int) as string)) AS INT)):bigint>
-- !query output
NULL


-- !query
select sum(udf(CAST(null AS long))) from range(1,4)
-- !query schema
struct<sum(CAST(udf(cast(cast(null as bigint) as string)) AS BIGINT)):bigint>
struct<sum(CAST(udf(ansi_cast(ansi_cast(null as bigint) as string)) AS BIGINT)):bigint>
-- !query output
NULL


-- !query
select sum(udf(CAST(null AS Decimal(38,0)))) from range(1,4)
-- !query schema
struct<sum(CAST(udf(cast(cast(null as decimal(38,0)) as string)) AS DECIMAL(38,0))):decimal(38,0)>
struct<sum(CAST(udf(ansi_cast(ansi_cast(null as decimal(38,0)) as string)) AS DECIMAL(38,0))):decimal(38,0)>
-- !query output
NULL


-- !query
select sum(udf(CAST(null AS DOUBLE))) from range(1,4)
-- !query schema
struct<sum(CAST(udf(cast(cast(null as double) as string)) AS DOUBLE)):double>
struct<sum(CAST(udf(ansi_cast(ansi_cast(null as double) as string)) AS DOUBLE)):double>
-- !query output
NULL


-- !query
select avg(udf(CAST(null AS int))) from range(1,4)
-- !query schema
struct<avg(CAST(udf(cast(cast(null as int) as string)) AS INT)):double>
struct<avg(CAST(udf(ansi_cast(ansi_cast(null as int) as string)) AS INT)):double>
-- !query output
NULL


-- !query
select avg(udf(CAST(null AS long))) from range(1,4)
-- !query schema
struct<avg(CAST(udf(cast(cast(null as bigint) as string)) AS BIGINT)):double>
struct<avg(CAST(udf(ansi_cast(ansi_cast(null as bigint) as string)) AS BIGINT)):double>
-- !query output
NULL


-- !query
select avg(udf(CAST(null AS Decimal(38,0)))) from range(1,4)
-- !query schema
struct<avg(CAST(udf(cast(cast(null as decimal(38,0)) as string)) AS DECIMAL(38,0))):decimal(38,4)>
struct<avg(CAST(udf(ansi_cast(ansi_cast(null as decimal(38,0)) as string)) AS DECIMAL(38,0))):decimal(38,4)>
-- !query output
NULL


-- !query
select avg(udf(CAST(null AS DOUBLE))) from range(1,4)
-- !query schema
struct<avg(CAST(udf(cast(cast(null as double) as string)) AS DOUBLE)):double>
struct<avg(CAST(udf(ansi_cast(ansi_cast(null as double) as string)) AS DOUBLE)):double>
-- !query output
NULL


-- !query
select sum(CAST(udf('NaN') AS DOUBLE)) from range(1,4)
-- !query schema
struct<sum(CAST(CAST(udf(cast(NaN as string)) AS STRING) AS DOUBLE)):double>
struct<sum(CAST(CAST(udf(ansi_cast(NaN as string)) AS STRING) AS DOUBLE)):double>
-- !query output
NaN


-- !query
select avg(CAST(udf('NaN') AS DOUBLE)) from range(1,4)
-- !query schema
struct<avg(CAST(CAST(udf(cast(NaN as string)) AS STRING) AS DOUBLE)):double>
struct<avg(CAST(CAST(udf(ansi_cast(NaN as string)) AS STRING) AS DOUBLE)):double>
-- !query output
NaN

Expand All @@ -238,7 +238,7 @@ NaN
SELECT avg(CAST(udf(x) AS DOUBLE)), var_pop(CAST(udf(x) AS DOUBLE))
FROM (VALUES ('Infinity'), ('1')) v(x)
-- !query schema
struct<avg(CAST(CAST(udf(cast(x as string)) AS STRING) AS DOUBLE)):double,var_pop(CAST(CAST(udf(cast(x as string)) AS STRING) AS DOUBLE)):double>
struct<avg(CAST(CAST(udf(ansi_cast(x as string)) AS STRING) AS DOUBLE)):double,var_pop(CAST(CAST(udf(ansi_cast(x as string)) AS STRING) AS DOUBLE)):double>
-- !query output
Infinity NaN

Expand All @@ -247,7 +247,7 @@ Infinity NaN
SELECT avg(CAST(udf(x) AS DOUBLE)), var_pop(CAST(udf(x) AS DOUBLE))
FROM (VALUES ('Infinity'), ('Infinity')) v(x)
-- !query schema
struct<avg(CAST(CAST(udf(cast(x as string)) AS STRING) AS DOUBLE)):double,var_pop(CAST(CAST(udf(cast(x as string)) AS STRING) AS DOUBLE)):double>
struct<avg(CAST(CAST(udf(ansi_cast(x as string)) AS STRING) AS DOUBLE)):double,var_pop(CAST(CAST(udf(ansi_cast(x as string)) AS STRING) AS DOUBLE)):double>
-- !query output
Infinity NaN

Expand All @@ -256,7 +256,7 @@ Infinity NaN
SELECT avg(CAST(udf(x) AS DOUBLE)), var_pop(CAST(udf(x) AS DOUBLE))
FROM (VALUES ('-Infinity'), ('Infinity')) v(x)
-- !query schema
struct<avg(CAST(CAST(udf(cast(x as string)) AS STRING) AS DOUBLE)):double,var_pop(CAST(CAST(udf(cast(x as string)) AS STRING) AS DOUBLE)):double>
struct<avg(CAST(CAST(udf(ansi_cast(x as string)) AS STRING) AS DOUBLE)):double,var_pop(CAST(CAST(udf(ansi_cast(x as string)) AS STRING) AS DOUBLE)):double>
-- !query output
NaN NaN

Expand All @@ -265,7 +265,7 @@ NaN NaN
SELECT avg(udf(CAST(x AS DOUBLE))), udf(var_pop(CAST(x AS DOUBLE)))
FROM (VALUES (100000003), (100000004), (100000006), (100000007)) v(x)
-- !query schema
struct<avg(CAST(udf(cast(cast(x as double) as string)) AS DOUBLE)):double,CAST(udf(cast(var_pop(cast(x as double)) as string)) AS DOUBLE):double>
struct<avg(CAST(udf(ansi_cast(ansi_cast(x as double) as string)) AS DOUBLE)):double,CAST(udf(ansi_cast(var_pop(ansi_cast(x as double)) as string)) AS DOUBLE):double>
-- !query output
1.00000005E8 2.5

Expand All @@ -274,23 +274,23 @@ struct<avg(CAST(udf(cast(cast(x as double) as string)) AS DOUBLE)):double,CAST(u
SELECT avg(udf(CAST(x AS DOUBLE))), udf(var_pop(CAST(x AS DOUBLE)))
FROM (VALUES (7000000000005), (7000000000007)) v(x)
-- !query schema
struct<avg(CAST(udf(cast(cast(x as double) as string)) AS DOUBLE)):double,CAST(udf(cast(var_pop(cast(x as double)) as string)) AS DOUBLE):double>
struct<avg(CAST(udf(ansi_cast(ansi_cast(x as double) as string)) AS DOUBLE)):double,CAST(udf(ansi_cast(var_pop(ansi_cast(x as double)) as string)) AS DOUBLE):double>
-- !query output
7.000000000006E12 1.0


-- !query
SELECT udf(covar_pop(b, udf(a))), covar_samp(udf(b), a) FROM aggtest
-- !query schema
struct<CAST(udf(cast(covar_pop(cast(b as double), cast(cast(udf(cast(a as string)) as int) as double)) as string)) AS DOUBLE):double,covar_samp(CAST(CAST(udf(cast(b as string)) AS FLOAT) AS DOUBLE), CAST(a AS DOUBLE)):double>
struct<CAST(udf(ansi_cast(covar_pop(ansi_cast(b as double), ansi_cast(ansi_cast(udf(ansi_cast(a as string)) as int) as double)) as string)) AS DOUBLE):double,covar_samp(CAST(CAST(udf(ansi_cast(b as string)) AS FLOAT) AS DOUBLE), CAST(a AS DOUBLE)):double>
-- !query output
653.6289553875104 871.5052738500139


-- !query
SELECT corr(b, udf(a)) FROM aggtest
-- !query schema
struct<corr(CAST(b AS DOUBLE), CAST(CAST(udf(cast(a as string)) AS INT) AS DOUBLE)):double>
struct<corr(CAST(b AS DOUBLE), CAST(CAST(udf(ansi_cast(a as string)) AS INT) AS DOUBLE)):double>
-- !query output
0.1396345165178734

Expand All @@ -315,7 +315,7 @@ struct<cnt_4:bigint>
select ten, udf(count(*)), sum(udf(four)) from onek
group by ten order by ten
-- !query schema
struct<ten:int,CAST(udf(cast(count(1) as string)) AS BIGINT):bigint,sum(CAST(udf(cast(four as string)) AS INT)):bigint>
struct<ten:int,CAST(udf(ansi_cast(count(1) as string)) AS BIGINT):bigint,sum(CAST(udf(ansi_cast(four as string)) AS INT)):bigint>
-- !query output
0 100 100
1 100 200
Expand All @@ -333,7 +333,7 @@ struct<ten:int,CAST(udf(cast(count(1) as string)) AS BIGINT):bigint,sum(CAST(udf
select ten, count(udf(four)), udf(sum(DISTINCT four)) from onek
group by ten order by ten
-- !query schema
struct<ten:int,count(CAST(udf(cast(four as string)) AS INT)):bigint,CAST(udf(cast(sum(distinct cast(four as bigint)) as string)) AS BIGINT):bigint>
struct<ten:int,count(CAST(udf(ansi_cast(four as string)) AS INT)):bigint,CAST(udf(ansi_cast(sum(distinct ansi_cast(four as bigint)) as string)) AS BIGINT):bigint>
-- !query output
0 100 2
1 100 4
Expand All @@ -352,7 +352,7 @@ select ten, udf(sum(distinct four)) from onek a
group by ten
having exists (select 1 from onek b where udf(sum(distinct a.four)) = b.four)
-- !query schema
struct<ten:int,CAST(udf(cast(sum(distinct cast(four as bigint)) as string)) AS BIGINT):bigint>
struct<ten:int,CAST(udf(ansi_cast(sum(distinct ansi_cast(four as bigint)) as string)) AS BIGINT):bigint>
-- !query output
0 2
2 2
Expand All @@ -372,7 +372,7 @@ struct<>
org.apache.spark.sql.AnalysisException

Aggregate/Window/Generate expressions are not valid in where clause of the query.
Expression in where clause: [(sum(DISTINCT CAST((outer() + b.`four`) AS BIGINT)) = CAST(CAST(udf(cast(four as string)) AS INT) AS BIGINT))]
Expression in where clause: [(sum(DISTINCT CAST((outer() + b.`four`) AS BIGINT)) = CAST(CAST(udf(ansi_cast(four as string)) AS INT) AS BIGINT))]
Invalid expressions: [sum(DISTINCT CAST((outer() + b.`four`) AS BIGINT))];


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,15 +161,15 @@ true true false NULL false true
-- !query
select min(udf(unique1)) from tenk1
-- !query schema
struct<min(CAST(udf(cast(unique1 as string)) AS INT)):int>
struct<min(CAST(udf(ansi_cast(unique1 as string)) AS INT)):int>
-- !query output
0


-- !query
select udf(max(unique1)) from tenk1
-- !query schema
struct<CAST(udf(cast(max(unique1) as string)) AS INT):int>
struct<CAST(udf(ansi_cast(max(unique1) as string)) AS INT):int>
-- !query output
9999

Expand Down Expand Up @@ -217,7 +217,7 @@ struct<min(tenthous):int>
-- !query
select distinct max(udf(unique2)) from tenk1
-- !query schema
struct<max(CAST(udf(cast(unique2 as string)) AS INT)):int>
struct<max(CAST(udf(ansi_cast(unique2 as string)) AS INT)):int>
-- !query output
9999

Expand All @@ -241,15 +241,15 @@ struct<max(unique2):int>
-- !query
select udf(max(udf(unique2))) from tenk1 order by udf(max(unique2))+1
-- !query schema
struct<CAST(udf(cast(max(cast(udf(cast(unique2 as string)) as int)) as string)) AS INT):int>
struct<CAST(udf(ansi_cast(max(ansi_cast(udf(ansi_cast(unique2 as string)) as int)) as string)) AS INT):int>
-- !query output
9999


-- !query
select t1.max_unique2, udf(g) from (select max(udf(unique2)) as max_unique2 FROM tenk1) t1 LATERAL VIEW explode(array(1,2,3)) t2 AS g order by g desc
-- !query schema
struct<max_unique2:int,CAST(udf(cast(g as string)) AS INT):int>
struct<max_unique2:int,CAST(udf(ansi_cast(g as string)) AS INT):int>
-- !query output
9999 3
9999 2
Expand All @@ -259,6 +259,6 @@ struct<max_unique2:int,CAST(udf(cast(g as string)) AS INT):int>
-- !query
select udf(max(100)) from tenk1
-- !query schema
struct<CAST(udf(cast(max(100) as string)) AS INT):int>
struct<CAST(udf(ansi_cast(max(100) as string)) AS INT):int>
-- !query output
100
Original file line number Diff line number Diff line change
Expand Up @@ -176,23 +176,23 @@ struct<None:string,NULL on no matches:int>
-- !query
SELECT CASE WHEN udf(1=0) THEN 1/0 WHEN 1=1 THEN 1 ELSE 2/0 END
-- !query schema
struct<CASE WHEN CAST(udf(cast((1 = 0) as string)) AS BOOLEAN) THEN (CAST(1 AS DOUBLE) / CAST(0 AS DOUBLE)) WHEN (1 = 1) THEN CAST(1 AS DOUBLE) ELSE (CAST(2 AS DOUBLE) / CAST(0 AS DOUBLE)) END:double>
struct<CASE WHEN CAST(udf(ansi_cast((1 = 0) as string)) AS BOOLEAN) THEN (CAST(1 AS DOUBLE) / CAST(0 AS DOUBLE)) WHEN (1 = 1) THEN CAST(1 AS DOUBLE) ELSE (CAST(2 AS DOUBLE) / CAST(0 AS DOUBLE)) END:double>
-- !query output
1.0


-- !query
SELECT CASE 1 WHEN 0 THEN 1/udf(0) WHEN 1 THEN 1 ELSE 2/0 END
-- !query schema
struct<CASE WHEN (1 = 0) THEN (CAST(1 AS DOUBLE) / CAST(CAST(udf(cast(0 as string)) AS INT) AS DOUBLE)) WHEN (1 = 1) THEN CAST(1 AS DOUBLE) ELSE (CAST(2 AS DOUBLE) / CAST(0 AS DOUBLE)) END:double>
struct<CASE WHEN (1 = 0) THEN (CAST(1 AS DOUBLE) / CAST(CAST(udf(ansi_cast(0 as string)) AS INT) AS DOUBLE)) WHEN (1 = 1) THEN CAST(1 AS DOUBLE) ELSE (CAST(2 AS DOUBLE) / CAST(0 AS DOUBLE)) END:double>
-- !query output
1.0


-- !query
SELECT CASE WHEN i > 100 THEN udf(1/0) ELSE udf(0) END FROM case_tbl
-- !query schema
struct<CASE WHEN (i > 100) THEN CAST(udf(cast((cast(1 as double) / cast(0 as double)) as string)) AS DOUBLE) ELSE CAST(CAST(udf(cast(0 as string)) AS INT) AS DOUBLE) END:double>
struct<CASE WHEN (i > 100) THEN CAST(udf(ansi_cast((ansi_cast(1 as double) / ansi_cast(0 as double)) as string)) AS DOUBLE) ELSE CAST(CAST(udf(ansi_cast(0 as string)) AS INT) AS DOUBLE) END:double>
-- !query output
0.0
0.0
Expand All @@ -203,7 +203,7 @@ struct<CASE WHEN (i > 100) THEN CAST(udf(cast((cast(1 as double) / cast(0 as dou
-- !query
SELECT CASE 'a' WHEN 'a' THEN udf(1) ELSE udf(2) END
-- !query schema
struct<CASE WHEN (a = a) THEN CAST(udf(cast(1 as string)) AS INT) ELSE CAST(udf(cast(2 as string)) AS INT) END:int>
struct<CASE WHEN (a = a) THEN CAST(udf(ansi_cast(1 as string)) AS INT) ELSE CAST(udf(ansi_cast(2 as string)) AS INT) END:int>
-- !query output
1

Expand Down Expand Up @@ -294,7 +294,7 @@ struct<i:int,f:double>
SELECT udf(COALESCE(a.f, b.i, b.j))
FROM CASE_TBL a, CASE2_TBL b
-- !query schema
struct<CAST(udf(cast(coalesce(f, cast(i as double), cast(j as double)) as string)) AS DOUBLE):double>
struct<CAST(udf(ansi_cast(coalesce(f, ansi_cast(i as double), ansi_cast(j as double)) as string)) AS DOUBLE):double>
-- !query output
-30.3
-30.3
Expand Down
Loading