@@ -6005,6 +6005,81 @@ public void testInlinestatsWithRow() {
60056005 );
60066006 }
60076007
6008+ /*
6009+ * EsqlProject[[a{r}#4]]
6010+ * \_Limit[2[INTEGER],false]
6011+ * \_InlineJoin[LEFT,[],[],[]]
6012+ * |_EsRelation[test][_meta_field{f}#12, emp_no{f}#6, first_name{f}#7, ge..]
6013+ * \_Project[[a{r}#4]]
6014+ * \_Eval[[$$SUM$a$0{r$}#17 / $$COUNT$a$1{r$}#18 AS a#4]]
6015+ * \_Aggregate[[],[SUM(salary{f}#11,true[BOOLEAN],compensated[KEYWORD]) AS $$SUM$a$0#17,
6016+ * COUNT(salary{f}#11,true[BOOLEAN]) AS $$COUNT$a$1#18]]
6017+ * \_StubRelation[[_meta_field{f}#12, emp_no{f}#6, first_name{f}#7, gender{f}#8, hire_date{f}#13, job{f}#14, job.raw{f}#15,
6018+ * languages{f}#9, last_name{f}#10, long_noidx{f}#16, salary{f}#11]]
6019+ */
6020+ public void testInlinestatsWithLimit () {
6021+ var query = """
6022+ FROM employees
6023+ | INLINESTATS a = AVG(salary)
6024+ | LIMIT 2
6025+ | KEEP a
6026+ """ ;
6027+ if (releaseBuildForInlinestats (query )) {
6028+ return ;
6029+ }
6030+ var plan = optimizedPlan (query );
6031+
6032+ var project = as (plan , EsqlProject .class );
6033+ assertThat (Expressions .names (project .projections ()), is (List .of ("a" )));
6034+ var limit = asLimit (project .child (), 2 , false );
6035+ var inlineJoin = as (limit .child (), InlineJoin .class );
6036+ // Left
6037+ var relation = as (inlineJoin .left (), EsRelation .class );
6038+ // Right
6039+ var rightProject = as (inlineJoin .right (), Project .class );
6040+ assertThat (Expressions .names (rightProject .projections ()), contains ("a" ));
6041+ var eval = as (rightProject .child (), Eval .class );
6042+ assertThat (Expressions .names (eval .fields ()), is (List .of ("a" )));
6043+ var agg = as (eval .child (), Aggregate .class );
6044+ var stub = as (agg .child (), StubRelation .class );
6045+ }
6046+
6047+ /*
6048+ * Limit[10000[INTEGER],false]
6049+ * \_Aggregate[[],[VALUES(max_lang{r}#7,true[BOOLEAN]) AS v#11]]
6050+ * \_Limit[1[INTEGER],false]
6051+ * \_InlineJoin[LEFT,[gender{f}#14],[gender{f}#14],[gender{r}#14]]
6052+ * |_EsqlProject[[emp_no{f}#12, languages{f}#15, gender{f}#14]]
6053+ * | \_EsRelation[test][_meta_field{f}#18, emp_no{f}#12, first_name{f}#13, ..]
6054+ * \_Aggregate[[gender{f}#14],[MAX(languages{f}#15,true[BOOLEAN]) AS max_lang#7, gender{f}#14]]
6055+ * \_StubRelation[[emp_no{f}#12, languages{f}#15, gender{f}#14]]
6056+ */
6057+ public void testInlinestatsWithLimitAndAgg () {
6058+ var query = """
6059+ FROM employees
6060+ | KEEP emp_no, languages, gender
6061+ | INLINESTATS max_lang = MAX(languages) BY gender
6062+ | LIMIT 1
6063+ | STATS v = VALUES(max_lang)
6064+ """ ;
6065+ if (releaseBuildForInlinestats (query )) {
6066+ return ;
6067+ }
6068+ var plan = optimizedPlan (query );
6069+
6070+ var limit = asLimit (plan , 10000 , false );
6071+ var aggregate = as (limit .child (), Aggregate .class );
6072+ assertThat (Expressions .names (aggregate .aggregates ()), is (List .of ("v" )));
6073+ var innerLimit = asLimit (aggregate .child (), 1 , false );
6074+ var inlineJoin = as (innerLimit .child (), InlineJoin .class );
6075+ // Left
6076+ var project = as (inlineJoin .left (), EsqlProject .class );
6077+ var relation = as (project .child (), EsRelation .class );
6078+ // Right
6079+ var agg = as (inlineJoin .right (), Aggregate .class );
6080+ var stub = as (agg .child (), StubRelation .class );
6081+ }
6082+
60086083 /**
60096084 * Expects
60106085 *
0 commit comments