mirror of
https://github.com/renbaoshuo/S2OJ.git
synced 2024-11-24 00:18:40 +00:00
refactor(contest): finalTest database transaction
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
c2fdca91cd
commit
d7741c2910
@ -185,7 +185,7 @@ CREATE TABLE `contests` (
|
||||
`zan` int NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `status` (`status`,`id`) USING BTREE
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@ -337,7 +337,7 @@ CREATE TABLE `contests_submissions` (
|
||||
`cnt` int DEFAULT NULL,
|
||||
`n_failures` int DEFAULT NULL,
|
||||
PRIMARY KEY (`contest_id`,`submitter`,`problem_id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
|
@ -191,20 +191,22 @@ class UOJContest {
|
||||
ignore_user_abort(true);
|
||||
set_time_limit(0);
|
||||
|
||||
DB::update([
|
||||
"update contests",
|
||||
"set", ["status" => 'testing'],
|
||||
"where", ["id" => $this->info['id']]
|
||||
DB::transaction(function () {
|
||||
$status = DB::selectSingle([
|
||||
"select status from contests",
|
||||
"where", ["id" => $this->info['id']],
|
||||
DB::for_update(),
|
||||
]);
|
||||
|
||||
if (DB::affected_rows() !== 1) {
|
||||
if ($status !== 'unfinished') {
|
||||
// 已经有其他人开始评测了,不进行任何操作
|
||||
return;
|
||||
}
|
||||
|
||||
$res = DB::selectAll([
|
||||
"select id, problem_id, content, result, submitter, hide_score_to_others from submissions",
|
||||
"where", ["contest_id" => $this->info['id']]
|
||||
"where", ["contest_id" => $this->info['id']],
|
||||
DB::for_update(),
|
||||
]);
|
||||
foreach ($res as $submission) {
|
||||
$content = json_decode($submission['content'], true);
|
||||
@ -299,6 +301,17 @@ class UOJContest {
|
||||
}
|
||||
$updated[$submitter][$pid] = true;
|
||||
}
|
||||
|
||||
DB::update([
|
||||
"update contests",
|
||||
"set", [
|
||||
"status" => "testing",
|
||||
],
|
||||
"where", [
|
||||
"id" => $this->info['id'],
|
||||
],
|
||||
]);
|
||||
});
|
||||
}
|
||||
|
||||
public function queryJudgeProgress() {
|
||||
|
@ -1,5 +1,7 @@
|
||||
-- InnoDB
|
||||
ALTER TABLE `best_ac_submissions` ENGINE=InnoDB TABLESPACE `innodb_system`;
|
||||
ALTER TABLE `contests` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
ALTER TABLE `contests_submissions` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
ALTER TABLE `judger_info` COLLATE=utf8mb4_unicode_ci;
|
||||
ALTER TABLE `problems_contents` COLLATE=utf8mb4_unicode_ci;
|
||||
ALTER TABLE `submissions` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
Loading…
Reference in New Issue
Block a user