static function fetch_all($class, PDOStatement $query) { // fetch submissions $result = array(); $query->setFetchMode(PDO::FETCH_ASSOC); foreach ($query as $data) { $result[] = new $class($data); } DB::check_errors($query); $query->closeCursor(); return $result; }
public function update_status() { static $query; DB::prepare_query($query, "SELECT status FROM `judge_daemon` WHERE `judgeid`=?"); $query->execute(array($this->judgeid)); $data = $query->fetch(PDO::FETCH_ASSOC); DB::check_errors($query); $query->closeCursor(); if ($data === false) { $this->status = JudgeDaemon::STOPPED; } else { $this->status = $data['status']; } }
static function get_pending_submission($host) { static $query_check, $query_take, $query_fetch; DB::prepare_query($query_check, "SELECT COUNT(*) FROM `submission`" . " WHERE `status` = " . Status::PENDING . " AND `judge_start` < :old_start"); DB::prepare_query($query_take, "UPDATE `submission` SET `judge_start` = :new_start, `judge_host` = :host" . " WHERE `status` = " . Status::PENDING . " AND `judge_start` < :old_start" . " LIMIT 1"); DB::prepare_query($query_fetch, "SELECT * FROM `submission`" . " WHERE `status` = " . Status::PENDING . " AND `judge_start` = :new_start AND `judge_host` = :host"); // are there pending submissions? // this step is to make things faster $params = array(); $params['old_start'] = time() - REJUDGE_TIMEOUT; $query_check->execute($params); $num = $query_check->fetchColumn(); DB::check_errors($query_check); $query_check->closeCursor(); if ($num == 0) { return false; } // if so, take one $params['new_start'] = time(); $params['host'] = $host; $query_take->execute($params); $num = $query_take->rowCount(); DB::check_errors($query_take); $query_take->closeCursor(); if ($num == 0) { echo "Submission stolen from under our nose\n"; return false; } // and return it unset($params['old_start']); $query_fetch->execute($params); DB::check_errors($query_fetch); return Submission::fetch_one($query_fetch); }