fix: Fix bug for nullable geometry (#44732)

issue: #44648

Signed-off-by: Cai Zhang <cai.zhang@zilliz.com>
This commit is contained in:
cai.zhang 2025-10-11 11:27:57 +08:00 committed by GitHub
parent 5ece760d73
commit 7a93cfe890
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 21 additions and 2 deletions

View File

@ -568,6 +568,20 @@ func ToCompressedFormatNullable(field *schemapb.FieldData) error {
sd.ArrayData.Data = ret
}
case *schemapb.ScalarField_GeometryData:
validRowNum := getValidNumber(field.GetValidData())
if validRowNum == 0 {
sd.GeometryData.Data = make([][]byte, 0)
} else {
ret := make([][]byte, 0, validRowNum)
for i, valid := range field.GetValidData() {
if valid {
ret = append(ret, sd.GeometryData.Data[i])
}
}
sd.GeometryData.Data = ret
}
default:
return merr.WrapErrParameterInvalidMsg(fmt.Sprintf("undefined data type:%s", field.Type.String()))
}

View File

@ -830,6 +830,10 @@ func (v *validateUtil) checkGeometryFieldData(field *schemapb.FieldData, fieldSc
}
for index, wktdata := range geometryArray {
if field.GetValidData() != nil && !field.GetValidData()[index] {
wkbArray[index] = nil
continue
}
// ignore parsed geom, the check is during insert task pre execute,so geo data became wkb
// fmt.Println(strings.Trim(string(wktdata), "\""))
geomT, err := wkt.Unmarshal(wktdata)

View File

@ -764,8 +764,9 @@ func ColumnBasedInsertMsgToInsertData(msg *msgstream.InsertMsg, collSchema *sche
srcData := srcField.GetScalars().GetGeometryData().GetData()
validData := srcField.GetValidData()
fieldData = &GeometryFieldData{
Data: lo.Map(srcData, func(v []byte, _ int) []byte { return v }),
ValidData: lo.Map(validData, func(v bool, _ int) bool { return v }),
Data: srcData,
ValidData: validData,
Nullable: field.GetNullable(),
}
default: