plugins/mod_storage_sql.lua
changeset 10021 994cccebb597
parent 10006 b6b5b9d7417d
parent 10016 acf4a7bfb6aa
child 10024 deb68066c7aa
--- a/plugins/mod_storage_sql.lua	Mon May 13 12:00:28 2019 +0200
+++ b/plugins/mod_storage_sql.lua	Sun May 26 19:41:58 2019 +0200
@@ -472,13 +472,23 @@
 		else
 			args[#args+1] = query.truncate;
 			local unlimited = "ALL";
-			if engine.params.driver == "SQLite3" then
-				sql_query = [[
-				DELETE FROM "prosodyarchive"
+			sql_query = [[
+			DELETE FROM "prosodyarchive"
+			WHERE "sort_id" IN (
+				SELECT "sort_id" FROM "prosodyarchive"
 				WHERE %s
 				ORDER BY "sort_id" %s
-				LIMIT %s OFFSET ?;
-				]];
+				LIMIT %s OFFSET ?
+			);]];
+			if engine.params.driver == "SQLite3" then
+				if engine._have_delete_limit then
+					sql_query = [[
+					DELETE FROM "prosodyarchive"
+					WHERE %s
+					ORDER BY "sort_id" %s
+					LIMIT %s OFFSET ?;
+					]];
+				end
 				unlimited = "-1";
 			elseif engine.params.driver == "MySQL" then
 				sql_query = [[
@@ -489,15 +499,6 @@
 					LIMIT %s OFFSET ?
 				) AS limiter on result.sort_id = limiter.sort_id;]];
 				unlimited = "18446744073709551615";
-			else
-				sql_query = [[
-				DELETE FROM "prosodyarchive"
-				WHERE "sort_id" IN (
-					SELECT "sort_id" FROM "prosodyarchive"
-					WHERE %s
-					ORDER BY "sort_id" %s
-					LIMIT %s OFFSET ?
-				);]];
 			end
 			sql_query = string.format(sql_query, t_concat(where, " AND "),
 				query.reverse and "ASC" or "DESC", unlimited);
@@ -718,6 +719,13 @@
 					module:log("error", "Old database format detected. Please run: prosodyctl mod_%s upgrade", module.name);
 					return false, "database upgrade needed";
 				end
+				if engine.params.driver == "SQLite3" then
+					for row in engine:select("PRAGMA compile_options") do
+						if row[1] == "ENABLE_UPDATE_DELETE_LIMIT" then
+							engine._have_delete_limit = true;
+						end
+					end
+				end
 			end
 		end);
 		engines[sql.db2uri(params)] = engine;