/** * actual logic for retrieving data. */ protected function multiGet(array $ids) { $result = array_fill_keys($ids, NULL); foreach (Util::parseIds($ids) as $shard => $sequences) { $table = $this->table($shard); $db = $this->db($table); if (DB\Transaction::inProgress()) { DB\Transaction::add($db); } $sql = "SELECT `sequence`,`data` FROM `{$table}` WHERE `thread` = %s AND `sequence` IN( %i )"; $rs = $db->execute($sql, $this->thread, $sequences); while ($row = $rs->fetch()) { $id = Util::composeId($shard, $row['sequence']); $result[$id] = $this->unserialize($row['data']); } $rs->free(); } foreach (array_keys($result, NULL, TRUE) as $rm) { unset($result[$rm]); } return $result; }