123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <?php
- declare(strict_types=1);
- namespace PhpMyAdmin;
- use PhpMyAdmin\Utils\SessionCache;
- use function is_array;
- /**
- * Statement resource usage.
- */
- final class Profiling
- {
- public static function isSupported(DatabaseInterface $dbi): bool
- {
- if (SessionCache::has('profiling_supported')) {
- return SessionCache::get('profiling_supported');
- }
- /**
- * 5.0.37 has profiling but for example, 5.1.20 does not
- * (avoid a trip to the server for MySQL before 5.0.37)
- * and do not set a constant as we might be switching servers
- */
- if ($dbi->fetchValue('SELECT @@have_profiling')) {
- SessionCache::set('profiling_supported', true);
- return true;
- }
- SessionCache::set('profiling_supported', false);
- return false;
- }
- public static function enable(DatabaseInterface $dbi): void
- {
- if (! isset($_SESSION['profiling']) || ! self::isSupported($dbi)) {
- return;
- }
- $dbi->query('SET PROFILING=1;');
- }
- /** @return array<string, string>|null */
- public static function getInformation(DatabaseInterface $dbi): ?array
- {
- if (! isset($_SESSION['profiling']) || ! self::isSupported($dbi)) {
- return null;
- }
- $result = $dbi->fetchResult('SHOW PROFILE;');
- if (! is_array($result)) {
- return null;
- }
- return $result;
- }
- /**
- * Check if profiling was requested and remember it.
- */
- public static function check(DatabaseInterface $dbi, Response $response): void
- {
- if (isset($_REQUEST['profiling']) && self::isSupported($dbi)) {
- $_SESSION['profiling'] = true;
- } elseif (isset($_REQUEST['profiling_form'])) {
- // the checkbox was unchecked
- unset($_SESSION['profiling']);
- }
- if (! isset($_SESSION['profiling'])) {
- return;
- }
- $scripts = $response->getHeader()->getScripts();
- $scripts->addFiles([
- 'chart.js',
- 'vendor/jqplot/jquery.jqplot.js',
- 'vendor/jqplot/plugins/jqplot.pieRenderer.js',
- 'vendor/jqplot/plugins/jqplot.highlighter.js',
- 'vendor/jquery/jquery.tablesorter.js',
- ]);
- }
- }
|