From 1a67a8db80c1a38294d833454866bebbc64ff34e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ander=20Argui=C3=B1ano?= Date: Wed, 2 Jan 2019 23:00:21 +0100 Subject: [PATCH] Nanosecond timestamp support postgresql --- pkg/tsdb/postgres/macros.go | 5 +++++ pkg/tsdb/postgres/macros_test.go | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/pkg/tsdb/postgres/macros.go b/pkg/tsdb/postgres/macros.go index 26a3d1e53ee..7f50f8269ca 100644 --- a/pkg/tsdb/postgres/macros.go +++ b/pkg/tsdb/postgres/macros.go @@ -122,6 +122,11 @@ func (m *postgresMacroEngine) evaluateMacro(name string, args []string) (string, return "", fmt.Errorf("missing time column argument for macro %v", name) } return fmt.Sprintf("%s >= %d AND %s <= %d", args[0], m.timeRange.GetFromAsSecondsEpoch(), args[0], m.timeRange.GetToAsSecondsEpoch()), nil + case "__unixEpochFilterNano": + if len(args) == 0 { + return "", fmt.Errorf("missing time column argument for macro %v", name) + } + return fmt.Sprintf("%s >= %d AND %s <= %d", args[0], m.timeRange.GetFromAsTimeUTC().UnixNano(), args[0], m.timeRange.GetToAsTimeUTC().UnixNano()), nil case "__unixEpochGroup": if len(args) < 2 { return "", fmt.Errorf("macro %v needs time column and interval and optional fill value", name) diff --git a/pkg/tsdb/postgres/macros_test.go b/pkg/tsdb/postgres/macros_test.go index 6a71caedeb9..0ec49bedb21 100644 --- a/pkg/tsdb/postgres/macros_test.go +++ b/pkg/tsdb/postgres/macros_test.go @@ -115,6 +115,12 @@ func TestMacroEngine(t *testing.T) { So(sql, ShouldEqual, fmt.Sprintf("select time >= %d AND time <= %d", from.Unix(), to.Unix())) }) + Convey("interpolate __unixEpochFilterNano function", func() { + sql, err := engine.Interpolate(query, timeRange, "select $__unixEpochFilterNano(time)") + So(err, ShouldBeNil) + + So(sql, ShouldEqual, fmt.Sprintf("select time >= %d AND time <= %d", from.UnixNano(), to.UnixNano())) + }) Convey("interpolate __unixEpochGroup function", func() { @@ -147,6 +153,12 @@ func TestMacroEngine(t *testing.T) { So(sql, ShouldEqual, fmt.Sprintf("select time >= %d AND time <= %d", from.Unix(), to.Unix())) }) + Convey("interpolate __unixEpochFilterNano function", func() { + sql, err := engine.Interpolate(query, timeRange, "select $__unixEpochFilterNano(time)") + So(err, ShouldBeNil) + + So(sql, ShouldEqual, fmt.Sprintf("select time >= %d AND time <= %d", from.UnixNano(), to.UnixNano())) + }) }) Convey("Given a time range between 1960-02-01 07:00 and 1980-02-03 08:00", func() { @@ -167,6 +179,12 @@ func TestMacroEngine(t *testing.T) { So(sql, ShouldEqual, fmt.Sprintf("select time >= %d AND time <= %d", from.Unix(), to.Unix())) }) + Convey("interpolate __unixEpochFilterNano function", func() { + sql, err := engine.Interpolate(query, timeRange, "select $__unixEpochFilterNano(time)") + So(err, ShouldBeNil) + + So(sql, ShouldEqual, fmt.Sprintf("select time >= %d AND time <= %d", from.UnixNano(), to.UnixNano())) + }) }) }) }