Skip to content

Commit 9ac64b0

Browse files
committed
add tests
1 parent 4b767b9 commit 9ac64b0

File tree

13 files changed

+215
-23
lines changed

13 files changed

+215
-23
lines changed

docs/changelog/133397.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
pr: 133397
22
summary: Push down loading of singleton dense double based field types to the …
3-
area: "Compute Engine, Codec"
3+
area: "Codec"
44
type: enhancement
55
issues: []

modules/mapper-extras/src/test/java/org/elasticsearch/index/mapper/extras/ScaledFloatFieldMapperTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ protected void registerParameters(ParameterChecker checker) throws IOException {
7878
checker.registerUpdateCheck(b -> b.field("coerce", false), m -> assertFalse(((ScaledFloatFieldMapper) m).coerce()));
7979
}
8080

81+
@Override
82+
protected boolean supportsBulkDoubleBlockReading() {
83+
return true;
84+
}
85+
8186
public void testExistsQueryDocValuesDisabled() throws IOException {
8287
MapperService mapperService = createMapperService(fieldMapping(b -> {
8388
minimalMapping(b);

server/src/main/java/org/elasticsearch/index/mapper/BlockDocValuesReader.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,12 @@ public AllReader reader(LeafReaderContext context) throws IOException {
122122
}
123123
}
124124

125-
static class SingletonLongs extends BlockDocValuesReader {
125+
// Used for testing.
126+
interface NumericDocValuesAccessor {
127+
NumericDocValues numericDocValues();
128+
}
129+
130+
static class SingletonLongs extends BlockDocValuesReader implements NumericDocValuesAccessor {
126131
final NumericDocValues numericDocValues;
127132

128133
SingletonLongs(NumericDocValues numericDocValues) {
@@ -169,6 +174,11 @@ public int docId() {
169174
public String toString() {
170175
return "BlockDocValuesReader.SingletonLongs";
171176
}
177+
178+
@Override
179+
public NumericDocValues numericDocValues() {
180+
return numericDocValues;
181+
}
172182
}
173183

174184
static class Longs extends BlockDocValuesReader {
@@ -387,7 +397,7 @@ public AllReader reader(LeafReaderContext context) throws IOException {
387397
}
388398
}
389399

390-
private static class SingletonDoubles extends BlockDocValuesReader {
400+
static class SingletonDoubles extends BlockDocValuesReader implements NumericDocValuesAccessor {
391401
private final NumericDocValues docValues;
392402
private final ToDouble toDouble;
393403

@@ -436,9 +446,14 @@ public int docId() {
436446
public String toString() {
437447
return "BlockDocValuesReader.SingletonDoubles";
438448
}
449+
450+
@Override
451+
public NumericDocValues numericDocValues() {
452+
return docValues;
453+
}
439454
}
440455

441-
private static class Doubles extends BlockDocValuesReader {
456+
static class Doubles extends BlockDocValuesReader {
442457
private final SortedNumericDocValues docValues;
443458
private final ToDouble toDouble;
444459

server/src/test/java/org/elasticsearch/index/mapper/DateFieldMapperTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -804,7 +804,7 @@ public void testLegacyDateFormatName() {
804804

805805
}
806806

807-
protected boolean supportsBulkBlockReading() {
807+
protected boolean supportsBulkLongBlockReading() {
808808
return true;
809809
}
810810

server/src/test/java/org/elasticsearch/index/mapper/DoubleFieldMapperTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@ protected Number randomNumber() {
7474
return randomBoolean() ? randomDoubleBetween(-Double.MAX_VALUE, Double.MAX_VALUE, true) : randomFloat();
7575
}
7676

77+
@Override
78+
protected boolean supportsBulkDoubleBlockReading() {
79+
return true;
80+
}
81+
7782
public void testScriptAndPrecludedParameters() {
7883
{
7984
Exception e = expectThrows(MapperParsingException.class, () -> createDocumentMapper(fieldMapping(b -> {

server/src/test/java/org/elasticsearch/index/mapper/FloatFieldMapperTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ protected Number randomNumber() {
4949
return randomBoolean() ? randomDoubleBetween(-Float.MAX_VALUE, Float.MAX_VALUE, true) : randomFloat();
5050
}
5151

52+
@Override
53+
protected boolean supportsBulkDoubleBlockReading() {
54+
return true;
55+
}
56+
5257
@Override
5358
protected SyntheticSourceSupport syntheticSourceSupport(boolean ignoreMalformed) {
5459
return new NumberSyntheticSourceSupport(Number::floatValue, ignoreMalformed);

server/src/test/java/org/elasticsearch/index/mapper/HalfFloatFieldMapperTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,9 @@ protected SyntheticSourceSupport syntheticSourceSupportForKeepTests(boolean igno
6868
protected IngestScriptSupport ingestScriptSupport() {
6969
throw new AssumptionViolatedException("not supported");
7070
}
71+
72+
@Override
73+
protected boolean supportsBulkDoubleBlockReading() {
74+
return true;
75+
}
7176
}

server/src/test/java/org/elasticsearch/index/mapper/LongFieldMapperTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ public void execute() {
161161
};
162162
}
163163

164-
protected boolean supportsBulkBlockReading() {
164+
protected boolean supportsBulkLongBlockReading() {
165165
return true;
166166
}
167167

test/framework/src/main/java/org/elasticsearch/index/mapper/MapperTestCase.java

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1500,7 +1500,11 @@ public void testSyntheticSourceKeepArrays() throws IOException {
15001500
assertThat(actual, equalTo(expected));
15011501
}
15021502

1503-
protected boolean supportsBulkBlockReading() {
1503+
protected boolean supportsBulkLongBlockReading() {
1504+
return false;
1505+
}
1506+
1507+
protected boolean supportsBulkDoubleBlockReading() {
15041508
return false;
15051509
}
15061510

@@ -1513,7 +1517,18 @@ protected Object[] getThreeEncodedSampleValues() {
15131517
}
15141518

15151519
public void testSingletonLongBulkBlockReading() throws IOException {
1516-
assumeTrue("field type supports bulk singleton long reading", supportsBulkBlockReading());
1520+
assumeTrue("field type supports bulk singleton long reading", supportsBulkLongBlockReading());
1521+
testSingletonBulkBlockReading(columnAtATimeReader -> (BlockDocValuesReader.SingletonLongs) columnAtATimeReader);
1522+
}
1523+
1524+
public void testSingletonDoubleBulkBlockReading() throws IOException {
1525+
assumeTrue("field type supports bulk singleton long reading", supportsBulkDoubleBlockReading());
1526+
testSingletonBulkBlockReading(columnAtATimeReader -> (BlockDocValuesReader.SingletonDoubles) columnAtATimeReader);
1527+
}
1528+
1529+
private void testSingletonBulkBlockReading(Function<BlockLoader.ColumnAtATimeReader, BlockDocValuesReader> readerCast)
1530+
throws IOException {
1531+
assumeTrue("field type supports bulk singleton long reading", supportsBulkLongBlockReading());
15171532
var settings = indexSettings(IndexVersion.current(), 1, 1).put("index.mode", "logsdb").build();
15181533
var mapperService = createMapperService(settings, fieldMapping(this::minimalMapping));
15191534
var mapper = mapperService.documentMapper();
@@ -1539,8 +1554,11 @@ public void testSingletonLongBulkBlockReading() throws IOException {
15391554
assertThat(reader.numDocs(), equalTo(3));
15401555
LeafReaderContext context = reader.leaves().get(0);
15411556
var blockLoader = mapperService.fieldType("field").blockLoader(mockBlockContext);
1542-
var columnReader = (BlockDocValuesReader.SingletonLongs) blockLoader.columnAtATimeReader(context);
1543-
assertThat(columnReader.numericDocValues, instanceOf(BlockLoader.OptionalColumnAtATimeReader.class));
1557+
BlockDocValuesReader columnReader = readerCast.apply(blockLoader.columnAtATimeReader(context));
1558+
assertThat(
1559+
((BlockDocValuesReader.NumericDocValuesAccessor) columnReader).numericDocValues(),
1560+
instanceOf(BlockLoader.OptionalColumnAtATimeReader.class)
1561+
);
15441562
var docBlock = TestBlock.docs(IntStream.range(0, 3).toArray());
15451563
var block = (TestBlock) columnReader.read(TestBlock.factory(), docBlock, 0, false);
15461564
for (int i = 0; i < block.size(); i++) {
@@ -1564,8 +1582,11 @@ public void testSingletonLongBulkBlockReading() throws IOException {
15641582
assertThat(reader.numDocs(), equalTo(3));
15651583
LeafReaderContext context = reader.leaves().get(0);
15661584
var blockLoader = mapperService.fieldType("field").blockLoader(mockBlockContext);
1567-
var columnReader = (BlockDocValuesReader.SingletonLongs) blockLoader.columnAtATimeReader(context);
1568-
assertThat(columnReader.numericDocValues, not(instanceOf(BlockLoader.OptionalColumnAtATimeReader.class)));
1585+
BlockDocValuesReader columnReader = readerCast.apply(blockLoader.columnAtATimeReader(context));
1586+
assertThat(
1587+
((BlockDocValuesReader.NumericDocValuesAccessor) columnReader).numericDocValues(),
1588+
not(instanceOf(BlockLoader.OptionalColumnAtATimeReader.class))
1589+
);
15691590
var docBlock = TestBlock.docs(IntStream.range(0, 3).toArray());
15701591
var block = (TestBlock) columnReader.read(TestBlock.factory(), docBlock, 0, false);
15711592
assertThat(block.get(0), equalTo(expectedSampleValues[0]));
@@ -1595,7 +1616,10 @@ public void testSingletonLongBulkBlockReading() throws IOException {
15951616
LeafReaderContext context = reader.leaves().get(0);
15961617
var blockLoader = mapperService.fieldType("field").blockLoader(mockBlockContext);
15971618
var columnReader = blockLoader.columnAtATimeReader(context);
1598-
assertThat(columnReader, instanceOf(BlockDocValuesReader.Longs.class));
1619+
assertThat(
1620+
columnReader,
1621+
anyOf(instanceOf(BlockDocValuesReader.Longs.class), instanceOf(BlockDocValuesReader.Doubles.class))
1622+
);
15991623
var docBlock = TestBlock.docs(IntStream.range(0, 3).toArray());
16001624
var block = (TestBlock) columnReader.read(TestBlock.factory(), docBlock, 0, false);
16011625
assertThat(block.get(0), equalTo(expectedSampleValues[0]));

x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/BlockUtils.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -254,14 +254,6 @@ private static Block constantBlock(BlockFactory blockFactory, ElementType type,
254254
*/
255255
public record Doc(int shard, int segment, int doc) {}
256256

257-
/**
258-
* Functional interface to convert a long value to a double.
259-
*/
260-
@FunctionalInterface
261-
public interface ToDouble {
262-
double convert(long v);
263-
}
264-
265257
/**
266258
* Read all values from a positions into a java object. This is not fast
267259
* but fine to call in the "fold" path.

0 commit comments

Comments
 (0)