From 7a93cfe890f292debabc937bb8bfae073d5ff2c9 Mon Sep 17 00:00:00 2001 From: "cai.zhang" Date: Sat, 11 Oct 2025 11:27:57 +0800 Subject: [PATCH] fix: Fix bug for nullable geometry (#44732) issue: #44648 Signed-off-by: Cai Zhang --- internal/proxy/task_upsert.go | 14 ++++++++++++++ internal/proxy/validate_util.go | 4 ++++ internal/storage/utils.go | 5 +++-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/internal/proxy/task_upsert.go b/internal/proxy/task_upsert.go index 431810b247..91952a6c23 100644 --- a/internal/proxy/task_upsert.go +++ b/internal/proxy/task_upsert.go @@ -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())) } diff --git a/internal/proxy/validate_util.go b/internal/proxy/validate_util.go index 04fde18861..108be82177 100644 --- a/internal/proxy/validate_util.go +++ b/internal/proxy/validate_util.go @@ -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) diff --git a/internal/storage/utils.go b/internal/storage/utils.go index e32b44ca53..75f9ce79b2 100644 --- a/internal/storage/utils.go +++ b/internal/storage/utils.go @@ -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: