InfluxDB: Flux: handle boolean data-columns (#34479)

* InfluxDB: Flux: handle boolean data-columns

* normalize data-type strings based on documentation

* reference missing data type
This commit is contained in:
Gábor Farkas 2021-05-25 17:22:04 +02:00 committed by GitHub
parent adbe383456
commit ab26c4dfa4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 63 additions and 18 deletions

View File

@ -9,18 +9,18 @@ import (
"github.com/influxdata/influxdb-client-go/v2/api/query"
)
// Copied from: (Apache 2 license)
// https://github.com/influxdata/influxdb-client-go/blob/master/query.go#L30
// based on https://docs.influxdata.com/influxdb/v2.0/reference/syntax/annotated-csv/#data-types
const (
stringDatatype = "string"
doubleDatatype = "double"
boolDatatype = "bool"
longDatatype = "long"
uLongDatatype = "unsignedLong"
durationDatatype = "duration"
base64BinaryDataType = "base64Binary"
timeDatatypeRFC = "dateTime:RFC3339"
timeDatatypeRFCNano = "dateTime:RFC3339Nano"
stringDatatype = "string"
doubleDatatype = "double"
booleanDatatype = "boolean"
longDatatype = "long"
unsignedLongDatatype = "unsignedLong"
durationDatatype = "duration"
base64BinaryDataType = "base64Binary"
datetimeRFC339DataType = "dateTime:RFC3339"
datetimeRFC339DataTypeNano = "dateTime:RFC3339Nano"
// based on the documentation there should also be "dateTime:number" but i have never seen it yet.
)
type columnInfo struct {
@ -92,19 +92,19 @@ func getConverter(t string) (*data.FieldConverter, error) {
switch t {
case stringDatatype:
return &converters.AnyToNullableString, nil
case timeDatatypeRFC:
case datetimeRFC339DataType:
return &timeToOptionalTime, nil
case timeDatatypeRFCNano:
case datetimeRFC339DataTypeNano:
return &timeToOptionalTime, nil
case durationDatatype:
return &converters.Int64ToNullableInt64, nil
case doubleDatatype:
return &converters.Float64ToNullableFloat64, nil
case boolDatatype:
case booleanDatatype:
return &converters.BoolToNullableBool, nil
case longDatatype:
return &converters.Int64ToNullableInt64, nil
case uLongDatatype:
case unsignedLongDatatype:
return &converters.Uint64ToNullableUInt64, nil
case base64BinaryDataType:
return &converters.AnyToNullableString, nil
@ -125,7 +125,7 @@ func getGroupColumnNames(cols []*query.FluxColumn) []string {
}
func isTimestampType(dataType string) bool {
return (dataType == timeDatatypeRFC) || (dataType == timeDatatypeRFCNano)
return (dataType == datetimeRFC339DataType) || (dataType == datetimeRFC339DataTypeNano)
}
func hasUsualStartStop(dataCols []*query.FluxColumn) bool {

View File

@ -204,8 +204,12 @@ func TestBuckets(t *testing.T) {
verifyGoldenResponse(t, "buckets")
}
func TestBooleanGrouping(t *testing.T) {
verifyGoldenResponse(t, "boolean")
func TestBooleanTagGrouping(t *testing.T) {
verifyGoldenResponse(t, "boolean_tag")
}
func TestBooleanData(t *testing.T) {
verifyGoldenResponse(t, "boolean_data")
}
func TestGoldenFiles(t *testing.T) {

View File

@ -0,0 +1,9 @@
#group,false,false,true,true,false,false,true,true,true
#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,boolean,string,string,string
#default,_result,,,,,,,,
,result,table,_start,_stop,_time,_value,_field,_measurement,direction
,,0,2021-05-20T08:36:26.7Z,2021-05-20T09:36:26.7Z,2021-05-20T09:35:39.6Z,true,exitcode,x,left
,,0,2021-05-20T08:36:26.7Z,2021-05-20T09:36:26.7Z,2021-05-20T09:35:43.0Z,false,exitcode,x,left
,,1,2021-05-20T08:36:26.7Z,2021-05-20T09:36:26.7Z,2021-05-20T09:35:47.3Z,false,exitcode,x,right
,,1,2021-05-20T08:36:26.7Z,2021-05-20T09:36:26.7Z,2021-05-20T09:35:49.6Z,true,exitcode,x,right
1 #group false false true true false false true true true
2 #datatype string long dateTime:RFC3339 dateTime:RFC3339 dateTime:RFC3339 boolean string string string
3 #default _result
4 result table _start _stop _time _value _field _measurement direction
5 0 2021-05-20T08:36:26.7Z 2021-05-20T09:36:26.7Z 2021-05-20T09:35:39.6Z true exitcode x left
6 0 2021-05-20T08:36:26.7Z 2021-05-20T09:36:26.7Z 2021-05-20T09:35:43.0Z false exitcode x left
7 1 2021-05-20T08:36:26.7Z 2021-05-20T09:36:26.7Z 2021-05-20T09:35:47.3Z false exitcode x right
8 1 2021-05-20T08:36:26.7Z 2021-05-20T09:36:26.7Z 2021-05-20T09:35:49.6Z true exitcode x right

View File

@ -0,0 +1,32 @@
🌟 This was machine generated. Do not edit. 🌟
Frame[0] {}
Name: x
Dimensions: 2 Fields by 2 Rows
+---------------------------------+------------------------+
| Name: _time | Name: exitcode |
| Labels: | Labels: direction=left |
| Type: []*time.Time | Type: []*bool |
+---------------------------------+------------------------+
| 2021-05-20 09:35:39.6 +0000 UTC | true |
| 2021-05-20 09:35:43 +0000 UTC | false |
+---------------------------------+------------------------+
Frame[1]
Name: x
Dimensions: 2 Fields by 2 Rows
+---------------------------------+-------------------------+
| Name: _time | Name: exitcode |
| Labels: | Labels: direction=right |
| Type: []*time.Time | Type: []*bool |
+---------------------------------+-------------------------+
| 2021-05-20 09:35:47.3 +0000 UTC | false |
| 2021-05-20 09:35:49.6 +0000 UTC | true |
+---------------------------------+-------------------------+
====== TEST DATA RESPONSE (arrow base64) ======
FRAME=QVJST1cxAAD/////yAEAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEDAAoADAAAAAgABAAKAAAACAAAAHQAAAADAAAATAAAACgAAAAEAAAAyP7//wgAAAAMAAAAAAAAAAAAAAAFAAAAcmVmSWQAAADo/v//CAAAAAwAAAABAAAAeAAAAAQAAABuYW1lAAAAAAj///8IAAAADAAAAAIAAAB7fQAABAAAAG1ldGEAAAAAAgAAALQAAAAEAAAAZv///xQAAAB4AAAAfAAAAAAABgF4AAAAAgAAADAAAAAEAAAAWP///wgAAAAUAAAACAAAAGV4aXRjb2RlAAAAAAQAAABuYW1lAAAAAID///8IAAAAIAAAABQAAAB7ImRpcmVjdGlvbiI6ImxlZnQifQAAAAAGAAAAbGFiZWxzAAAAAAAABAAEAAQAAAAIAAAAZXhpdGNvZGUAABIAGAAUABMAEgAMAAAACAAEABIAAAAUAAAARAAAAEwAAAAAAAoBTAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAFAAAAX3RpbWUAAAAEAAAAbmFtZQAAAAAAAAAAAAAGAAgABgAGAAAAAAADAAUAAABfdGltZQAAAP////+4AAAAFAAAAAAAAAAMABYAFAATAAwABAAMAAAAGAAAAAAAAAAUAAAAAAAAAwMACgAYAAwACAAEAAoAAAAUAAAAWAAAAAIAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAgAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAC09z6yvIAWAJafCbO8gBYBAAAAAAAAABAAAAAMABQAEgAMAAgABAAMAAAAEAAAACwAAAA8AAAAAAADAAEAAADYAQAAAAAAAMAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoADAAAAAgABAAKAAAACAAAAHQAAAADAAAATAAAACgAAAAEAAAAyP7//wgAAAAMAAAAAAAAAAAAAAAFAAAAcmVmSWQAAADo/v//CAAAAAwAAAABAAAAeAAAAAQAAABuYW1lAAAAAAj///8IAAAADAAAAAIAAAB7fQAABAAAAG1ldGEAAAAAAgAAALQAAAAEAAAAZv///xQAAAB4AAAAfAAAAAAABgF4AAAAAgAAADAAAAAEAAAAWP///wgAAAAUAAAACAAAAGV4aXRjb2RlAAAAAAQAAABuYW1lAAAAAID///8IAAAAIAAAABQAAAB7ImRpcmVjdGlvbiI6ImxlZnQifQAAAAAGAAAAbGFiZWxzAAAAAAAABAAEAAQAAAAIAAAAZXhpdGNvZGUAABIAGAAUABMAEgAMAAAACAAEABIAAAAUAAAARAAAAEwAAAAAAAoBTAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAFAAAAX3RpbWUAAAAEAAAAbmFtZQAAAAAAAAAAAAAGAAgABgAGAAAAAAADAAUAAABfdGltZQAAAPgBAABBUlJPVzE=
FRAME=QVJST1cxAAD/////qAEAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEDAAoADAAAAAgABAAKAAAACAAAAFAAAAACAAAAKAAAAAQAAADo/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAAAj///8IAAAADAAAAAEAAAB4AAAABAAAAG5hbWUAAAAAAgAAALQAAAAEAAAAZv///xQAAAB4AAAAfAAAAAAABgF4AAAAAgAAADAAAAAEAAAAWP///wgAAAAUAAAACAAAAGV4aXRjb2RlAAAAAAQAAABuYW1lAAAAAID///8IAAAAIAAAABUAAAB7ImRpcmVjdGlvbiI6InJpZ2h0In0AAAAGAAAAbGFiZWxzAAAAAAAABAAEAAQAAAAIAAAAZXhpdGNvZGUAABIAGAAUABMAEgAMAAAACAAEABIAAAAUAAAARAAAAEwAAAAAAAoBTAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAFAAAAX3RpbWUAAAAEAAAAbmFtZQAAAAAAAAAAAAAGAAgABgAGAAAAAAADAAUAAABfdGltZQAAAAAAAAD/////uAAAABQAAAAAAAAADAAWABQAEwAMAAQADAAAABgAAAAAAAAAFAAAAAAAAAMDAAoAGAAMAAgABAAKAAAAFAAAAFgAAAACAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAYewJtLyAFgCYA5O0vIAWAgAAAAAAAAAQAAAADAAUABIADAAIAAQADAAAABAAAAAsAAAAOAAAAAAAAwABAAAAuAEAAAAAAADAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAoADAAAAAgABAAKAAAACAAAAFAAAAACAAAAKAAAAAQAAADo/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAAAj///8IAAAADAAAAAEAAAB4AAAABAAAAG5hbWUAAAAAAgAAALQAAAAEAAAAZv///xQAAAB4AAAAfAAAAAAABgF4AAAAAgAAADAAAAAEAAAAWP///wgAAAAUAAAACAAAAGV4aXRjb2RlAAAAAAQAAABuYW1lAAAAAID///8IAAAAIAAAABUAAAB7ImRpcmVjdGlvbiI6InJpZ2h0In0AAAAGAAAAbGFiZWxzAAAAAAAABAAEAAQAAAAIAAAAZXhpdGNvZGUAABIAGAAUABMAEgAMAAAACAAEABIAAAAUAAAARAAAAEwAAAAAAAoBTAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAFAAAAX3RpbWUAAAAEAAAAbmFtZQAAAAAAAAAAAAAGAAgABgAGAAAAAAADAAUAAABfdGltZQAAANABAABBUlJPVzE=