This is an automated email from the ASF dual-hosted git repository.
rongr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 96f297a447 fix null transform bound check (#9495)
96f297a447 is described below
commit 96f297a447e8edc4635109e692272a528c17b88c
Author: Rong Rong <[email protected]>
AuthorDate: Thu Sep 29 15:33:36 2022 -0700
fix null transform bound check (#9495)
* fix bound check
* add test
Co-authored-by: Rong Rong <[email protected]>
---
.../transform/function/IsNotNullTransformFunction.java | 14 ++++++++------
.../transform/function/IsNullTransformFunction.java | 14 ++++++++------
.../function/NullHandlingTransformFunctionTest.java | 10 ++++++----
3 files changed, 22 insertions(+), 16 deletions(-)
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/IsNotNullTransformFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/IsNotNullTransformFunction.java
index 0a5a902284..0592e743c7 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/IsNotNullTransformFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/IsNotNullTransformFunction.java
@@ -77,12 +77,14 @@ public class IsNotNullTransformFunction extends
BaseTransformFunction {
int currentDocIdIndex = 0;
while (_nullValueVectorIterator.hasNext() & currentDocIdIndex < length) {
_nullValueVectorIterator.advanceIfNeeded(docIds[currentDocIdIndex]);
- currentDocIdIndex = Arrays.binarySearch(docIds, currentDocIdIndex,
length, _nullValueVectorIterator.next());
- if (currentDocIdIndex >= 0) {
- _results[currentDocIdIndex] = 0;
- currentDocIdIndex++;
- } else {
- currentDocIdIndex = -currentDocIdIndex - 1;
+ if (_nullValueVectorIterator.hasNext()) {
+ currentDocIdIndex = Arrays.binarySearch(docIds, currentDocIdIndex,
length, _nullValueVectorIterator.next());
+ if (currentDocIdIndex >= 0) {
+ _results[currentDocIdIndex] = 0;
+ currentDocIdIndex++;
+ } else {
+ currentDocIdIndex = -currentDocIdIndex - 1;
+ }
}
}
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/IsNullTransformFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/IsNullTransformFunction.java
index 16dcc3fcdc..deec96481f 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/IsNullTransformFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/IsNullTransformFunction.java
@@ -76,12 +76,14 @@ public class IsNullTransformFunction extends
BaseTransformFunction {
int currentDocIdIndex = 0;
while (_nullValueVectorIterator.hasNext() & currentDocIdIndex < length) {
_nullValueVectorIterator.advanceIfNeeded(docIds[currentDocIdIndex]);
- currentDocIdIndex = Arrays.binarySearch(docIds, currentDocIdIndex,
length, _nullValueVectorIterator.next());
- if (currentDocIdIndex >= 0) {
- _results[currentDocIdIndex] = 1;
- currentDocIdIndex++;
- } else {
- currentDocIdIndex = -currentDocIdIndex - 1;
+ if (_nullValueVectorIterator.hasNext()) {
+ currentDocIdIndex = Arrays.binarySearch(docIds, currentDocIdIndex,
length, _nullValueVectorIterator.next());
+ if (currentDocIdIndex >= 0) {
+ _results[currentDocIdIndex] = 1;
+ currentDocIdIndex++;
+ } else {
+ currentDocIdIndex = -currentDocIdIndex - 1;
+ }
}
}
}
diff --git
a/pinot-core/src/test/java/org/apache/pinot/core/operator/transform/function/NullHandlingTransformFunctionTest.java
b/pinot-core/src/test/java/org/apache/pinot/core/operator/transform/function/NullHandlingTransformFunctionTest.java
index de8b8e3636..4cb00e657f 100644
---
a/pinot-core/src/test/java/org/apache/pinot/core/operator/transform/function/NullHandlingTransformFunctionTest.java
+++
b/pinot-core/src/test/java/org/apache/pinot/core/operator/transform/function/NullHandlingTransformFunctionTest.java
@@ -86,10 +86,10 @@ public class NullHandlingTransformFunctionTest {
protected final double[] _doubleSVValues = new double[NUM_ROWS];
protected final String[] _stringSVValues = new String[NUM_ROWS];
protected final byte[][] _bytesSVValues = new byte[NUM_ROWS][];
+ protected final boolean[] _nullValues = new boolean[NUM_ROWS];
protected Map<String, DataSource> _dataSourceMap;
protected ProjectionBlock _projectionBlock;
- protected static final int NULL_VALUE_MOD = 10;
@BeforeClass
public void setup()
@@ -97,6 +97,7 @@ public class NullHandlingTransformFunctionTest {
FileUtils.deleteQuietly(new File(INDEX_DIR_PATH));
DecimalFormat df = new DecimalFormat("0",
DecimalFormatSymbols.getInstance(Locale.ENGLISH));
df.setMaximumFractionDigits(340); // 340 =
DecimalFormat.DOUBLE_FRACTION_DIGITS
+ Random nullValueRandom = new Random(42);
long currentTimeMs = System.currentTimeMillis();
for (int i = 0; i < NUM_ROWS; i++) {
_intSVValues[i] = RANDOM.nextInt();
@@ -107,12 +108,13 @@ public class NullHandlingTransformFunctionTest {
_bytesSVValues[i] = RandomStringUtils.randomAlphanumeric(26).getBytes();
_timeValues[i] = currentTimeMs - RANDOM.nextInt(365 * 24 * 3600) * 1000L;
+ _nullValues[i] = nullValueRandom.nextInt(2) > 0;
}
List<GenericRow> rows = new ArrayList<>(NUM_ROWS);
for (int i = 0; i < NUM_ROWS; i++) {
Map<String, Object> map = new HashMap<>();
- if (i % NULL_VALUE_MOD != 0) {
+ if (!_nullValues[i]) {
map.put(INT_SV_COLUMN, _intSVValues[i]);
map.put(LONG_SV_COLUMN, _longSVValues[i]);
map.put(FLOAT_SV_COLUMN, _floatSVValues[i]);
@@ -186,7 +188,7 @@ public class NullHandlingTransformFunctionTest {
assertFalse(resultMetadata.hasDictionary());
boolean[] expectedValues = new boolean[NUM_ROWS];
for (int i = 0; i < NUM_ROWS; i++) {
- expectedValues[i] = i % NULL_VALUE_MOD == 0;
+ expectedValues[i] = _nullValues[i];
}
testTransformFunction(expression, expectedValues);
}
@@ -214,7 +216,7 @@ public class NullHandlingTransformFunctionTest {
assertFalse(resultMetadata.hasDictionary());
boolean[] expectedValues = new boolean[NUM_ROWS];
for (int i = 0; i < NUM_ROWS; i++) {
- expectedValues[i] = i % NULL_VALUE_MOD != 0;
+ expectedValues[i] = !_nullValues[i];
}
testTransformFunction(expression, expectedValues);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]