mirror of
https://github.com/pocketbase/pocketbase.git
synced 2026-09-08 15:41:18 +02:00
optimized filter params replacement to use strings.Replacer for a single pass
This commit is contained in:
+10
-1
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user