From f5ae46f85c4d568f7ebde1bb7e7b93c6fbbdf585 Mon Sep 17 00:00:00 2001 From: Cai Zhang Date: Mon, 23 Sep 2024 20:44:55 +0800 Subject: [PATCH] Check string array max length after type matching Signed-off-by: Cai Zhang --- internal/proxy/validate_util.go | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/internal/proxy/validate_util.go b/internal/proxy/validate_util.go index 323e7d7eeeec4..f7dc5daf2a5a7 100644 --- a/internal/proxy/validate_util.go +++ b/internal/proxy/validate_util.go @@ -814,7 +814,7 @@ func (v *validateUtil) checkArrayElement(array *schemapb.ArrayArray, field *sche } } case schemapb.DataType_VarChar, schemapb.DataType_String: - for _, row := range array.GetData() { + for rowCnt, row := range array.GetData() { if row.GetData() == nil { return merr.WrapErrParameterInvalid("string array", "nil array", "insert data does not match") } @@ -823,6 +823,17 @@ func (v *validateUtil) checkArrayElement(array *schemapb.ArrayArray, field *sche return merr.WrapErrParameterInvalid("string array", fmt.Sprintf("%s array", actualType.String()), "insert data does not match") } + if v.checkMaxLen { + maxLength, err := parameterutil.GetMaxLength(field) + if err != nil { + return err + } + if i, ok := verifyLengthPerRow(row.GetStringData().GetData(), maxLength); !ok { + return merr.WrapErrParameterInvalidMsg("length of %s array field \"%s\" exceeds max length, row number: %d, array index: %d, length: %d, max length: %d", + field.GetDataType().String(), field.GetName(), rowCnt, i, len(row.GetStringData().GetData()[i]), maxLength, + ) + } + } } } return nil @@ -845,19 +856,6 @@ func (v *validateUtil) checkArrayFieldData(field *schemapb.FieldData, fieldSchem return err } } - if typeutil.IsStringType(data.GetElementType()) && v.checkMaxLen { - maxLength, err := parameterutil.GetMaxLength(fieldSchema) - if err != nil { - return err - } - for rowCnt, row := range data.GetData() { - if i, ok := verifyLengthPerRow(row.GetStringData().GetData(), maxLength); !ok { - return merr.WrapErrParameterInvalidMsg("length of %s array field \"%s\" exceeds max length, row number: %d, array index: %d, length: %d, max length: %d", - fieldSchema.GetDataType().String(), fieldSchema.GetName(), rowCnt, i, len(row.GetStringData().GetData()[i]), maxLength, - ) - } - } - } return v.checkArrayElement(data, fieldSchema) }