optimized filter params replacement to use strings.Replacer for a single pass

This commit is contained in:
Gani Georgiev
2026-08-28 12:28:16 +03:00
parent bc8ffed4e7
commit 8cb486f24a
+10 -1
View File
@@ -56,9 +56,13 @@ func (f FilterData) BuildExprWithLimit(
raw := string(f)
// replace the placeholder params in the raw string filter
if len(placeholderReplacements) > 0 {
replacements := make([]string, 0, len(placeholderReplacements[0])*2)
for _, p := range placeholderReplacements {
for key, value := range p {
var replacement string
switch v := value.(type) {
case nil:
replacement = "null"
@@ -75,10 +79,15 @@ func (f FilterData) BuildExprWithLimit(
replacement = strconv.Quote(replacement)
}
raw = strings.ReplaceAll(raw, "{:"+key+"}", replacement)
replacements = append(replacements, "{:"+key+"}", replacement)
}
}
replacer := strings.NewReplacer(replacements...)
raw = replacer.Replace(raw)
}
cacheKey := raw + "/" + strconv.Itoa(maxExpressions)
if data, ok := parsedFilterData.GetOk(cacheKey); ok {