This is an automated email from the ASF dual-hosted git repository.
karan pushed a commit to branch 28.0.0
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/28.0.0 by this push:
new c13eb983be2 Optimize the reading of numerical frame arrays in MSQ
(#15175) (#15188)
c13eb983be2 is described below
commit c13eb983be218261111b23b5682da3843af2f5ad
Author: Laksh Singla <[email protected]>
AuthorDate: Wed Oct 18 06:40:55 2023 +0530
Optimize the reading of numerical frame arrays in MSQ (#15175) (#15188)
---
.../druid/frame/field/DoubleArrayFieldReader.java | 5 +-
.../druid/frame/field/FloatArrayFieldReader.java | 5 +-
.../druid/frame/field/LongArrayFieldReader.java | 5 +-
.../frame/field/NumericArrayFieldSelector.java | 57 ++++++++---------
.../druid/frame/field/ReadableFieldPointer.java | 5 ++
.../druid/frame/field/RowMemoryFieldPointer.java | 71 ++++++++++++++++++++++
.../druid/frame/field/SettableFieldPointer.java | 16 ++++-
.../frame/segment/row/ReadableFrameRowPointer.java | 6 ++
.../druid/frame/field/ComplexFieldReaderTest.java | 4 +-
.../druid/frame/field/ConstantFieldPointer.java | 10 ++-
.../frame/field/DoubleArrayFieldReaderTest.java | 37 +++++++----
.../druid/frame/field/DoubleFieldReaderTest.java | 12 ++--
.../frame/field/FloatArrayFieldReaderTest.java | 26 ++++----
.../druid/frame/field/FloatFieldReaderTest.java | 12 ++--
.../druid/frame/field/IndexArrayFieldPointer.java | 10 ++-
.../frame/field/LongArrayFieldReaderTest.java | 26 ++++----
.../druid/frame/field/LongFieldReaderTest.java | 12 ++--
.../frame/field/StringArrayFieldWriterTest.java | 2 +-
.../druid/frame/field/StringFieldReaderTest.java | 26 ++++----
.../druid/frame/field/StringFieldWriterTest.java | 2 +-
20 files changed, 241 insertions(+), 108 deletions(-)
diff --git
a/processing/src/main/java/org/apache/druid/frame/field/DoubleArrayFieldReader.java
b/processing/src/main/java/org/apache/druid/frame/field/DoubleArrayFieldReader.java
index 48f2a5117ee..ec7de095e12 100644
---
a/processing/src/main/java/org/apache/druid/frame/field/DoubleArrayFieldReader.java
+++
b/processing/src/main/java/org/apache/druid/frame/field/DoubleArrayFieldReader.java
@@ -37,6 +37,7 @@ public class DoubleArrayFieldReader extends
NumericArrayFieldReader
{
return new NumericArrayFieldSelector<Double>(memory, fieldPointer)
{
+ private static final int FIELD_SIZE = Byte.BYTES + Double.BYTES;
final SettableFieldPointer fieldPointer = new SettableFieldPointer();
final ColumnValueSelector<?> columnValueSelector =
DoubleFieldReader.forArray().makeColumnValueSelector(memory,
fieldPointer);
@@ -45,7 +46,7 @@ public class DoubleArrayFieldReader extends
NumericArrayFieldReader
@Override
public Double getIndividualValueAtMemory(long position)
{
- fieldPointer.setPosition(position);
+ fieldPointer.setPositionAndLength(position, FIELD_SIZE);
if (columnValueSelector.isNull()) {
return null;
}
@@ -55,7 +56,7 @@ public class DoubleArrayFieldReader extends
NumericArrayFieldReader
@Override
public int getIndividualFieldSize()
{
- return Byte.BYTES + Double.BYTES;
+ return FIELD_SIZE;
}
};
}
diff --git
a/processing/src/main/java/org/apache/druid/frame/field/FloatArrayFieldReader.java
b/processing/src/main/java/org/apache/druid/frame/field/FloatArrayFieldReader.java
index fcbe407bdb2..e97af071824 100644
---
a/processing/src/main/java/org/apache/druid/frame/field/FloatArrayFieldReader.java
+++
b/processing/src/main/java/org/apache/druid/frame/field/FloatArrayFieldReader.java
@@ -37,6 +37,7 @@ public class FloatArrayFieldReader extends
NumericArrayFieldReader
{
return new NumericArrayFieldSelector<Float>(memory, fieldPointer)
{
+ private static final int FIELD_SIZE = Byte.BYTES + Float.BYTES;
final SettableFieldPointer fieldPointer = new SettableFieldPointer();
final ColumnValueSelector<?> columnValueSelector =
FloatFieldReader.forArray().makeColumnValueSelector(memory,
fieldPointer);
@@ -45,7 +46,7 @@ public class FloatArrayFieldReader extends
NumericArrayFieldReader
@Override
public Float getIndividualValueAtMemory(long position)
{
- fieldPointer.setPosition(position);
+ fieldPointer.setPositionAndLength(position, FIELD_SIZE);
if (columnValueSelector.isNull()) {
return null;
}
@@ -55,7 +56,7 @@ public class FloatArrayFieldReader extends
NumericArrayFieldReader
@Override
public int getIndividualFieldSize()
{
- return Byte.BYTES + Float.BYTES;
+ return FIELD_SIZE;
}
};
}
diff --git
a/processing/src/main/java/org/apache/druid/frame/field/LongArrayFieldReader.java
b/processing/src/main/java/org/apache/druid/frame/field/LongArrayFieldReader.java
index b52b39d13c4..8f7578c07d3 100644
---
a/processing/src/main/java/org/apache/druid/frame/field/LongArrayFieldReader.java
+++
b/processing/src/main/java/org/apache/druid/frame/field/LongArrayFieldReader.java
@@ -37,6 +37,7 @@ public class LongArrayFieldReader extends
NumericArrayFieldReader
{
return new NumericArrayFieldSelector<Long>(memory, fieldPointer)
{
+ private static final int FIELD_SIZE = Byte.BYTES + Long.BYTES;
final SettableFieldPointer fieldPointer = new SettableFieldPointer();
final ColumnValueSelector<?> columnValueSelector =
LongFieldReader.forArray().makeColumnValueSelector(memory,
fieldPointer);
@@ -45,7 +46,7 @@ public class LongArrayFieldReader extends
NumericArrayFieldReader
@Override
public Long getIndividualValueAtMemory(long position)
{
- fieldPointer.setPosition(position);
+ fieldPointer.setPositionAndLength(position, FIELD_SIZE);
if (columnValueSelector.isNull()) {
return null;
}
@@ -55,7 +56,7 @@ public class LongArrayFieldReader extends
NumericArrayFieldReader
@Override
public int getIndividualFieldSize()
{
- return Byte.BYTES + Long.BYTES;
+ return FIELD_SIZE;
}
};
}
diff --git
a/processing/src/main/java/org/apache/druid/frame/field/NumericArrayFieldSelector.java
b/processing/src/main/java/org/apache/druid/frame/field/NumericArrayFieldSelector.java
index 1871aef06e0..f15361d47ea 100644
---
a/processing/src/main/java/org/apache/druid/frame/field/NumericArrayFieldSelector.java
+++
b/processing/src/main/java/org/apache/druid/frame/field/NumericArrayFieldSelector.java
@@ -25,8 +25,6 @@ import
org.apache.druid.query.monomorphicprocessing.RuntimeShapeInspector;
import org.apache.druid.segment.ColumnValueSelector;
import javax.annotation.Nullable;
-import java.util.ArrayList;
-import java.util.List;
/**
* Base implementation of the column value selector that the concrete numeric
field reader implementations inherit from.
@@ -66,12 +64,8 @@ public abstract class NumericArrayFieldSelector<ElementType
extends Number> impl
/**
* Value of the row at the location beginning at {@link
#currentFieldPosition}
*/
- private final List<ElementType> currentRow = new ArrayList<>();
-
- /**
- * Nullity of the row at the location beginning at {@link
#currentFieldPosition}
- */
- private boolean currentRowIsNull;
+ @Nullable
+ private Number[] currentRow = null;
public NumericArrayFieldSelector(final Memory memory, final
ReadableFieldPointer fieldPointer)
{
@@ -89,13 +83,7 @@ public abstract class NumericArrayFieldSelector<ElementType
extends Number> impl
@Override
public Object getObject()
{
- final List<ElementType> currentArray = computeCurrentArray();
-
- if (currentArray == null) {
- return null;
- }
-
- return currentArray.toArray();
+ return computeCurrentArray();
}
@Override
@@ -143,34 +131,29 @@ public abstract class
NumericArrayFieldSelector<ElementType extends Number> impl
public abstract int getIndividualFieldSize();
@Nullable
- private List<ElementType> computeCurrentArray()
+ private Number[] computeCurrentArray()
{
final long fieldPosition = fieldPointer.position();
+ final long fieldLength = fieldPointer.length();
if (fieldPosition != currentFieldPosition) {
- updateCurrentArray(fieldPosition);
+ updateCurrentArray(fieldPosition, fieldLength);
}
this.currentFieldPosition = fieldPosition;
-
- if (currentRowIsNull) {
- return null;
- }
return currentRow;
-
}
- private void updateCurrentArray(final long fieldPosition)
+ private void updateCurrentArray(final long fieldPosition, final long
fieldLength)
{
- currentRow.clear();
- currentRowIsNull = false;
+ currentRow = null;
long position = fieldPosition;
long limit = memory.getCapacity();
// Check the first byte, and if it is null, update the current value to
null and return
if (isNull()) {
- currentRowIsNull = true;
+ // Already set the currentRow to null
return;
}
@@ -179,9 +162,13 @@ public abstract class
NumericArrayFieldSelector<ElementType extends Number> impl
position++;
}
+ int numElements = numElements(fieldLength);
+ currentRow = new Number[numElements];
+
// Sanity check, to make sure that we see the rowTerminator at the end
boolean rowTerminatorSeen = false;
+ int curElement = 0;
while (position < limit) {
final byte kind = memory.getByte(position);
@@ -193,12 +180,26 @@ public abstract class
NumericArrayFieldSelector<ElementType extends Number> impl
// If terminator not seen, then read the field at that location, and
increment the position by the element's field
// size to read the next element.
- currentRow.add(getIndividualValueAtMemory(position));
+ currentRow[curElement] = getIndividualValueAtMemory(position);
position += getIndividualFieldSize();
+ curElement++;
}
- if (!rowTerminatorSeen) {
+ if (!rowTerminatorSeen || curElement != numElements) {
throw DruidException.defensive("Unexpected end of field");
}
}
+
+ int numElements(long fieldSize)
+ {
+ if (fieldSize <= 1) {
+ throw DruidException.defensive("fieldSize should be greater than 1 for
non null array elements");
+ }
+ // Remove one byte for the nullity byte, and one for the array terminator
+ long cumulativeFieldSize = fieldSize - Byte.BYTES - Byte.BYTES;
+ if (cumulativeFieldSize % getIndividualFieldSize() != 0) {
+ throw DruidException.defensive("cumulativeFieldSize should be a multiple
of the individual fieldSize");
+ }
+ return Math.toIntExact(cumulativeFieldSize / getIndividualFieldSize());
+ }
}
diff --git
a/processing/src/main/java/org/apache/druid/frame/field/ReadableFieldPointer.java
b/processing/src/main/java/org/apache/druid/frame/field/ReadableFieldPointer.java
index 29412b507af..09de051a691 100644
---
a/processing/src/main/java/org/apache/druid/frame/field/ReadableFieldPointer.java
+++
b/processing/src/main/java/org/apache/druid/frame/field/ReadableFieldPointer.java
@@ -31,4 +31,9 @@ public interface ReadableFieldPointer
* Starting position of the field.
*/
long position();
+
+ /**
+ * Length of the field.
+ */
+ long length();
}
diff --git
a/processing/src/main/java/org/apache/druid/frame/field/RowMemoryFieldPointer.java
b/processing/src/main/java/org/apache/druid/frame/field/RowMemoryFieldPointer.java
index 881c9adb04f..d90eb3eaa22 100644
---
a/processing/src/main/java/org/apache/druid/frame/field/RowMemoryFieldPointer.java
+++
b/processing/src/main/java/org/apache/druid/frame/field/RowMemoryFieldPointer.java
@@ -24,6 +24,10 @@ import
org.apache.druid.frame.segment.row.ReadableFrameRowPointer;
/**
* A {@link ReadableFieldPointer} that is derived from a row-based frame.
+ *
+ * Returns the position and the length of a field at a particular position for
the row that the rowPointer is pointing
+ * to at the time. It caches the values of the position and the length based
on position of the rowPointer.
+ * This method is not thread-safe
*/
public class RowMemoryFieldPointer implements ReadableFieldPointer
{
@@ -32,6 +36,16 @@ public class RowMemoryFieldPointer implements
ReadableFieldPointer
private final int fieldNumber;
private final int fieldCount;
+ // Caching of position() calls
+ private long rowWithCachedPosition = -1L;
+ private long cachedPosition = -1L;
+
+ // Caching of length() calls
+ // We cache the length() calls separately, because not all field types call
length(), therefore it's wasteful to
+ // compute and cache length() if we are not reading it
+ private long rowWithCachedLength = -1L;
+ private long cachedLength = -1L;
+
public RowMemoryFieldPointer(
final Memory memory,
final ReadableFrameRowPointer rowPointer,
@@ -47,6 +61,63 @@ public class RowMemoryFieldPointer implements
ReadableFieldPointer
@Override
public long position()
+ {
+ updatePosition();
+ return cachedPosition;
+ }
+
+ @Override
+ public long length()
+ {
+ updatePositionAndLength();
+ return cachedLength;
+ }
+
+ private void updatePosition()
+ {
+ long rowPointerPosition = rowPointer.position();
+ if (rowPointerPosition == rowWithCachedPosition) {
+ return;
+ }
+ // Update the cached position for position()
+ rowWithCachedPosition = rowPointerPosition;
+
+ // Update the start position
+ cachedPosition = startPosition(fieldNumber);
+ }
+
+ // Not all field types call length(), and therefore there's no need to cache
the length of the field. This method
+ // updates both the position and the length.
+ private void updatePositionAndLength()
+ {
+ updatePosition();
+
+ // rowPointerPosition = rowPointer.position() = rowWithCachedPosition,
since that was updated in the call to update
+ // position above
+ long rowPointerPosition = rowWithCachedPosition;
+
+ if (rowPointerPosition == rowWithCachedLength) {
+ return;
+ }
+ // Update the cached position for length()
+ rowWithCachedLength = rowPointerPosition;
+
+ if (fieldNumber == fieldCount - 1) {
+ // If the field is the last field in the row, then the length of the
field would be the end of the row minus the
+ // start position of the field. End of the row is the start of the row
plus the length of the row.
+ cachedLength = (rowPointerPosition + rowPointer.length()) -
cachedPosition;
+ } else {
+ // Else the length of the field would be the difference between the
start position of the given field and
+ // the subsequent field
+ cachedLength = startPosition(fieldNumber + 1) - cachedPosition;
+ }
+ }
+
+ /**
+ * Given a fieldNumber, computes the start position of the field. Requires a
memory access to read the start position,
+ * therefore callers should cache the value for better efficiency.
+ */
+ private long startPosition(int fieldNumber)
{
if (fieldNumber == 0) {
// First field starts after the field end pointers -- one integer per
field.
diff --git
a/processing/src/main/java/org/apache/druid/frame/field/SettableFieldPointer.java
b/processing/src/main/java/org/apache/druid/frame/field/SettableFieldPointer.java
index d26f84f251d..0242b412ca0 100644
---
a/processing/src/main/java/org/apache/druid/frame/field/SettableFieldPointer.java
+++
b/processing/src/main/java/org/apache/druid/frame/field/SettableFieldPointer.java
@@ -20,16 +20,20 @@
package org.apache.druid.frame.field;
/**
- * A simple {@link ReadableFieldPointer} that returns the position that was
set on its object.
+ * A simple {@link ReadableFieldPointer} that returns the position and the
length that was set on its object.
*/
public class SettableFieldPointer implements ReadableFieldPointer
{
-
long position = 0;
+ long length = -1;
- public void setPosition(long position)
+ /**
+ * Sets the position and the length to be returned when interface's methods
are called.
+ */
+ public void setPositionAndLength(long position, long length)
{
this.position = position;
+ this.length = length;
}
@Override
@@ -37,4 +41,10 @@ public class SettableFieldPointer implements
ReadableFieldPointer
{
return position;
}
+
+ @Override
+ public long length()
+ {
+ return length;
+ }
}
diff --git
a/processing/src/main/java/org/apache/druid/frame/segment/row/ReadableFrameRowPointer.java
b/processing/src/main/java/org/apache/druid/frame/segment/row/ReadableFrameRowPointer.java
index 714195396c8..8276e26b28c 100644
---
a/processing/src/main/java/org/apache/druid/frame/segment/row/ReadableFrameRowPointer.java
+++
b/processing/src/main/java/org/apache/druid/frame/segment/row/ReadableFrameRowPointer.java
@@ -30,7 +30,13 @@ import org.apache.druid.frame.write.RowBasedFrameWriter;
*/
public interface ReadableFrameRowPointer
{
+ /**
+ * Position of the start of the row relative to the start of the Frame
+ */
long position();
+ /**
+ * Length of the row (in bytes)
+ */
long length();
}
diff --git
a/processing/src/test/java/org/apache/druid/frame/field/ComplexFieldReaderTest.java
b/processing/src/test/java/org/apache/druid/frame/field/ComplexFieldReaderTest.java
index 598e7d28edc..d4970d9bd0c 100644
---
a/processing/src/test/java/org/apache/druid/frame/field/ComplexFieldReaderTest.java
+++
b/processing/src/test/java/org/apache/druid/frame/field/ComplexFieldReaderTest.java
@@ -123,7 +123,7 @@ public class ComplexFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(null);
final ColumnValueSelector<?> readSelector =
- new ComplexFieldReader(SERDE).makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new ComplexFieldReader(SERDE).makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
Assert.assertNull(readSelector.getObject());
}
@@ -134,7 +134,7 @@ public class ComplexFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory("foo");
final ColumnValueSelector<?> readSelector =
- new ComplexFieldReader(SERDE).makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new ComplexFieldReader(SERDE).makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
Assert.assertEquals("foo", readSelector.getObject());
}
diff --git
a/processing/src/main/java/org/apache/druid/frame/field/ConstantFieldPointer.java
b/processing/src/test/java/org/apache/druid/frame/field/ConstantFieldPointer.java
similarity index 85%
rename from
processing/src/main/java/org/apache/druid/frame/field/ConstantFieldPointer.java
rename to
processing/src/test/java/org/apache/druid/frame/field/ConstantFieldPointer.java
index 17ff1058794..0079246c262 100644
---
a/processing/src/main/java/org/apache/druid/frame/field/ConstantFieldPointer.java
+++
b/processing/src/test/java/org/apache/druid/frame/field/ConstantFieldPointer.java
@@ -22,10 +22,12 @@ package org.apache.druid.frame.field;
public class ConstantFieldPointer implements ReadableFieldPointer
{
private final long position;
+ private final long length;
- public ConstantFieldPointer(long position)
+ public ConstantFieldPointer(long position, long length)
{
this.position = position;
+ this.length = length;
}
@Override
@@ -33,4 +35,10 @@ public class ConstantFieldPointer implements
ReadableFieldPointer
{
return position;
}
+
+ @Override
+ public long length()
+ {
+ return length;
+ }
}
diff --git
a/processing/src/test/java/org/apache/druid/frame/field/DoubleArrayFieldReaderTest.java
b/processing/src/test/java/org/apache/druid/frame/field/DoubleArrayFieldReaderTest.java
index 6381138f62d..c931b7aac90 100644
---
a/processing/src/test/java/org/apache/druid/frame/field/DoubleArrayFieldReaderTest.java
+++
b/processing/src/test/java/org/apache/druid/frame/field/DoubleArrayFieldReaderTest.java
@@ -149,10 +149,13 @@ public class DoubleArrayFieldReaderTest extends
InitializedNullHandlingTest
@Test
public void test_makeColumnValueSelector_null()
{
- writeToMemory(null, MEMORY_POSITION);
+ long sz = writeToMemory(null, MEMORY_POSITION);
final ColumnValueSelector<?> readSelector =
- new DoubleArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new DoubleArrayFieldReader().makeColumnValueSelector(
+ memory,
+ new ConstantFieldPointer(MEMORY_POSITION, sz)
+ );
Assert.assertTrue(readSelector.isNull());
}
@@ -160,10 +163,14 @@ public class DoubleArrayFieldReaderTest extends
InitializedNullHandlingTest
@Test
public void test_makeColumnValueSelector_aValue()
{
- writeToMemory(DOUBLES_ARRAY_1, MEMORY_POSITION);
+ long sz = writeToMemory(DOUBLES_ARRAY_1, MEMORY_POSITION);
final ColumnValueSelector<?> readSelector =
- new DoubleArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new DoubleArrayFieldReader()
+ .makeColumnValueSelector(
+ memory,
+ new ConstantFieldPointer(MEMORY_POSITION, sz)
+ );
assertResults(DOUBLES_LIST_1, readSelector.getObject());
}
@@ -172,15 +179,15 @@ public class DoubleArrayFieldReaderTest extends
InitializedNullHandlingTest
public void test_makeColumnValueSelector_multipleValues()
{
long sz = writeToMemory(DOUBLES_ARRAY_1, MEMORY_POSITION);
- writeToMemory(DOUBLES_ARRAY_2, MEMORY_POSITION + sz);
- IndexArrayFieldPointer pointer = new
IndexArrayFieldPointer(ImmutableList.of(MEMORY_POSITION, MEMORY_POSITION + sz));
-
+ long sz2 = writeToMemory(DOUBLES_ARRAY_2, MEMORY_POSITION + sz);
+ IndexArrayFieldPointer pointer = new IndexArrayFieldPointer(
+ ImmutableList.of(MEMORY_POSITION, MEMORY_POSITION + sz),
+ ImmutableList.of(sz, sz2)
+ );
final ColumnValueSelector<?> readSelector = new
DoubleArrayFieldReader().makeColumnValueSelector(memory, pointer);
-
pointer.setPointer(0);
assertResults(DOUBLES_LIST_1, readSelector.getObject());
-
pointer.setPointer(1);
assertResults(DOUBLES_LIST_2, readSelector.getObject());
}
@@ -188,10 +195,11 @@ public class DoubleArrayFieldReaderTest extends
InitializedNullHandlingTest
@Test
public void test_makeColumnValueSelector_emptyArray()
{
- writeToMemory(new Object[]{}, MEMORY_POSITION);
+ long sz = writeToMemory(new Object[]{}, MEMORY_POSITION);
final ColumnValueSelector<?> readSelector =
- new DoubleArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new DoubleArrayFieldReader()
+ .makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, sz));
assertResults(Collections.emptyList(), readSelector.getObject());
}
@@ -199,10 +207,13 @@ public class DoubleArrayFieldReaderTest extends
InitializedNullHandlingTest
@Test
public void test_makeColumnValueSelector_arrayWithSingleNullElement()
{
- writeToMemory(new Object[]{null}, MEMORY_POSITION);
+ long sz = writeToMemory(new Object[]{null}, MEMORY_POSITION);
final ColumnValueSelector<?> readSelector =
- new DoubleArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new DoubleArrayFieldReader().makeColumnValueSelector(
+ memory,
+ new ConstantFieldPointer(MEMORY_POSITION, sz)
+ );
assertResults(Collections.singletonList(null), readSelector.getObject());
}
diff --git
a/processing/src/test/java/org/apache/druid/frame/field/DoubleFieldReaderTest.java
b/processing/src/test/java/org/apache/druid/frame/field/DoubleFieldReaderTest.java
index a18b7cc70ec..c4a300b5bc3 100644
---
a/processing/src/test/java/org/apache/druid/frame/field/DoubleFieldReaderTest.java
+++
b/processing/src/test/java/org/apache/druid/frame/field/DoubleFieldReaderTest.java
@@ -89,7 +89,7 @@ public class DoubleFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(NullHandling.defaultDoubleValue());
final ColumnValueSelector<?> readSelector =
- DoubleFieldReader.forPrimitive().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ DoubleFieldReader.forPrimitive().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
Assert.assertEquals(!NullHandling.replaceWithDefault(),
readSelector.isNull());
@@ -104,7 +104,7 @@ public class DoubleFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(5.1d);
final ColumnValueSelector<?> readSelector =
- DoubleFieldReader.forPrimitive().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ DoubleFieldReader.forPrimitive().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
Assert.assertEquals(5.1d, readSelector.getObject());
}
@@ -115,7 +115,8 @@ public class DoubleFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(NullHandling.defaultDoubleValue());
final DimensionSelector readSelector =
- DoubleFieldReader.forPrimitive().makeDimensionSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION), null);
+ DoubleFieldReader.forPrimitive()
+ .makeDimensionSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1), null);
// Data retrieval tests.
final IndexedInts row = readSelector.getRow();
@@ -149,7 +150,8 @@ public class DoubleFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(5.1d);
final DimensionSelector readSelector =
- DoubleFieldReader.forPrimitive().makeDimensionSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION), null);
+ DoubleFieldReader.forPrimitive()
+ .makeDimensionSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1), null);
// Data retrieval tests.
final IndexedInts row = readSelector.getRow();
@@ -178,7 +180,7 @@ public class DoubleFieldReaderTest extends
InitializedNullHandlingTest
final DimensionSelector readSelector =
DoubleFieldReader.forPrimitive().makeDimensionSelector(
memory,
- new ConstantFieldPointer(MEMORY_POSITION),
+ new ConstantFieldPointer(MEMORY_POSITION, -1),
new SubstringDimExtractionFn(1, null)
);
diff --git
a/processing/src/test/java/org/apache/druid/frame/field/FloatArrayFieldReaderTest.java
b/processing/src/test/java/org/apache/druid/frame/field/FloatArrayFieldReaderTest.java
index e61e40db1cb..3c404ed28dd 100644
---
a/processing/src/test/java/org/apache/druid/frame/field/FloatArrayFieldReaderTest.java
+++
b/processing/src/test/java/org/apache/druid/frame/field/FloatArrayFieldReaderTest.java
@@ -150,10 +150,10 @@ public class FloatArrayFieldReaderTest extends
InitializedNullHandlingTest
@Test
public void test_makeColumnValueSelector_null()
{
- writeToMemory(null, MEMORY_POSITION);
+ long sz = writeToMemory(null, MEMORY_POSITION);
final ColumnValueSelector<?> readSelector =
- new FloatArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new FloatArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, sz));
Assert.assertTrue(readSelector.isNull());
}
@@ -161,10 +161,10 @@ public class FloatArrayFieldReaderTest extends
InitializedNullHandlingTest
@Test
public void test_makeColumnValueSelector_aValue()
{
- writeToMemory(FLOATS_ARRAY_1, MEMORY_POSITION);
+ long sz = writeToMemory(FLOATS_ARRAY_1, MEMORY_POSITION);
final ColumnValueSelector<?> readSelector =
- new FloatArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new FloatArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, sz));
assertResults(FLOATS_LIST_1, readSelector.getObject());
}
@@ -173,15 +173,15 @@ public class FloatArrayFieldReaderTest extends
InitializedNullHandlingTest
public void test_makeColumnValueSelector_multipleValues()
{
long sz = writeToMemory(FLOATS_ARRAY_1, MEMORY_POSITION);
- writeToMemory(FLOATS_ARRAY_2, MEMORY_POSITION + sz);
- IndexArrayFieldPointer pointer = new
IndexArrayFieldPointer(ImmutableList.of(MEMORY_POSITION, MEMORY_POSITION + sz));
-
+ long sz2 = writeToMemory(FLOATS_ARRAY_2, MEMORY_POSITION + sz);
+ IndexArrayFieldPointer pointer = new IndexArrayFieldPointer(
+ ImmutableList.of(MEMORY_POSITION, MEMORY_POSITION + sz),
+ ImmutableList.of(sz, sz2)
+ );
final ColumnValueSelector<?> readSelector = new
FloatArrayFieldReader().makeColumnValueSelector(memory, pointer);
-
pointer.setPointer(0);
assertResults(FLOATS_LIST_1, readSelector.getObject());
-
pointer.setPointer(1);
assertResults(FLOATS_LIST_2, readSelector.getObject());
}
@@ -189,10 +189,10 @@ public class FloatArrayFieldReaderTest extends
InitializedNullHandlingTest
@Test
public void test_makeColumnValueSelector_emptyArray()
{
- writeToMemory(new Object[]{}, MEMORY_POSITION);
+ long sz = writeToMemory(new Object[]{}, MEMORY_POSITION);
final ColumnValueSelector<?> readSelector =
- new FloatArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new FloatArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, sz));
assertResults(Collections.emptyList(), readSelector.getObject());
}
@@ -200,10 +200,10 @@ public class FloatArrayFieldReaderTest extends
InitializedNullHandlingTest
@Test
public void test_makeColumnValueSelector_arrayWithSingleNullElement()
{
- writeToMemory(new Object[]{null}, MEMORY_POSITION);
+ long sz = writeToMemory(new Object[]{null}, MEMORY_POSITION);
final ColumnValueSelector<?> readSelector =
- new FloatArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new FloatArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, sz));
assertResults(Collections.singletonList(null), readSelector.getObject());
}
diff --git
a/processing/src/test/java/org/apache/druid/frame/field/FloatFieldReaderTest.java
b/processing/src/test/java/org/apache/druid/frame/field/FloatFieldReaderTest.java
index 6bae52f1c50..f25845f9f4e 100644
---
a/processing/src/test/java/org/apache/druid/frame/field/FloatFieldReaderTest.java
+++
b/processing/src/test/java/org/apache/druid/frame/field/FloatFieldReaderTest.java
@@ -89,7 +89,7 @@ public class FloatFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(NullHandling.defaultFloatValue());
final ColumnValueSelector<?> readSelector =
- FloatFieldReader.forPrimitive().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ FloatFieldReader.forPrimitive().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
Assert.assertEquals(!NullHandling.replaceWithDefault(),
readSelector.isNull());
@@ -104,7 +104,7 @@ public class FloatFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(5.1f);
final ColumnValueSelector<?> readSelector =
- FloatFieldReader.forPrimitive().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ FloatFieldReader.forPrimitive().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
Assert.assertEquals(5.1f, readSelector.getObject());
}
@@ -115,7 +115,8 @@ public class FloatFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(NullHandling.defaultFloatValue());
final DimensionSelector readSelector =
- FloatFieldReader.forPrimitive().makeDimensionSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION), null);
+ FloatFieldReader.forPrimitive()
+ .makeDimensionSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1), null);
// Data retrieval tests.
final IndexedInts row = readSelector.getRow();
@@ -149,7 +150,8 @@ public class FloatFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(5.1f);
final DimensionSelector readSelector =
- FloatFieldReader.forPrimitive().makeDimensionSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION), null);
+ FloatFieldReader.forPrimitive()
+ .makeDimensionSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1), null);
// Data retrieval tests.
final IndexedInts row = readSelector.getRow();
@@ -178,7 +180,7 @@ public class FloatFieldReaderTest extends
InitializedNullHandlingTest
final DimensionSelector readSelector =
FloatFieldReader.forPrimitive().makeDimensionSelector(
memory,
- new ConstantFieldPointer(MEMORY_POSITION),
+ new ConstantFieldPointer(MEMORY_POSITION, -1),
new SubstringDimExtractionFn(1, null)
);
diff --git
a/processing/src/test/java/org/apache/druid/frame/field/IndexArrayFieldPointer.java
b/processing/src/test/java/org/apache/druid/frame/field/IndexArrayFieldPointer.java
index 1e115f48e3c..22fdbacd1b7 100644
---
a/processing/src/test/java/org/apache/druid/frame/field/IndexArrayFieldPointer.java
+++
b/processing/src/test/java/org/apache/druid/frame/field/IndexArrayFieldPointer.java
@@ -30,11 +30,13 @@ import java.util.List;
public class IndexArrayFieldPointer implements ReadableFieldPointer
{
private final LongArrayList indices;
+ private final LongArrayList lengths;
private int pointer = 0;
- public IndexArrayFieldPointer(final List<Long> indices)
+ public IndexArrayFieldPointer(final List<Long> indices, final List<Long>
lengths)
{
this.indices = new LongArrayList(indices);
+ this.lengths = new LongArrayList(lengths);
}
private int numIndices()
@@ -53,4 +55,10 @@ public class IndexArrayFieldPointer implements
ReadableFieldPointer
{
return indices.getLong(pointer);
}
+
+ @Override
+ public long length()
+ {
+ return lengths.getLong(pointer);
+ }
}
diff --git
a/processing/src/test/java/org/apache/druid/frame/field/LongArrayFieldReaderTest.java
b/processing/src/test/java/org/apache/druid/frame/field/LongArrayFieldReaderTest.java
index aa34cd6afaf..f679bb2b3ed 100644
---
a/processing/src/test/java/org/apache/druid/frame/field/LongArrayFieldReaderTest.java
+++
b/processing/src/test/java/org/apache/druid/frame/field/LongArrayFieldReaderTest.java
@@ -126,10 +126,10 @@ public class LongArrayFieldReaderTest extends
InitializedNullHandlingTest
@Test
public void test_makeColumnValueSelector_null()
{
- writeToMemory(null, MEMORY_POSITION);
+ long sz = writeToMemory(null, MEMORY_POSITION);
final ColumnValueSelector<?> readSelector =
- new LongArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new LongArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, sz));
Assert.assertTrue(readSelector.isNull());
}
@@ -137,10 +137,10 @@ public class LongArrayFieldReaderTest extends
InitializedNullHandlingTest
@Test
public void test_makeColumnValueSelector_aValue()
{
- writeToMemory(LONGS_ARRAY_1, MEMORY_POSITION);
+ long sz = writeToMemory(LONGS_ARRAY_1, MEMORY_POSITION);
final ColumnValueSelector<?> readSelector =
- new LongArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new LongArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, sz));
assertResults(LONGS_LIST_1, readSelector.getObject());
}
@@ -149,15 +149,15 @@ public class LongArrayFieldReaderTest extends
InitializedNullHandlingTest
public void test_makeColumnValueSelector_multipleValues()
{
long sz = writeToMemory(LONGS_ARRAY_1, MEMORY_POSITION);
- writeToMemory(LONGS_ARRAY_2, MEMORY_POSITION + sz);
- IndexArrayFieldPointer pointer = new
IndexArrayFieldPointer(ImmutableList.of(MEMORY_POSITION, MEMORY_POSITION + sz));
-
+ long sz2 = writeToMemory(LONGS_ARRAY_2, MEMORY_POSITION + sz);
+ IndexArrayFieldPointer pointer = new IndexArrayFieldPointer(
+ ImmutableList.of(MEMORY_POSITION, MEMORY_POSITION + sz),
+ ImmutableList.of(sz, sz2)
+ );
final ColumnValueSelector<?> readSelector = new
LongArrayFieldReader().makeColumnValueSelector(memory, pointer);
-
pointer.setPointer(0);
assertResults(LONGS_LIST_1, readSelector.getObject());
-
pointer.setPointer(1);
assertResults(LONGS_LIST_2, readSelector.getObject());
}
@@ -165,10 +165,10 @@ public class LongArrayFieldReaderTest extends
InitializedNullHandlingTest
@Test
public void test_makeColumnValueSelector_emptyArray()
{
- writeToMemory(new Object[]{}, MEMORY_POSITION);
+ long sz = writeToMemory(new Object[]{}, MEMORY_POSITION);
final ColumnValueSelector<?> readSelector =
- new LongArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new LongArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, sz));
assertResults(Collections.emptyList(), readSelector.getObject());
}
@@ -176,10 +176,10 @@ public class LongArrayFieldReaderTest extends
InitializedNullHandlingTest
@Test
public void test_makeColumnValueSelector_arrayWithSingleNullElement()
{
- writeToMemory(new Object[]{null}, MEMORY_POSITION);
+ long sz = writeToMemory(new Object[]{null}, MEMORY_POSITION);
final ColumnValueSelector<?> readSelector =
- new LongArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new LongArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, sz));
assertResults(Collections.singletonList(null), readSelector.getObject());
}
diff --git
a/processing/src/test/java/org/apache/druid/frame/field/LongFieldReaderTest.java
b/processing/src/test/java/org/apache/druid/frame/field/LongFieldReaderTest.java
index 643846ee0e3..8a201394083 100644
---
a/processing/src/test/java/org/apache/druid/frame/field/LongFieldReaderTest.java
+++
b/processing/src/test/java/org/apache/druid/frame/field/LongFieldReaderTest.java
@@ -89,7 +89,7 @@ public class LongFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(NullHandling.defaultLongValue());
final ColumnValueSelector<?> readSelector =
- LongFieldReader.forPrimitive().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ LongFieldReader.forPrimitive().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
Assert.assertEquals(!NullHandling.replaceWithDefault(),
readSelector.isNull());
@@ -104,7 +104,7 @@ public class LongFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(5L);
final ColumnValueSelector<?> readSelector =
- LongFieldReader.forPrimitive().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ LongFieldReader.forPrimitive().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
Assert.assertEquals(5L, readSelector.getObject());
}
@@ -115,7 +115,8 @@ public class LongFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(NullHandling.defaultLongValue());
final DimensionSelector readSelector =
- LongFieldReader.forPrimitive().makeDimensionSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION), null);
+ LongFieldReader.forPrimitive()
+ .makeDimensionSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1), null);
// Data retrieval tests.
final IndexedInts row = readSelector.getRow();
@@ -149,7 +150,8 @@ public class LongFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(5L);
final DimensionSelector readSelector =
- LongFieldReader.forPrimitive().makeDimensionSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION), null);
+ LongFieldReader.forPrimitive()
+ .makeDimensionSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1), null);
// Data retrieval tests.
final IndexedInts row = readSelector.getRow();
@@ -178,7 +180,7 @@ public class LongFieldReaderTest extends
InitializedNullHandlingTest
final DimensionSelector readSelector =
LongFieldReader.forPrimitive().makeDimensionSelector(
memory,
- new ConstantFieldPointer(MEMORY_POSITION),
+ new ConstantFieldPointer(MEMORY_POSITION, -1),
new SubstringDimExtractionFn(1, null)
);
diff --git
a/processing/src/test/java/org/apache/druid/frame/field/StringArrayFieldWriterTest.java
b/processing/src/test/java/org/apache/druid/frame/field/StringArrayFieldWriterTest.java
index 63dd03d48bf..02d4d44cbfc 100644
---
a/processing/src/test/java/org/apache/druid/frame/field/StringArrayFieldWriterTest.java
+++
b/processing/src/test/java/org/apache/druid/frame/field/StringArrayFieldWriterTest.java
@@ -140,7 +140,7 @@ public class StringArrayFieldWriterTest extends
InitializedNullHandlingTest
final FieldReader fieldReader =
FieldReaders.create("columnNameDoesntMatterHere", ColumnType.STRING_ARRAY);
final ColumnValueSelector<?> selector =
- fieldReader.makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ fieldReader.makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
final Object o = selector.getObject();
//noinspection rawtypes,unchecked
diff --git
a/processing/src/test/java/org/apache/druid/frame/field/StringFieldReaderTest.java
b/processing/src/test/java/org/apache/druid/frame/field/StringFieldReaderTest.java
index a682e658ca7..04296cb78c3 100644
---
a/processing/src/test/java/org/apache/druid/frame/field/StringFieldReaderTest.java
+++
b/processing/src/test/java/org/apache/druid/frame/field/StringFieldReaderTest.java
@@ -143,9 +143,9 @@ public class StringFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(Collections.singletonList("foo"));
final ColumnValueSelector<?> readSelector =
- new StringFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new StringFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
final ColumnValueSelector<?> readSelectorAsArray =
- new StringArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new StringArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
Assert.assertEquals("foo", readSelector.getObject());
Assert.assertArrayEquals(new Object[]{"foo"}, (Object[])
readSelectorAsArray.getObject());
@@ -157,9 +157,9 @@ public class StringFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(ImmutableList.of("foo", "bar"));
final ColumnValueSelector<?> readSelector =
- new StringFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new StringFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
final ColumnValueSelector<?> readSelectorAsArray =
- new StringArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new StringArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
Assert.assertEquals(ImmutableList.of("foo", "bar"),
readSelector.getObject());
Assert.assertArrayEquals(new Object[]{"foo", "bar"}, (Object[])
readSelectorAsArray.getObject());
@@ -171,9 +171,9 @@ public class StringFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(Collections.singletonList(null));
final ColumnValueSelector<?> readSelector =
- new StringFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new StringFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
final ColumnValueSelector<?> readSelectorAsArray =
- new StringArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new StringArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
Assert.assertNull(readSelector.getObject());
Assert.assertArrayEquals(new Object[]{null}, (Object[])
readSelectorAsArray.getObject());
@@ -185,9 +185,9 @@ public class StringFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(Collections.emptyList());
final ColumnValueSelector<?> readSelector =
- new StringFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new StringFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
final ColumnValueSelector<?> readSelectorAsArray =
- new StringArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ new StringArrayFieldReader().makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
Assert.assertNull(readSelector.getObject());
Assert.assertArrayEquals(ObjectArrays.EMPTY_ARRAY, (Object[])
readSelectorAsArray.getObject());
@@ -200,7 +200,11 @@ public class StringFieldReaderTest extends
InitializedNullHandlingTest
final IllegalStateException e = Assert.assertThrows(
IllegalStateException.class,
- () -> new StringArrayFieldReader().makeDimensionSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION), null)
+ () -> new StringArrayFieldReader().makeDimensionSelector(
+ memory,
+ new ConstantFieldPointer(MEMORY_POSITION, -1),
+ null
+ )
);
MatcherAssert.assertThat(
@@ -215,7 +219,7 @@ public class StringFieldReaderTest extends
InitializedNullHandlingTest
writeToMemory(ImmutableList.of("foo", "bar"));
final DimensionSelector readSelector =
- new StringFieldReader().makeDimensionSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION), null);
+ new StringFieldReader().makeDimensionSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1), null);
// Data retrieval tests.
final IndexedInts row = readSelector.getRow();
@@ -247,7 +251,7 @@ public class StringFieldReaderTest extends
InitializedNullHandlingTest
final DimensionSelector readSelector =
new StringFieldReader().makeDimensionSelector(
memory,
- new ConstantFieldPointer(MEMORY_POSITION),
+ new ConstantFieldPointer(MEMORY_POSITION, -1),
new SubstringDimExtractionFn(1, null)
);
diff --git
a/processing/src/test/java/org/apache/druid/frame/field/StringFieldWriterTest.java
b/processing/src/test/java/org/apache/druid/frame/field/StringFieldWriterTest.java
index 12bbf8238bf..f44b69e2810 100644
---
a/processing/src/test/java/org/apache/druid/frame/field/StringFieldWriterTest.java
+++
b/processing/src/test/java/org/apache/druid/frame/field/StringFieldWriterTest.java
@@ -184,7 +184,7 @@ public class StringFieldWriterTest extends
InitializedNullHandlingTest
final FieldReader fieldReader =
FieldReaders.create("columnNameDoesntMatterHere", ColumnType.STRING_ARRAY);
final ColumnValueSelector<?> selector =
- fieldReader.makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION));
+ fieldReader.makeColumnValueSelector(memory, new
ConstantFieldPointer(MEMORY_POSITION, -1));
return (Object[]) selector.getObject();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]