Files
hustoj/web/admin/update_db.php
2024-10-10 12:56:56 +08:00

254 lines
13 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php require("admin-header.php");
if (!(isset($_SESSION[$OJ_NAME.'_'.'administrator']))){
echo "<a href='../loginpage.php'>Please Login First!</a>";
exit(1);
}?>
<?php $tsql=Array();
$csql=Array();
$tsql[0]="use ".$DB_NAME.";";
$csql[0]="
CREATE TABLE $DB_NAME.`topic` (
`tid` int(11) NOT NULL auto_increment,
`title` varbinary(60) NOT NULL,
`status` int(2) NOT NULL default '0',
`top_level` int(2) NOT NULL default '0',
`cid` int(11) default NULL,
`pid` int(11) NOT NULL,
`author_id` varchar(20) NOT NULL,
PRIMARY KEY (`tid`),
KEY `cid` (`cid`,`pid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ;
";
$tsql[1]="select 1 from $DB_NAME.reply limit 1";
$csql[1]="
CREATE TABLE $DB_NAME.`reply` (
`rid` int(11) NOT NULL auto_increment,
`author_id` varchar(20) NOT NULL,
`time` datetime NOT NULL default '2000-01-01 00:00:01',
`content` text NOT NULL,
`topic_id` int(11) NOT NULL,
`status` int(2) NOT NULL default '0',
`ip` varchar(30) NOT NULL,
PRIMARY KEY (`rid`),
KEY `author_id` (`author_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ;
";
$tsql[2]="
ALTER TABLE $DB_NAME.`problem` DROP COLUMN `sample_Program`,
DROP COLUMN `ratio`,
DROP COLUMN `error`,
DROP COLUMN `difficulty`,
DROP COLUMN `submit_user`,
DROP COLUMN `case_time_limit`;
";
$csql[2]="";
$tsql[3]="select 1 from $DB_NAME.sim limit 1";
$csql[3]="
CREATE TABLE $DB_NAME.`sim` (
`s_id` int(11) NOT NULL,
`sim_s_id` int(11) NULL,
`sim` int(11) NULL,
PRIMARY KEY (`s_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;";
$tsql[4]="select 1 from $DB_NAME.mail limit 1";
$csql[4]="
CREATE TABLE $DB_NAME.`mail` (
`mail_id` int(11) NOT NULL auto_increment,
`to_user` varchar(20) NOT NULL default '',
`from_user` varchar(20) NOT NULL default '',
`title` varchar(200) NOT NULL default '',
`content` text,
`new_mail` tinyint(1) NOT NULL default '1',
`reply` tinyint(4) default '0',
`in_date` datetime default NULL,
`defunct` char(1) NOT NULL default 'N',
PRIMARY KEY (`mail_id`),
KEY `uid` (`to_user`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1000 ;";
$tsql[5]="ALTER TABLE $DB_NAME.`solution` MODIFY COLUMN `pass_rate` DECIMAL(4,3) UNSIGNED NOT NULL DEFAULT 0,MODIFY COLUMN in_date datetime not null default '2009-06-13 19:00:00', MODIFY COLUMN `user_id` CHAR(48) CHARACTER SET utf8mb4 NOT NULL,MODIFY COLUMN `ip` CHAR(15) CHARACTER SET utf8mb4 NOT NULL;";
$csql[5]="";
$tsql[6]="select langmask from $DB_NAME.contest limit 1;";
$csql[6]="ALTER TABLE $DB_NAME.`contest` ADD COLUMN `langmask` TINYINT NOT NULL DEFAULT 0 COMMENT 'bits for LANG to mask' AFTER `private`;";
$tsql[7]="repair table $DB_NAME.`compileinfo`,$DB_NAME.`contest` ,$DB_NAME.`contest_problem` ,$DB_NAME.`loginlog`,$DB_NAME.`news`,$DB_NAME.`privilege`,$DB_NAME.`problem` ,$DB_NAME.`solution`,$DB_NAME.`source_code`,$DB_NAME.`users`,$DB_NAME.`topic`,$DB_NAME.`reply`,$DB_NAME.`sim`,$DB_NAME.`mail`;";
$csql[7]="optimize table $DB_NAME.`compileinfo`,$DB_NAME.`contest` ,$DB_NAME.`contest_problem` ,$DB_NAME.`loginlog`,$DB_NAME.`news`,$DB_NAME.`privilege`,$DB_NAME.`problem` ,$DB_NAME.`solution`,$DB_NAME.`source_code`,$DB_NAME.`users`,$DB_NAME.`topic`,$DB_NAME.`reply`,$DB_NAME.`sim`,$DB_NAME.`mail`;";
$csql[8]="";
$tsql[8]="ALTER TABLE $DB_NAME.`contest` MODIFY COLUMN `langmask` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'bits for LANG to mask';";
$tsql[9]="select 1 from $DB_NAME.runtimeinfo limit 1";
$csql[9]="CREATE TABLE $DB_NAME. `runtimeinfo` (
`solution_id` int(11) NOT NULL DEFAULT '0',
`error` text,
PRIMARY KEY (`solution_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
";
$tsql[10]="select pass_rate from $DB_NAME.solution limit 1";
$csql[10]="ALTER TABLE $DB_NAME.`solution` ADD COLUMN `pass_rate` DECIMAL(4,3) UNSIGNED NOT NULL DEFAULT 0 AFTER `judgetime`;";
$csql[11]="";
$tsql[11]="ALTER TABLE $DB_NAME.`users` MODIFY COLUMN `user_id` varchar(48) NOT NULL DEFAULT '' COMMENT 'user_id';";
$csql[12]="";
$tsql[12]="ALTER TABLE $DB_NAME.`topic` MODIFY COLUMN `author_id` varchar(48) NOT NULL DEFAULT '' COMMENT 'user_id';";
$csql[13]="";
$tsql[13]="ALTER TABLE $DB_NAME.`mail` MODIFY COLUMN `to_user` varchar(48) NOT NULL DEFAULT '' COMMENT 'user_id',MODIFY COLUMN `from_user` varchar(48) NOT NULL DEFAULT '' COMMENT 'user_id';";
$csql[14]="";
$tsql[14]="ALTER TABLE $DB_NAME.`reply` MODIFY COLUMN `author_id` varchar(48) NOT NULL DEFAULT '' COMMENT 'user_id';";
$csql[15]="";
$tsql[15]="ALTER TABLE $DB_NAME.`privilege` MODIFY COLUMN `user_id` varchar(48) NOT NULL DEFAULT '' COMMENT 'user_id';";
$csql[15]="";
$tsql[15]="ALTER TABLE $DB_NAME.`loginlog` MODIFY COLUMN `user_id` varchar(48) NOT NULL DEFAULT '' COMMENT 'user_id';";
$csql[15]="";
$tsql[15]="ALTER TABLE $DB_NAME.`news` MODIFY COLUMN `user_id` varchar(48) NOT NULL DEFAULT '' COMMENT 'user_id';";
$tsql[16]="ALTER TABLE $DB_NAME.`sim` ADD INDEX `Index_sim_id`(`sim_s_id`);";
$csql[16]="";
$tsql[17]="ALTER TABLE $DB_NAME.`contest_problem` ADD INDEX `Index_contest_id`(`contest_id`);";
$csql[17]="";
$tsql[18]="ALTER TABLE $DB_NAME.`contest_problem` ADD INDEX `Index_problem_id`(`problem_id`);";
$csql[18]="";
$tsql[18]="select 1 from $DB_NAME.custominput limit 1;";
$csql[18]="CREATE TABLE $DB_NAME. `custominput` ( `solution_id` int(11) NOT NULL DEFAULT '0', `input_text` text, PRIMARY KEY (`solution_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;";
$tsql[19]="ALTER TABLE $DB_NAME.`loginlog` ADD INDEX `user_time_index`(`user_id`, `time`);";
$csql[19]="";
$tsql[20]="ALTER TABLE $DB_NAME.`contest` ADD `password` CHAR( 16 ) NOT NULL DEFAULT '' AFTER `langmask` ";
$csql[20]="";
$tsql[21]="CREATE TABLE $DB_NAME.`source_code_user` like source_code";
$csql[21]="";
$tsql[22]="insert into $DB_NAME.source_code_user select * from $DB_NAME.source_code where solution_id not in (select solution_id from $DB_NAME.source_code_user) ";
$csql[22]="";
$tsql[23]="select judger from $DB_NAME.solution limit 1 ";
$csql[23]="ALTER TABLE $DB_NAME.`solution` ADD `judger` CHAR(16) NOT NULL DEFAULT 'LOCAL' ; ";
$tsql[24]="alter table $DB_NAME.solution modify column pass_rate decimal(4,3) NOT NULL DEFAULT 0;";
$csql[24]="";
$csql[25]="";
$tsql[25]="ALTER TABLE $DB_NAME. `solution` CHANGE `ip` `ip` CHAR( 46 ) CHARACTER SET utf8mb4 NOT NULL DEFAULT '';";
$csql[26]="select 1 from $DB_NAME.printer limit 1";
$tsql[26]="CREATE TABLE $DB_NAME. `printer` (
`printer_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` char(48) NOT NULL,
`in_date` datetime NOT NULL DEFAULT '2018-03-13 19:38:00',
`status` smallint(6) NOT NULL DEFAULT '0',
`worktime` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`printer` CHAR(16) NOT NULL DEFAULT 'LOCAL',
`content` text NOT NULL ,
PRIMARY KEY (`printer_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;";
$csql[27]="select 1 from $DB_NAME.balloon limit 1";
$tsql[27]="CREATE TABLE $DB_NAME. `balloon` (
`balloon_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` char(48) NOT NULL,
`sid` int(11) NOT NULL ,
`cid` int(11) NOT NULL ,
`pid` int(11) NOT NULL ,
`status` smallint(6) NOT NULL DEFAULT '0',
PRIMARY KEY (`balloon_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;";
$csql[28]="select 1 from $DB_NAME.share_code limit 1";
$tsql[28]="CREATE TABLE $DB_NAME.`share_code` (
`share_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(48) DEFAULT NULL,
`title` varchar(32) DEFAULT NULL,
`share_code` text ,
`language` varchar(32) DEFAULT NULL,
`share_time` datetime DEFAULT NULL,
PRIMARY KEY (`share_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8mb4;";
$tsql[29]="alter TABLE $DB_NAME.`contest` ADD `user_id` CHAR( 48 ) NOT NULL DEFAULT 'admin' AFTER `password` ";
$csql[29]="update $DB_NAME.contest c inner JOIN (SELECT * FROM privilege WHERE rightstr LIKE 'm%') p ON concat('m',contest_id)=rightstr set c.user_id=p.user_id";
$tsql[30]="alter TABLE $DB_NAME. `contest_problem` ADD `c_accepted` INT NOT NULL DEFAULT '0' AFTER `num` ,ADD `c_submit` INT NOT NULL DEFAULT '0' AFTER `c_accepted`";
$csql[30]="";
$tsql[31]="update $DB_NAME.contest_problem cp inner join (select count(1) submit,contest_id cid,num from $DB_NAME.solution where contest_id>0 group by contest_id,num) sb on cp.contest_id=sb.cid and cp.num=sb.num set cp.c_submit=sb.submit";
$csql[31]="update $DB_NAME.contest_problem cp inner join (select count(1) ac,contest_id cid,num from $DB_NAME.solution where contest_id>0 and result=4 group by contest_id,num) sb on cp.contest_id=sb.cid and cp.num=sb.num set cp.c_accepted=sb.ac";
$tsql[32]="alter table $DB_NAME.solution add column nick char(20) not null default '' after user_id ";
$csql[32]="update $DB_NAME.solution s inner join users u on s.user_id=u.user_id set s.nick=u.nick";
$tsql[33]="update $DB_NAME.problem p inner join (select problem_id pid ,count(1) submit from $DB_NAME.solution group by problem_id) s on p.problem_id=s.pid set p.submit=s.submit;";
$csql[33]="update $DB_NAME.problem p inner JOIN ( SELECT count(1) as c,problem_id from solution where result=4 group by problem_id) s on p.problem_id=s.problem_id set p.accepted=s.c;";
$tsql[34]="alter table $DB_NAME.privilege add index user_id_index(user_id);";
$csql[34]="";
$tsql[35]="ALTER TABLE $DB_NAME.`problem` CHANGE `time_limit` `time_limit` DECIMAL(10,3) NOT NULL DEFAULT '0';";
$csql[35]="";
$tsql[36]="alter table $DB_NAME.privilege add column valuestr char(11) not null default 'true' after rightstr; ";
$csql[36]="";
$tsql[37]="alter table $DB_NAME.news modify column `time` datetime NOT NULL DEFAULT '2016-05-13 19:24:00';";
$csql[37]="ALTER TABLE $DB_NAME.`news` ADD COLUMN `menu` int(11) NOT NULL DEFAULT 0 AFTER `importance`;";
$tsql[38]="delete from $DB_NAME.source_code where solution_id in (select solution_id from $DB_NAME.solution where problem_id=0 and result>4);";
$csql[38]="";
$tsql[39]="delete from $DB_NAME.source_code_user where solution_id in (select solution_id from $DB_NAME.solution where problem_id=0 and result>4);";
$csql[39]="";
$tsql[40]="delete from $DB_NAME.runtimeinfo where solution_id in (select solution_id from $DB_NAME.solution where problem_id=0 and result>4);";
$csql[40]="delete from $DB_NAME.runtimeinfo where solution_id not in (select solution_id from $DB_NAME.solution);";
$tsql[41]="delete from $DB_NAME.compileinfo where solution_id in (select solution_id from $DB_NAME.solution where problem_id=0 and result>4);";
$csql[41]="delete from $DB_NAME.compileinfo where solution_id not in (select solution_id from $DB_NAME.solution);";
$tsql[42]="";
$csql[42]="delete from $DB_NAME.solution where problem_id=0 and result>4;";
$tsql[43]="alter table $DB_NAME.problem add column remote_oj varchar(16) default NULL after solved;";
$csql[43]="alter table $DB_NAME.problem add column remote_id varchar(16) default NULL after remote_oj;";
$tsql[44]="alter table $DB_NAME.solution add column remote_oj char(16) not null default '' after judger;";
$csql[44]="alter table $DB_NAME.solution add column remote_id char(16) not null default '' after remote_oj;";
$tsql[45]="alter table $DB_NAME.news modify content mediumtext not null;";
$csql[45]="alter table $DB_NAME.problem modify description mediumtext not null, modify input mediumtext not null, modify output mediumtext not null, modify hint mediumtext not null;";
$tsql[46]="alter table $DB_NAME.users add column activecode varchar(16) not null default '' after school;";
$csql[46]="";
$tsql[47]="alter table $DB_NAME.users add column group_name varchar(16) not null default '' after school;";
$csql[47]="";
$tsql[48]="alter table $DB_NAME.loginlog add column log_id int not null auto_increment primary key first;";
$csql[48]="delete from $DB_NAME.loginlog where time<curdate()-interval 6 month;";
$tsql[49]="alter table $DB_NAME.problem add index key_p_def(defunct);";
$csql[49]="alter table $DB_NAME.contest add index key_c_def(defunct);";
$tsql[50]="alter table $DB_NAME.contest add index key_c_end(end_time);";
$csql[50]="alter table $DB_NAME.contest add index key_c_dend(defunct,end_time);";
$tsql[51]="alter table $DB_NAME.users add column starred int default 0 after activecode ;";
$csql[51]="";
// 删除6个月以前的非正确源码优化数据库空间。
// delete from source_code where solution_id in (select solution_id from solution where result>4 and in_date<date_sub(now(),interval 6 month) ); //
if(isset($_POST['do'])){
require_once("../include/check_post_key.php");
echo "Executing...<br>";
set_time_limit(60);
for($i=0;isset($tsql[$i]);$i++){
if($tsql[$i]){
echo $tsql[$i]."<br>";
echo "=".pdo_query($tsql[$i])."<hr>";
}
if($csql[$i]){
echo $csql[$i]."<br>";
echo "=".pdo_query($csql[$i])."<hr>";
}
}
}
?>
<div class="container">
<b>Update DataBase</b>
Create New Tables ,drop useless columes.
<b>Necessary for using plagiarism detection.</b>
<form action='update_db.php' method=post>
<?php require_once("../include/set_post_key.php");?>
<input type='hidden' name='do' value='do'>
<input type=submit value=Update>
</form>
<?php if (file_exists("update_pw.php")) { ?>
<a href="update_pw.php">Upgrade all users password storage form to get more security.</a>
* only do once !
<?php }?>
</div>