Comparison

plugins/mod_storage_sql.lua @ 9479:3a683b2476e2

mod_storage_sql: Workaround MySQL not supporting LIMIT subquery in archive truncate operations, fixes #1200
author Matthew Wild <mwild1@gmail.com>
date Thu, 11 Oct 2018 18:20:09 +0100
parent 9459:6c279302fff4
child 9492:c03c60a2dede
comparison
equal deleted inserted replaced
9478:bd178ed0459b 9479:3a683b2476e2
396 WHERE %s 396 WHERE %s
397 ORDER BY "sort_id" %s 397 ORDER BY "sort_id" %s
398 LIMIT %s OFFSET ?; 398 LIMIT %s OFFSET ?;
399 ]]; 399 ]];
400 unlimited = "-1"; 400 unlimited = "-1";
401 elseif engine.params.driver == "MySQL" then
402 sql_query = [[
403 DELETE result FROM prosodyarchive AS result JOIN (
404 SELECT sort_id FROM prosodyarchive
405 WHERE %s
406 ORDER BY "sort_id" %s
407 LIMIT %s OFFSET ?
408 ) AS limiter on result.sort_id = limiter.sort_id;]];
409 unlimited = "18446744073709551615";
401 else 410 else
402 sql_query = [[ 411 sql_query = [[
403 DELETE FROM "prosodyarchive" 412 DELETE FROM "prosodyarchive"
404 WHERE "sort_id" IN ( 413 WHERE "sort_id" IN (
405 SELECT "sort_id" FROM "prosodyarchive" 414 SELECT "sort_id" FROM "prosodyarchive"
406 WHERE %s 415 WHERE %s
407 ORDER BY "sort_id" %s 416 ORDER BY "sort_id" %s
408 LIMIT %s OFFSET ? 417 LIMIT %s OFFSET ?
409 );]]; 418 );]];
410 if engine.params.driver == "MySQL" then
411 unlimited = "18446744073709551615";
412 end
413 end 419 end
414 sql_query = string.format(sql_query, t_concat(where, " AND "), 420 sql_query = string.format(sql_query, t_concat(where, " AND "),
415 query.reverse and "ASC" or "DESC", unlimited); 421 query.reverse and "ASC" or "DESC", unlimited);
416 end 422 end
417 return engine:delete(sql_query, unpack(args)); 423 return engine:delete(sql_query, unpack(args));