Skip to content

Commit 4fafefd

Browse files
committed
feat(influxdb): proper support for group by tags
1 parent e499e88 commit 4fafefd

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

pkg/tsdb/influxdb/query_builder.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,20 @@ func renderWhereClause(query *Query) string {
8888
}
8989

9090
func renderGroupBy(query *Query) string {
91-
var groupBy []string
92-
for _, group := range query.GroupBy {
93-
groupBy = append(groupBy, group.Render(""))
94-
}
91+
groupBy := ""
92+
for i, group := range query.GroupBy {
93+
if i == 0 {
94+
groupBy += " GROUP BY"
95+
}
96+
97+
if i > 0 && group.Type != "fill" {
98+
groupBy += ", " //fill is special. fill is a creep
99+
} else {
100+
groupBy += " "
101+
}
95102

96-
if len(groupBy) > 0 {
97-
return " GROUP BY " + strings.Join(groupBy, " ")
103+
groupBy += group.Render("")
98104
}
99105

100-
return ""
106+
return groupBy
101107
}

pkg/tsdb/influxdb/query_builder_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ func TestInfluxdbQueryBuilder(t *testing.T) {
1616
qp2, _ := NewQueryPart("mean", []string{})
1717

1818
groupBy1, _ := NewQueryPart("time", []string{"$interval"})
19-
groupBy2, _ := NewQueryPart("fill", []string{"null"})
19+
groupBy2, _ := NewQueryPart("tag", []string{"datacenter"})
20+
groupBy3, _ := NewQueryPart("fill", []string{"null"})
2021

2122
tag1 := &Tag{Key: "hostname", Value: "server1", Operator: "="}
2223
tag2 := &Tag{Key: "hostname", Value: "server2", Operator: "=", Condition: "OR"}
@@ -30,7 +31,7 @@ func TestInfluxdbQueryBuilder(t *testing.T) {
3031
Selects: []*Select{{*qp1, *qp2}},
3132
Measurement: "cpu",
3233
Policy: "policy",
33-
GroupBy: []*QueryPart{groupBy1, groupBy2},
34+
GroupBy: []*QueryPart{groupBy1, groupBy3},
3435
Interval: "10s",
3536
}
3637

@@ -43,14 +44,14 @@ func TestInfluxdbQueryBuilder(t *testing.T) {
4344
query := &Query{
4445
Selects: []*Select{{*qp1, *qp2}},
4546
Measurement: "cpu",
46-
GroupBy: []*QueryPart{groupBy1},
47+
GroupBy: []*QueryPart{groupBy1, groupBy2, groupBy3},
4748
Tags: []*Tag{tag1, tag2},
4849
Interval: "5s",
4950
}
5051

5152
rawQuery, err := builder.Build(query, queryContext)
5253
So(err, ShouldBeNil)
53-
So(rawQuery, ShouldEqual, `SELECT mean("value") FROM "cpu" WHERE "hostname" = 'server1' OR "hostname" = 'server2' AND time > now() - 5m GROUP BY time(10s)`)
54+
So(rawQuery, ShouldEqual, `SELECT mean("value") FROM "cpu" WHERE "hostname" = 'server1' OR "hostname" = 'server2' AND time > now() - 5m GROUP BY time(10s), "datacenter" fill(null)`)
5455
})
5556

5657
Convey("can render time range", func() {

0 commit comments

Comments
 (0)