aboutsummaryrefslogtreecommitdiff
path: root/sql/catalyst
diff options
context:
space:
mode:
authorWenchen Fan <wenchen@databricks.com>2015-11-23 10:13:59 -0800
committerMichael Armbrust <michael@databricks.com>2015-11-23 10:13:59 -0800
commit1a5baaa6517872b9a4fd6cd41c4b2cf1e390f6d1 (patch)
tree5d399059cdd9c4b14c02ce551618e9a13f179cf0 /sql/catalyst
parent94ce65dfcbba1fe3a1fc9d8002c37d9cd1a11336 (diff)
downloadspark-1a5baaa6517872b9a4fd6cd41c4b2cf1e390f6d1.tar.gz
spark-1a5baaa6517872b9a4fd6cd41c4b2cf1e390f6d1.tar.bz2
spark-1a5baaa6517872b9a4fd6cd41c4b2cf1e390f6d1.zip
[SPARK-11894][SQL] fix isNull for GetInternalRowField
We should use `InternalRow.isNullAt` to check if the field is null before calling `InternalRow.getXXX` Thanks gatorsmile who discovered this bug. Author: Wenchen Fan <wenchen@databricks.com> Closes #9904 from cloud-fan/null.
Diffstat (limited to 'sql/catalyst')
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/objects.scala23
1 files changed, 9 insertions, 14 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/objects.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/objects.scala
index 82317d3385..4a1f419f0a 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/objects.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/objects.scala
@@ -236,11 +236,6 @@ case class NewInstance(
}
if (propagateNull) {
- val objNullCheck = if (ctx.defaultValue(dataType) == "null") {
- s"${ev.isNull} = ${ev.value} == null;"
- } else {
- ""
- }
val argsNonNull = s"!(${argGen.map(_.isNull).mkString(" || ")})"
s"""
@@ -531,15 +526,15 @@ case class GetInternalRowField(child: Expression, ordinal: Int, dataType: DataTy
throw new UnsupportedOperationException("Only code-generated evaluation is supported")
override def genCode(ctx: CodeGenContext, ev: GeneratedExpressionCode): String = {
- val row = child.gen(ctx)
- s"""
- ${row.code}
- final boolean ${ev.isNull} = ${row.isNull};
- ${ctx.javaType(dataType)} ${ev.value} = ${ctx.defaultValue(dataType)};
- if (!${ev.isNull}) {
- ${ev.value} = ${ctx.getValue(row.value, dataType, ordinal.toString)};
- }
- """
+ nullSafeCodeGen(ctx, ev, eval => {
+ s"""
+ if ($eval.isNullAt($ordinal)) {
+ ${ev.isNull} = true;
+ } else {
+ ${ev.value} = ${ctx.getValue(eval, dataType, ordinal.toString)};
+ }
+ """
+ })
}
}