Commit f45d9a28 authored by Dries's avatar Dries

- Patch #917134 by hbergin: dblog_cron() deletes too many records when...

- Patch #917134 by hbergin: dblog_cron() deletes too many records when auto_increment() is larger than 1.
parent 33695f71
......@@ -100,12 +100,25 @@ function dblog_init() {
* Remove expired log messages and flood control events.
*/
function dblog_cron() {
// Cleanup the watchdog table
if (variable_get('dblog_row_limit', 1000) > 0) {
$max = Database::getConnection('default', 'default')->query('SELECT MAX(wid) FROM {watchdog}')->fetchField();
Database::getConnection('default', 'default')->delete('watchdog')
->condition('wid', $max - variable_get('dblog_row_limit', 1000), '<=')
->execute();
// Cleanup the watchdog table.
$row_limit = variable_get('dblog_row_limit', 1000);
// For row limit n, get the wid of the nth row in descending wid order.
// Counting the most recent n rows avoids issues with wid number sequences,
// e.g. auto_increment value > 1 or rows deleted directly from the table.
if ($row_limit > 0) {
$min_row = db_select('watchdog', 'w')
->fields('w', array('wid'))
->orderBy('wid', 'DESC')
->range($row_limit - 1, 1)
->execute()->fetchField();
// Delete all table entries older than the nth row, if nth row was found.
if ($min_row) {
db_delete('watchdog')
->condition('wid', $min_row, '<')
->execute();
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment