diff --git a/pkg/tsdb/influxdb/flux/builder.go b/pkg/tsdb/influxdb/flux/builder.go index 83e15b5e4eb..b67117bae35 100644 --- a/pkg/tsdb/influxdb/flux/builder.go +++ b/pkg/tsdb/influxdb/flux/builder.go @@ -119,40 +119,42 @@ func (fb *frameBuilder) Init(metadata *query.FluxTableMetadata) error { } } + // Timeseries has a "_value" and a time if fb.isTimeSeries { col := getTimeSeriesTimeColumn(columns) - if col == nil { - return fmt.Errorf("no time column in timeSeries") - } - - fb.timeColumn = col.Name() - fb.timeDisplay = "Time" - if "_time" != fb.timeColumn { - fb.timeDisplay = col.Name() - } - } else { - fb.labels = make([]string, 0) - for _, col := range columns { - // Skip the result column - if col.Index() == 0 && col.Name() == "result" && col.DataType() == stringDatatype { - continue + if col != nil { + fb.timeColumn = col.Name() + fb.timeDisplay = "Time" + if "_time" != fb.timeColumn { + fb.timeDisplay = col.Name() } - if col.Index() == 1 && col.Name() == "table" && col.DataType() == longDatatype { - continue - } - - converter, err := getConverter(col.DataType()) - if err != nil { - return err - } - - fb.columns = append(fb.columns, columnInfo{ - name: col.Name(), - converter: converter, - }) + return nil } } + // reset any timeseries properties + fb.value = nil + fb.isTimeSeries = false + fb.labels = make([]string, 0) + for _, col := range columns { + // Skip the result column + if col.Index() == 0 && col.Name() == "result" && col.DataType() == stringDatatype { + continue + } + if col.Index() == 1 && col.Name() == "table" && col.DataType() == longDatatype { + continue + } + + converter, err := getConverter(col.DataType()) + if err != nil { + return err + } + + fb.columns = append(fb.columns, columnInfo{ + name: col.Name(), + converter: converter, + }) + } return nil } diff --git a/pkg/tsdb/influxdb/flux/executor_test.go b/pkg/tsdb/influxdb/flux/executor_test.go index a3a8db2fded..e053c6c3972 100644 --- a/pkg/tsdb/influxdb/flux/executor_test.go +++ b/pkg/tsdb/influxdb/flux/executor_test.go @@ -87,6 +87,13 @@ func TestExecuteSimple(t *testing.T) { }) } +func TestExecuteSingle(t *testing.T) { + t.Run("Single value", func(t *testing.T) { + dr := verifyGoldenResponse(t, "single") + require.Len(t, dr.Frames, 1) + }) +} + func TestExecuteMultiple(t *testing.T) { t.Run("Multiple Test", func(t *testing.T) { dr := verifyGoldenResponse(t, "multiple") diff --git a/pkg/tsdb/influxdb/flux/testdata/single.csv b/pkg/tsdb/influxdb/flux/testdata/single.csv new file mode 100644 index 00000000000..1eda4b5539a --- /dev/null +++ b/pkg/tsdb/influxdb/flux/testdata/single.csv @@ -0,0 +1,5 @@ +#group,false,false,true,false +#datatype,string,long,string,long +#default,_result,,, +,result,table,_field,_value +,,0,summary_serial_number,6 diff --git a/pkg/tsdb/influxdb/flux/testdata/single.golden.txt b/pkg/tsdb/influxdb/flux/testdata/single.golden.txt new file mode 100644 index 00000000000..9434692bd87 --- /dev/null +++ b/pkg/tsdb/influxdb/flux/testdata/single.golden.txt @@ -0,0 +1,16 @@ +🌟 This was machine generated. Do not edit. 🌟 + +Frame[0] {} +Name: +Dimensions: 2 Fields by 1 Rows ++-----------------------+----------------+ +| Name: _field | Name: _value | +| Labels: | Labels: | +| Type: []*string | Type: []*int64 | ++-----------------------+----------------+ +| summary_serial_number | 6 | ++-----------------------+----------------+ + + +====== TEST DATA RESPONSE (arrow base64) ====== +FRAME=QVJST1cxAAD/////kAEAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEDAAoADAAAAAgABAAKAAAACAAAAHQAAAADAAAATAAAACgAAAAEAAAA+P7//wgAAAAMAAAAAAAAAAAAAAAFAAAAcmVmSWQAAAAY////CAAAAAwAAAAAAAAAAAAAAAQAAABuYW1lAAAAADj///8IAAAADAAAAAIAAAB7fQAABAAAAG1ldGEAAAAAAgAAAIQAAAAEAAAAlv///xQAAAA8AAAARAAAAAAAAgFIAAAAAQAAAAQAAACE////CAAAABAAAAAGAAAAX3ZhbHVlAAAEAAAAbmFtZQAAAAAAAAAACAAMAAgABwAIAAAAAAAAAUAAAAAGAAAAX3ZhbHVlAAAAABIAGAAUABMAEgAMAAAACAAEABIAAAAUAAAARAAAAEgAAAAAAAUBRAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAGAAAAX2ZpZWxkAAAEAAAAbmFtZQAAAAAAAAAABAAEAAQAAAAGAAAAX2ZpZWxkAAD/////yAAAABQAAAAAAAAADAAWABQAEwAMAAQADAAAACgAAAAAAAAAFAAAAAAAAAMDAAoAGAAMAAgABAAKAAAAFAAAAGgAAAABAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAABgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABUAAABzdW1tYXJ5X3NlcmlhbF9udW1iZXIAAAAGAAAAAAAAABAAAAAMABQAEgAMAAgABAAMAAAAEAAAACwAAAA8AAAAAAADAAEAAACgAQAAAAAAANAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoADAAAAAgABAAKAAAACAAAAHQAAAADAAAATAAAACgAAAAEAAAA+P7//wgAAAAMAAAAAAAAAAAAAAAFAAAAcmVmSWQAAAAY////CAAAAAwAAAAAAAAAAAAAAAQAAABuYW1lAAAAADj///8IAAAADAAAAAIAAAB7fQAABAAAAG1ldGEAAAAAAgAAAIQAAAAEAAAAlv///xQAAAA8AAAARAAAAAAAAgFIAAAAAQAAAAQAAACE////CAAAABAAAAAGAAAAX3ZhbHVlAAAEAAAAbmFtZQAAAAAAAAAACAAMAAgABwAIAAAAAAAAAUAAAAAGAAAAX3ZhbHVlAAAAABIAGAAUABMAEgAMAAAACAAEABIAAAAUAAAARAAAAEgAAAAAAAUBRAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAGAAAAX2ZpZWxkAAAEAAAAbmFtZQAAAAAAAAAABAAEAAQAAAAGAAAAX2ZpZWxkAADAAQAAQVJST1cx