Skip to content

Commit c483a52

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

File tree

1 file changed

+44
-7
lines changed

1 file changed

+44
-7
lines changed

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

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1656,6 +1656,21 @@ 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,
1667+
* COUNT(a3{r}#11,true[BOOLEAN],PT0S[TIME_DURATION]) AS $$COUNT$$$AVG$SUM(LENGTH(last>$1$1#41,
1668+
* SUM($$LENGTH(first_na>$SUM$1{r$}#36,true[BOOLEAN],PT0S[TIME_DURATION],compensated[KEYWORD]) AS $$SUM$SUM(LENGTH(last>$2#39]]
1669+
* \_Eval[[$$last_name$LENGTH$920787299{f$}#42 AS a3#11, $$last_name$LENGTH$920787299{f$}#42 AS $$LENGTH(last_nam>$SUM$0
1670+
* #35, $$first_name$LENGTH$920787299{f$}#43 AS $$LENGTH(first_na>$SUM$1#36]]
1671+
* \_Filter[$$last_name$LENGTH$920787299{f$}#42 > 1[INTEGER]]
1672+
* \_EsRelation[test][_meta_field{f}#30, emp_no{f}#24, first_name{f}#25, ..]
1673+
* }</pre>
16591674
*/
16601675
public void testLengthPushdownZoo() {
16611676
assumeTrue("requires push", EsqlCapabilities.Cap.VECTOR_SIMILARITY_FUNCTIONS_PUSHDOWN.isEnabled());
@@ -1674,13 +1689,26 @@ public void testLengthPushdownZoo() {
16741689
// Eval - computes final aggregation result (SUM + AVG + SUM)
16751690
var eval1 = as(project.child(), Eval.class);
16761691
assertThat(eval1.fields(), hasSize(2));
1692+
// The avg is computed as the SUM(LENGTH(last_name)) / COUNT(LENGTH(last_name))
1693+
var avg = eval1.fields().get(0);
1694+
var avgDiv = as(avg.child(), Div.class);
1695+
// SUM(LENGTH(last_name))
1696+
var evalSumLastName = as(avgDiv.left(), ReferenceAttribute.class);
1697+
var evalCountLastName = as(avgDiv.right(), ReferenceAttribute.class);
1698+
var finalAgg = as(eval1.fields().get(1).child(), Add.class);
1699+
var leftFinalAgg = as(finalAgg.left(), Add.class);
1700+
assertThat(leftFinalAgg.left(), equalTo(evalSumLastName));
1701+
assertThat(as(leftFinalAgg.right(), ReferenceAttribute.class).id(), equalTo(avg.id()));
1702+
// SUM(LENGTH(first_name))
1703+
var evalSumFirstName = as(finalAgg.right(), ReferenceAttribute.class);
16771704

16781705
// Limit[1000[INTEGER],false,false]
16791706
var limit = as(eval1.child(), Limit.class);
16801707

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

16851713
// Eval - pushdown fields: a3, LENGTH(last_name) for SUM, and LENGTH(first_name) for SUM
16861714
var evalPushdown = as(agg.child(), Eval.class);
@@ -1694,14 +1722,23 @@ public void testLengthPushdownZoo() {
16941722
Attribute firstNamePushDownAttr = assertLengthPushdown(firstNamePushdownAlias.child(), "first_name");
16951723

16961724
// Verify aggregates reference the pushed down fields
1697-
var sumForLastName = as(as(agg.aggregates().get(0), Alias.class).child(), Sum.class);
1725+
var sumForLastNameAlias = as(agg.aggregates().get(0), Alias.class);
1726+
var sumForLastName = as(sumForLastNameAlias.child(), Sum.class);
16981727
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);
1728+
// Checks that the SUM(LENGTH(last_name)) in the final EVAL is the aggregate result here
1729+
assertThat(evalSumLastName.id(), equalTo(sumForLastNameAlias.id()));
1730+
1731+
var countForAvgAlias = as(agg.aggregates().get(1), Alias.class);
1732+
var countForAvg = as(countForAvgAlias.child(), Count.class);
17021733
assertThat(as(countForAvg.field(), ReferenceAttribute.class).id(), equalTo(a3Alias.id()));
1703-
var sumForFirstName = as(as(agg.aggregates().get(3), Alias.class).child(), Sum.class);
1734+
// Checks that the COUNT(LENGTH(last_name)) in the final EVAL is the aggregate result here
1735+
assertThat(evalCountLastName.id(), equalTo(countForAvgAlias.id()));
1736+
1737+
var sumForFirstNameAlias = as(agg.aggregates().get(2), Alias.class);
1738+
var sumForFirstName = as(sumForFirstNameAlias.child(), Sum.class);
17041739
assertThat(as(sumForFirstName.field(), ReferenceAttribute.class).id(), equalTo(firstNamePushdownAlias.id()));
1740+
// Checks that the SUM(LENGTH(first_name)) in the final EVAL is the aggregate result here
1741+
assertThat(evalSumFirstName.id(), equalTo(sumForFirstNameAlias.id()));
17051742

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

0 commit comments

Comments
 (0)