Fix shallow copy of typeutil.AppendFieldData (#15790)

Signed-off-by: dragondriver <jiquan.long@zilliz.com>
This commit is contained in:
Jiquan Long 2022-03-01 15:13:54 +08:00 committed by GitHub
parent 503724be19
commit 001567640e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -275,20 +275,24 @@ func AppendFieldData(dst []*schemapb.FieldData, src []*schemapb.FieldData, idx i
switch srcVector := fieldType.Vectors.Data.(type) { switch srcVector := fieldType.Vectors.Data.(type) {
case *schemapb.VectorField_BinaryVector: case *schemapb.VectorField_BinaryVector:
if dstVector.GetBinaryVector() == nil { if dstVector.GetBinaryVector() == nil {
srcToCopy := srcVector.BinaryVector[idx*(dim/8) : (idx+1)*(dim/8)]
dstVector.Data = &schemapb.VectorField_BinaryVector{ dstVector.Data = &schemapb.VectorField_BinaryVector{
BinaryVector: srcVector.BinaryVector[idx*(dim/8) : (idx+1)*(dim/8)], BinaryVector: make([]byte, len(srcToCopy)),
} }
copy(dstVector.Data.(*schemapb.VectorField_BinaryVector).BinaryVector, srcToCopy)
} else { } else {
dstBinaryVector := dstVector.Data.(*schemapb.VectorField_BinaryVector) dstBinaryVector := dstVector.Data.(*schemapb.VectorField_BinaryVector)
dstBinaryVector.BinaryVector = append(dstBinaryVector.BinaryVector, srcVector.BinaryVector[idx*(dim/8):(idx+1)*(dim/8)]...) dstBinaryVector.BinaryVector = append(dstBinaryVector.BinaryVector, srcVector.BinaryVector[idx*(dim/8):(idx+1)*(dim/8)]...)
} }
case *schemapb.VectorField_FloatVector: case *schemapb.VectorField_FloatVector:
if dstVector.GetFloatVector() == nil { if dstVector.GetFloatVector() == nil {
srcToCopy := srcVector.FloatVector.Data[idx*dim : (idx+1)*dim]
dstVector.Data = &schemapb.VectorField_FloatVector{ dstVector.Data = &schemapb.VectorField_FloatVector{
FloatVector: &schemapb.FloatArray{ FloatVector: &schemapb.FloatArray{
Data: srcVector.FloatVector.Data[idx*dim : (idx+1)*dim], Data: make([]float32, len(srcToCopy)),
}, },
} }
copy(dstVector.Data.(*schemapb.VectorField_FloatVector).FloatVector.Data, srcToCopy)
} else { } else {
dstVector.GetFloatVector().Data = append(dstVector.GetFloatVector().Data, srcVector.FloatVector.Data[idx*dim:(idx+1)*dim]...) dstVector.GetFloatVector().Data = append(dstVector.GetFloatVector().Data, srcVector.FloatVector.Data[idx*dim:(idx+1)*dim]...)
} }