[Refactor] PromQL: Simplify detectHistogramStatsDecoding

Restarting the depth-first walk on each leg of a binary expression is
convoluted. ISTM the correct logic is to walk the path backwards to the
first relevant function.

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
This commit is contained in:
Bryan Boreham 2025-06-06 14:52:59 +01:00
parent 8d0a747237
commit 91eab63d38

View File

@ -3864,19 +3864,13 @@ func setOffsetForAtModifier(evalTime int64, expr parser.Expr) {
// required for correctness.
func detectHistogramStatsDecoding(expr parser.Expr) {
parser.Inspect(expr, func(node parser.Node, path []parser.Node) error {
if n, ok := node.(*parser.BinaryExpr); ok {
detectHistogramStatsDecoding(n.LHS)
detectHistogramStatsDecoding(n.RHS)
return errors.New("stop")
}
n, ok := (node).(*parser.VectorSelector)
if !ok {
return nil
}
for _, p := range path {
call, ok := p.(*parser.Call)
for i := len(path) - 1; i > 0; i-- { // Walk backwards up the path.
call, ok := path[i].(*parser.Call)
if !ok {
continue
}