Skip to content

Commit 29bdaf0

Browse files
committed
fix tests
1 parent 350c511 commit 29bdaf0

File tree

2 files changed

+35
-13
lines changed

2 files changed

+35
-13
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -753,7 +753,7 @@ private LogicalPlan resolveFork(Fork fork, AnalyzerContext context) {
753753
boolean changed = false;
754754
List<LogicalPlan> newSubPlans = new ArrayList<>();
755755
List<Attribute> outputUnion = Fork.outputUnion(fork.children());
756-
Set<String> forkColumns = outputUnion.stream().map(Attribute::name).collect(Collectors.toSet());
756+
List<String> forkColumns = outputUnion.stream().map(Attribute::name).toList();
757757

758758
for (LogicalPlan logicalPlan : fork.children()) {
759759
Source source = logicalPlan.source();
@@ -804,7 +804,7 @@ private LogicalPlan resolveFork(Fork fork, AnalyzerContext context) {
804804

805805
// We don't want to keep the same attributes that are outputted by the FORK branches.
806806
// Keeping the same attributes can have unintended side effects when applying optimizations like constant folding.
807-
for (Attribute attr : Fork.outputUnion(newSubPlans)) {
807+
for (Attribute attr : newSubPlans.getFirst().output()) {
808808
newOutput.add(new ReferenceAttribute(attr.source(), attr.name(), attr.dataType()));
809809
}
810810

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/analysis/AnalyzerTests.java

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3039,6 +3039,7 @@ public void testBasicFork() {
30393039

30403040
LogicalPlan plan = analyze("""
30413041
from test
3042+
| KEEP emp_no, first_name, last_name
30423043
| WHERE first_name == "Chris"
30433044
| FORK ( WHERE emp_no > 1 )
30443045
( WHERE emp_no > 2 )
@@ -3047,6 +3048,7 @@ public void testBasicFork() {
30473048
( LIMIT 9 )
30483049
""");
30493050

3051+
var expectedOutput = List.of("emp_no", "first_name", "last_name", "_fork");
30503052
Limit limit = as(plan, Limit.class);
30513053
Fork fork = as(limit.child(), Fork.class);
30523054

@@ -3056,33 +3058,44 @@ public void testBasicFork() {
30563058
// fork branch 1
30573059
limit = as(subPlans.get(0), Limit.class);
30583060
assertThat(as(limit.limit(), Literal.class).value(), equalTo(DEFAULT_LIMIT));
3059-
Eval eval = as(limit.child(), Eval.class);
3061+
Keep keep = as(limit.child(), Keep.class);
3062+
List<String> keptColumns = keep.expressions().stream().map(exp -> as(exp, Attribute.class).name()).toList();
3063+
assertThat(keptColumns, equalTo(expectedOutput));
3064+
Eval eval = as(keep.child(), Eval.class);
30603065
assertThat(as(eval.fields().get(0), Alias.class), equalTo(alias("_fork", string("fork1"))));
30613066
Filter filter = as(eval.child(), Filter.class);
30623067
assertThat(as(filter.condition(), GreaterThan.class).right(), equalTo(literal(1)));
30633068

30643069
filter = as(filter.child(), Filter.class);
30653070
assertThat(as(filter.condition(), Equals.class).right(), equalTo(string("Chris")));
3066-
var esRelation = as(filter.child(), EsRelation.class);
3071+
EsqlProject project = as(filter.child(), EsqlProject.class);
3072+
var esRelation = as(project.child(), EsRelation.class);
30673073
assertThat(esRelation.indexPattern(), equalTo("test"));
30683074

30693075
// fork branch 2
30703076
limit = as(subPlans.get(1), Limit.class);
30713077
assertThat(as(limit.limit(), Literal.class).value(), equalTo(DEFAULT_LIMIT));
3072-
eval = as(limit.child(), Eval.class);
3078+
keep = as(limit.child(), Keep.class);
3079+
keptColumns = keep.expressions().stream().map(exp -> as(exp, Attribute.class).name()).toList();
3080+
assertThat(keptColumns, equalTo(expectedOutput));
3081+
eval = as(keep.child(), Eval.class);
30733082
assertThat(as(eval.fields().get(0), Alias.class), equalTo(alias("_fork", string("fork2"))));
30743083
filter = as(eval.child(), Filter.class);
30753084
assertThat(as(filter.condition(), GreaterThan.class).right(), equalTo(literal(2)));
30763085

30773086
filter = as(filter.child(), Filter.class);
30783087
assertThat(as(filter.condition(), Equals.class).right(), equalTo(string("Chris")));
3079-
esRelation = as(filter.child(), EsRelation.class);
3088+
project = as(filter.child(), EsqlProject.class);
3089+
esRelation = as(project.child(), EsRelation.class);
30803090
assertThat(esRelation.indexPattern(), equalTo("test"));
30813091

30823092
// fork branch 3
30833093
limit = as(subPlans.get(2), Limit.class);
30843094
assertThat(as(limit.limit(), Literal.class).value(), equalTo(MAX_LIMIT));
3085-
eval = as(limit.child(), Eval.class);
3095+
keep = as(limit.child(), Keep.class);
3096+
keptColumns = keep.expressions().stream().map(exp -> as(exp, Attribute.class).name()).toList();
3097+
assertThat(keptColumns, equalTo(expectedOutput));
3098+
eval = as(keep.child(), Eval.class);
30863099
assertThat(as(eval.fields().get(0), Alias.class), equalTo(alias("_fork", string("fork3"))));
30873100
limit = as(eval.child(), Limit.class);
30883101
assertThat(as(limit.limit(), Literal.class).value(), equalTo(7));
@@ -3091,30 +3104,39 @@ public void testBasicFork() {
30913104
assertThat(as(filter.condition(), GreaterThan.class).right(), equalTo(literal(3)));
30923105
filter = as(filter.child(), Filter.class);
30933106
assertThat(as(filter.condition(), Equals.class).right(), equalTo(string("Chris")));
3094-
esRelation = as(filter.child(), EsRelation.class);
3107+
project = as(filter.child(), EsqlProject.class);
3108+
esRelation = as(project.child(), EsRelation.class);
30953109
assertThat(esRelation.indexPattern(), equalTo("test"));
30963110

30973111
// fork branch 4
30983112
limit = as(subPlans.get(3), Limit.class);
30993113
assertThat(as(limit.limit(), Literal.class).value(), equalTo(DEFAULT_LIMIT));
3100-
eval = as(limit.child(), Eval.class);
3114+
keep = as(limit.child(), Keep.class);
3115+
keptColumns = keep.expressions().stream().map(exp -> as(exp, Attribute.class).name()).toList();
3116+
assertThat(keptColumns, equalTo(expectedOutput));
3117+
eval = as(keep.child(), Eval.class);
31013118
assertThat(as(eval.fields().get(0), Alias.class), equalTo(alias("_fork", string("fork4"))));
31023119
orderBy = as(eval.child(), OrderBy.class);
31033120
filter = as(orderBy.child(), Filter.class);
31043121
assertThat(as(filter.condition(), Equals.class).right(), equalTo(string("Chris")));
3105-
esRelation = as(filter.child(), EsRelation.class);
3122+
project = as(filter.child(), EsqlProject.class);
3123+
esRelation = as(project.child(), EsRelation.class);
31063124
assertThat(esRelation.indexPattern(), equalTo("test"));
31073125

31083126
// fork branch 5
31093127
limit = as(subPlans.get(4), Limit.class);
31103128
assertThat(as(limit.limit(), Literal.class).value(), equalTo(MAX_LIMIT));
3111-
eval = as(limit.child(), Eval.class);
3129+
keep = as(limit.child(), Keep.class);
3130+
keptColumns = keep.expressions().stream().map(exp -> as(exp, Attribute.class).name()).toList();
3131+
assertThat(keptColumns, equalTo(expectedOutput));
3132+
eval = as(keep.child(), Eval.class);
31123133
assertThat(as(eval.fields().get(0), Alias.class), equalTo(alias("_fork", string("fork5"))));
31133134
limit = as(eval.child(), Limit.class);
31143135
assertThat(as(limit.limit(), Literal.class).value(), equalTo(9));
31153136
filter = as(limit.child(), Filter.class);
31163137
assertThat(as(filter.condition(), Equals.class).right(), equalTo(string("Chris")));
3117-
esRelation = as(filter.child(), EsRelation.class);
3138+
project = as(filter.child(), EsqlProject.class);
3139+
esRelation = as(project.child(), EsRelation.class);
31183140
assertThat(esRelation.indexPattern(), equalTo("test"));
31193141
}
31203142

@@ -3352,7 +3374,7 @@ public void testValidRrf() {
33523374
assertThat(dedup.aggregates().size(), equalTo(15));
33533375

33543376
RrfScoreEval rrf = as(dedup.child(), RrfScoreEval.class);
3355-
assertThat(rrf.scoreAttribute(), instanceOf(MetadataAttribute.class));
3377+
assertThat(rrf.scoreAttribute(), instanceOf(ReferenceAttribute.class));
33563378
assertThat(rrf.scoreAttribute().name(), equalTo("_score"));
33573379
assertThat(rrf.forkAttribute(), instanceOf(ReferenceAttribute.class));
33583380
assertThat(rrf.forkAttribute().name(), equalTo("_fork"));

0 commit comments

Comments
 (0)