mirror of
https://github.com/grafana/grafana.git
synced 2024-11-27 11:20:27 -06:00
[mssql] fix $__timeGroup rounding (#12470)
* fix $__timeGroup rounding for mssql * revert enabling of mssql integration tests
This commit is contained in:
parent
c2c22c142b
commit
f017c04a65
@ -108,7 +108,7 @@ func (m *MsSqlMacroEngine) evaluateMacro(name string, args []string) (string, er
|
|||||||
m.Query.Model.Set("fillValue", floatVal)
|
m.Query.Model.Set("fillValue", floatVal)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("CAST(ROUND(DATEDIFF(second, '1970-01-01', %s)/%.1f, 0) as bigint)*%.0f", args[0], interval.Seconds(), interval.Seconds()), nil
|
return fmt.Sprintf("FLOOR(DATEDIFF(second, '1970-01-01', %s)/%.0f)*%.0f", args[0], interval.Seconds(), interval.Seconds()), nil
|
||||||
case "__unixEpochFilter":
|
case "__unixEpochFilter":
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
return "", fmt.Errorf("missing time column argument for macro %v", name)
|
return "", fmt.Errorf("missing time column argument for macro %v", name)
|
||||||
|
@ -56,14 +56,14 @@ func TestMacroEngine(t *testing.T) {
|
|||||||
sql, err := engine.Interpolate(query, timeRange, "GROUP BY $__timeGroup(time_column,'5m')")
|
sql, err := engine.Interpolate(query, timeRange, "GROUP BY $__timeGroup(time_column,'5m')")
|
||||||
So(err, ShouldBeNil)
|
So(err, ShouldBeNil)
|
||||||
|
|
||||||
So(sql, ShouldEqual, "GROUP BY CAST(ROUND(DATEDIFF(second, '1970-01-01', time_column)/300.0, 0) as bigint)*300")
|
So(sql, ShouldEqual, "GROUP BY FLOOR(DATEDIFF(second, '1970-01-01', time_column)/300)*300")
|
||||||
})
|
})
|
||||||
|
|
||||||
Convey("interpolate __timeGroup function with spaces around arguments", func() {
|
Convey("interpolate __timeGroup function with spaces around arguments", func() {
|
||||||
sql, err := engine.Interpolate(query, timeRange, "GROUP BY $__timeGroup(time_column , '5m')")
|
sql, err := engine.Interpolate(query, timeRange, "GROUP BY $__timeGroup(time_column , '5m')")
|
||||||
So(err, ShouldBeNil)
|
So(err, ShouldBeNil)
|
||||||
|
|
||||||
So(sql, ShouldEqual, "GROUP BY CAST(ROUND(DATEDIFF(second, '1970-01-01', time_column)/300.0, 0) as bigint)*300")
|
So(sql, ShouldEqual, "GROUP BY FLOOR(DATEDIFF(second, '1970-01-01', time_column)/300)*300")
|
||||||
})
|
})
|
||||||
|
|
||||||
Convey("interpolate __timeGroup function with fill (value = NULL)", func() {
|
Convey("interpolate __timeGroup function with fill (value = NULL)", func() {
|
||||||
|
@ -210,11 +210,12 @@ func TestMSSQL(t *testing.T) {
|
|||||||
So(queryResult.Error, ShouldBeNil)
|
So(queryResult.Error, ShouldBeNil)
|
||||||
|
|
||||||
points := queryResult.Series[0].Points
|
points := queryResult.Series[0].Points
|
||||||
So(len(points), ShouldEqual, 6)
|
// without fill this should result in 4 buckets
|
||||||
|
So(len(points), ShouldEqual, 4)
|
||||||
|
|
||||||
dt := fromStart
|
dt := fromStart
|
||||||
|
|
||||||
for i := 0; i < 3; i++ {
|
for i := 0; i < 2; i++ {
|
||||||
aValue := points[i][0].Float64
|
aValue := points[i][0].Float64
|
||||||
aTime := time.Unix(int64(points[i][1].Float64)/1000, 0)
|
aTime := time.Unix(int64(points[i][1].Float64)/1000, 0)
|
||||||
So(aValue, ShouldEqual, 15)
|
So(aValue, ShouldEqual, 15)
|
||||||
@ -222,9 +223,9 @@ func TestMSSQL(t *testing.T) {
|
|||||||
dt = dt.Add(5 * time.Minute)
|
dt = dt.Add(5 * time.Minute)
|
||||||
}
|
}
|
||||||
|
|
||||||
// adjust for 5 minute gap
|
// adjust for 10 minute gap between first and second set of points
|
||||||
dt = dt.Add(5 * time.Minute)
|
dt = dt.Add(10 * time.Minute)
|
||||||
for i := 3; i < 6; i++ {
|
for i := 2; i < 4; i++ {
|
||||||
aValue := points[i][0].Float64
|
aValue := points[i][0].Float64
|
||||||
aTime := time.Unix(int64(points[i][1].Float64)/1000, 0)
|
aTime := time.Unix(int64(points[i][1].Float64)/1000, 0)
|
||||||
So(aValue, ShouldEqual, 20)
|
So(aValue, ShouldEqual, 20)
|
||||||
@ -260,7 +261,7 @@ func TestMSSQL(t *testing.T) {
|
|||||||
|
|
||||||
dt := fromStart
|
dt := fromStart
|
||||||
|
|
||||||
for i := 0; i < 3; i++ {
|
for i := 0; i < 2; i++ {
|
||||||
aValue := points[i][0].Float64
|
aValue := points[i][0].Float64
|
||||||
aTime := time.Unix(int64(points[i][1].Float64)/1000, 0)
|
aTime := time.Unix(int64(points[i][1].Float64)/1000, 0)
|
||||||
So(aValue, ShouldEqual, 15)
|
So(aValue, ShouldEqual, 15)
|
||||||
@ -268,17 +269,22 @@ func TestMSSQL(t *testing.T) {
|
|||||||
dt = dt.Add(5 * time.Minute)
|
dt = dt.Add(5 * time.Minute)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check for NULL values inserted by fill
|
||||||
|
So(points[2][0].Valid, ShouldBeFalse)
|
||||||
So(points[3][0].Valid, ShouldBeFalse)
|
So(points[3][0].Valid, ShouldBeFalse)
|
||||||
|
|
||||||
// adjust for 5 minute gap
|
// adjust for 10 minute gap between first and second set of points
|
||||||
dt = dt.Add(5 * time.Minute)
|
dt = dt.Add(10 * time.Minute)
|
||||||
for i := 4; i < 7; i++ {
|
for i := 4; i < 6; i++ {
|
||||||
aValue := points[i][0].Float64
|
aValue := points[i][0].Float64
|
||||||
aTime := time.Unix(int64(points[i][1].Float64)/1000, 0)
|
aTime := time.Unix(int64(points[i][1].Float64)/1000, 0)
|
||||||
So(aValue, ShouldEqual, 20)
|
So(aValue, ShouldEqual, 20)
|
||||||
So(aTime, ShouldEqual, dt)
|
So(aTime, ShouldEqual, dt)
|
||||||
dt = dt.Add(5 * time.Minute)
|
dt = dt.Add(5 * time.Minute)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
So(points[6][0].Valid, ShouldBeFalse)
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
Convey("When doing a metric query using timeGroup with float fill enabled", func() {
|
Convey("When doing a metric query using timeGroup with float fill enabled", func() {
|
||||||
|
Loading…
Reference in New Issue
Block a user