Skip to content

Commit 1853615

Browse files
code refactor and remove copy EsqlExecutionInfo
1 parent 9c333d3 commit 1853615

File tree

2 files changed

+30
-64
lines changed

2 files changed

+30
-64
lines changed

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

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import org.elasticsearch.xpack.esql.plan.logical.UnresolvedRelation;
1818

1919
import java.util.ArrayList;
20-
import java.util.HashSet;
20+
import java.util.LinkedHashSet;
2121
import java.util.List;
2222
import java.util.Set;
2323

@@ -48,19 +48,17 @@ public PreAnalysis preAnalyze(LogicalPlan plan) {
4848

4949
protected PreAnalysis doPreAnalyze(LogicalPlan plan) {
5050
Holder<IndexMode> indexMode = new Holder<>();
51-
Holder<IndexPattern> indexPattern = new Holder<>();
5251
List<IndexPattern> lookupIndices = new ArrayList<>();
53-
Set<IndexPattern> subqueryIndices = new HashSet<>();
52+
LinkedHashSet<IndexPattern> mainAndSubqueryIndices = new LinkedHashSet<>();
5453
plan.forEachUp(UnresolvedRelation.class, p -> {
5554
if (p.indexMode() == IndexMode.LOOKUP) {
5655
lookupIndices.add(p.indexPattern());
5756
} else if (indexMode.get() == null || indexMode.get() == p.indexMode()) {
5857
indexMode.set(p.indexMode());
59-
indexPattern.setIfAbsent(p.indexPattern());
60-
// the index pattern from main query is always the first to be seen
61-
// collect subquery index patterns
62-
if (EsqlCapabilities.Cap.SUBQUERY_IN_FROM_COMMAND.isEnabled()) {
63-
collectSubqueryIndexPattern(p, subqueryIndices, indexPattern.get());
58+
if (mainAndSubqueryIndices.isEmpty()) { // the index pattern from main query is always the first to be seen
59+
mainAndSubqueryIndices.add(p.indexPattern());
60+
} else if (EsqlCapabilities.Cap.SUBQUERY_IN_FROM_COMMAND.isEnabled()) { // collect subquery index patterns
61+
collectSubqueryIndexPattern(p, mainAndSubqueryIndices);
6462
}
6563
} else {
6664
throw new IllegalStateException("index mode is already set");
@@ -102,20 +100,18 @@ protected PreAnalysis doPreAnalyze(LogicalPlan plan) {
102100

103101
return new PreAnalysis(
104102
indexMode.get(),
105-
indexPattern.get(),
103+
// row command does not have an index pattern, mainAndSubqueryIndices could be empty in this case
104+
mainAndSubqueryIndices.isEmpty() ? null : mainAndSubqueryIndices.removeFirst(),
106105
unresolvedEnriches,
107106
lookupIndices,
108107
indexMode.get() == IndexMode.TIME_SERIES || supportsAggregateMetricDouble.get(),
109108
supportsDenseVector.get(),
110-
subqueryIndices
109+
mainAndSubqueryIndices
111110
);
112111
}
113112

114-
private void collectSubqueryIndexPattern(
115-
UnresolvedRelation relation,
116-
Set<IndexPattern> subqueryIndices,
117-
IndexPattern mainIndexPattern
118-
) {
113+
private void collectSubqueryIndexPattern(UnresolvedRelation relation, LinkedHashSet<IndexPattern> mainAndSubqueryIndices) {
114+
IndexPattern mainIndexPattern = mainAndSubqueryIndices.getFirst();
119115
IndexPattern pattern = relation.indexPattern();
120116
boolean isLookup = relation.indexMode() == IndexMode.LOOKUP;
121117
boolean isMainIndexPattern = pattern == mainIndexPattern;
@@ -126,6 +122,6 @@ private void collectSubqueryIndexPattern(
126122
if (isLookup || isMainIndexPattern) {
127123
return;
128124
}
129-
subqueryIndices.add(pattern);
125+
mainAndSubqueryIndices.add(pattern);
130126
}
131127
}

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/session/EsqlSession.java

Lines changed: 18 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -472,9 +472,7 @@ private void resolveIndices(
472472
.<PreAnalysisResult>andThen((l, r) -> {
473473
inferenceService.inferenceResolver(functionRegistry).resolveInferenceIds(parsed, l.map(r::withInferenceResolution));
474474
})
475-
.<PreAnalysisResult>andThen(
476-
(l, r) -> preAnalyzeSubqueryIndices(preAnalysis, preAnalysis.subqueryIndices().iterator(), r, executionInfo, l)
477-
)
475+
.<PreAnalysisResult>andThen((l, r) -> preAnalyzeSubqueryIndices(preAnalysis, preAnalysis.subqueryIndices().iterator(), r, l))
478476
.<LogicalPlan>andThen((l, r) -> analyzeWithRetry(parsed, executionInfo, description, requestFilter, preAnalysis, r, l))
479477
.addListener(logicalPlanListener);
480478
}
@@ -483,19 +481,12 @@ private void preAnalyzeSubqueryIndices(
483481
PreAnalyzer.PreAnalysis preAnalysis,
484482
Iterator<IndexPattern> subqueryIndices,
485483
PreAnalysisResult preAnalysisResult,
486-
EsqlExecutionInfo executionInfo,
487484
ActionListener<PreAnalysisResult> listener
488485
) {
489486
if (subqueryIndices.hasNext()) {
490-
preAnalyzeSubqueryIndex(
491-
preAnalysis,
492-
subqueryIndices.next(),
493-
preAnalysisResult,
494-
executionInfo,
495-
listener.delegateFailureAndWrap((l, r) -> {
496-
preAnalyzeSubqueryIndices(preAnalysis, subqueryIndices, r, executionInfo, l);
497-
})
498-
);
487+
preAnalyzeSubqueryIndex(preAnalysis, subqueryIndices.next(), preAnalysisResult, listener.delegateFailureAndWrap((l, r) -> {
488+
preAnalyzeSubqueryIndices(preAnalysis, subqueryIndices, r, l);
489+
}));
499490
} else {
500491
listener.onResponse(preAnalysisResult);
501492
}
@@ -505,7 +496,6 @@ private void preAnalyzeSubqueryIndex(
505496
PreAnalyzer.PreAnalysis preAnalysis,
506497
IndexPattern subqueryIndexPattern,
507498
PreAnalysisResult result,
508-
EsqlExecutionInfo executionInfo,
509499
ActionListener<PreAnalysisResult> listener
510500
) {
511501
assert ThreadPool.assertCurrentThreadPool(
@@ -523,46 +513,26 @@ private void preAnalyzeSubqueryIndex(
523513
* EsqlExecutionInfo for this subquery, and reuse the existing API to build
524514
* the subqueryIndexExpression.
525515
*/
526-
EsqlExecutionInfo subqueryExecutionInfo = subqueryExecutionInfo(executionInfo, subqueryIndexPattern);
527-
// the following are very similar to preAnalyzeMainIndices
528-
if (subqueryExecutionInfo.clusterAliases().isEmpty()) {
529-
// return empty resolution if the expression is pure CCS and resolved no remote clusters (like no-such-cluster*:index)
530-
listener.onResponse(
531-
result.addSubqueryIndexResolution(
532-
subqueryIndexPattern.indexPattern(),
533-
IndexResolution.valid(new EsIndex(subqueryIndexPattern.indexPattern(), Map.of(), Map.of()))
534-
)
535-
);
536-
} else {
537-
// time-series index is not supported in subqueries yet, the grammar does not allow it
538-
indexResolver.resolveAsMergedMapping(
539-
subqueryIndexPattern.indexPattern(),
540-
result.fieldNames,
541-
null,
542-
false,
543-
false,
544-
preAnalysis.supportsDenseVector(),
545-
listener.delegateFailure((l, indexResolution) -> {
546-
l.onResponse(result.addSubqueryIndexResolution(subqueryIndexPattern.indexPattern(), indexResolution));
547-
})
548-
);
549-
}
516+
517+
// time-series index mode is not supported in subqueries yet, the grammar does not allow it
518+
indexResolver.resolveAsMergedMapping(
519+
subqueryIndexPattern.indexPattern(),
520+
result.fieldNames,
521+
null,
522+
false,
523+
false,
524+
preAnalysis.supportsDenseVector(),
525+
listener.delegateFailure((l, indexResolution) -> {
526+
l.onResponse(result.addSubqueryIndexResolution(subqueryIndexPattern.indexPattern(), indexResolution));
527+
})
528+
);
529+
550530
} else {
551531
// occurs when dealing with local relations (row a = 1)
552532
listener.onResponse(result.addSubqueryIndexResolution("invalid subquery", IndexResolution.invalid("[none specified]")));
553533
}
554534
}
555535

556-
private EsqlExecutionInfo subqueryExecutionInfo(EsqlExecutionInfo mainExecutionInfo, IndexPattern subqueryIndexPattern) {
557-
// Clone mainInfo (assuming a copy constructor or similar method exists)
558-
EsqlExecutionInfo subqueryExecutionInfo = new EsqlExecutionInfo(
559-
mainExecutionInfo.skipOnFailurePredicate(),
560-
mainExecutionInfo.includeCCSMetadata()
561-
);
562-
EsqlCCSUtils.initCrossClusterState(indicesExpressionGrouper, verifier.licenseState(), subqueryIndexPattern, subqueryExecutionInfo);
563-
return subqueryExecutionInfo;
564-
}
565-
566536
private void preAnalyzeLookupIndices(
567537
Iterator<IndexPattern> lookupIndices,
568538
PreAnalysisResult preAnalysisResult,

0 commit comments

Comments
 (0)