Skip to content

Commit

Permalink
Merge pull request phpmyadmin#19322 from kamil-tekiela/cache-isAnyTra…
Browse files Browse the repository at this point in the history
…ckingInProgress

Cache isAnyTrackingInProgress
  • Loading branch information
MauricioFauth authored Oct 15, 2024
2 parents cc41f5b + 1f3081c commit 136f1db
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion src/Tracking/Tracker.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,13 @@ class Tracker
*/
protected static array $trackingCache = [];

/**
* Cache of checked databases.
*
* @var bool[]
*/
private static array $trackedDatabaseCache = [];

/**
* Actually enables tracking. This needs to be done after all
* underlaying code is initialized.
Expand Down Expand Up @@ -317,6 +324,8 @@ private static function changeTracking(
return false;
}

unset(self::$trackedDatabaseCache[$dbName]); // Clear cache due to the change in tracking status

$sqlQuery = sprintf(
'UPDATE %s.%s SET `tracking_active` = %d'
. ' WHERE `db_name` = %s AND `table_name` = %s AND `version` = %s',
Expand Down Expand Up @@ -678,13 +687,20 @@ private static function isAnyTrackingInProgress(
TrackingFeature $trackingFeature,
string $dbname,
): bool {
if (isset(self::$trackedDatabaseCache[$dbname])) {
return self::$trackedDatabaseCache[$dbname];
}

$sqlQuery = sprintf(
'/*NOTRACK*/ SELECT 1 FROM %s.%s WHERE tracking_active = 1 AND db_name = %s LIMIT 1',
Util::backquote($trackingFeature->database),
Util::backquote($trackingFeature->tracking),
$dbi->quoteString($dbname, ConnectionType::ControlUser),
);

return $dbi->queryAsControlUser($sqlQuery)->fetchValue() !== false;
$isTracked = $dbi->queryAsControlUser($sqlQuery)->fetchValue() !== false;
self::$trackedDatabaseCache[$dbname] = $isTracked;

return $isTracked;
}
}

0 comments on commit 136f1db

Please sign in to comment.