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 643eec0b3e3a0..20b1eaab8e303 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 @@ -17,6 +17,8 @@ package org.apache.spark.sql.catalyst.expressions +import scala.collection.mutable + import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.analysis.TypeCheckResult import org.apache.spark.sql.catalyst.expressions.codegen.{GeneratedExpressionCode, CodeGenContext} @@ -46,7 +48,7 @@ case class CreateArray(children: Seq[Expression]) extends Expression { } override def genCode(ctx: CodeGenContext, ev: GeneratedExpressionCode): String = { - val arraySeqClass = "scala.collection.mutable.ArraySeq" + val arraySeqClass = classOf[mutable.ArraySeq[Any]].getName s""" boolean ${ev.isNull} = false; $arraySeqClass ${ev.primitive} = new $arraySeqClass(${children.size}); @@ -94,7 +96,7 @@ case class CreateStruct(children: Seq[Expression]) extends Expression { } override def genCode(ctx: CodeGenContext, ev: GeneratedExpressionCode): String = { - val rowClass = "org.apache.spark.sql.catalyst.expressions.GenericMutableRow" + val rowClass = classOf[GenericMutableRow].getName s""" boolean ${ev.isNull} = false; final $rowClass ${ev.primitive} = new $rowClass(${children.size}); @@ -158,7 +160,7 @@ case class CreateNamedStruct(children: Seq[Expression]) extends Expression { } override def genCode(ctx: CodeGenContext, ev: GeneratedExpressionCode): String = { - val rowClass = "org.apache.spark.sql.catalyst.expressions.GenericMutableRow" + val rowClass = classOf[GenericMutableRow].getName s""" boolean ${ev.isNull} = false; final $rowClass ${ev.primitive} = new $rowClass(${valExprs.size}); 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 2a70ea95f785c..fac2dffa1ff3c 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 @@ -124,6 +124,13 @@ class ComplexTypeSuite extends SparkFunSuite with ExpressionEvalHelper { checkEvaluation(CreateArray(intSeq.map(Literal(_))), intSeq, EmptyRow) checkEvaluation(CreateArray(longSeq.map(Literal(_))), longSeq, EmptyRow) checkEvaluation(CreateArray(strSeq.map(Literal(_))), strSeq, EmptyRow) + + val intWithNull = intSeq.map(Literal(_)).+:(Literal.create(null, IntegerType)) + val longWithNull = longSeq.map(Literal(_)).+:(Literal.create(null, LongType)) + val strWithNull = strSeq.map(Literal(_)).+:(Literal.create(null, StringType)) + checkEvaluation(CreateArray(intWithNull), intSeq.+:(null), EmptyRow) + checkEvaluation(CreateArray(longWithNull), longSeq.+:(null), EmptyRow) + checkEvaluation(CreateArray(strWithNull), strSeq.+:(null), EmptyRow) } test("CreateStruct") {