From 56340bfdfbb84a7899ee9b2e0c6ec4ebd2bf668b Mon Sep 17 00:00:00 2001 From: bergquist Date: Mon, 7 Nov 2016 14:26:20 +0100 Subject: [PATCH] fix(influxdb): fixes bug when using regexps/numbers in tags closes #6488 --- pkg/tsdb/influxdb/query_builder.go | 14 +++++++++++++- pkg/tsdb/influxdb/query_builder_test.go | 20 ++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/pkg/tsdb/influxdb/query_builder.go b/pkg/tsdb/influxdb/query_builder.go index bf0dc084c49..a4b122cbbd2 100644 --- a/pkg/tsdb/influxdb/query_builder.go +++ b/pkg/tsdb/influxdb/query_builder.go @@ -2,6 +2,7 @@ package influxdb import ( "fmt" + "strconv" "strings" "github.com/grafana/grafana/pkg/tsdb" @@ -42,7 +43,18 @@ func (qb *QueryBuilder) renderTags(query *Query) []string { str += " " } - res = append(res, fmt.Sprintf(`%s"%s" %s '%s'`, str, tag.Key, tag.Operator, tag.Value)) + value := tag.Value + nValue, err := strconv.ParseFloat(tag.Value, 64) + + if tag.Operator == "=~" || tag.Operator == "!~" { + value = fmt.Sprintf("%s", value) + } else if err == nil { + value = fmt.Sprintf("%v", nValue) + } else { + value = fmt.Sprintf("'%s'", value) + } + + res = append(res, fmt.Sprintf(`%s"%s" %s %s`, str, tag.Key, tag.Operator, value)) } return res diff --git a/pkg/tsdb/influxdb/query_builder_test.go b/pkg/tsdb/influxdb/query_builder_test.go index 4552f85b28a..d13fe3a3c6f 100644 --- a/pkg/tsdb/influxdb/query_builder_test.go +++ b/pkg/tsdb/influxdb/query_builder_test.go @@ -3,6 +3,8 @@ package influxdb import ( "testing" + "strings" + "github.com/grafana/grafana/pkg/tsdb" . "github.com/smartystreets/goconvey/convey" ) @@ -83,5 +85,23 @@ func TestInfluxdbQueryBuilder(t *testing.T) { So(err, ShouldBeNil) So(rawQuery, ShouldEqual, `Raw query`) }) + + Convey("can render regex tags", func() { + query := &Query{Tags: []*Tag{&Tag{Operator: "=~", Value: "value", Key: "key"}}} + + So(strings.Join(builder.renderTags(query), ""), ShouldEqual, `"key" =~ value`) + }) + + Convey("can render number tags", func() { + query := &Query{Tags: []*Tag{&Tag{Operator: "=", Value: "1", Key: "key"}}} + + So(strings.Join(builder.renderTags(query), ""), ShouldEqual, `"key" = 1`) + }) + + Convey("can render string tags", func() { + query := &Query{Tags: []*Tag{&Tag{Operator: "=", Value: "value", Key: "key"}}} + + So(strings.Join(builder.renderTags(query), ""), ShouldEqual, `"key" = 'value'`) + }) }) }