Skip to content

Commit b78574e

Browse files
committed
Fixes merge conflict: test that was added to main that now needs changes
1 parent d4bed3f commit b78574e

File tree

1 file changed

+42
-7
lines changed

1 file changed

+42
-7
lines changed

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/optimizer/LocalLogicalPlanOptimizerTests.java

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1656,6 +1656,19 @@ public void testLengthInWhereAndEval() {
16561656
/**
16571657
* Pushed LENGTH to the same field in a <strong>ton</strong> of unique and curious ways. All
16581658
* of these pushdowns should be fused to one.
1659+
*
1660+
* <pre>{@code
1661+
* Project[[l{r}#23]]
1662+
* \_Eval[[$$SUM$SUM(LENGTH(last>$0{r$}#37 / $$COUNT$$$AVG$SUM(LENGTH(last>$1$1{r$}#41 AS $$AVG$SUM(LENGTH(last>$1#38, $
1663+
* $SUM$SUM(LENGTH(last>$0{r$}#37 + $$AVG$SUM(LENGTH(last>$1{r$}#38 + $$SUM$SUM(LENGTH(last>$2{r$}#39 AS l#23]]
1664+
* \_Limit[1000[INTEGER],false,false]
1665+
* \_Aggregate[[],[SUM($$LENGTH(last_nam>$SUM$0{r$}#35,true[BOOLEAN],PT0S[TIME_DURATION],compensated[KEYWORD]) AS $$SUM$SUM(LE
1666+
* NGTH(last>$0#37, COUNT(a3{r}#11,true[BOOLEAN],PT0S[TIME_DURATION]) AS $$COUNT$$$AVG$SUM(LENGTH(last>$1$1#41, SUM($$LENGTH(first_na>$SUM$1{r$}#36,true[BOOLEAN],PT0S[TIME_DURATION],compensated[KEYWORD]) AS $$SUM$SUM(LENGTH(last>$2#39]]
1667+
* \_Eval[[$$last_name$LENGTH$920787299{f$}#42 AS a3#11, $$last_name$LENGTH$920787299{f$}#42 AS $$LENGTH(last_nam>$SUM$0
1668+
* #35, $$first_name$LENGTH$920787299{f$}#43 AS $$LENGTH(first_na>$SUM$1#36]]
1669+
* \_Filter[$$last_name$LENGTH$920787299{f$}#42 > 1[INTEGER]]
1670+
* \_EsRelation[test][_meta_field{f}#30, emp_no{f}#24, first_name{f}#25, ..]
1671+
* }</pre>
16591672
*/
16601673
public void testLengthPushdownZoo() {
16611674
assumeTrue("requires push", EsqlCapabilities.Cap.VECTOR_SIMILARITY_FUNCTIONS_PUSHDOWN.isEnabled());
@@ -1674,13 +1687,26 @@ public void testLengthPushdownZoo() {
16741687
// Eval - computes final aggregation result (SUM + AVG + SUM)
16751688
var eval1 = as(project.child(), Eval.class);
16761689
assertThat(eval1.fields(), hasSize(2));
1690+
// The avg is computed as the SUM(LENGTH(last_name)) / COUNT(LENGTH(last_name))
1691+
var avg = eval1.fields().get(0);
1692+
var avgDiv = as(avg.child(), Div.class);
1693+
// SUM(LENGTH(last_name))
1694+
var evalSumLastName = as(avgDiv.left(), ReferenceAttribute.class);
1695+
var evalCountLastName = as(avgDiv.right(), ReferenceAttribute.class);
1696+
var finalAgg = as(eval1.fields().get(1).child(), Add.class);
1697+
var leftFinalAgg = as(finalAgg.left(), Add.class);
1698+
assertThat(leftFinalAgg.left(), equalTo(evalSumLastName));
1699+
assertThat(as(leftFinalAgg.right(), ReferenceAttribute.class).id(), equalTo(avg.id()));
1700+
// SUM(LENGTH(first_name))
1701+
var evalSumFirstName = as(finalAgg.right(), ReferenceAttribute.class);
16771702

16781703
// Limit[1000[INTEGER],false,false]
16791704
var limit = as(eval1.child(), Limit.class);
16801705

1681-
// Aggregate with 4 aggregates: SUM for last_name, SUM and COUNT for AVG(a3), SUM for first_name
1706+
// Aggregate with 3 aggregates: SUM for last_name, COUNT for last_name
1707+
// (the AVG uses the sum and the count), SUM for first_name
16821708
var agg = as(limit.child(), Aggregate.class);
1683-
assertThat(agg.aggregates(), hasSize(4));
1709+
assertThat(agg.aggregates(), hasSize(3));
16841710

16851711
// Eval - pushdown fields: a3, LENGTH(last_name) for SUM, and LENGTH(first_name) for SUM
16861712
var evalPushdown = as(agg.child(), Eval.class);
@@ -1694,14 +1720,23 @@ public void testLengthPushdownZoo() {
16941720
Attribute firstNamePushDownAttr = assertLengthPushdown(firstNamePushdownAlias.child(), "first_name");
16951721

16961722
// Verify aggregates reference the pushed down fields
1697-
var sumForLastName = as(as(agg.aggregates().get(0), Alias.class).child(), Sum.class);
1723+
var sumForLastNameAlias = as(agg.aggregates().get(0), Alias.class);
1724+
var sumForLastName = as(sumForLastNameAlias.child(), Sum.class);
16981725
assertThat(as(sumForLastName.field(), ReferenceAttribute.class).id(), equalTo(lastNamePushdownAlias.id()));
1699-
var sumForAvg = as(as(agg.aggregates().get(1), Alias.class).child(), Sum.class);
1700-
assertThat(as(sumForAvg.field(), ReferenceAttribute.class).id(), equalTo(a3Alias.id()));
1701-
var countForAvg = as(as(agg.aggregates().get(2), Alias.class).child(), Count.class);
1726+
// Checks that the SUM(LENGTH(last_name)) in the final EVAL is the aggregate result here
1727+
assertThat(evalSumLastName.id(), equalTo(sumForLastNameAlias.id()));
1728+
1729+
var countForAvgAlias = as(agg.aggregates().get(1), Alias.class);
1730+
var countForAvg = as(countForAvgAlias.child(), Count.class);
17021731
assertThat(as(countForAvg.field(), ReferenceAttribute.class).id(), equalTo(a3Alias.id()));
1703-
var sumForFirstName = as(as(agg.aggregates().get(3), Alias.class).child(), Sum.class);
1732+
// Checks that the COUNT(LENGTH(last_name)) in the final EVAL is the aggregate result here
1733+
assertThat(evalCountLastName.id(), equalTo(countForAvgAlias.id()));
1734+
1735+
var sumForFirstNameAlias = as(agg.aggregates().get(2), Alias.class);
1736+
var sumForFirstName = as(sumForFirstNameAlias.child(), Sum.class);
17041737
assertThat(as(sumForFirstName.field(), ReferenceAttribute.class).id(), equalTo(firstNamePushdownAlias.id()));
1738+
// Checks that the SUM(LENGTH(first_name)) in the final EVAL is the aggregate result here
1739+
assertThat(evalSumFirstName.id(), equalTo(sumForFirstNameAlias.id()));
17051740

17061741
// Filter[LENGTH(last_name) > 1]
17071742
var filter = as(evalPushdown.child(), Filter.class);

0 commit comments

Comments
 (0)