mirror of
https://gitee.com/milvus-io/milvus.git
synced 2026-01-07 19:31:51 +08:00
fix: nextFieldID does not consider STRUCT (#45437)
issue: https://github.com/milvus-io/milvus/issues/45362 Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
This commit is contained in:
parent
45907747e2
commit
6f4abab6c8
@ -571,5 +571,18 @@ func nextFieldID(coll *model.Collection) int64 {
|
||||
maxFieldID = field.FieldID
|
||||
}
|
||||
}
|
||||
|
||||
// Also check StructArrayFields and their sub-fields to avoid ID conflicts
|
||||
for _, structField := range coll.StructArrayFields {
|
||||
if structField.FieldID > maxFieldID {
|
||||
maxFieldID = structField.FieldID
|
||||
}
|
||||
for _, subField := range structField.Fields {
|
||||
if subField.FieldID > maxFieldID {
|
||||
maxFieldID = subField.FieldID
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return maxFieldID + 1
|
||||
}
|
||||
|
||||
@ -23,6 +23,7 @@ import (
|
||||
|
||||
"github.com/milvus-io/milvus-proto/go-api/v2/commonpb"
|
||||
"github.com/milvus-io/milvus-proto/go-api/v2/milvuspb"
|
||||
"github.com/milvus-io/milvus/internal/metastore/model"
|
||||
"github.com/milvus-io/milvus/pkg/v2/common"
|
||||
"github.com/milvus-io/milvus/pkg/v2/mq/msgstream"
|
||||
"github.com/milvus-io/milvus/pkg/v2/util/typeutil"
|
||||
@ -453,3 +454,67 @@ func TestIsSubsetOfProperties(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func Test_nextFieldID(t *testing.T) {
|
||||
type args struct {
|
||||
coll *model.Collection
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want int64
|
||||
}{
|
||||
{
|
||||
name: "collection with max field ID in struct array sub-field",
|
||||
args: args{
|
||||
coll: &model.Collection{
|
||||
Fields: []*model.Field{
|
||||
{FieldID: common.StartOfUserFieldID},
|
||||
},
|
||||
StructArrayFields: []*model.StructArrayField{
|
||||
{
|
||||
FieldID: common.StartOfUserFieldID + 1,
|
||||
Fields: []*model.Field{
|
||||
{FieldID: common.StartOfUserFieldID + 2},
|
||||
{FieldID: common.StartOfUserFieldID + 10},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
want: common.StartOfUserFieldID + 11,
|
||||
},
|
||||
{
|
||||
name: "collection with multiple struct array fields",
|
||||
args: args{
|
||||
coll: &model.Collection{
|
||||
Fields: []*model.Field{
|
||||
{FieldID: common.StartOfUserFieldID},
|
||||
},
|
||||
StructArrayFields: []*model.StructArrayField{
|
||||
{
|
||||
FieldID: common.StartOfUserFieldID + 1,
|
||||
Fields: []*model.Field{
|
||||
{FieldID: common.StartOfUserFieldID + 2},
|
||||
},
|
||||
},
|
||||
{
|
||||
FieldID: common.StartOfUserFieldID + 5,
|
||||
Fields: []*model.Field{
|
||||
{FieldID: common.StartOfUserFieldID + 6},
|
||||
{FieldID: common.StartOfUserFieldID + 7},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
want: common.StartOfUserFieldID + 8,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := nextFieldID(tt.args.coll)
|
||||
assert.Equal(t, tt.want, got)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user