diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/enrich/LookupFromIndexService.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/enrich/LookupFromIndexService.java index b8463d1a4c57a..380ed83948fd8 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/enrich/LookupFromIndexService.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/enrich/LookupFromIndexService.java @@ -148,11 +148,7 @@ protected LookupEnrichQueryGenerator queryList( * In those cases, it is safe to ignore the plan sent and return null */ private static PhysicalPlan localLookupNodePlanning(PhysicalPlan physicalPlan) { - if (physicalPlan instanceof FragmentExec fragmentExec) { - LocalMapper localMapper = new LocalMapper(); - return localMapper.map(fragmentExec.fragment()); - } - return null; + return physicalPlan instanceof FragmentExec fragmentExec ? LocalMapper.INSTANCE.map(fragmentExec.fragment()) : null; } @Override diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/PlannerUtils.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/PlannerUtils.java index 483d30671b337..a9ab4623e7dd4 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/PlannerUtils.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/PlannerUtils.java @@ -144,9 +144,8 @@ public static PlanReduction reductionPlan(PhysicalPlan plan) { return SimplePlanReduction.NO_REDUCTION; } final LogicalPlan pipelineBreaker = pipelineBreakers.getFirst(); - final LocalMapper mapper = new LocalMapper(); int estimatedRowSize = fragment.estimatedRowSize(); - return switch (mapper.map(pipelineBreaker)) { + return switch (LocalMapper.INSTANCE.map(pipelineBreaker)) { case TopNExec topN -> new TopNReduction(EstimatesRowSize.estimateRowSize(estimatedRowSize, topN)); case AggregateExec aggExec -> getPhysicalPlanReduction(estimatedRowSize, aggExec.withMode(AggregatorMode.INTERMEDIATE)); case PhysicalPlan p -> getPhysicalPlanReduction(estimatedRowSize, p); @@ -218,7 +217,6 @@ public static PhysicalPlan localPlan( LocalLogicalPlanOptimizer logicalOptimizer, LocalPhysicalPlanOptimizer physicalOptimizer ) { - final LocalMapper localMapper = new LocalMapper(); var isCoordPlan = new Holder<>(Boolean.TRUE); Set lookupJoinExecRightChildren = plan.collect(LookupJoinExec.class::isInstance) .stream() @@ -234,7 +232,7 @@ public static PhysicalPlan localPlan( } isCoordPlan.set(Boolean.FALSE); LogicalPlan optimizedFragment = logicalOptimizer.localOptimize(f.fragment()); - PhysicalPlan physicalFragment = localMapper.map(optimizedFragment); + PhysicalPlan physicalFragment = LocalMapper.INSTANCE.map(optimizedFragment); QueryBuilder filter = f.esFilter(); if (filter != null) { physicalFragment = physicalFragment.transformUp( diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/mapper/LocalMapper.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/mapper/LocalMapper.java index 8aa9255f44dd3..46a6ae7469336 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/mapper/LocalMapper.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/mapper/LocalMapper.java @@ -41,6 +41,10 @@ */ public class LocalMapper { + public static LocalMapper INSTANCE = new LocalMapper(); + + private LocalMapper() {} + public PhysicalPlan map(LogicalPlan p) { if (p instanceof LeafPlan leaf) { diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/LateMaterializationPlanner.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/LateMaterializationPlanner.java index 6771aa6667a2b..6695b3cd4376d 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/LateMaterializationPlanner.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/LateMaterializationPlanner.java @@ -133,7 +133,7 @@ public static Optional planReduceDriverTopN( } private static PhysicalPlan toPhysical(LogicalPlan plan, LocalPhysicalOptimizerContext context) { - return new InsertFieldExtraction().apply(new ReplaceSourceAttributes().apply(new LocalMapper().map(plan)), context); + return new InsertFieldExtraction().apply(new ReplaceSourceAttributes().apply(LocalMapper.INSTANCE.map(plan)), context); } private LateMaterializationPlanner() { /* static class */ }