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:
@@ -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:
|
||||
|
||||
@@ -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{
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user