diff --git a/internal/proxy/util.go b/internal/proxy/util.go index 0e064a1d1d..c46eda80c6 100644 --- a/internal/proxy/util.go +++ b/internal/proxy/util.go @@ -275,6 +275,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 ae6212258d..99e22e652b 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": {}, +}