Skip to content

Commit 56d71e5

Browse files
committed
WTF checkstyle?!
1 parent 9dbff25 commit 56d71e5

File tree

4 files changed

+60
-44
lines changed

4 files changed

+60
-44
lines changed

x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/type/UnmappedEsField.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@ public record SimpleResolution(Expression unmappedConversion, Expression mappedC
5555

5656
/// A field which is mapped to more than one type in multiple indices, *in addition* to the unmapped case which is always treated as
5757
/// [DataType#KEYWORD]. This can be resolved using a cast, similar to union types.
58-
public record Invalid(InvalidMappedField imf) implements State {}
58+
public record Invalid(InvalidMappedField invalidMappedField) implements State {}
5959

6060
/// A field which is mapped to different types in different indices, but resolved using union types. In mapped indices, we treat this
6161
/// as a union type, and use the specified conversion for unmapped indices.
62-
public record MultiType(Expression conversionFromKeyword, MultiTypeEsField mf) implements State {}
62+
public record MultiType(Expression conversionFromKeyword, MultiTypeEsField multiTypeEsField) implements State {}
6363

6464
private final State state;
6565

@@ -113,23 +113,23 @@ public void writeContent(StreamOutput out) throws IOException {
113113
case NoConflicts unused -> {
114114
out.writeInt(0);
115115
}
116-
case SimpleConflict(var otherType) -> {
116+
case SimpleConflict sf -> {
117117
out.writeInt(1);
118-
otherType.writeTo(out);
118+
sf.otherType().writeTo(out);
119119
}
120-
case SimpleResolution(var unmappedConversion, var mappedConversion) -> {
120+
case SimpleResolution sr -> {
121121
out.writeInt(2);
122-
out.writeNamedWriteable(unmappedConversion);
123-
out.writeNamedWriteable(mappedConversion);
122+
out.writeNamedWriteable(sr.unmappedConversion());
123+
out.writeNamedWriteable(sr.mappedConversion());
124124
}
125-
case Invalid(var imf) -> {
125+
case Invalid invalid -> {
126126
out.writeInt(3);
127-
imf.writeTo(out);
127+
invalid.invalidMappedField().writeTo(out);
128128
}
129-
case MultiType(var conversion, var multiTypeEsField) -> {
129+
case MultiType mt -> {
130130
out.writeInt(4);
131-
out.writeNamedWriteable(conversion);
132-
multiTypeEsField.writeTo(out);
131+
out.writeNamedWriteable(mt.conversionFromKeyword());
132+
mt.multiTypeEsField.writeTo(out);
133133
}
134134
}
135135
writeCachedStringWithVersionCheck(out, getName());

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/analysis/Analyzer.java

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1392,7 +1392,8 @@ private LogicalPlan doRule(LogicalPlan plan) {
13921392
private Expression resolveConvertFunction(AbstractConvertFunction convert, List<FieldAttribute> unionFieldAttributes) {
13931393
if (convert.field() instanceof FieldAttribute fa) {
13941394
if (fa.field() instanceof UnmappedEsField unmapped) {
1395-
if (unmapped.getState() instanceof UnmappedEsField.SimpleConflict(DataType otherType)) {
1395+
if (unmapped.getState() instanceof UnmappedEsField.SimpleConflict sf) {
1396+
var otherType = sf.otherType();
13961397
var imf = new InvalidMappedField(
13971398
fa.name(),
13981399
Map.of(KEYWORD.typeName(), Set.of("unmapped field"), otherType.typeName(), Set.of("mapped field"))
@@ -1402,7 +1403,8 @@ private Expression resolveConvertFunction(AbstractConvertFunction convert, List<
14021403
return e;
14031404
}
14041405
}
1405-
if (unmapped.getState() instanceof UnmappedEsField.Invalid(InvalidMappedField imf)) {
1406+
if (unmapped.getState() instanceof UnmappedEsField.Invalid invalid) {
1407+
var imf = invalid.invalidMappedField();
14061408
Optional<Expression> expr = convertHelper(convert, fa, imf, f -> unmappedMultiType(convert, fa, imf, f));
14071409
if (expr.orElse(null) instanceof Expression e) {
14081410
return e;
@@ -1539,18 +1541,17 @@ public LogicalPlan apply(LogicalPlan plan) {
15391541
}
15401542

15411543
private static Attribute checkUnresolved(FieldAttribute fa) {
1542-
return switch (fa.field()) {
1543-
case InvalidMappedField imf -> unsupportedAttributeFromInvalidMappedField(fa, imf);
1544-
case UnmappedEsField insisted when insisted.getState() instanceof UnmappedEsField.Invalid(var imf) ->
1545-
unsupportedAttributeFromInvalidMappedField(fa, imf);
1546-
case UnmappedEsField insisted when insisted.getState() instanceof UnmappedEsField.SimpleConflict(DataType otherType) -> {
1547-
var format = "Cannot use field [%s] due to ambiguities caused by INSIST. "
1548-
+ "unmapped fields are treated as KEYWORD in unmapped indices, but field is mapped to type [%s]";
1549-
String unresolvedMessage = Strings.format(format, fa.name(), otherType);
1550-
yield unsupportedAttributeFromInvalidMappedField(fa, new InvalidMappedField(fa.name(), unresolvedMessage));
1551-
}
1552-
default -> fa;
1553-
};
1544+
if (fa.field() instanceof InvalidMappedField imf) {
1545+
return unsupportedAttributeFromInvalidMappedField(fa, imf);
1546+
} else if (fa.field() instanceof UnmappedEsField unmapped && unmapped.getState() instanceof UnmappedEsField.Invalid invalid) {
1547+
return unsupportedAttributeFromInvalidMappedField(fa, invalid.invalidMappedField());
1548+
} else if (fa.field() instanceof UnmappedEsField unmapped && unmapped.getState() instanceof UnmappedEsField.SimpleConflict sf) {
1549+
var format = "Cannot use field [%s] due to ambiguities caused by INSIST. "
1550+
+ "unmapped fields are treated as KEYWORD in unmapped indices, but field is mapped to type [%s]";
1551+
String unresolvedMessage = Strings.format(format, fa.name(), sf.otherType());
1552+
return unsupportedAttributeFromInvalidMappedField(fa, new InvalidMappedField(fa.name(), unresolvedMessage));
1553+
}
1554+
return fa;
15541555
}
15551556

15561557
private static UnsupportedAttribute unsupportedAttributeFromInvalidMappedField(FieldAttribute fa, InvalidMappedField imf) {

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/EsPhysicalOperationProviders.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.elasticsearch.xpack.esql.core.expression.FieldAttribute;
5252
import org.elasticsearch.xpack.esql.core.expression.MetadataAttribute;
5353
import org.elasticsearch.xpack.esql.core.type.DataType;
54+
import org.elasticsearch.xpack.esql.core.type.EsField;
5455
import org.elasticsearch.xpack.esql.core.type.MultiTypeEsField;
5556
import org.elasticsearch.xpack.esql.core.type.UnmappedEsField;
5657
import org.elasticsearch.xpack.esql.expression.function.scalar.convert.AbstractConvertFunction;
@@ -66,6 +67,7 @@
6667
import java.util.ArrayList;
6768
import java.util.List;
6869
import java.util.Map;
70+
import java.util.Objects;
6971
import java.util.Optional;
7072
import java.util.Set;
7173
import java.util.function.Function;
@@ -137,8 +139,8 @@ private BlockLoader getBlockLoaderFor(int shardId, Attribute attr, MappedFieldTy
137139
boolean isUnsupported = attr.dataType() == DataType.UNSUPPORTED;
138140
BlockLoader blockLoader = shardContext.blockLoader(getFieldName(attr), isUnsupported, fieldExtractPreference);
139141
if (attr instanceof FieldAttribute fa && fa.field() instanceof UnmappedEsField uf) {
140-
if (isUnmapped && uf.getState() instanceof UnmappedEsField.MultiType(Expression conversion, var unused)) {
141-
return new TypeConvertingBlockLoader(blockLoader, (AbstractConvertFunction) conversion);
142+
if (isUnmapped && uf.getState() instanceof UnmappedEsField.MultiType mt) {
143+
return new TypeConvertingBlockLoader(blockLoader, (AbstractConvertFunction) mt.conversionFromKeyword());
142144
}
143145
if (uf.getState() instanceof UnmappedEsField.SimpleResolution sr) {
144146
return new TypeConvertingBlockLoader(
@@ -178,11 +180,13 @@ protected MappedFieldType fieldType(String name) {
178180

179181
private static @Nullable MultiTypeEsField findUnionTypes(Attribute attr) {
180182
if (attr instanceof FieldAttribute fa) {
181-
return switch (fa.field()) {
182-
case UnmappedEsField unmapped when unmapped.getState() instanceof UnmappedEsField.MultiType(var unused, var mf) -> mf;
183-
case MultiTypeEsField multiTypeEsField -> multiTypeEsField;
184-
default -> null;
185-
};
183+
EsField field = fa.field();
184+
if (Objects.requireNonNull(field) instanceof UnmappedEsField unmapped
185+
&& unmapped.getState() instanceof UnmappedEsField.MultiType mt) {
186+
return mt.multiTypeEsField();
187+
} else if (field instanceof MultiTypeEsField multiTypeEsField) {
188+
return multiTypeEsField;
189+
}
186190
}
187191
return null;
188192
}

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/planner/TestPhysicalOperationProviders.java

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -269,14 +269,23 @@ private Block getBlock(DocBlock docBlock, Attribute attribute, FieldExtractPrefe
269269
if (attribute instanceof UnsupportedAttribute) {
270270
return getNullsBlock(docBlock);
271271
}
272-
BiFunction<DocBlock, TestBlockCopier, Block> blockExtraction = switch (attribute) {
273-
case FieldAttribute fa when fa.field() instanceof MultiTypeEsField m -> (doc, copier) -> getBlockForMultiType(doc, m, copier);
274-
case FieldAttribute fa when fa.field() instanceof UnmappedEsField i -> (doc, copier) -> getBlockForUnmappedType(doc, i, copier);
275-
default -> (indexDoc, blockCopier) -> extractBlockForSingleDoc(indexDoc, attribute.name(), blockCopier).getOrThrow();
276-
};
272+
BiFunction<DocBlock, TestBlockCopier, Block> blockExtraction = getBlockExtraction(attribute);
277273
return extractBlockForColumn(docBlock, attribute.dataType(), extractPreference, blockExtraction);
278274
}
279275

276+
private BiFunction<DocBlock, TestBlockCopier, Block> getBlockExtraction(Attribute attribute) {
277+
if (attribute instanceof FieldAttribute fa) {
278+
switch (fa.field()) {
279+
case MultiTypeEsField m:
280+
return (doc, copier) -> getBlockForMultiType(doc, m, copier);
281+
case UnmappedEsField u:
282+
return (doc, copier) -> getBlockForUnmappedType(doc, u, copier);
283+
default: // noop
284+
}
285+
}
286+
return (indexDoc, blockCopier) -> extractBlockForSingleDoc(indexDoc, attribute.name(), blockCopier).getOrThrow();
287+
}
288+
280289
private Block getBlockForMultiType(DocBlock indexDoc, MultiTypeEsField multiTypeEsField, TestBlockCopier blockCopier) {
281290
var conversion = (AbstractConvertFunction) multiTypeEsField.getConversionExpressionForIndex(getIndexPage(indexDoc).index);
282291
if (conversion == null) {
@@ -297,14 +306,16 @@ private Block getBlockForUnmappedType(DocBlock indexDoc, UnmappedEsField field,
297306

298307
private static Block castUnmapped(IndexPage indexPage, UnmappedEsField field, Block block) {
299308
return switch (field.getState()) {
300-
case UnmappedEsField.SimpleResolution(var unmappedConversion, var mappedConversion) -> {
309+
case UnmappedEsField.SimpleResolution sr -> {
301310
var isMapped = indexPage.mappedFields.contains(field.getName());
302-
yield TypeConverter.fromConvertFunction((AbstractConvertFunction) (isMapped ? mappedConversion : unmappedConversion))
303-
.convert(block);
311+
yield TypeConverter.fromConvertFunction(
312+
(AbstractConvertFunction) (isMapped ? sr.mappedConversion() : sr.unmappedConversion())
313+
).convert(block);
304314
}
305-
case UnmappedEsField.MultiType(var unused, MultiTypeEsField mf) -> {
306-
yield TypeConverter.fromConvertFunction((AbstractConvertFunction) mf.getConversionExpressionForIndex(indexPage.index))
307-
.convert(block);
315+
case UnmappedEsField.MultiType mt -> {
316+
yield TypeConverter.fromConvertFunction(
317+
(AbstractConvertFunction) mt.multiTypeEsField().getConversionExpressionForIndex(indexPage.index)
318+
).convert(block);
308319
}
309320
case UnmappedEsField.NoConflicts noConflicts -> block;
310321
case UnmappedEsField.Invalid invalid -> throw new AssertionError("Invalid field should have been null");

0 commit comments

Comments
 (0)