aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2018-10-11 18:20:09 +0100
committerMatthew Wild <mwild1@gmail.com>2018-10-11 18:20:09 +0100
commit21e358c847273538b00b4d3c4f237a0459e92051 (patch)
tree4640ccbf8dbf69b93785417d8fb842296ac55216
parentf26390b484717b90bc98b2eb6f52769d57c36f0b (diff)
downloadprosody-21e358c847273538b00b4d3c4f237a0459e92051.tar.gz
prosody-21e358c847273538b00b4d3c4f237a0459e92051.zip
mod_storage_sql: Workaround MySQL not supporting LIMIT subquery in archive truncate operations, fixes #1200
-rw-r--r--plugins/mod_storage_sql.lua12
1 files changed, 9 insertions, 3 deletions
diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua
index 018d0d29..395e937d 100644
--- a/plugins/mod_storage_sql.lua
+++ b/plugins/mod_storage_sql.lua
@@ -398,6 +398,15 @@ function archive_store:delete(username, query)
LIMIT %s OFFSET ?;
]];
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";
else
sql_query = [[
DELETE FROM "prosodyarchive"
@@ -407,9 +416,6 @@ function archive_store:delete(username, query)
ORDER BY "sort_id" %s
LIMIT %s OFFSET ?
);]];
- if engine.params.driver == "MySQL" then
- unlimited = "18446744073709551615";
- end
end
sql_query = string.format(sql_query, t_concat(where, " AND "),
query.reverse and "ASC" or "DESC", unlimited);