Fix offset panic (#21292) (#21751)

Signed-off-by: lixinguo <xinguo.li@zilliz.com>
Co-authored-by: lixinguo <xinguo.li@zilliz.com>
pull/21788/head
smellthemoon 2023-01-17 20:57:44 +08:00 committed by GitHub
parent 1a819f2d76
commit 48ea86128d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 17 additions and 6 deletions

View File

@ -394,6 +394,13 @@ func (t *queryTask) PostExecute(ctx context.Context) error {
}
for _, field := range schema.Fields {
if field.FieldID == t.OutputFieldsId[i] {
// deal with the situation that offset equal to or greater than the number of entities
if t.result.FieldsData[i] == nil {
t.result.FieldsData[i], err = typeutil.GenEmptyFieldData(field)
if err != nil {
return err
}
}
t.result.FieldsData[i].FieldName = field.Name
t.result.FieldsData[i].FieldId = field.FieldID
t.result.FieldsData[i].Type = field.DataType

View File

@ -200,6 +200,10 @@ func TestQueryTask_all(t *testing.T) {
assert.NoError(t, task.Execute(ctx))
task.queryParams = &queryParams{
limit: 100,
offset: 100,
}
assert.NoError(t, task.PostExecute(ctx))
for i := 0; i < len(task.result.FieldsData); i++ {

View File

@ -140,7 +140,7 @@ func genEmptyFloatVectorFieldData(field *schemapb.FieldSchema) (*schemapb.FieldD
}, nil
}
func genEmptyFieldData(field *schemapb.FieldSchema) (*schemapb.FieldData, error) {
func GenEmptyFieldData(field *schemapb.FieldSchema) (*schemapb.FieldData, error) {
dataType := field.GetDataType()
switch dataType {
case schemapb.DataType_Bool:

View File

@ -29,7 +29,7 @@ func FillRetrieveResultIfEmpty(result RetrieveResults, outputFieldIds []int64, s
return err
}
emptyFieldData, err := genEmptyFieldData(field)
emptyFieldData, err := GenEmptyFieldData(field)
if err != nil {
return err
}

View File

@ -39,7 +39,7 @@ func TestGenEmptyFieldData(t *testing.T) {
field := &schemapb.FieldSchema{Name: "field_name", FieldID: 100}
for _, dataType := range allTypes {
field.DataType = dataType
fieldData, err := genEmptyFieldData(field)
fieldData, err := GenEmptyFieldData(field)
assert.NoError(t, err)
assert.Equal(t, dataType, fieldData.GetType())
assert.Equal(t, field.GetName(), fieldData.GetFieldName())
@ -49,21 +49,21 @@ func TestGenEmptyFieldData(t *testing.T) {
for _, dataType := range allUnsupportedTypes {
field.DataType = dataType
_, err := genEmptyFieldData(field)
_, err := GenEmptyFieldData(field)
assert.Error(t, err)
}
// dim not found
for _, dataType := range vectorTypes {
field.DataType = dataType
_, err := genEmptyFieldData(field)
_, err := GenEmptyFieldData(field)
assert.Error(t, err)
}
field.TypeParams = []*commonpb.KeyValuePair{{Key: "dim", Value: "128"}}
for _, dataType := range vectorTypes {
field.DataType = dataType
fieldData, err := genEmptyFieldData(field)
fieldData, err := GenEmptyFieldData(field)
assert.NoError(t, err)
assert.Equal(t, dataType, fieldData.GetType())
assert.Equal(t, field.GetName(), fieldData.GetFieldName())