Exemple #1
0
 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;
 }
Exemple #2
0
 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'];
     }
 }
Exemple #3
0
 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);
 }