From d8dfed5e33d1174e6bc7e0bd607da07d61ca79b1 Mon Sep 17 00:00:00 2001 From: Fabian Date: Fri, 31 Jul 2026 06:11:35 +0100 Subject: [PATCH] Fix researching cache population (#358) --- GameEngine/Database/DatabaseTroopQueries.php | 4 +- tests/regression/GetResearchingCacheTest.php | 70 ++++++++++++++++++++ 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 tests/regression/GetResearchingCacheTest.php diff --git a/GameEngine/Database/DatabaseTroopQueries.php b/GameEngine/Database/DatabaseTroopQueries.php index 973c9a48..cac482ac 100644 --- a/GameEngine/Database/DatabaseTroopQueries.php +++ b/GameEngine/Database/DatabaseTroopQueries.php @@ -354,8 +354,8 @@ trait DatabaseTroopQueries { $q = "SELECT * FROM " . TB_PREFIX . "research where vref = $vid ORDER BY timestamp ASC"; $result = mysqli_query($this->dblink,$q); - $researchingCache[$vid] = $this->mysqli_fetch_all($result); - return $researchingCache[$vid]; + self::$researchingCache[$vid] = $this->mysqli_fetch_all($result); + return self::$researchingCache[$vid]; } function checkIfResearched($vref, $unit, $use_cache = true) { diff --git a/tests/regression/GetResearchingCacheTest.php b/tests/regression/GetResearchingCacheTest.php new file mode 100644 index 00000000..b74101ae --- /dev/null +++ b/tests/regression/GetResearchingCacheTest.php @@ -0,0 +1,70 @@ +rows; + } +} + +$GLOBALS['queryCount'] = 0; + +$database = new ResearchingCacheHarness(); +$database->rows = [ + ['id' => 1, 'vref' => 42, 'tech' => 't2', 'timestamp' => 1234], +]; + +$first = $database->getResearching(42); +$second = $database->getResearching(42); + +if ($first !== $database->rows || $second !== $database->rows) { + fwrite(STDERR, "getResearching() did not return the fetched research rows.\n"); + exit(1); +} + +if ($GLOBALS['queryCount'] !== 1) { + fwrite( + STDERR, + "Expected one query across two cached reads; got {$GLOBALS['queryCount']}.\n" + ); + exit(1); +} + +fwrite(STDOUT, "getResearching cache regression test passed.\n");