Changeset

13147:e560f7c691ce

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.
author Kim Alvefur <zash@zash.se>
date Sat, 10 Jun 2023 22:20:26 +0200
parents 13146:771eb453e03a
children 13148:c6f46f33cecf
files util/sqlite3.lua
diffstat 1 files changed, 8 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- 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