Skip to content

Commit 033a76a

Browse files
committed
add statement parser tests
1 parent 94a33eb commit 033a76a

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/parser/StatementParserTests.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import org.elasticsearch.xpack.esql.plan.logical.Eval;
5151
import org.elasticsearch.xpack.esql.plan.logical.Explain;
5252
import org.elasticsearch.xpack.esql.plan.logical.Filter;
53+
import org.elasticsearch.xpack.esql.plan.logical.Fork;
5354
import org.elasticsearch.xpack.esql.plan.logical.Grok;
5455
import org.elasticsearch.xpack.esql.plan.logical.InlineStats;
5556
import org.elasticsearch.xpack.esql.plan.logical.Keep;
@@ -2982,4 +2983,56 @@ public void testInvalidJoinPatterns() {
29822983
);
29832984
}
29842985
}
2986+
2987+
public void testValidFork() {
2988+
assumeTrue("FORK requires corresponding capability", EsqlCapabilities.Cap.FORK.isEnabled());
2989+
2990+
var plan = statement("""
2991+
FROM foo*
2992+
| FORK [WHERE a:"baz" | LIMIT 11]
2993+
[WHERE b:"bar" | SORT b ]
2994+
[WHERE c:"bat"]
2995+
""");
2996+
var fork = as(plan, Fork.class);
2997+
var subPlans = fork.subPlans();
2998+
2999+
// first subplan
3000+
var limit = as(subPlans.get(0), Limit.class);
3001+
assertThat(limit.limit(), instanceOf(Literal.class));
3002+
assertThat(((Literal) limit.limit()).value(), equalTo(11));
3003+
var filter = as(limit.child(), Filter.class);
3004+
var match = (MatchOperator) filter.condition();
3005+
var matchField = (UnresolvedAttribute) match.field();
3006+
assertThat(matchField.name(), equalTo("a"));
3007+
assertThat(match.query().fold(FoldContext.small()), equalTo("baz"));
3008+
3009+
// second subplan
3010+
var orderBy = as(subPlans.get(1), OrderBy.class);
3011+
assertThat(orderBy.order().size(), equalTo(1));
3012+
Order order = orderBy.order().get(0);
3013+
assertThat(order.child(), instanceOf(UnresolvedAttribute.class));
3014+
assertThat(((UnresolvedAttribute) order.child()).name(), equalTo("b"));
3015+
filter = as(orderBy.child(), Filter.class);
3016+
match = (MatchOperator) filter.condition();
3017+
matchField = (UnresolvedAttribute) match.field();
3018+
assertThat(matchField.name(), equalTo("b"));
3019+
assertThat(match.query().fold(FoldContext.small()), equalTo("bar"));
3020+
3021+
// third subplan
3022+
filter = as(subPlans.get(2), Filter.class);
3023+
match = (MatchOperator) filter.condition();
3024+
matchField = (UnresolvedAttribute) match.field();
3025+
assertThat(matchField.name(), equalTo("c"));
3026+
assertThat(match.query().fold(FoldContext.small()), equalTo("bat"));
3027+
}
3028+
3029+
public void testInvalidFork() {
3030+
assumeTrue("FORK requires corresponding capability", EsqlCapabilities.Cap.FORK.isEnabled());
3031+
3032+
expectError("FROM foo* | FORK [WHERE a:\"baz\"]", "line 1:13: Fork requires at least two branches");
3033+
expectError("FROM foo* | FORK [LIMIT 10]", "line 1:13: Fork requires at least two branches");
3034+
expectError("FROM foo* | FORK [SORT a]", "line 1:13: Fork requires at least two branches");
3035+
expectError("FROM foo* | FORK [WHERE x>1 | LIMIT 5]", "line 1:13: Fork requires at least two branches");
3036+
expectError("FROM foo* | WHERE x>1 | FORK [WHERE a:\"baz\"]", "Fork requires at least two branches");
3037+
}
29853038
}

0 commit comments

Comments
 (0)