diff --git a/docs/changelog/136492.yaml b/docs/changelog/136492.yaml new file mode 100644 index 0000000000000..5ae71a5cfa79f --- /dev/null +++ b/docs/changelog/136492.yaml @@ -0,0 +1,5 @@ +pr: 136492 +summary: Make `ResolveUnionTypes` rule stateless +area: ES|QL +type: bug +issues: [] diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/analysis/Analyzer.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/analysis/Analyzer.java index 58d74d0907c48..57bcf37b68de8 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/analysis/Analyzer.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/analysis/Analyzer.java @@ -1845,15 +1845,13 @@ private static class ResolveUnionTypes extends Rule { record TypeResolutionKey(String fieldName, DataType fieldType) {} - private List unionFieldAttributes; - @Override public LogicalPlan apply(LogicalPlan plan) { - unionFieldAttributes = new ArrayList<>(); - return plan.transformUp(LogicalPlan.class, p -> p.childrenResolved() == false ? p : doRule(p)); + List unionFieldAttributes = new ArrayList<>(); + return plan.transformUp(LogicalPlan.class, p -> p.childrenResolved() == false ? p : doRule(p, unionFieldAttributes)); } - private LogicalPlan doRule(LogicalPlan plan) { + private LogicalPlan doRule(LogicalPlan plan, List unionFieldAttributes) { Holder alreadyAddedUnionFieldAttributes = new Holder<>(unionFieldAttributes.size()); // Collect field attributes from previous runs if (plan instanceof EsRelation rel) {