fix: tag filter query builder (#2125)

This commit is contained in:
Vishal Sharma 2023-01-26 01:18:19 +05:30 committed by GitHub
parent 213838a021
commit db2bfbb887
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1473,9 +1473,11 @@ func String(length int) string {
} }
func buildQueryWithTagParams(ctx context.Context, tags []model.TagQuery) (string, []interface{}, *model.ApiError) { func buildQueryWithTagParams(ctx context.Context, tags []model.TagQuery) (string, []interface{}, *model.ApiError) {
subQuery := "" query := ""
var args []interface{} var args []interface{}
for _, item := range tags { for _, item := range tags {
var subQuery string
var argsSubQuery []interface{}
tagMapType := "" tagMapType := ""
switch item.(type) { switch item.(type) {
case model.TagQueryString: case model.TagQueryString:
@ -1490,38 +1492,40 @@ func buildQueryWithTagParams(ctx context.Context, tags []model.TagQuery) (string
} }
switch item.GetOperator() { switch item.GetOperator() {
case model.EqualOperator: case model.EqualOperator:
subQuery, args = addArithmeticOperator(item, tagMapType, "=") subQuery, argsSubQuery = addArithmeticOperator(item, tagMapType, "=")
case model.NotEqualOperator: case model.NotEqualOperator:
subQuery, args = addArithmeticOperator(item, tagMapType, "!=") subQuery, argsSubQuery = addArithmeticOperator(item, tagMapType, "!=")
case model.LessThanOperator: case model.LessThanOperator:
subQuery, args = addArithmeticOperator(item, tagMapType, "<") subQuery, argsSubQuery = addArithmeticOperator(item, tagMapType, "<")
case model.GreaterThanOperator: case model.GreaterThanOperator:
subQuery, args = addArithmeticOperator(item, tagMapType, ">") subQuery, argsSubQuery = addArithmeticOperator(item, tagMapType, ">")
case model.InOperator: case model.InOperator:
subQuery, args = addInOperator(item, tagMapType, false) subQuery, argsSubQuery = addInOperator(item, tagMapType, false)
case model.NotInOperator: case model.NotInOperator:
subQuery, args = addInOperator(item, tagMapType, true) subQuery, argsSubQuery = addInOperator(item, tagMapType, true)
case model.LessThanEqualOperator: case model.LessThanEqualOperator:
subQuery, args = addArithmeticOperator(item, tagMapType, "<=") subQuery, argsSubQuery = addArithmeticOperator(item, tagMapType, "<=")
case model.GreaterThanEqualOperator: case model.GreaterThanEqualOperator:
subQuery, args = addArithmeticOperator(item, tagMapType, ">=") subQuery, argsSubQuery = addArithmeticOperator(item, tagMapType, ">=")
case model.ContainsOperator: case model.ContainsOperator:
subQuery, args = addContainsOperator(item, tagMapType, false) subQuery, argsSubQuery = addContainsOperator(item, tagMapType, false)
case model.NotContainsOperator: case model.NotContainsOperator:
subQuery, args = addContainsOperator(item, tagMapType, true) subQuery, argsSubQuery = addContainsOperator(item, tagMapType, true)
case model.StartsWithOperator: case model.StartsWithOperator:
subQuery, args = addStartsWithOperator(item, tagMapType, false) subQuery, argsSubQuery = addStartsWithOperator(item, tagMapType, false)
case model.NotStartsWithOperator: case model.NotStartsWithOperator:
subQuery, args = addStartsWithOperator(item, tagMapType, true) subQuery, argsSubQuery = addStartsWithOperator(item, tagMapType, true)
case model.ExistsOperator: case model.ExistsOperator:
subQuery, args = addExistsOperator(item, tagMapType, false) subQuery, argsSubQuery = addExistsOperator(item, tagMapType, false)
case model.NotExistsOperator: case model.NotExistsOperator:
subQuery, args = addExistsOperator(item, tagMapType, true) subQuery, argsSubQuery = addExistsOperator(item, tagMapType, true)
default: default:
return "", nil, &model.ApiError{Typ: model.ErrorExec, Err: fmt.Errorf("Tag Operator %s not supported", item.GetOperator())} return "", nil, &model.ApiError{Typ: model.ErrorExec, Err: fmt.Errorf("Tag Operator %s not supported", item.GetOperator())}
} }
query += subQuery
args = append(args, argsSubQuery...)
} }
return subQuery, args, nil return query, args, nil
} }
func addInOperator(item model.TagQuery, tagMapType string, not bool) (string, []interface{}) { func addInOperator(item model.TagQuery, tagMapType string, not bool) (string, []interface{}) {