From 37951c2cff7161919f61f92a14d6bf8359b05c45 Mon Sep 17 00:00:00 2001 From: Patrick Pacher Date: Wed, 3 Aug 2022 16:54:48 +0200 Subject: [PATCH] Fixed unstable SQL statement causing memory leaks due to prepared stmt caching --- netquery/database.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/netquery/database.go b/netquery/database.go index b857f310..f75899a8 100644 --- a/netquery/database.go +++ b/netquery/database.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "io" + "sort" "strings" "sync" "time" @@ -325,7 +326,16 @@ func (db *Database) Save(ctx context.Context, conn Conn) error { values := make(map[string]interface{}, len(connMap)) updateSets := make([]string, 0, len(connMap)) - for key, value := range connMap { + // sort keys so we get a stable SQLite query that can be better cached. + keys := make([]string, 0, len(connMap)) + for key := range connMap { + keys = append(keys, key) + } + sort.Sort(sort.StringSlice(keys)) + + for _, key := range keys { + value := connMap[key] + columns = append(columns, key) placeholders = append(placeholders, ":"+key) values[":"+key] = value