Skip to content

Commit b593be1

Browse files
committed
added test cases for UDAF
1 parent 5cb4206 commit b593be1

2 files changed

Lines changed: 30 additions & 1 deletion

File tree

sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/AggregationQuerySuite.scala

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,19 @@ abstract class AggregationQuerySuite extends QueryTest with SQLTestUtils with Te
509509
Row(null, null, 110.0, null, null, 10.0) :: Nil)
510510
}
511511

512+
test("non-deterministic children expressions of UDAF") {
513+
val e = intercept[AnalysisException] {
514+
spark.sql(
515+
"""
516+
|SELECT mydoublesum(value + 1.5 * key + rand())
517+
|FROM agg1
518+
|GROUP BY key
519+
""".stripMargin)
520+
}.getMessage
521+
assert(Seq("nondeterministic expression",
522+
"should not appear in the arguments of an aggregate function").forall(e.contains))
523+
}
524+
512525
test("interpreted aggregate function") {
513526
checkAnswer(
514527
spark.sql(

sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveUDAFSuite.scala

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@ package org.apache.spark.sql.hive.execution
1919

2020
import scala.collection.JavaConverters._
2121

22+
import org.apache.hadoop.hive.ql.udf.UDAFPercentile
2223
import org.apache.hadoop.hive.ql.udf.generic.{AbstractGenericUDAFResolver, GenericUDAFEvaluator, GenericUDAFMax}
2324
import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator.{AggregationBuffer, Mode}
2425
import org.apache.hadoop.hive.ql.util.JavaDataModel
2526
import org.apache.hadoop.hive.serde2.objectinspector.{ObjectInspector, ObjectInspectorFactory}
2627
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory
2728
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo
2829

29-
import org.apache.spark.sql.{QueryTest, Row}
30+
import org.apache.spark.sql.{AnalysisException, QueryTest, Row}
3031
import org.apache.spark.sql.execution.aggregate.ObjectHashAggregateExec
3132
import org.apache.spark.sql.hive.test.TestHiveSingleton
3233
import org.apache.spark.sql.test.SQLTestUtils
@@ -84,6 +85,21 @@ class HiveUDAFSuite extends QueryTest with TestHiveSingleton with SQLTestUtils {
8485
Row(1, Row(1, 1))
8586
))
8687
}
88+
89+
test("non-deterministic children expressions of UDAF") {
90+
withTempView("view1") {
91+
spark.range(1).selectExpr("id as x", "id as y").createTempView("view1")
92+
withUserDefinedFunction("testUDAFPercentile" -> true, "testMock" -> true) {
93+
// non-deterministic children of Hive UDAF
94+
sql(s"CREATE TEMPORARY FUNCTION testUDAFPercentile AS '${classOf[UDAFPercentile].getName}'")
95+
val e1 = intercept[AnalysisException] {
96+
sql("SELECT testUDAFPercentile(x, rand()) from view1 group by y")
97+
}.getMessage
98+
assert(Seq("nondeterministic expression",
99+
"should not appear in the arguments of an aggregate function").forall(e1.contains))
100+
}
101+
}
102+
}
87103
}
88104

89105
/**

0 commit comments

Comments
 (0)