Skip to content

Commit 136f1db

Browse files
Merge pull request #19322 from kamil-tekiela/cache-isAnyTrackingInProgress
Cache isAnyTrackingInProgress
2 parents cc41f5b + 1f3081c commit 136f1db

1 file changed

Lines changed: 17 additions & 1 deletion

File tree

src/Tracking/Tracker.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,13 @@ class Tracker
4848
*/
4949
protected static array $trackingCache = [];
5050

51+
/**
52+
* Cache of checked databases.
53+
*
54+
* @var bool[]
55+
*/
56+
private static array $trackedDatabaseCache = [];
57+
5158
/**
5259
* Actually enables tracking. This needs to be done after all
5360
* underlaying code is initialized.
@@ -317,6 +324,8 @@ private static function changeTracking(
317324
return false;
318325
}
319326

327+
unset(self::$trackedDatabaseCache[$dbName]); // Clear cache due to the change in tracking status
328+
320329
$sqlQuery = sprintf(
321330
'UPDATE %s.%s SET `tracking_active` = %d'
322331
. ' WHERE `db_name` = %s AND `table_name` = %s AND `version` = %s',
@@ -678,13 +687,20 @@ private static function isAnyTrackingInProgress(
678687
TrackingFeature $trackingFeature,
679688
string $dbname,
680689
): bool {
690+
if (isset(self::$trackedDatabaseCache[$dbname])) {
691+
return self::$trackedDatabaseCache[$dbname];
692+
}
693+
681694
$sqlQuery = sprintf(
682695
'/*NOTRACK*/ SELECT 1 FROM %s.%s WHERE tracking_active = 1 AND db_name = %s LIMIT 1',
683696
Util::backquote($trackingFeature->database),
684697
Util::backquote($trackingFeature->tracking),
685698
$dbi->quoteString($dbname, ConnectionType::ControlUser),
686699
);
687700

688-
return $dbi->queryAsControlUser($sqlQuery)->fetchValue() !== false;
701+
$isTracked = $dbi->queryAsControlUser($sqlQuery)->fetchValue() !== false;
702+
self::$trackedDatabaseCache[$dbname] = $isTracked;
703+
704+
return $isTracked;
689705
}
690706
}

0 commit comments

Comments
 (0)