6666import org .elasticsearch .xpack .esql .optimizer .LogicalPlanOptimizer ;
6767import org .elasticsearch .xpack .esql .optimizer .PhysicalOptimizerContext ;
6868import org .elasticsearch .xpack .esql .optimizer .PhysicalPlanOptimizer ;
69+ import org .elasticsearch .xpack .esql .optimizer .PreOptimizer ;
6970import org .elasticsearch .xpack .esql .parser .EsqlParser ;
7071import org .elasticsearch .xpack .esql .parser .QueryParams ;
7172import org .elasticsearch .xpack .esql .plan .IndexPattern ;
@@ -138,6 +139,7 @@ public interface PlanRunner {
138139 private final EnrichPolicyResolver enrichPolicyResolver ;
139140
140141 private final PreAnalyzer preAnalyzer ;
142+ private final PreOptimizer preOptimizer ;
141143 private final Verifier verifier ;
142144 private final EsqlFunctionRegistry functionRegistry ;
143145 private final LogicalPlanOptimizer logicalPlanOptimizer ;
@@ -183,6 +185,7 @@ public EsqlSession(
183185 this .planTelemetry = planTelemetry ;
184186 this .indicesExpressionGrouper = indicesExpressionGrouper ;
185187 this .inferenceResolver = inferenceResolver ;
188+ this .preOptimizer = new PreOptimizer ();
186189 this .preMapper = new PreMapper (services );
187190 this .remoteClusterService = services .transportService ().getRemoteClusterService ();
188191 }
@@ -206,10 +209,10 @@ public void execute(EsqlQueryRequest request, EsqlExecutionInfo executionInfo, P
206209 analyzedPlan (parsed , executionInfo , request .filter (), new EsqlCCSUtils .CssPartialErrorsActionListener (executionInfo , listener ) {
207210 @ Override
208211 public void onResponse (LogicalPlan analyzedPlan ) {
209- preMapper . preMapper (
210- analyzedPlan ,
211- listener . delegateFailureAndWrap ((l , p ) -> executeOptimizedPlan (request , executionInfo , planRunner , optimizedPlan ( p ) , l ))
212- );
212+ SubscribableListener .< LogicalPlan > newForked ( l -> preOptimizer . preOptimize ( analyzedPlan , l ))
213+ .< LogicalPlan > andThen (( l , p ) -> preMapper . preMapper ( optimizedPlan ( p ), l ))
214+ .< Result > andThen ((l , p ) -> executeOptimizedPlan (request , executionInfo , planRunner , p , l ))
215+ . addListener ( listener );
213216 }
214217 });
215218 }
0 commit comments