# HG changeset patch # User Kim Alvefur # Date 1686428426 -7200 # Node ID e560f7c691ce4146e5bb65c9cc5235249e90f15c # Parent 771eb453e03ac0c4387327c84215625d8ece3d75 util.sqlite3: Don't cache prepared statements for one-off queries The :execute method is mainly used for one-off queries such as creating tables and indices. There is no need to cache this prepared statement, as those queries are only done on startup. Further, prepared statements can't be reused without being reset, so this was likely broken anyway. diff -r 771eb453e03a -r e560f7c691ce util/sqlite3.lua --- a/util/sqlite3.lua Sat Jun 10 22:02:15 2023 +0200 +++ b/util/sqlite3.lua Sat Jun 10 22:20:26 2023 +0200 @@ -163,6 +163,7 @@ function engine:ondisconnect() -- luacheck: ignore 212/self -- Override from create_engine() end + function engine:execute(sql, ...) local success, err = self:connect(); if not success then return success, err; end @@ -178,20 +179,17 @@ return true; end - local stmt = prepared[sql]; + local stmt, err = self.conn:prepare(sql); if not stmt then - local err; - stmt, err = self.conn:prepare(sql); - if not stmt then - err = sqlite_errors.new(err); - err.text = self.conn:errmsg(); - return stmt, err; - end - prepared[sql] = stmt; + err = sqlite_errors.new(err); + err.text = self.conn:errmsg(); + return stmt, err; end local ret = stmt:bind_values(...); - if ret ~= lsqlite3.OK then return nil, sqlite_errors.new(ret, { message = self.conn:errmsg() }); end + if ret ~= lsqlite3.OK then + return nil, sqlite_errors.new(ret, { message = self.conn:errmsg() }); + end return stmt; end