SSE: Localize/Contain Errors within an Expression (#73163)
Changes SSE to not always fail all queries when one fails. Now only the query itself, and nodes that depend on it will error. --------- Co-authored-by: Gilles De Mey <gilles.de.mey@gmail.com>
This commit is contained in:
co-authored by
Gilles De Mey
parent
01755608db
commit
35e488b22b
@@ -23,16 +23,12 @@ func TestAbsFunc(t *testing.T) {
|
||||
name: "abs on number",
|
||||
expr: "abs($A)",
|
||||
vars: Vars{
|
||||
"A": Results{
|
||||
[]Value{
|
||||
makeNumber("", nil, float64Pointer(-7)),
|
||||
},
|
||||
},
|
||||
"A": resultValuesNoErr(makeNumber("", nil, float64Pointer(-7))),
|
||||
},
|
||||
newErrIs: require.NoError,
|
||||
execErrIs: require.NoError,
|
||||
resultIs: require.Equal,
|
||||
results: Results{[]Value{makeNumber("", nil, float64Pointer(7))}},
|
||||
results: resultValuesNoErr(makeNumber("", nil, float64Pointer(7))),
|
||||
},
|
||||
{
|
||||
name: "abs on scalar",
|
||||
@@ -41,34 +37,30 @@ func TestAbsFunc(t *testing.T) {
|
||||
newErrIs: require.NoError,
|
||||
execErrIs: require.NoError,
|
||||
resultIs: require.Equal,
|
||||
results: Results{[]Value{NewScalar("", float64Pointer(1.0))}},
|
||||
results: resultValuesNoErr(NewScalar("", float64Pointer(1.0))),
|
||||
},
|
||||
{
|
||||
name: "abs on series",
|
||||
expr: "abs($A)",
|
||||
vars: Vars{
|
||||
"A": Results{
|
||||
[]Value{
|
||||
makeSeries("", nil, tp{
|
||||
time.Unix(5, 0), float64Pointer(-2),
|
||||
}, tp{
|
||||
time.Unix(10, 0), float64Pointer(-1),
|
||||
}),
|
||||
},
|
||||
},
|
||||
"A": resultValuesNoErr(
|
||||
makeSeries("", nil, tp{
|
||||
time.Unix(5, 0), float64Pointer(-2),
|
||||
}, tp{
|
||||
time.Unix(10, 0), float64Pointer(-1),
|
||||
}),
|
||||
),
|
||||
},
|
||||
newErrIs: require.NoError,
|
||||
execErrIs: require.NoError,
|
||||
resultIs: require.Equal,
|
||||
results: Results{
|
||||
[]Value{
|
||||
makeSeries("", nil, tp{
|
||||
time.Unix(5, 0), float64Pointer(2),
|
||||
}, tp{
|
||||
time.Unix(10, 0), float64Pointer(1),
|
||||
}),
|
||||
},
|
||||
},
|
||||
results: resultValuesNoErr(
|
||||
makeSeries("", nil, tp{
|
||||
time.Unix(5, 0), float64Pointer(2),
|
||||
}, tp{
|
||||
time.Unix(10, 0), float64Pointer(1),
|
||||
}),
|
||||
),
|
||||
},
|
||||
{
|
||||
name: "abs on string - should error",
|
||||
@@ -101,51 +93,39 @@ func TestIsNumberFunc(t *testing.T) {
|
||||
name: "is_number on number type with real number value",
|
||||
expr: "is_number($A)",
|
||||
vars: Vars{
|
||||
"A": Results{
|
||||
[]Value{
|
||||
makeNumber("", nil, float64Pointer(6)),
|
||||
},
|
||||
},
|
||||
"A": resultValuesNoErr(makeNumber("", nil, float64Pointer(6))),
|
||||
},
|
||||
results: Results{[]Value{makeNumber("", nil, float64Pointer(1))}},
|
||||
results: resultValuesNoErr(makeNumber("", nil, float64Pointer(1))),
|
||||
},
|
||||
{
|
||||
name: "is_number on number type with null value",
|
||||
expr: "is_number($A)",
|
||||
vars: Vars{
|
||||
"A": Results{
|
||||
[]Value{
|
||||
makeNumber("", nil, nil),
|
||||
},
|
||||
},
|
||||
"A": resultValuesNoErr(makeNumber("", nil, nil)),
|
||||
},
|
||||
results: Results{[]Value{makeNumber("", nil, float64Pointer(0))}},
|
||||
results: resultValuesNoErr(makeNumber("", nil, float64Pointer(0))),
|
||||
},
|
||||
{
|
||||
name: "is_number on on series",
|
||||
expr: "is_number($A)",
|
||||
vars: Vars{
|
||||
"A": Results{
|
||||
[]Value{
|
||||
makeSeries("", nil,
|
||||
tp{time.Unix(5, 0), float64Pointer(5)},
|
||||
tp{time.Unix(10, 0), nil},
|
||||
tp{time.Unix(15, 0), float64Pointer(math.NaN())},
|
||||
tp{time.Unix(20, 0), float64Pointer(math.Inf(-1))},
|
||||
tp{time.Unix(25, 0), float64Pointer(math.Inf(0))}),
|
||||
},
|
||||
},
|
||||
},
|
||||
results: Results{
|
||||
[]Value{
|
||||
"A": resultValuesNoErr(
|
||||
makeSeries("", nil,
|
||||
tp{time.Unix(5, 0), float64Pointer(1)},
|
||||
tp{time.Unix(10, 0), float64Pointer(0)},
|
||||
tp{time.Unix(15, 0), float64Pointer(0)},
|
||||
tp{time.Unix(20, 0), float64Pointer(0)},
|
||||
tp{time.Unix(25, 0), float64Pointer(0)}),
|
||||
},
|
||||
tp{time.Unix(5, 0), float64Pointer(5)},
|
||||
tp{time.Unix(10, 0), nil},
|
||||
tp{time.Unix(15, 0), float64Pointer(math.NaN())},
|
||||
tp{time.Unix(20, 0), float64Pointer(math.Inf(-1))},
|
||||
tp{time.Unix(25, 0), float64Pointer(math.Inf(0))}),
|
||||
),
|
||||
},
|
||||
results: resultValuesNoErr(
|
||||
makeSeries("", nil,
|
||||
tp{time.Unix(5, 0), float64Pointer(1)},
|
||||
tp{time.Unix(10, 0), float64Pointer(0)},
|
||||
tp{time.Unix(15, 0), float64Pointer(0)},
|
||||
tp{time.Unix(20, 0), float64Pointer(0)},
|
||||
tp{time.Unix(25, 0), float64Pointer(0)}),
|
||||
),
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
|
||||
Reference in New Issue
Block a user