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");