diff --git a/client/milvusclient/write_options.go b/client/milvusclient/write_options.go index aa3534ab64..c2c44ae43f 100644 --- a/client/milvusclient/write_options.go +++ b/client/milvusclient/write_options.go @@ -64,6 +64,10 @@ func (opt *columnBasedDataOption) processInsertColumns(colSchema *entity.Schema, // setup dynamic related var isDynamic := colSchema.EnableDynamicField + inputDynamicColumn := lo.FindOrElse(columns, nil, func(col column.Column) bool { + return col.FieldData().GetIsDynamic() + }) + // check columns and field matches var rowSize int mNameField := make(map[string]*entity.Field) @@ -88,6 +92,12 @@ func (opt *columnBasedDataOption) processInsertColumns(colSchema *entity.Schema, if !isDynamic { return nil, 0, fmt.Errorf("field %s does not exist in collection %s", col.Name(), colSchema.CollectionName) } + if inputDynamicColumn != nil { + if col == inputDynamicColumn { + continue + } + return nil, 0, errors.New("cannot pass pre-composed dynamic json column with other dynamic columns") + } // add to dynamic column list for further processing dynamicColumns = append(dynamicColumns, col) continue @@ -139,6 +149,9 @@ func (opt *columnBasedDataOption) processInsertColumns(colSchema *entity.Schema, fixedColumn.CompactNullableValues() fieldsData = append(fieldsData, fixedColumn.FieldData()) } + if inputDynamicColumn != nil { + fieldsData = append(fieldsData, inputDynamicColumn.FieldData()) + } if len(dynamicColumns) > 0 { // use empty column name here col, err := opt.mergeDynamicColumns("", rowSize, dynamicColumns)