Files
nextcloud-server-mirror/lib/private/DB/Middleware/ConnectionActivityStatement.php
David Dreschner 6656feaf60 fix(Database): Use real idle-timer to prevent lastInsertId being reset on MariaDB/MySQL
The previous implementation of the idle timer runs on a strict 30 second interval and sends a dummy `SELECT` statement to keep the connection open.

This generates issues with the `lastInsertId` on long-running tasks (like our CI pipeline), as the MariaDB documentation clearly states:

> If the last query wasn't an INSERT or UPDATE statement or if the modified table does not have a column with the AUTO_INCREMENT attribute and LAST_INSERT_ID was not used, this function will return zero.

Source: https://mariadb.com/docs/connectors/mariadb-connector-c/api-functions/mysql_insert_id

To mitigate that, this commit now uses a real idle-timer per connection instead.

Assisted-by: ClaudeCode:claude-fable-5
Signed-off-by: David Dreschner <david.dreschner@nextcloud.com>
2026-08-06 12:06:50 +02:00

31 lines
705 B
PHP

<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OC\DB\Middleware;
use Doctrine\DBAL\Driver\Middleware\AbstractStatementMiddleware;
use Doctrine\DBAL\Driver\Result;
use Doctrine\DBAL\Driver\Statement;
final class ConnectionActivityStatement extends AbstractStatementMiddleware {
public function __construct(
Statement $statement,
private ConnectionActivityNotifier $notifier,
) {
parent::__construct($statement);
}
#[\Override]
public function execute($params = null): Result {
$result = parent::execute($params);
$this->notifier->notify();
return $result;
}
}