From a4de06615b560a68d754cab3116733ac4a8296ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Cheng=20=28=E9=84=AD=E9=83=81=E9=82=A6=29?= Date: Tue, 30 Jan 2018 13:21:41 +0800 Subject: [PATCH] Fix Monocle/Alternative out of memory with KEEP_GYM_HISTORY When `KEEP_GYM_HISTORY` is on in Monocle/Alternative config, the `fort_sighting` and `raid` may contain multiple records of the same gym. Only the latest gym / fort status should be retrieved to avoid out of memory problem. --- lib/Monocle_Alternate.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/Monocle_Alternate.php b/lib/Monocle_Alternate.php index 43c185980..a63ae1302 100644 --- a/lib/Monocle_Alternate.php +++ b/lib/Monocle_Alternate.php @@ -216,7 +216,8 @@ public function query_gyms($conds, $params) { global $db; - $query = "SELECT f.external_id AS gym_id, + $query = "SELECT + f.external_id AS gym_id, fs.last_modified AS last_modified, updated AS last_scanned, f.lat AS latitude, @@ -235,8 +236,8 @@ public function query_gyms($conds, $params) r.move_1 AS raid_pokemon_move_1, r.move_2 AS raid_pokemon_move_2 FROM forts f - LEFT JOIN fort_sightings fs ON fs.fort_id = f.id - LEFT JOIN raids r ON r.fort_id = f.id + LEFT JOIN fort_sightings fs ON (fs.fort_id = f.id AND fs.last_modified = (SELECT MAX(last_modified) FROM fort_sightings fs2 WHERE fs2.fort_id=f.id)) + LEFT JOIN raids r ON (r.fort_id = f.id AND r.time_end >= extract(epoch from now())) WHERE :conditions"; $query = str_replace(":conditions", join(" AND ", $conds), $query);