diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/complexTypeCreator.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/complexTypeCreator.scala index cd4bf0b8fe2d4..8134b71b10504 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/complexTypeCreator.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/complexTypeCreator.scala @@ -92,7 +92,7 @@ case class CreateNamedStruct(children: Seq[Expression]) extends Expression { private lazy val names = nameExprs.map(_.asInstanceOf[Literal].value.toString) override lazy val dataType: StructType = { - require(resolved, resolveFailureMessage) + assert(resolved, resolveFailureMessage) val fields = names.zip(valExprs).map { case (name, valExpr) => StructField(name, valExpr.dataType, valExpr.nullable, Metadata.empty) } @@ -123,7 +123,6 @@ case class CreateNamedStruct(children: Seq[Expression]) extends Expression { } override def eval(input: InternalRow): Any = { - require(resolved, resolveFailureMessage) InternalRow(valExprs.map(_.eval(input)): _*) } diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ExpressionTypeCheckingSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ExpressionTypeCheckingSuite.scala index bc1537b0715b5..bacbefb3a2a4c 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ExpressionTypeCheckingSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ExpressionTypeCheckingSuite.scala @@ -160,4 +160,11 @@ class ExpressionTypeCheckingSuite extends SparkFunSuite { assertError(Explode('intField), "input to function explode should be array or map type") } + + test("check types for CreateNamedStruct") { + assertError( + CreateNamedStruct(Seq("a", "b", 2.0)), "even number of arguments") + assertError( + CreateNamedStruct(Seq(1, "a", "b", 2.0)), "Non String Literal fields") + } } diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/ComplexTypeSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/ComplexTypeSuite.scala index aa65be5a3953c..57b8d6b569a44 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/ComplexTypeSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/ComplexTypeSuite.scala @@ -102,22 +102,6 @@ class ComplexTypeSuite extends SparkFunSuite with ExpressionEvalHelper { assert(getStructField(nullStruct, "a").nullable === true) } - test("CreateNamedStruct with odd number of parameters") { - val thrown = intercept[TestFailedException] { - checkEvaluation( - CreateNamedStruct(Seq("a", "b", 2.0)), InternalRow("x", 2.0), InternalRow.empty) - } - assert(thrown.getCause.getMessage.contains("even number of arguments")) - } - - test("CreateNamedStruct with non String Literal name") { - val thrown = intercept[TestFailedException] { - checkEvaluation( - CreateNamedStruct(Seq(1, "a", "b", 2.0)), InternalRow("x", 2.0), InternalRow.empty) - } - assert(thrown.getCause.getMessage.contains("Non String Literal fields")) - } - test("complex type") { val row = create_row( "^Ba*n", // 0