fix: [GoSDK] Handle row->column input dynamic column (#44626)

Related to #44161

---------

Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>
This commit is contained in:
congqixia 2025-09-30 16:23:52 +08:00 committed by GitHub
parent d3dfb90587
commit bd6eb43617
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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)