diff --git a/promql/parser/printer.go b/promql/parser/printer.go index e1f8775301..9dae10a70e 100644 --- a/promql/parser/printer.go +++ b/promql/parser/printer.go @@ -157,7 +157,15 @@ func (node *DurationExpr) String() string { expr = fmt.Sprintf("max(%s, %s)", node.LHS, node.RHS) case node.LHS == nil: // This is a unary duration expression. - expr = fmt.Sprintf("%s%s", node.Op, node.RHS) + switch node.Op { + case SUB: + expr = fmt.Sprintf("%s%s", node.Op, node.RHS) + case ADD: + expr = node.RHS.String() + default: + // This should never happen. + panic(fmt.Sprintf("unexpected unary duration expression: %s", node.Op)) + } default: expr = fmt.Sprintf("%s %s %s", node.LHS, node.Op, node.RHS) } diff --git a/promql/parser/printer_test.go b/promql/parser/printer_test.go index 9b4d3d8371..d9a091d78b 100644 --- a/promql/parser/printer_test.go +++ b/promql/parser/printer_test.go @@ -199,6 +199,10 @@ func TestExprString(t *testing.T) { in: "foo offset +(5*2)", out: "foo offset (5 * 2)", }, + { + in: "foo offset +min(10s, 20s)", + out: "foo offset min(10s, 20s)", + }, { in: "foo offset -min(10s, 20s)", },