diff --git a/internal/proxy/util.go b/internal/proxy/util.go index 56be896626..9f07d7b5c9 100644 --- a/internal/proxy/util.go +++ b/internal/proxy/util.go @@ -276,6 +276,10 @@ func validateFieldName(fieldName string) error { return merr.WrapErrFieldNameInvalid(fieldName, msg) } } + if _, ok := common.FieldNameKeywords[fieldName]; ok { + msg := invalidMsg + fmt.Sprintf("%s is keyword in milvus.", fieldName) + return merr.WrapErrFieldNameInvalid(fieldName, msg) + } return nil } diff --git a/internal/proxy/util_test.go b/internal/proxy/util_test.go index bff4af35c4..5ff4ee0e3f 100644 --- a/internal/proxy/util_test.go +++ b/internal/proxy/util_test.go @@ -174,6 +174,10 @@ func TestValidateFieldName(t *testing.T) { "", string(longName), "中文", + "True", + "array_contains", + "json_contains_any", + "ARRAY_LENGTH", } for _, name := range invalidNames { diff --git a/pkg/common/keywords.go b/pkg/common/keywords.go new file mode 100644 index 0000000000..463b005d0c --- /dev/null +++ b/pkg/common/keywords.go @@ -0,0 +1,32 @@ +package common + +var FieldNameKeywords = map[string]struct{}{ + "$meta": {}, + "like": {}, + "exists": {}, + "EXISTS": {}, + "and": {}, + "or": {}, + "not": {}, + "in": {}, + "json_contains": {}, + "JSON_CONTAINS": {}, + "json_contains_all": {}, + "JSON_CONTAINS_ALL": {}, + "json_contains_any": {}, + "JSON_CONTAINS_ANY": {}, + "array_contains": {}, + "ARRAY_CONTAINS": {}, + "array_contains_all": {}, + "ARRAY_CONTAINS_ALL": {}, + "array_contains_any": {}, + "ARRAY_CONTAINS_ANY": {}, + "array_length": {}, + "ARRAY_LENGTH": {}, + "true": {}, + "True": {}, + "TRUE": {}, + "false": {}, + "False": {}, + "FALSE": {}, +}