aboutsummaryrefslogtreecommitdiff
path: root/src/frun.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/frun.php')
-rw-r--r--src/frun.php40
1 files changed, 27 insertions, 13 deletions
diff --git a/src/frun.php b/src/frun.php
index 20fb616..d920e74 100644
--- a/src/frun.php
+++ b/src/frun.php
@@ -289,18 +289,21 @@ function DBRunGiveUp($number,$site,$contest,$usernumber,$usersite) {
"newstatus=$newstatus", 3);
return true;
}
-function DBRunDelete($number,$site,$contest,$user,$usersite) {
- $c = DBConnect();
- DBExec($c, "begin work", "DBRunDelete(transaction)");
+function DBRunDelete($number,$site,$contest,$user,$usersite,$cc=null) {
+ if($cc == null) {
+ $c = DBConnect();
+ DBExec($c, "begin work", "DBRunDelete(transaction)");
+ } else $c = $cc;
$sql = "select * from runtable as r where r.contestnumber=$contest and " .
"r.runsitenumber=$site and r.runnumber=$number";
$r = DBExec ($c, $sql . " for update", "DBRunDelete(get run for update)");
$n = DBnlines($r);
if ($n != 1) {
- DBExec($c, "rollback work", "DBRunDelete(rollback)");
- LogLevel("Unable to delete a run. ".
- "(run=$number, site=$site, contest=$contest)",1);
- return false;
+ if($cc == null)
+ DBExec($c, "rollback work", "DBRunDelete(rollback)");
+ LogLevel("Unable to delete a run. ".
+ "(run=$number, site=$site, contest=$contest)",1);
+ return false;
}
$temp = DBRow($r, 0);
@@ -320,8 +323,8 @@ function DBRunDelete($number,$site,$contest,$user,$usersite) {
": " . $p[0]["fullname"]), "", "", "t", $p[0]["color"], $p[0]["colorname"], $c);
}
}
-
- DBExec($c, "commit work", "DBRunDelete(commit)");
+ if($cc == null)
+ DBExec($c, "commit work", "DBRunDelete(commit)");
LOGLevel("Run deleted (run=$number, site=$site, contest=$contest, user=$user(site=$usersite)).", 3);
return true;
}
@@ -585,7 +588,7 @@ function DBOpenRunsSNS($contest,$site,$st,$order='run') {
"r.runproblem=p.problemnumber and l.contestnumber=r.contestnumber and r.usernumber=u.usernumber and r.runsitenumber=u.usersitenumber and " .
"l.langnumber=r.runlangnumber and a.answernumber=r.runanswer and " .
"a.contestnumber=r.contestnumber";
- if ($site != "x") {
+ if (strpos($site,"x")===false) {
$str = explode(",", $site);
$sql .= " and (r.runsitenumber=-1";
for ($i=0;$i<count($str);$i++) {
@@ -641,7 +644,7 @@ function DBOpenRunsSNS($contest,$site,$st,$order='run') {
$a[$i] = DBRow($r,$i);
return $a;
}
-function DBNewRun($param,$c=null) {
+function DBNewRun($param,$c=null,$allowinsert=true) {
if(isset($param['contestnumber']) && !isset($param['contest'])) $param['contest']=$param['contestnumber'];
if(isset($param['sitenumber']) && !isset($param['site'])) $param['site']=$param['sitenumber'];
if(isset($param['runsitenumber']) && !isset($param['site'])) $param['site']=$param['runsitenumber'];
@@ -757,9 +760,20 @@ function DBNewRun($param,$c=null) {
$oid1 = $lr['autostdout'];
if(isset($lr['autostderr']))
$oid2 = $lr['autostderr'];
+ } else {
+ if(!$allowinsert) {
+ if($cw)
+ DBExec($c, "rollback work", "DBNewRun(rollback-noinsert)");
+ return -1;
+ }
}
$runinc = $runnumber - 1;
} else {
+ if(!$allowinsert) {
+ if($cw)
+ DBExec($c, "rollback work", "DBNewRun(rollback-noinsert)");
+ return -1;
+ }
$runnumber = $a["nextrun"] + 1;
DBExec($c, "update sitetable set sitenextrun=$runnumber" .
" where sitenumber=$site and contestnumber=$contest and sitenextrun<$runnumber", "DBNewRun(update site)");
@@ -913,8 +927,8 @@ function DBNewRun($param,$c=null) {
"autostdout=$oid1, autostderr=$oid2 " .
"where runnumber=$runnumber and contestnumber=$contest and runsitenumber=$site", "DBNewRun(update run)");
- if(is_numeric($oldoid1)) DB_lo_unlink($c,$oldoid1);
- if(is_numeric($oldoid2)) DB_lo_unlink($c,$oldoid2);
+ if(isset($oldoid1) && is_numeric($oldoid1)) DB_lo_unlink($c,$oldoid1);
+ if(isset($oldoid2) && is_numeric($oldoid2)) DB_lo_unlink($c,$oldoid2);
}
if($cw) DBExec($c, "commit work", "DBNewRun(commit-update)");
}