sql datasource: extract common logic for converting time column to epoch time in ms

This commit is contained in:
Marcus Efraimsson
2018-03-20 19:40:10 +01:00
parent e5e9d3c2f3
commit 3cb0bc3da1
3 changed files with 84 additions and 0 deletions

View File

@ -3,6 +3,7 @@ package tsdb
import (
"context"
"sync"
"time"
"github.com/go-xorm/core"
"github.com/go-xorm/xorm"
@ -133,3 +134,30 @@ func (e *DefaultSqlEngine) Query(
return result, nil
}
// ConvertTimeColumnToEpochMs converts column named time to unix timestamp in milliseconds
// to make native datetime types and epoch dates work in annotation and table queries.
func ConvertSqlTimeColumnToEpochMs(values RowValues, timeIndex int) {
if timeIndex >= 0 {
switch value := values[timeIndex].(type) {
case time.Time:
values[timeIndex] = EpochPrecisionToMs(float64(value.Unix()))
case *time.Time:
if value != nil {
values[timeIndex] = EpochPrecisionToMs(float64((*value).Unix()))
}
case int64:
values[timeIndex] = int64(EpochPrecisionToMs(float64(value)))
case *int64:
if value != nil {
values[timeIndex] = int64(EpochPrecisionToMs(float64(*value)))
}
case float64:
values[timeIndex] = EpochPrecisionToMs(value)
case *float64:
if value != nil {
values[timeIndex] = EpochPrecisionToMs(*value)
}
}
}
}