@@ -448,6 +448,43 @@ class DataFrameFunctionsSuite extends QueryTest with SharedSQLContext {
448448 rand(Random .nextLong()), randn(Random .nextLong())
449449 ).foreach(assertValuesDoNotChangeAfterCoalesceOrUnion(_))
450450 }
451+
452+ test(" SPARK-21281 fails if functions have no argument" ) {
453+ var errMsg = intercept[AnalysisException ] {
454+ spark.range(1 ).select(array())
455+ }.getMessage
456+ assert(errMsg.contains(" due to data type mismatch: input to function coalesce cannot be empty" ))
457+
458+ errMsg = intercept[AnalysisException ] {
459+ spark.range(1 ).select(map())
460+ }.getMessage
461+ assert(errMsg.contains(" due to data type mismatch: input to function coalesce cannot be empty" ))
462+
463+ // spark.range(1).select(coalesce())
464+ errMsg = intercept[AnalysisException ] {
465+ spark.range(1 ).select(coalesce())
466+ }.getMessage
467+ assert(errMsg.contains(" due to data type mismatch: input to function coalesce cannot be empty" ))
468+
469+ // This hits java.lang.AssertionError
470+ // spark.range(1).select(struct())
471+
472+ errMsg = intercept[IllegalArgumentException ] {
473+ spark.range(1 ).select(greatest())
474+ }.getMessage
475+ assert(errMsg.contains(" requirement failed: greatest requires at least 2 arguments" ))
476+
477+ errMsg = intercept[IllegalArgumentException ] {
478+ spark.range(1 ).select(least())
479+ }.getMessage
480+ assert(errMsg.contains(" requirement failed: least requires at least 2 arguments" ))
481+
482+ errMsg = intercept[AnalysisException ] {
483+ spark.range(1 ).select(hash())
484+ }.getMessage
485+ assert(errMsg.contains(
486+ " due to data type mismatch: function hash requires at least one argument" ))
487+ }
451488}
452489
453490object DataFrameFunctionsSuite {
0 commit comments