diff options
author | Roeland Jago Douma <rullzer@users.noreply.github.com> | 2020-12-02 16:15:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-02 16:15:26 +0100 |
commit | d69407963c68ac901ca950d956856aa99d24acf0 (patch) | |
tree | ad6ceb0bb764dd9532447150bb88f991875da675 | |
parent | e25a62c69dc83ba5655577181f4ea41a47c742b5 (diff) | |
parent | a50bcdabccf9334160092dc88bbd4a6d615fab82 (diff) | |
download | nextcloud-server-d69407963c68ac901ca950d956856aa99d24acf0.tar.gz nextcloud-server-d69407963c68ac901ca950d956856aa99d24acf0.zip |
Merge pull request #24500 from nextcloud/bugfix/noid/log_query_no_crash
Prevent log_query to mess up regular execution flow
-rw-r--r-- | lib/private/DB/QueryBuilder/QueryBuilder.php | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/lib/private/DB/QueryBuilder/QueryBuilder.php b/lib/private/DB/QueryBuilder/QueryBuilder.php index c2686f7b4a0..ebd715df1c1 100644 --- a/lib/private/DB/QueryBuilder/QueryBuilder.php +++ b/lib/private/DB/QueryBuilder/QueryBuilder.php @@ -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) . '\')'; + 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 { - $params[] = $placeholder . ' => \'' . $value . '\''; + $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); } } |