Commit dc22e246 by Sven Klemm

add compatibility code to handle pre 5.3 usage

parent 42f18928
...@@ -30,6 +30,23 @@ func (m *postgresMacroEngine) Interpolate(query *tsdb.Query, timeRange *tsdb.Tim ...@@ -30,6 +30,23 @@ func (m *postgresMacroEngine) Interpolate(query *tsdb.Query, timeRange *tsdb.Tim
var macroError error var macroError error
sql = replaceAllStringSubmatchFunc(rExp, sql, func(groups []string) string { sql = replaceAllStringSubmatchFunc(rExp, sql, func(groups []string) string {
// detect if $__timeGroup is supposed to add AS time for pre 5.3 compatibility
// if there is a ',' directly after the macro call $__timeGroup is probably used
// in the old way. Inside window function ORDER BY $__timeGroup will be followed
// by ')'
if groups[1] == "__timeGroup" {
if index := strings.Index(sql, groups[0]); index >= 0 {
index += len(groups[0])
if len(sql) > index {
// check for character after macro expression
if sql[index] == ',' {
groups[1] = "__timeGroupAlias"
}
}
}
}
args := strings.Split(groups[2], ",") args := strings.Split(groups[2], ",")
for i, arg := range args { for i, arg := range args {
args[i] = strings.Trim(arg, " ") args[i] = strings.Trim(arg, " ")
......
...@@ -48,14 +48,27 @@ func TestMacroEngine(t *testing.T) { ...@@ -48,14 +48,27 @@ func TestMacroEngine(t *testing.T) {
So(sql, ShouldEqual, fmt.Sprintf("select '%s'", from.Format(time.RFC3339))) So(sql, ShouldEqual, fmt.Sprintf("select '%s'", from.Format(time.RFC3339)))
}) })
Convey("interpolate __timeGroup function pre 5.3 compatibility", func() {
sql, err := engine.Interpolate(query, timeRange, "SELECT $__timeGroup(time_column,'5m'), value")
So(err, ShouldBeNil)
So(sql, ShouldEqual, "SELECT floor(extract(epoch from time_column)/300)*300 AS \"time\", value")
sql, err = engine.Interpolate(query, timeRange, "SELECT $__timeGroup(time_column,'5m') as time, value")
So(err, ShouldBeNil)
So(sql, ShouldEqual, "SELECT floor(extract(epoch from time_column)/300)*300 as time, value")
})
Convey("interpolate __timeGroup function", func() { Convey("interpolate __timeGroup function", func() {
sql, err := engine.Interpolate(query, timeRange, "$__timeGroup(time_column,'5m')") sql, err := engine.Interpolate(query, timeRange, "SELECT $__timeGroup(time_column,'5m')")
So(err, ShouldBeNil) So(err, ShouldBeNil)
sql2, err := engine.Interpolate(query, timeRange, "$__timeGroupAlias(time_column,'5m')") sql2, err := engine.Interpolate(query, timeRange, "SELECT $__timeGroupAlias(time_column,'5m')")
So(err, ShouldBeNil) So(err, ShouldBeNil)
So(sql, ShouldEqual, "floor(extract(epoch from time_column)/300)*300") So(sql, ShouldEqual, "SELECT floor(extract(epoch from time_column)/300)*300")
So(sql2, ShouldEqual, sql+" AS \"time\"") So(sql2, ShouldEqual, sql+" AS \"time\"")
}) })
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment