fix: Adapt all valid nullable data without valid data flags (#44296)

Related to milvus-io/pymilvus#2971

---------

Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>
This commit is contained in:
congqixia 2025-09-10 18:41:56 +08:00 committed by GitHub
parent 18371773dd
commit fd83cae0fd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 45 additions and 1 deletions

View File

@ -5,6 +5,7 @@ import (
"math" "math"
"reflect" "reflect"
"github.com/samber/lo"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/milvus-io/milvus-proto/go-api/v2/schemapb" "github.com/milvus-io/milvus-proto/go-api/v2/schemapb"
@ -339,6 +340,11 @@ func (v *validateUtil) fillWithValue(data []*schemapb.FieldData, schema *typeuti
return err return err
} }
// adapt all valid data for nullable column
if fieldSchema.GetNullable() && len(field.GetValidData()) == 0 {
field.ValidData = lo.RepeatBy(numRows, func(i int) bool { return true })
}
if fieldSchema.GetDefaultValue() == nil { if fieldSchema.GetDefaultValue() == nil {
err = FillWithNullValue(field, fieldSchema, numRows) err = FillWithNullValue(field, fieldSchema, numRows)
if err != nil { if err != nil {

View File

@ -6277,7 +6277,7 @@ func Test_validateUtil_fillWithValue(t *testing.T) {
assert.True(t, flag) assert.True(t, flag)
}) })
t.Run("check the length of ValidData when not has default value", func(t *testing.T) { t.Run("all_valid_nullable_data_without_validdata", func(t *testing.T) {
stringData := []string{"a"} stringData := []string{"a"}
data := []*schemapb.FieldData{ data := []*schemapb.FieldData{
{ {
@ -6311,6 +6311,44 @@ func Test_validateUtil_fillWithValue(t *testing.T) {
err = v.fillWithValue(data, h, 1) err = v.fillWithValue(data, h, 1)
assert.NoError(t, err)
})
t.Run("nullable_data_size_not_match", func(t *testing.T) {
stringData := []string{"a"}
data := []*schemapb.FieldData{
{
FieldName: "test",
Type: schemapb.DataType_VarChar,
Field: &schemapb.FieldData_Scalars{
Scalars: &schemapb.ScalarField{
Data: &schemapb.ScalarField_StringData{
StringData: &schemapb.StringArray{
Data: stringData,
},
},
},
},
ValidData: []bool{false},
},
}
schema := &schemapb.CollectionSchema{
Fields: []*schemapb.FieldSchema{
{
Name: "test",
DataType: schemapb.DataType_VarChar,
Nullable: true,
},
},
}
h, err := typeutil.CreateSchemaHelper(schema)
assert.NoError(t, err)
v := newValidateUtil()
err = v.fillWithValue(data, h, 1)
assert.Error(t, err) assert.Error(t, err)
assert.ErrorIs(t, err, merr.ErrParameterInvalid) assert.ErrorIs(t, err, merr.ErrParameterInvalid)
}) })