mirror of
https://gitee.com/milvus-io/milvus.git
synced 2026-02-02 01:06:41 +08:00
Refine error message for field not exist (#26331)
Signed-off-by: cai.zhang <cai.zhang@zilliz.com>
This commit is contained in:
parent
8a98a46bbb
commit
2fd52e7fa3
@ -938,11 +938,16 @@ func (v *ParserVisitor) VisitBitOr(ctx *parser.BitOrContext) interface{} {
|
||||
func (v *ParserVisitor) getColumnInfoFromJSONIdentifier(identifier string) (*planpb.ColumnInfo, error) {
|
||||
fieldName := strings.Split(identifier, "[")[0]
|
||||
nestedPath := make([]string, 0)
|
||||
jsonField, err := v.schema.GetFieldFromNameDefaultJSON(fieldName)
|
||||
field, err := v.schema.GetFieldFromNameDefaultJSON(fieldName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if fieldName != jsonField.Name {
|
||||
if field.GetDataType() != schemapb.DataType_JSON &&
|
||||
field.GetDataType() != schemapb.DataType_Array {
|
||||
errMsg := fmt.Sprintf("%s data type not supported accessed with []", field.GetDataType())
|
||||
return nil, fmt.Errorf(errMsg)
|
||||
}
|
||||
if fieldName != field.Name {
|
||||
nestedPath = append(nestedPath, fieldName)
|
||||
}
|
||||
jsonKeyStr := identifier[len(fieldName):]
|
||||
@ -961,13 +966,13 @@ func (v *ParserVisitor) getColumnInfoFromJSONIdentifier(identifier string) (*pla
|
||||
nestedPath = append(nestedPath, path)
|
||||
}
|
||||
|
||||
if typeutil.IsJSONType(jsonField.DataType) && len(nestedPath) == 0 {
|
||||
if typeutil.IsJSONType(field.DataType) && len(nestedPath) == 0 {
|
||||
return nil, fmt.Errorf("can not comparisons jsonField directly")
|
||||
}
|
||||
|
||||
return &planpb.ColumnInfo{
|
||||
FieldId: jsonField.FieldID,
|
||||
DataType: jsonField.DataType,
|
||||
FieldId: field.FieldID,
|
||||
DataType: field.DataType,
|
||||
NestedPath: nestedPath,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -1543,3 +1543,18 @@ func Test_InvalidJSONContains(t *testing.T) {
|
||||
})
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
||||
func Test_InvalidAccess(t *testing.T) {
|
||||
schema := newTestSchema()
|
||||
expr := ""
|
||||
var err error
|
||||
|
||||
expr = `Int64Field["A"] == 123`
|
||||
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
|
||||
Topk: 0,
|
||||
MetricType: "",
|
||||
SearchParams: "",
|
||||
RoundDecimal: 0,
|
||||
})
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
||||
@ -268,24 +268,20 @@ func (helper *SchemaHelper) GetFieldFromName(fieldName string) (*schemapb.FieldS
|
||||
func (helper *SchemaHelper) GetFieldFromNameDefaultJSON(fieldName string) (*schemapb.FieldSchema, error) {
|
||||
offset, ok := helper.nameOffset[fieldName]
|
||||
if !ok {
|
||||
return helper.getDefaultJSONField()
|
||||
return helper.getDefaultJSONField(fieldName)
|
||||
}
|
||||
return helper.schema.Fields[offset], nil
|
||||
}
|
||||
|
||||
func (helper *SchemaHelper) getDefaultJSONField() (*schemapb.FieldSchema, error) {
|
||||
var field *schemapb.FieldSchema
|
||||
func (helper *SchemaHelper) getDefaultJSONField(fieldName string) (*schemapb.FieldSchema, error) {
|
||||
for _, f := range helper.schema.GetFields() {
|
||||
if f.DataType == schemapb.DataType_JSON && f.IsDynamic {
|
||||
return f, nil
|
||||
}
|
||||
}
|
||||
if field == nil {
|
||||
errMsg := "there is no dynamic json field in schema, need to specified field name"
|
||||
log.Warn(errMsg)
|
||||
return nil, fmt.Errorf(errMsg)
|
||||
}
|
||||
return field, nil
|
||||
errMsg := fmt.Sprintf("field %s not exist", fieldName)
|
||||
log.Warn(errMsg)
|
||||
return nil, fmt.Errorf(errMsg)
|
||||
}
|
||||
|
||||
// GetFieldFromID returns the schema of specified field
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user