@@ -3211,28 +3211,28 @@ public void testPushSpatialIntersectsStringToSource() {
3211
3211
/**
3212
3212
* Plan:
3213
3213
* <code>
3214
- * LimitExec[1000[INTEGER]]
3215
- * \_ExchangeExec[[],false]
3216
- * \_FragmentExec[filter=null, estimatedRowSize=0, reducer=[], fragment=[
3214
+ * EvalExec[[scalerank{f}#8 AS rank]]
3215
+ * \_LimitExec[1000[INTEGER]]
3216
+ * \_ExchangeExec[[],false]
3217
+ * \_FragmentExec[filter=null, estimatedRowSize=0, reducer=[], fragment=[
3217
3218
* Limit[1000[INTEGER]]
3218
- * \_Filter[rank{r}#4 lt 4[INTEGER]]
3219
- * \_Eval[[scalerank{f}#8 AS rank]]
3220
- * \_EsRelation[airports][abbrev{f}#6, city{f}#12, city_location{f}#13, count..]]]
3219
+ * \_Filter[scalerank{f}#8 < 4[INTEGER]]
3220
+ * \_EsRelation[airports][abbrev{f}#6, city{f}#12, city_location{f}#13, count..]]]
3221
3221
* </code>
3222
3222
* Optimized:
3223
3223
* <code>
3224
- * LimitExec[1000[INTEGER ]]
3225
- * \_ExchangeExec[[abbrev{f}#6, city{f}#12, city_location{f}#13, country{f}#11, location{f}#10, name{f}#7, scalerank{f}#8,
3226
- * type {f}#9, rank{r}#4],false]
3227
- * \_ProjectExec[[abbrev{f}#6, city{f}#12, city_location{f}#13, country{f}#11, location {f}#10, name{f}#7, scalerank{f}#8,
3228
- * type{f}#9, rank{r}#4] ]
3229
- * \_FieldExtractExec[ abbrev{f}#6, city{f}#12, city_location{f}#13, count..][]
3230
- * \_LimitExec[1000[INTEGER] ]
3231
- * \_EvalExec[[scalerank{f}#8 AS rank] ]
3232
- * \_FieldExtractExec[scalerank {f}#8 ][]
3233
- * \_EsQueryExec[airports], indexMode[standard], query[{"
3234
- * esql_single_value":{"field":"scalerank","next":{"range":{"scalerank":{"lt":4,"boost":1.0}}},"source":"rank < 4@3:9"}
3235
- * } ][_doc{f}#23], limit[], sort[] estimatedRowSize[304]
3224
+ * EvalExec[[scalerank{f}#8 AS rank ]]
3225
+ * \_LimitExec[1000[INTEGER]]
3226
+ * \_ExchangeExec[[abbrev{f}#6, city{f}#12, city_location {f}#13, country{f}#11, location{f}#10, name{f}#7, scalerank{f}#8,
3227
+ * type {f}#9],false
3228
+ * ]
3229
+ * \_ProjectExec[[ abbrev{f}#6, city{f}#12, city_location{f}#13, country{f}#11, location{f}#10, name{f}#7, scalerank{f}#8,
3230
+ * type{f}#9 ]
3231
+ * ]
3232
+ * \_FieldExtractExec[abbrev {f}#6, city{f}#12, city_location{f}#13, count.. ][]
3233
+ * \_EsQueryExec[airports], indexMode[standard], query[{
3234
+ * " esql_single_value":{"field":"scalerank","next":{"range":{"scalerank":{"lt":4,"boost":1.0}}},"source":"rank < 4@3:9"}
3235
+ * ][_doc{f}#23], limit[1000 ], sort[] estimatedRowSize[304]
3236
3236
* </code>
3237
3237
*/
3238
3238
public void testPushWhereEvalToSource () {
@@ -3243,24 +3243,23 @@ public void testPushWhereEvalToSource() {
3243
3243
""" ;
3244
3244
3245
3245
var plan = this .physicalPlan (query , airports );
3246
- var limit = as (plan , LimitExec .class );
3246
+ var eval = as (plan , EvalExec .class );
3247
+ var limit = as (eval .child (), LimitExec .class );
3247
3248
var exchange = as (limit .child (), ExchangeExec .class );
3248
3249
var fragment = as (exchange .child (), FragmentExec .class );
3249
3250
var limit2 = as (fragment .fragment (), Limit .class );
3250
3251
var filter = as (limit2 .child (), Filter .class );
3251
3252
assertThat ("filter contains LessThan" , filter .condition (), instanceOf (LessThan .class ));
3252
3253
3253
3254
var optimized = optimizedPlan (plan );
3254
- var topLimit = as (optimized , LimitExec .class );
3255
+ eval = as (optimized , EvalExec .class );
3256
+ var topLimit = as (eval .child (), LimitExec .class );
3255
3257
exchange = as (topLimit .child (), ExchangeExec .class );
3256
3258
var project = as (exchange .child (), ProjectExec .class );
3257
3259
var fieldExtract = as (project .child (), FieldExtractExec .class );
3258
3260
assertThat (fieldExtract .attributesToExtract ().size (), greaterThan (5 ));
3259
- limit = as (fieldExtract .child (), LimitExec .class );
3260
- var eval = as (limit .child (), EvalExec .class );
3261
- fieldExtract = as (eval .child (), FieldExtractExec .class );
3262
- assertThat (fieldExtract .attributesToExtract ().stream ().map (Attribute ::name ).collect (Collectors .toList ()), contains ("scalerank" ));
3263
3261
var source = source (fieldExtract .child ());
3262
+ assertThat (source .limit (), is (topLimit .limit ()));
3264
3263
var condition = as (source .query (), SingleValueQuery .Builder .class );
3265
3264
assertThat ("Expected predicate to be passed to Lucene query" , condition .source ().text (), equalTo ("rank < 4" ));
3266
3265
assertThat ("Expected field to be passed to Lucene query" , condition .field (), equalTo ("scalerank" ));
@@ -3281,24 +3280,23 @@ public void testPushSpatialIntersectsEvalToSource() {
3281
3280
""" }) {
3282
3281
3283
3282
var plan = this .physicalPlan (query , airports );
3284
- var limit = as (plan , LimitExec .class );
3283
+ var eval = as (plan , EvalExec .class );
3284
+ var limit = as (eval .child (), LimitExec .class );
3285
3285
var exchange = as (limit .child (), ExchangeExec .class );
3286
3286
var fragment = as (exchange .child (), FragmentExec .class );
3287
3287
var limit2 = as (fragment .fragment (), Limit .class );
3288
3288
var filter = as (limit2 .child (), Filter .class );
3289
3289
assertThat ("filter contains ST_INTERSECTS" , filter .condition (), instanceOf (SpatialIntersects .class ));
3290
3290
3291
3291
var optimized = optimizedPlan (plan );
3292
- var topLimit = as (optimized , LimitExec .class );
3292
+ eval = as (optimized , EvalExec .class );
3293
+ var topLimit = as (eval .child (), LimitExec .class );
3293
3294
exchange = as (topLimit .child (), ExchangeExec .class );
3294
3295
var project = as (exchange .child (), ProjectExec .class );
3295
3296
var fieldExtract = as (project .child (), FieldExtractExec .class );
3296
3297
assertThat (fieldExtract .attributesToExtract ().size (), greaterThan (5 ));
3297
- limit = as (fieldExtract .child (), LimitExec .class );
3298
- var eval = as (limit .child (), EvalExec .class );
3299
- fieldExtract = as (eval .child (), FieldExtractExec .class );
3300
- assertThat (fieldExtract .attributesToExtract ().stream ().map (Attribute ::name ).collect (Collectors .toList ()), contains ("location" ));
3301
3298
var source = source (fieldExtract .child ());
3299
+ assertThat (source .limit (), is (topLimit .limit ()));
3302
3300
var condition = as (source .query (), SpatialRelatesQuery .ShapeQueryBuilder .class );
3303
3301
assertThat ("Geometry field name" , condition .fieldName (), equalTo ("location" ));
3304
3302
assertThat ("Spatial relationship" , condition .relation (), equalTo (ShapeRelation .INTERSECTS ));
0 commit comments