summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Roach <greg@subaqua.co.uk>2026-02-05 22:23:46 +0000
committerGreg Roach <greg@subaqua.co.uk>2026-02-05 22:44:07 +0000
commit7ee413e0836cb5ab5484c29aae3cb76d2518b148 (patch)
treed3f4afa0683418a0a1fdd4eb7a906bd7a2871328
parent7d1cb0345f9218d831447e108044317a81d0efbe (diff)
downloadwebtrees-7ee413e0836cb5ab5484c29aae3cb76d2518b148.tar.gz
webtrees-7ee413e0836cb5ab5484c29aae3cb76d2518b148.tar.bz2
webtrees-7ee413e0836cb5ab5484c29aae3cb76d2518b148.zip
Add debug log for SQL statements
-rw-r--r--app/Http/Middleware/UseDatabase.php38
1 files changed, 37 insertions, 1 deletions
diff --git a/app/Http/Middleware/UseDatabase.php b/app/Http/Middleware/UseDatabase.php
index 6fc38ee4ea..c77e471989 100644
--- a/app/Http/Middleware/UseDatabase.php
+++ b/app/Http/Middleware/UseDatabase.php
@@ -53,6 +53,42 @@ class UseDatabase implements MiddlewareInterface
verify_certificate: Validator::attributes($request)->boolean('dbverify', false),
);
- return $handler->handle($request);
+ $debug = Validator::attributes($request)->boolean('debug', false);
+
+ if (!$debug) {
+ return $handler->handle($request);
+ }
+
+ // Log SQL queries in response headers
+ DB::connection()->enableQueryLog();
+ $response = $handler->handle($request);
+ $queries = DB::connection()->getQueryLog();
+ $slowest = max(array_column($queries, 'time'));
+ $total = array_sum(array_column($queries, 'time'));
+ $message = sprintf('Queries: %d, slowest: %.3f ms, total: %.3f ms', count($queries), $slowest, $total);
+ $response = $response->withAddedHeader('x-debug-sql', $message);
+
+ foreach ($queries as $query) {
+ $sql = $query['query'];
+ $time = $query['time'];
+ $bindings = $query['bindings'];
+ foreach ($bindings as $binding) {
+ if (is_string($binding)) {
+ if (mb_strlen($binding) > 10) {
+ $binding = mb_substr($binding, 0, 9) . '...';
+ }
+
+ $binding = "'" . $binding . "'";
+ } else {
+ $binding = (string) $binding;
+ }
+
+ $sql = preg_replace('/\?/', $binding, $sql, 1);
+ }
+ $message = sprintf('%s (%.3f ms)', $sql, $time);
+ $response = $response->withAddedHeader('x-debug-sql', $message);
+ }
+
+ return $response;
}
}