@@ -71,6 +71,7 @@ public void testDissectQuery() {
7171 assertEquals (0 , lookupJoinOnFields (c ));
7272 assertEquals (0 , lookupJoinOnExpression (c ));
7373 assertEquals (0 , inlineStats (c ));
74+ assertEquals (0 , subqueryInFromCommand (c ));
7475 assertEquals (1 , function ("concat" , c ));
7576 }
7677
@@ -95,6 +96,7 @@ public void testEvalQuery() {
9596 assertEquals (0 , lookupJoinOnFields (c ));
9697 assertEquals (0 , lookupJoinOnExpression (c ));
9798 assertEquals (0 , inlineStats (c ));
99+ assertEquals (0 , subqueryInFromCommand (c ));
98100 assertEquals (1 , function ("length" , c ));
99101 }
100102
@@ -119,6 +121,7 @@ public void testGrokQuery() {
119121 assertEquals (0 , lookupJoinOnFields (c ));
120122 assertEquals (0 , lookupJoinOnExpression (c ));
121123 assertEquals (0 , inlineStats (c ));
124+ assertEquals (0 , subqueryInFromCommand (c ));
122125 assertEquals (1 , function ("concat" , c ));
123126 }
124127
@@ -143,6 +146,7 @@ public void testLimitQuery() {
143146 assertEquals (0 , lookupJoinOnFields (c ));
144147 assertEquals (0 , lookupJoinOnExpression (c ));
145148 assertEquals (0 , inlineStats (c ));
149+ assertEquals (0 , subqueryInFromCommand (c ));
146150 }
147151
148152 public void testSortQuery () {
@@ -166,6 +170,7 @@ public void testSortQuery() {
166170 assertEquals (0 , lookupJoinOnFields (c ));
167171 assertEquals (0 , lookupJoinOnExpression (c ));
168172 assertEquals (0 , inlineStats (c ));
173+ assertEquals (0 , subqueryInFromCommand (c ));
169174 }
170175
171176 public void testStatsQuery () {
@@ -189,6 +194,7 @@ public void testStatsQuery() {
189194 assertEquals (0 , lookupJoinOnFields (c ));
190195 assertEquals (0 , lookupJoinOnExpression (c ));
191196 assertEquals (0 , inlineStats (c ));
197+ assertEquals (0 , subqueryInFromCommand (c ));
192198 assertEquals (1 , function ("max" , c ));
193199 }
194200
@@ -213,6 +219,7 @@ public void testWhereQuery() {
213219 assertEquals (0 , lookupJoinOnFields (c ));
214220 assertEquals (0 , lookupJoinOnExpression (c ));
215221 assertEquals (0 , inlineStats (c ));
222+ assertEquals (0 , subqueryInFromCommand (c ));
216223 }
217224
218225 public void testTwoWhereQuery () {
@@ -236,6 +243,7 @@ public void testTwoWhereQuery() {
236243 assertEquals (0 , lookupJoinOnFields (c ));
237244 assertEquals (0 , lookupJoinOnExpression (c ));
238245 assertEquals (0 , inlineStats (c ));
246+ assertEquals (0 , subqueryInFromCommand (c ));
239247 }
240248
241249 public void testTwoQueriesExecuted () {
@@ -279,6 +287,7 @@ public void testTwoQueriesExecuted() {
279287 assertEquals (0 , lookupJoinOnFields (c ));
280288 assertEquals (0 , lookupJoinOnExpression (c ));
281289 assertEquals (0 , inlineStats (c ));
290+ assertEquals (0 , subqueryInFromCommand (c ));
282291
283292 assertEquals (1 , function ("length" , c ));
284293 assertEquals (1 , function ("concat" , c ));
@@ -366,6 +375,7 @@ public void testEnrich() {
366375 assertEquals (0 , inlineStats (c ));
367376 assertEquals (0 , lookupJoinOnFields (c ));
368377 assertEquals (0 , lookupJoinOnExpression (c ));
378+ assertEquals (0 , subqueryInFromCommand (c ));
369379 assertEquals (1 , function ("to_string" , c ));
370380 }
371381
@@ -399,6 +409,7 @@ public void testMvExpand() {
399409 assertEquals (0 , inlineStats (c ));
400410 assertEquals (0 , lookupJoinOnFields (c ));
401411 assertEquals (0 , lookupJoinOnExpression (c ));
412+ assertEquals (0 , subqueryInFromCommand (c ));
402413 }
403414
404415 public void testShowInfo () {
@@ -422,6 +433,7 @@ public void testShowInfo() {
422433 assertEquals (0 , inlineStats (c ));
423434 assertEquals (0 , lookupJoinOnFields (c ));
424435 assertEquals (0 , lookupJoinOnExpression (c ));
436+ assertEquals (0 , subqueryInFromCommand (c ));
425437 assertEquals (1 , function ("count" , c ));
426438 }
427439
@@ -446,6 +458,7 @@ public void testRow() {
446458 assertEquals (0 , inlineStats (c ));
447459 assertEquals (0 , lookupJoinOnFields (c ));
448460 assertEquals (0 , lookupJoinOnExpression (c ));
461+ assertEquals (0 , subqueryInFromCommand (c ));
449462 }
450463
451464 public void testDropAndRename () {
@@ -469,6 +482,7 @@ public void testDropAndRename() {
469482 assertEquals (0 , inlineStats (c ));
470483 assertEquals (0 , lookupJoinOnFields (c ));
471484 assertEquals (0 , lookupJoinOnExpression (c ));
485+ assertEquals (0 , subqueryInFromCommand (c ));
472486 assertEquals (1 , function ("count" , c ));
473487 }
474488
@@ -498,6 +512,7 @@ public void testKeep() {
498512 assertEquals (0 , inlineStats (c ));
499513 assertEquals (0 , lookupJoinOnFields (c ));
500514 assertEquals (0 , lookupJoinOnExpression (c ));
515+ assertEquals (0 , subqueryInFromCommand (c ));
501516 }
502517
503518 public void testCategorize () {
@@ -525,6 +540,7 @@ public void testCategorize() {
525540 assertEquals (0 , inlineStats (c ));
526541 assertEquals (0 , lookupJoinOnFields (c ));
527542 assertEquals (0 , lookupJoinOnExpression (c ));
543+ assertEquals (0 , subqueryInFromCommand (c ));
528544 assertEquals (1 , function ("count" , c ));
529545 assertEquals (1 , function ("categorize" , c ));
530546 }
@@ -554,6 +570,7 @@ public void testInlineStatsStandalone() {
554570 assertEquals (1L , inlineStats (c ));
555571 assertEquals (0 , lookupJoinOnFields (c ));
556572 assertEquals (0 , lookupJoinOnExpression (c ));
573+ assertEquals (0 , subqueryInFromCommand (c ));
557574 assertEquals (1 , function ("max" , c ));
558575 }
559576
@@ -583,6 +600,7 @@ public void testInlineStatsWithOtherStats() {
583600 assertEquals (1L , inlineStats (c ));
584601 assertEquals (0 , lookupJoinOnFields (c ));
585602 assertEquals (0 , lookupJoinOnExpression (c ));
603+ assertEquals (0 , subqueryInFromCommand (c ));
586604 assertEquals (1 , function ("max" , c ));
587605 }
588606
@@ -611,6 +629,7 @@ public void testBinaryPlanAfterStats() {
611629 assertEquals (0 , inlineStats (c ));
612630 assertEquals (1L , lookupJoinOnFields (c ));
613631 assertEquals (0 , lookupJoinOnExpression (c ));
632+ assertEquals (0 , subqueryInFromCommand (c ));
614633 assertEquals (1 , function ("max" , c ));
615634 }
616635
@@ -644,6 +663,7 @@ public void testBinaryPlanAfterStatsExpressionJoin() {
644663 assertEquals (0 , inlineStats (c ));
645664 assertEquals (0 , lookupJoinOnFields (c ));
646665 assertEquals (1L , lookupJoinOnExpression (c ));
666+ assertEquals (0 , subqueryInFromCommand (c ));
647667 assertEquals (1 , function ("max" , c ));
648668 }
649669
@@ -673,6 +693,7 @@ public void testBinaryPlanAfterInlineStats() {
673693 assertEquals (1L , inlineStats (c ));
674694 assertEquals (1L , lookupJoinOnFields (c ));
675695 assertEquals (0 , lookupJoinOnExpression (c ));
696+ assertEquals (0 , subqueryInFromCommand (c ));
676697 assertEquals (1 , function ("max" , c ));
677698 }
678699
@@ -700,6 +721,7 @@ public void testTimeSeriesAggregate() {
700721 assertEquals (0 , inlineStats (c ));
701722 assertEquals (0 , lookupJoinOnFields (c ));
702723 assertEquals (0 , lookupJoinOnExpression (c ));
724+ assertEquals (0 , subqueryInFromCommand (c ));
703725 assertEquals (1 , function ("sum" , c ));
704726 assertEquals (1 , function ("avg_over_time" , c ));
705727 }
@@ -728,6 +750,40 @@ public void testTimeSeriesNoAggregate() {
728750 assertEquals (0 , inlineStats (c ));
729751 assertEquals (0 , lookupJoinOnFields (c ));
730752 assertEquals (0 , lookupJoinOnExpression (c ));
753+ assertEquals (0 , subqueryInFromCommand (c ));
754+ }
755+
756+ public void testBinaryPlanAfterSubqueryInFromCommand () {
757+ assumeTrue ("requires SUBQUERY IN FROM capability" , EsqlCapabilities .Cap .SUBQUERY_IN_FROM_COMMAND .isEnabled ());
758+
759+ Counters c = esql ("""
760+ from employees
761+ , (from employees | stats max = max(salary) by languages)
762+ , (from employees | stats min = min(salary) by languages)
763+ | where min > 0 and max < 100000
764+ """ );
765+ assertEquals (0 , dissect (c ));
766+ assertEquals (1L , eval (c ));
767+ assertEquals (0 , grok (c ));
768+ assertEquals (0 , limit (c ));
769+ assertEquals (0 , sort (c ));
770+ assertEquals (1L , stats (c ));
771+ assertEquals (1L , where (c ));
772+ assertEquals (0 , enrich (c ));
773+ assertEquals (0 , mvExpand (c ));
774+ assertEquals (0 , show (c ));
775+ assertEquals (0 , row (c ));
776+ assertEquals (1L , from (c ));
777+ assertEquals (0 , ts (c ));
778+ assertEquals (0 , drop (c ));
779+ assertEquals (0 , keep (c ));
780+ assertEquals (0 , rename (c ));
781+ assertEquals (0 , inlineStats (c ));
782+ assertEquals (0 , lookupJoinOnFields (c ));
783+ assertEquals (0 , lookupJoinOnExpression (c ));
784+ assertEquals (1L , subqueryInFromCommand (c ));
785+ assertEquals (1L , function ("max" , c ));
786+ assertEquals (1L , function ("min" , c ));
731787 }
732788
733789 private long dissect (Counters c ) {
@@ -806,6 +862,10 @@ private long lookupJoinOnExpression(Counters c) {
806862 return c .get (FEATURES_PREFIX + LOOKUP_JOIN_ON_EXPRESSION );
807863 }
808864
865+ private long subqueryInFromCommand (Counters c ) {
866+ return c .get (FEATURES_PREFIX + FeatureMetric .SUBQUERY );
867+ }
868+
809869 private long function (String function , Counters c ) {
810870 return c .get (FUNC_PREFIX + function );
811871 }
0 commit comments