diff --git a/src/query/src/promql/planner/native.rs b/src/query/src/promql/planner/native.rs
index f8e503bc4c4..5fcbb7ca0d3 100644
--- a/src/query/src/promql/planner/native.rs
+++ b/src/query/src/promql/planner/native.rs
@@ -134,33 +134,12 @@ pub(crate) fn hybrid_binary_admitted(
|| matches!(&modifier.matching, Some(LabelModifier::Exclude(labels)) if labels.labels.is_empty()))
}
};
- let has_aggregate = |expr: &PromExpr| {
- fn visit(expr: &PromExpr) -> bool {
- match expr {
- PromExpr::Aggregate(_) => true,
- PromExpr::Paren(x) => visit(&x.expr),
- PromExpr::Unary(x) => visit(&x.expr),
- PromExpr::Binary(x) => visit(&x.lhs) || visit(&x.rhs),
- PromExpr::Call(x) => x.args.args.iter().any(|arg| visit(arg)),
- _ => false,
- }
- }
- visit(expr)
- };
- let one_selector = |expr: &PromExpr| {
- let mut selectors = Vec::new();
- collect_selectors(expr, &mut selectors) && selectors.len() == 1
- };
supported_op
&& supported_matching
&& lhs.value_type() == ValueType::Vector
&& rhs.value_type() == ValueType::Vector
- && admitted_single_selector(lhs)
- && admitted_single_selector(rhs)
- && !has_aggregate(lhs)
- && !has_aggregate(rhs)
- && one_selector(lhs)
- && one_selector(rhs)
+ && admitted_selector(lhs).is_some()
+ && admitted_selector(rhs).is_some()
}
impl PromPlanner {
@@ -169,35 +148,24 @@ impl PromPlanner {
expr: &PromExpr,
query_engine_state: &QueryEngineState,
) -> Result