From 91a064bd4985f7bf826faacb9faa680088f9a453 Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Sun, 1 Jan 2023 16:20:58 +0100
Subject: mod_storage_sql: Fix #1639

Patch by Peter Kieser
---
 plugins/mod_storage_sql.lua | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

(limited to 'plugins')

diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua
index 4bed7b5c..b3ed7638 100644
--- a/plugins/mod_storage_sql.lua
+++ b/plugins/mod_storage_sql.lua
@@ -469,12 +469,8 @@ function archive_store:find(username, query)
 		local ok, err = archive_where_id_range(query, args, where);
 		if not ok then return ok, err; end
 
-		if query.limit then
-			args[#args+1] = query.limit;
-		end
-
 		sql_query = sql_query:format(t_concat(where, " AND "), query.reverse
-			and "DESC" or "ASC", query.limit and " LIMIT ?" or "");
+			and "DESC" or "ASC", query.limit and " LIMIT " .. query.limit or "");
 		return engine:select(sql_query, unpack(args));
 	end);
 	if not ok then return ok, result; end
@@ -592,6 +588,17 @@ function archive_store:delete(username, query)
 		if not ok then return ok, err; end
 		if query.truncate == nil then
 			sql_query = sql_query:format(t_concat(where, " AND "));
+		elseif engine.params.driver == "MySQL" then
+			sql_query = [[
+			DELETE result FROM prosodyarchive AS result JOIN (
+				SELECT sort_id FROM prosodyarchive
+				WHERE %s
+				ORDER BY "sort_id" %s
+				LIMIT 18446744073709551615 OFFSET %s
+			) AS limiter on result.sort_id = limiter.sort_id;]];
+
+			sql_query = string.format(sql_query, t_concat(where, " AND "),
+				query.reverse and "ASC" or "DESC", query.truncate);
 		else
 			args[#args+1] = query.truncate;
 			local unlimited = "ALL";
@@ -613,15 +620,6 @@ function archive_store:delete(username, query)
 					]];
 				end
 				unlimited = "-1";
-			elseif engine.params.driver == "MySQL" then
-				sql_query = [[
-				DELETE result FROM prosodyarchive AS result JOIN (
-					SELECT sort_id FROM prosodyarchive
-					WHERE %s
-					ORDER BY "sort_id" %s
-					LIMIT %s OFFSET ?
-				) AS limiter on result.sort_id = limiter.sort_id;]];
-				unlimited = "18446744073709551615";
 			end
 			sql_query = string.format(sql_query, t_concat(where, " AND "),
 				query.reverse and "ASC" or "DESC", unlimited);
-- 
cgit v1.2.3