InfluxDB: Handle STRING_VIEW datatype (#107812)

This PR fixes an error when reading STRING_VIEW columns by correctly mapping STRING_VIEW in the newField factory and by adding a dedicated test to validate copyData’s handling of both nullable and non‐nullable STRING_VIEW arrays. This enables the Distinct Value Cache feature of InfluxDB v3 Enterprise for use.
This commit is contained in:
Adam Yeats
2025-07-10 21:41:57 +01:00
committed by GitHub
parent a3af6023c3
commit 82e380ed90
2 changed files with 40 additions and 1 deletions
+3 -1
View File
@@ -124,7 +124,7 @@ func newFrame(schema *arrow.Schema) *data.Frame {
func newField(f arrow.Field) *data.Field {
switch f.Type.ID() {
case arrow.STRING:
case arrow.STRING, arrow.STRING_VIEW:
return newDataField[string](f)
case arrow.FLOAT32:
return newDataField[float32](f)
@@ -239,6 +239,8 @@ func copyData(field *data.Field, col arrow.Array) error {
return err
}
}
case arrow.STRING_VIEW:
copyBasic[string](field, array.NewStringViewData(colData))
case arrow.STRING:
copyBasic[string](field, array.NewStringData(colData))
case arrow.UINT8:
+37
View File
@@ -469,6 +469,43 @@ func TestCopyData_Float64(t *testing.T) {
assert.Equal(t, float64(3.3), *field.CopyAt(2).(*float64))
}
func TestCopyData_StringView(t *testing.T) {
// Non-nullable StringView
field := data.NewField("field", nil, []string{})
builder := array.NewStringViewBuilder(memory.DefaultAllocator)
builder.Append("apple")
builder.Append("banana")
builder.Append("cherry")
arr := builder.NewArray()
defer arr.Release()
svArr := array.NewStringViewData(arr.Data())
defer svArr.Release()
err := copyData(field, svArr)
assert.NoError(t, err)
assert.Equal(t, "apple", field.CopyAt(0))
assert.Equal(t, "banana", field.CopyAt(1))
assert.Equal(t, "cherry", field.CopyAt(2))
// Nullable StringView
field = data.NewField("field", nil, []*string{})
builder = array.NewStringViewBuilder(memory.DefaultAllocator)
builder.Append("dog")
builder.AppendNull()
builder.Append("cat")
arr2 := builder.NewArray()
defer arr2.Release()
svArr2 := array.NewStringViewData(arr2.Data())
defer svArr2.Release()
err = copyData(field, svArr2)
assert.NoError(t, err)
assert.Equal(t, "dog", *(field.CopyAt(0).(*string)))
assert.Nil(t, field.CopyAt(1))
assert.Equal(t, "cat", *(field.CopyAt(2).(*string)))
}
func TestCustomMetadata(t *testing.T) {
schema := arrow.NewSchema([]arrow.Field{
{