Software / code / prosody
Comparison
plugins/mod_storage_sql.lua @ 12830:0c3184378032
Merge 0.12->trunk
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 06 Jan 2023 23:53:50 +0100 |
| parent | 12824:735bf601b78d |
| parent | 12829:fba795dd99c8 |
| child | 12846:1638991caed2 |
comparison
equal
deleted
inserted
replaced
| 12828:f33887f925e1 | 12830:0c3184378032 |
|---|---|
| 467 end | 467 end |
| 468 | 468 |
| 469 local ok, err = archive_where_id_range(query, args, where); | 469 local ok, err = archive_where_id_range(query, args, where); |
| 470 if not ok then return ok, err; end | 470 if not ok then return ok, err; end |
| 471 | 471 |
| 472 if query.limit then | |
| 473 args[#args+1] = query.limit; | |
| 474 end | |
| 475 | |
| 476 sql_query = sql_query:format(t_concat(where, " AND "), query.reverse | 472 sql_query = sql_query:format(t_concat(where, " AND "), query.reverse |
| 477 and "DESC" or "ASC", query.limit and " LIMIT ?" or ""); | 473 and "DESC" or "ASC", query.limit and " LIMIT " .. query.limit or ""); |
| 478 return engine:select(sql_query, unpack(args)); | 474 return engine:select(sql_query, unpack(args)); |
| 479 end); | 475 end); |
| 480 if not ok then return ok, result; end | 476 if not ok then return ok, result; end |
| 481 if not result then return nil, err; end | 477 if not result then return nil, err; end |
| 482 return function() | 478 return function() |
| 590 archive_where(query, args, where); | 586 archive_where(query, args, where); |
| 591 local ok, err = archive_where_id_range(query, args, where); | 587 local ok, err = archive_where_id_range(query, args, where); |
| 592 if not ok then return ok, err; end | 588 if not ok then return ok, err; end |
| 593 if query.truncate == nil then | 589 if query.truncate == nil then |
| 594 sql_query = sql_query:format(t_concat(where, " AND ")); | 590 sql_query = sql_query:format(t_concat(where, " AND ")); |
| 591 elseif engine.params.driver == "MySQL" then | |
| 592 sql_query = [[ | |
| 593 DELETE result FROM prosodyarchive AS result JOIN ( | |
| 594 SELECT sort_id FROM prosodyarchive | |
| 595 WHERE %s | |
| 596 ORDER BY "sort_id" %s | |
| 597 LIMIT 18446744073709551615 OFFSET %s | |
| 598 ) AS limiter on result.sort_id = limiter.sort_id;]]; | |
| 599 | |
| 600 sql_query = string.format(sql_query, t_concat(where, " AND "), | |
| 601 query.reverse and "ASC" or "DESC", query.truncate); | |
| 595 else | 602 else |
| 596 args[#args+1] = query.truncate; | 603 args[#args+1] = query.truncate; |
| 597 local unlimited = "ALL"; | 604 local unlimited = "ALL"; |
| 598 sql_query = [[ | 605 sql_query = [[ |
| 599 DELETE FROM "prosodyarchive" | 606 DELETE FROM "prosodyarchive" |
| 611 ORDER BY "sort_id" %s | 618 ORDER BY "sort_id" %s |
| 612 LIMIT %s OFFSET ?; | 619 LIMIT %s OFFSET ?; |
| 613 ]]; | 620 ]]; |
| 614 end | 621 end |
| 615 unlimited = "-1"; | 622 unlimited = "-1"; |
| 616 elseif engine.params.driver == "MySQL" then | |
| 617 sql_query = [[ | |
| 618 DELETE result FROM prosodyarchive AS result JOIN ( | |
| 619 SELECT sort_id FROM prosodyarchive | |
| 620 WHERE %s | |
| 621 ORDER BY "sort_id" %s | |
| 622 LIMIT %s OFFSET ? | |
| 623 ) AS limiter on result.sort_id = limiter.sort_id;]]; | |
| 624 unlimited = "18446744073709551615"; | |
| 625 end | 623 end |
| 626 sql_query = string.format(sql_query, t_concat(where, " AND "), | 624 sql_query = string.format(sql_query, t_concat(where, " AND "), |
| 627 query.reverse and "ASC" or "DESC", unlimited); | 625 query.reverse and "ASC" or "DESC", unlimited); |
| 628 end | 626 end |
| 629 return engine:delete(sql_query, unpack(args)); | 627 return engine:delete(sql_query, unpack(args)); |