diff options
author | Cheng Lian <lian.cs.zju@gmail.com> | 2014-09-09 18:39:33 -0700 |
---|---|---|
committer | Michael Armbrust <michael@databricks.com> | 2014-09-09 18:39:33 -0700 |
commit | c110614b33a690a3db6ccb1a920fb6a3795aa5a0 (patch) | |
tree | 918ab984014e5129ad94e8a7962ba57d14bad321 /sql/catalyst/src | |
parent | 07ee4a28c3a502121770f301316cb2256e8f0ce2 (diff) | |
download | spark-c110614b33a690a3db6ccb1a920fb6a3795aa5a0.tar.gz spark-c110614b33a690a3db6ccb1a920fb6a3795aa5a0.tar.bz2 spark-c110614b33a690a3db6ccb1a920fb6a3795aa5a0.zip |
[SPARK-3448][SQL] Check for null in SpecificMutableRow.update
`SpecificMutableRow.update` doesn't check for null, and breaks existing `MutableRow` contract.
The tricky part here is that for performance considerations, the `update` method of all subclasses of `MutableValue` doesn't check for null and sets the null bit to false.
Author: Cheng Lian <lian.cs.zju@gmail.com>
Closes #2325 from liancheng/check-for-null and squashes the following commits:
9366c44 [Cheng Lian] Check for null in SpecificMutableRow.update
Diffstat (limited to 'sql/catalyst/src')
-rw-r--r-- | sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/SpecificRow.scala | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/SpecificRow.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/SpecificRow.scala index 75ea0e8459..088f11ee4a 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/SpecificRow.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/SpecificRow.scala @@ -227,7 +227,9 @@ final class SpecificMutableRow(val values: Array[MutableValue]) extends MutableR new SpecificMutableRow(newValues) } - override def update(ordinal: Int, value: Any): Unit = values(ordinal).update(value) + override def update(ordinal: Int, value: Any): Unit = { + if (value == null) setNullAt(ordinal) else values(ordinal).update(value) + } override def iterator: Iterator[Any] = values.map(_.boxed).iterator |