diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IsNotNull.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IsNotNull.java index a2aadca..dac039d 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IsNotNull.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/IsNotNull.java @@ -48,7 +48,12 @@ public void evaluate(VectorizedRowBatch batch) { return; } - if (inputColVector.isRepeating) { + // output never has nulls for this operator + batch.cols[outputColumn].noNulls = true; + if (inputColVector.noNulls) { + outputVector[0] = 1; + batch.cols[outputColumn].isRepeating = true; + } else if (inputColVector.isRepeating) { //All must be selected otherwise size would be zero //Selection property will not change. if (nullPos[0]) { @@ -56,6 +61,7 @@ public void evaluate(VectorizedRowBatch batch) { } else { outputVector[0] = 1; } + batch.cols[outputColumn].isRepeating = true; } else if (batch.selectedInUse) { for(int j=0; j != n; j++) { int i = sel[j]; @@ -65,8 +71,7 @@ public void evaluate(VectorizedRowBatch batch) { outputVector[i] = 1; } } - } - else { + } else { for(int i = 0; i != n; i++) { if (nullPos[i]) { outputVector[i] = 0; diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/NotCol.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/NotCol.java index d60fca4..465c489 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/NotCol.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/NotCol.java @@ -48,33 +48,44 @@ public void evaluate(VectorizedRowBatch batch) { return; } - if (inputColVector.isRepeating) { - outV.isRepeating = true; - // mask out all but low order bit with "& 1" so NOT 1 yields 0, NOT 0 yields 1 - outputVector[0] = ~vector[0] & 1; - } else if (batch.selectedInUse) { - for(int j=0; j != n; j++) { - int i = sel[j]; - outputVector[i] = ~vector[i] & 1; - } - outV.isRepeating = false; - } - else { - for(int i = 0; i != n; i++) { - outputVector[i] = ~vector[i] & 1; - } - outV.isRepeating = false; - } - - // handle NULLs if (inputColVector.noNulls) { outV.noNulls = true; + if (inputColVector.isRepeating) { + outV.isRepeating = true; + // mask out all but low order bit with "& 1" so NOT 1 yields 0, NOT 0 yields 1 + outputVector[0] = ~vector[0] & 1; + } else if (batch.selectedInUse) { + for (int j = 0; j != n; j++) { + int i = sel[j]; + outputVector[i] = ~vector[i] & 1; + } + outV.isRepeating = false; + } + else { + for (int i = 0; i != n; i++) { + outputVector[i] = ~vector[i] & 1; + } + outV.isRepeating = false; + } } else { outV.noNulls = false; if (inputColVector.isRepeating) { + outV.isRepeating = true; + outputVector[0] = ~vector[0] & 1; outV.isNull[0] = inputColVector.isNull[0]; + } else if (batch.selectedInUse) { + outV.isRepeating = false; + for(int j=0; j != n; j++) { + int i = sel[j]; + outputVector[i] = ~vector[i] & 1; + outV.isNull[i] = inputColVector.isNull[i]; + } } else { - System.arraycopy(inputColVector.isNull, 0, outV.isNull, 0, n); + outV.isRepeating = false; + for(int i = 0; i != n; i++) { + outputVector[i] = ~vector[i] & 1; + outV.isNull[i] = inputColVector.isNull[i]; + } } } }