You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by go...@apache.org on 2015/11/06 02:17:11 UTC
hive git commit: HIVE-12315: Fix Vectorized double divide by zero
(Gopal V, reviewed by Matt McCline)
Repository: hive
Updated Branches:
refs/heads/master 0add63786 -> b5654cc6f
HIVE-12315: Fix Vectorized double divide by zero (Gopal V, reviewed by Matt McCline)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/b5654cc6
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/b5654cc6
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/b5654cc6
Branch: refs/heads/master
Commit: b5654cc6ffbe99a13c2a41b8cc0ffdfadcf9274f
Parents: 0add637
Author: Gopal V <go...@apache.org>
Authored: Thu Nov 5 17:16:46 2015 -0800
Committer: Gopal V <go...@apache.org>
Committed: Thu Nov 5 17:16:46 2015 -0800
----------------------------------------------------------------------
.../ql/exec/vector/expressions/NullUtil.java | 21 ++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/b5654cc6/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/NullUtil.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/NullUtil.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/NullUtil.java
index e4a9824..2eb48fb 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/NullUtil.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/NullUtil.java
@@ -125,20 +125,21 @@ public class NullUtil {
public static void setNullAndDivBy0DataEntriesDouble(
DoubleColumnVector v, boolean selectedInUse, int[] sel, int n, LongColumnVector denoms) {
assert v.isRepeating || !denoms.isRepeating;
+ final boolean realNulls = !v.noNulls;
v.noNulls = false;
long[] vector = denoms.vector;
- if (v.isRepeating && (v.isNull[0] = (v.isNull[0] || vector[0] == 0))) {
+ if (v.isRepeating && (v.isNull[0] = ((realNulls && v.isNull[0]) || vector[0] == 0))) {
v.vector[0] = DoubleColumnVector.NULL_VALUE;
} else if (selectedInUse) {
for (int j = 0; j != n; j++) {
int i = sel[j];
- if (v.isNull[i] = (v.isNull[i] || vector[i] == 0)) {
+ if (v.isNull[i] = ((realNulls && v.isNull[i]) || vector[i] == 0)) {
v.vector[i] = DoubleColumnVector.NULL_VALUE;
}
}
} else {
for (int i = 0; i != n; i++) {
- if (v.isNull[i] = (v.isNull[i] || vector[i] == 0)) {
+ if (v.isNull[i] = ((realNulls && v.isNull[i]) || vector[i] == 0)) {
v.vector[i] = DoubleColumnVector.NULL_VALUE;
}
}
@@ -152,20 +153,21 @@ public class NullUtil {
public static void setNullAndDivBy0DataEntriesDouble(
DoubleColumnVector v, boolean selectedInUse, int[] sel, int n, DoubleColumnVector denoms) {
assert v.isRepeating || !denoms.isRepeating;
+ final boolean realNulls = !v.noNulls;
v.noNulls = false;
double[] vector = denoms.vector;
- if (v.isRepeating && (v.isNull[0] = (v.isNull[0] || vector[0] == 0))) {
+ if (v.isRepeating && (v.isNull[0] = ((realNulls && v.isNull[0]) || vector[0] == 0))) {
v.vector[0] = DoubleColumnVector.NULL_VALUE;
} else if (selectedInUse) {
for (int j = 0; j != n; j++) {
int i = sel[j];
- if (v.isNull[i] = (v.isNull[i] || vector[i] == 0)) {
+ if (v.isNull[i] = ((realNulls && v.isNull[i]) || vector[i] == 0)) {
v.vector[i] = DoubleColumnVector.NULL_VALUE;
}
}
} else {
for (int i = 0; i != n; i++) {
- if (v.isNull[i] = (v.isNull[i] || vector[i] == 0)) {
+ if (v.isNull[i] = ((realNulls && v.isNull[i]) || vector[i] == 0)) {
v.vector[i] = DoubleColumnVector.NULL_VALUE;
}
}
@@ -235,6 +237,13 @@ public class NullUtil {
outputColVector.noNulls = inputColVector1.noNulls && inputColVector2.noNulls;
+ if (outputColVector.noNulls) {
+ // the inputs might not always have isNull initialized for
+ // inputColVector1.isNull[i] || inputColVector2.isNull[i] to be valid
+ Arrays.fill(outputColVector.isNull, false);
+ return;
+ }
+
if (inputColVector1.noNulls && !inputColVector2.noNulls) {
if (inputColVector2.isRepeating) {
outputColVector.isNull[0] = inputColVector2.isNull[0];