diff --git a/x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/expression/Expression.java b/x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/expression/Expression.java index 39a88d4ccf5db..09f3970966612 100644 --- a/x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/expression/Expression.java +++ b/x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/expression/Expression.java @@ -231,7 +231,7 @@ protected static boolean isAttributePushable( return false; } - private static boolean isPushableFieldAttribute(Expression exp, Predicate hasIdenticalDelegate) { + public static boolean isPushableFieldAttribute(Expression exp, Predicate hasIdenticalDelegate) { if (exp instanceof FieldAttribute fa && fa.getExactInfo().hasExact() && isAggregatable(fa)) { return fa.dataType() != DataType.TEXT || hasIdenticalDelegate.test(fa); } diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/optimizer/LocalPhysicalPlanOptimizer.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/optimizer/LocalPhysicalPlanOptimizer.java index cac5bc69bfdff..c6af827f0496d 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/optimizer/LocalPhysicalPlanOptimizer.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/optimizer/LocalPhysicalPlanOptimizer.java @@ -296,7 +296,7 @@ protected PhysicalPlan rule(TopNExec topNExec, LocalPhysicalOptimizerContext ctx private boolean canPushDownOrders(List orders, Predicate hasIdenticalDelegate) { // allow only exact FieldAttributes (no expressions) for sorting - return orders.stream().allMatch(o -> o.child().canPushToSource(hasIdenticalDelegate)); + return orders.stream().allMatch(o -> Expression.isPushableFieldAttribute(o.child(), hasIdenticalDelegate)); } private List buildFieldSorts(List orders) {