From 7d2ba604127c4ef434ee6577af82d003d28c7e89 Mon Sep 17 00:00:00 2001 From: Xiaofan <83447078+xiaofan-luan@users.noreply.github.com> Date: Fri, 21 Oct 2022 19:03:27 +0800 Subject: [PATCH] If autoID enabled, check to make sure user didn't specify autoID field (#19943) Signed-off-by: xiaofan-luan Signed-off-by: xiaofan-luan --- internal/proxy/task_insert.go | 4 ++++ internal/util/typeutil/schema.go | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/internal/proxy/task_insert.go b/internal/proxy/task_insert.go index 5b13287321..6e8c25bc6c 100644 --- a/internal/proxy/task_insert.go +++ b/internal/proxy/task_insert.go @@ -144,6 +144,10 @@ func (it *insertTask) checkPrimaryFieldData() error { return err } } else { + // check primary key data not exist + if typeutil.IsPrimaryFieldDataExist(it.GetFieldsData(), primaryFieldSchema) { + return fmt.Errorf("can not assign primary field data when auto id enabled %v", primaryFieldSchema.Name) + } // if autoID == true, currently only support autoID for int64 PrimaryField primaryFieldData, err = autoGenPrimaryFieldData(primaryFieldSchema, it.RowIDs) if err != nil { diff --git a/internal/util/typeutil/schema.go b/internal/util/typeutil/schema.go index 5449963303..562e887f11 100644 --- a/internal/util/typeutil/schema.go +++ b/internal/util/typeutil/schema.go @@ -556,6 +556,21 @@ func GetPrimaryFieldData(datas []*schemapb.FieldData, primaryFieldSchema *schema return primaryFieldData, nil } +func IsPrimaryFieldDataExist(datas []*schemapb.FieldData, primaryFieldSchema *schemapb.FieldSchema) bool { + primaryFieldID := primaryFieldSchema.FieldID + primaryFieldName := primaryFieldSchema.Name + + var primaryFieldData *schemapb.FieldData + for _, field := range datas { + if field.FieldId == primaryFieldID || field.FieldName == primaryFieldName { + primaryFieldData = field + break + } + } + + return primaryFieldData != nil +} + func AppendIDs(dst *schemapb.IDs, src *schemapb.IDs, idx int) { switch src.IdField.(type) { case *schemapb.IDs_IntId: