From 1f3081cc769eaed507783b45ee177c51bfd219c6 Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Tue, 15 Oct 2024 22:07:30 +0100 Subject: [PATCH] Cache isAnyTrackingInProgress Signed-off-by: Kamil Tekiela --- src/Tracking/Tracker.php | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Tracking/Tracker.php b/src/Tracking/Tracker.php index 4c07cd6a7b..a152bc2296 100644 --- a/src/Tracking/Tracker.php +++ b/src/Tracking/Tracker.php @@ -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. @@ -317,6 +324,8 @@ class Tracker 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', @@ -678,6 +687,10 @@ class Tracker 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), @@ -685,6 +698,9 @@ class Tracker $dbi->quoteString($dbname, ConnectionType::ControlUser), ); - return $dbi->queryAsControlUser($sqlQuery)->fetchValue() !== false; + $isTracked = $dbi->queryAsControlUser($sqlQuery)->fetchValue() !== false; + self::$trackedDatabaseCache[$dbname] = $isTracked; + + return $isTracked; } }