mirror of
https://github.com/nextcloud/server.git
synced 2026-04-22 14:50:17 -04:00
Prevent log_query to mess up regular execution flow
When the "log_query" debug config parameter is set, SQL queries are logged. However, if an error occurs when converting the values to string, it will abort the request. This fix catches the error and continues instead. Also added handler for DateTime value which is already known to cause aborts here. Signed-off-by: Vincent Petry <vincent@nextcloud.com>
This commit is contained in:
parent
c1161e27b4
commit
a50bcdabcc
1 changed files with 26 additions and 18 deletions
|
|
@ -193,25 +193,33 @@ class QueryBuilder implements IQueryBuilder {
|
|||
*/
|
||||
public function execute() {
|
||||
if ($this->systemConfig->getValue('log_query', false)) {
|
||||
$params = [];
|
||||
foreach ($this->getParameters() as $placeholder => $value) {
|
||||
if (is_array($value)) {
|
||||
$params[] = $placeholder . ' => (\'' . implode('\', \'', $value) . '\')';
|
||||
} else {
|
||||
$params[] = $placeholder . ' => \'' . $value . '\'';
|
||||
try {
|
||||
$params = [];
|
||||
foreach ($this->getParameters() as $placeholder => $value) {
|
||||
if ($value instanceof \DateTime) {
|
||||
$params[] = $placeholder . ' => DateTime:\'' . $value->format('c') . '\'';
|
||||
} elseif (is_array($value)) {
|
||||
$params[] = $placeholder . ' => (\'' . implode('\', \'', $value) . '\')';
|
||||
} else {
|
||||
$params[] = $placeholder . ' => \'' . $value . '\'';
|
||||
}
|
||||
}
|
||||
}
|
||||
if (empty($params)) {
|
||||
$this->logger->debug('DB QueryBuilder: \'{query}\'', [
|
||||
'query' => $this->getSQL(),
|
||||
'app' => 'core',
|
||||
]);
|
||||
} else {
|
||||
$this->logger->debug('DB QueryBuilder: \'{query}\' with parameters: {params}', [
|
||||
'query' => $this->getSQL(),
|
||||
'params' => implode(', ', $params),
|
||||
'app' => 'core',
|
||||
]);
|
||||
if (empty($params)) {
|
||||
$this->logger->debug('DB QueryBuilder: \'{query}\'', [
|
||||
'query' => $this->getSQL(),
|
||||
'app' => 'core',
|
||||
]);
|
||||
} else {
|
||||
$this->logger->debug('DB QueryBuilder: \'{query}\' with parameters: {params}', [
|
||||
'query' => $this->getSQL(),
|
||||
'params' => implode(', ', $params),
|
||||
'app' => 'core',
|
||||
]);
|
||||
}
|
||||
} catch (\Error $e) {
|
||||
// likely an error during conversion of $value to string
|
||||
$this->logger->debug('DB QueryBuilder: error trying to log SQL query');
|
||||
$this->logger->logException($e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue