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)
|
raw := string(f)
|
||||||
|
|
||||||
// replace the placeholder params in the raw string filter
|
// 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 _, p := range placeholderReplacements {
|
||||||
for key, value := range p {
|
for key, value := range p {
|
||||||
var replacement string
|
var replacement string
|
||||||
|
|
||||||
switch v := value.(type) {
|
switch v := value.(type) {
|
||||||
case nil:
|
case nil:
|
||||||
replacement = "null"
|
replacement = "null"
|
||||||
@@ -75,10 +79,15 @@ func (f FilterData) BuildExprWithLimit(
|
|||||||
|
|
||||||
replacement = strconv.Quote(replacement)
|
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)
|
cacheKey := raw + "/" + strconv.Itoa(maxExpressions)
|
||||||
|
|
||||||
if data, ok := parsedFilterData.GetOk(cacheKey); ok {
|
if data, ok := parsedFilterData.GetOk(cacheKey); ok {
|
||||||
|
|||||||
Reference in New Issue
Block a user