refactor: change toSQL to use ReplaceAllStringFunc, to cause less static allocations
Signed-off-by: Deluan <deluan@navidrome.org>
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -220,19 +221,23 @@ func (r sqlRepository) executeSQL(sq Sqlizer) (int64, error) {
|
|||||||
return res.RowsAffected()
|
return res.RowsAffected()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var placeholderRegex = regexp.MustCompile(`\?`)
|
||||||
|
|
||||||
func (r sqlRepository) toSQL(sq Sqlizer) (string, dbx.Params, error) {
|
func (r sqlRepository) toSQL(sq Sqlizer) (string, dbx.Params, error) {
|
||||||
query, args, err := sq.ToSql()
|
query, args, err := sq.ToSql()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil, err
|
return "", nil, err
|
||||||
}
|
}
|
||||||
// Replace query placeholders with named params
|
// Replace query placeholders with named params
|
||||||
params := dbx.Params{}
|
params := make(dbx.Params, len(args))
|
||||||
for i, arg := range args {
|
counter := 0
|
||||||
p := fmt.Sprintf("p%d", i)
|
result := placeholderRegex.ReplaceAllStringFunc(query, func(_ string) string {
|
||||||
query = strings.Replace(query, "?", "{:"+p+"}", 1)
|
p := fmt.Sprintf("p%d", counter)
|
||||||
params[p] = arg
|
params[p] = args[counter]
|
||||||
}
|
counter++
|
||||||
return query, params, nil
|
return "{:" + p + "}"
|
||||||
|
})
|
||||||
|
return result, params, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r sqlRepository) queryOne(sq Sqlizer, response interface{}) error {
|
func (r sqlRepository) queryOne(sq Sqlizer, response interface{}) error {
|
||||||
|
|||||||
Reference in New Issue
Block a user