diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.txt index 4c4638295b0..bf765a0806d 100644 --- a/SQL/database_changelog.txt +++ b/SQL/database_changelog.txt @@ -1,13 +1,3 @@ -19 February 2017, by Jordie0608 - -Optimised and indexed significant portions of the schema. - -See the file 'optimisations_2017-02-19.sql' for instructions on how to apply these changes to your database. - -Remember to add a prefix to the table name if you use them - ----------------------------------------------------- - 30 January 2017, by Lzimann Modified table 'death', adding the columns 'mapname' and 'server'. diff --git a/SQL/optimisations_2017-02-19.sql b/SQL/optimisations_2017-02-19.sql deleted file mode 100644 index ba9b0d98b5f..00000000000 --- a/SQL/optimisations_2017-02-19.sql +++ /dev/null @@ -1,206 +0,0 @@ -/* -It is recommended you do not perfom any of these queries while your server is live as they will lock the tables during execution. - -Backup your database before starting; Breaking errors may occur when old data is not be compatible with new column formats. -i.e. A field that is null or empty due to rows existing before the column was added, data corruption or incorrect inputs will prevent altering the column to be NOT NULL. -In this event, you can populate the fields with placeholder data using a query such as: -UPDATE `[database]`.`[table]` SET `[column]` = IF(`[column]` IS NULL OR `[column]` = '','[placeholder]',`[column]`) -I have accounted for some fields where this is likely to occur, but cannot cover every possibility, so be careful. - -Take note some columns have been renamed, removed or changed type. Any services relying on these columns will have to be updated per changes. - -----------------------------------------------------*/ - -START TRANSACTION; -ALTER TABLE `feedback`.`ban` - DROP COLUMN `rounds` -, CHANGE COLUMN `bantype` `bantype` ENUM('PERMABAN', 'TEMPBAN', 'JOB_PERMABAN', 'JOB_TEMPBAN', 'ADMIN_PERMABAN', 'ADMIN_TEMPBAN') NOT NULL -, CHANGE COLUMN `reason` `reason` VARCHAR(2048) NOT NULL -, CHANGE COLUMN `who` `who` VARCHAR(2048) NOT NULL -, CHANGE COLUMN `adminwho` `adminwho` VARCHAR(2048) NOT NULL -, CHANGE COLUMN `edits` `edits` VARCHAR(2048) NULL -, CHANGE COLUMN `unbanned` `unbanned` TINYINT UNSIGNED NULL DEFAULT NULL -, ADD COLUMN `server_ip` INT UNSIGNED NOT NULL AFTER `serverip` -, ADD COLUMN `server_port` SMALLINT UNSIGNED NOT NULL AFTER `server_ip` -, ADD COLUMN `ipTEMP` INT UNSIGNED NOT NULL AFTER `ip` -, ADD COLUMN `a_ipTEMP` INT UNSIGNED NOT NULL AFTER `a_ip` -, ADD COLUMN `unbanned_ipTEMP` INT UNSIGNED NULL DEFAULT NULL AFTER `unbanned_ip`; -SET SQL_SAFE_UPDATES = 0; -UPDATE `feedback`.`ban` - SET `serverip` = IF(`serverip` IS NULL OR `serverip` = '','0:0',`serverip`) -, `ip` = IF(`ip` IS NULL OR `ip` = '','0',`ip`) -, `ip` = IF(`a_ip` IS NULL OR `a_ip` = '','0',`a_ip`); -UPDATE `feedback`.`ban` - SET `server_ip` = INET_ATON(SUBSTRING_INDEX(`serverip`, ':', 1)) -, `server_port` = CAST(SUBSTRING_INDEX(`serverip`, ':', -1) AS UNSIGNED) -, `ipTEMP` = INET_ATON(`ip`) -, `a_ipTEMP` = INET_ATON(`a_ip`) -, `unbanned_ipTEMP` = INET_ATON(`unbanned_ip`); -SET SQL_SAFE_UPDATES = 1; -ALTER TABLE `feedback`.`ban` - DROP COLUMN `unbanned_ip` -, DROP COLUMN `a_ip` -, DROP COLUMN `ip` -, DROP COLUMN `serverip` -, CHANGE COLUMN `ipTEMP` `ip` INT(10) UNSIGNED NOT NULL -, CHANGE COLUMN `a_ipTEMP` `a_ip` INT(10) UNSIGNED NOT NULL -, CHANGE COLUMN `unbanned_ipTEMP` `unbanned_ip` INT(10) UNSIGNED NULL DEFAULT NULL; -COMMIT; - -START TRANSACTION; -ALTER TABLE `feedback`.`connection_log` - ADD COLUMN `server_ip` INT UNSIGNED NOT NULL AFTER `serverip` -, ADD COLUMN `server_port` SMALLINT UNSIGNED NOT NULL AFTER `server_ip` -, ADD COLUMN `ipTEMP` INT UNSIGNED NOT NULL AFTER `ip`; -SET SQL_SAFE_UPDATES = 0; -UPDATE `feedback`.`connection_log` - SET `serverip` = IF(`serverip` IS NULL OR `serverip` = '','0:0',`serverip`) -, `ip` = IF(`ip` IS NULL OR `ip` = '','0',`ip`); -UPDATE `feedback`.`connection_log` - SET `server_ip` = INET_ATON(SUBSTRING_INDEX(`serverip`, ':', 1)) -, `server_port` = CAST(SUBSTRING_INDEX(`serverip`, ':', -1) AS UNSIGNED) -, `ipTEMP` = INET_ATON(`ip`); -SET SQL_SAFE_UPDATES = 1; -ALTER TABLE `feedback`.`connection_log` - DROP COLUMN `ip` -, DROP COLUMN `serverip` -, CHANGE COLUMN `ipTEMP` `ip` INT(10) UNSIGNED NOT NULL; -COMMIT; - -START TRANSACTION; -ALTER TABLE `feedback`.`death` - CHANGE COLUMN `pod` `pod` VARCHAR(50) NOT NULL -, CHANGE COLUMN `coord` `coord` VARCHAR(32) NOT NULL -, CHANGE COLUMN `mapname` `mapname` VARCHAR(32) NOT NULL -, CHANGE COLUMN `job` `job` VARCHAR(32) NOT NULL -, CHANGE COLUMN `special` `special` VARCHAR(32) NULL DEFAULT NULL -, CHANGE COLUMN `name` `name` VARCHAR(32) NOT NULL -, CHANGE COLUMN `byondkey` `byondkey` VARCHAR(32) NOT NULL -, CHANGE COLUMN `laname` `laname` VARCHAR(32) NULL DEFAULT NULL -, CHANGE COLUMN `lakey` `lakey` VARCHAR(32) NULL DEFAULT NULL -, CHANGE COLUMN `gender` `gender` ENUM('neuter', 'male', 'female', 'plural') NOT NULL -, CHANGE COLUMN `bruteloss` `bruteloss` SMALLINT UNSIGNED NOT NULL -, CHANGE COLUMN `brainloss` `brainloss` SMALLINT UNSIGNED NOT NULL -, CHANGE COLUMN `fireloss` `fireloss` SMALLINT UNSIGNED NOT NULL -, CHANGE COLUMN `oxyloss` `oxyloss` SMALLINT UNSIGNED NOT NULL -, ADD COLUMN `server_ip` INT UNSIGNED NOT NULL AFTER `server` -, ADD COLUMN `server_port` SMALLINT UNSIGNED NOT NULL AFTER `server_ip`; -SET SQL_SAFE_UPDATES = 0; -UPDATE `feedback`.`death` - SET `server` = IF(`server` IS NULL OR `server` = '','0:0',`server`); -UPDATE `feedback`.`death` - SET server_ip = INET_ATON(SUBSTRING_INDEX(`server`, ':', 1)) -, server_port = CAST(SUBSTRING_INDEX(`server`, ':', -1) AS UNSIGNED); -SET SQL_SAFE_UPDATES = 1; -ALTER TABLE `feedback`.`death` - DROP COLUMN `server`; -COMMIT; - -ALTER TABLE `feedback`.`library` - CHANGE COLUMN `category` `category` ENUM('Any', 'Fiction', 'Non-Fiction', 'Adult', 'Reference', 'Religion') NOT NULL -, CHANGE COLUMN `ckey` `ckey` VARCHAR(32) NOT NULL DEFAULT 'LEGACY' -, CHANGE COLUMN `datetime` `datetime` DATETIME NOT NULL -, CHANGE COLUMN `deleted` `deleted` TINYINT(1) UNSIGNED NULL DEFAULT NULL; - -ALTER TABLE `feedback`.`messages` - CHANGE COLUMN `type` `type` ENUM('memo', 'message', 'message sent', 'note', 'watchlist entry') NOT NULL -, CHANGE COLUMN `text` `text` VARCHAR(2048) NOT NULL -, CHANGE COLUMN `secret` `secret` TINYINT(1) UNSIGNED NOT NULL -, CHANGE COLUMN `edits` `edits` VARCHAR(2048) NULL; - -START TRANSACTION; -ALTER TABLE `feedback`.`player` - ADD COLUMN `ipTEMP` INT UNSIGNED NOT NULL AFTER `ip`; -SET SQL_SAFE_UPDATES = 0; -UPDATE `feedback`.`player` - SET `ip` = IF(`ip` IS NULL OR `ip` = '','0',`ip`); -UPDATE `feedback`.`player` - SET `ipTEMP` = INET_ATON(`ip`); -SET SQL_SAFE_UPDATES = 1; -ALTER TABLE `feedback`.`player` - DROP COLUMN `ip` -, CHANGE COLUMN `ipTEMP` `ip` INT(10) UNSIGNED NOT NULL; -COMMIT; - -ALTER TABLE `feedback`.`poll_question` - CHANGE COLUMN `polltype` `polltype` ENUM('OPTION', 'TEXT', 'NUMVAL', 'MULTICHOICE', 'IRV') NOT NULL -, CHANGE COLUMN `adminonly` `adminonly` TINYINT(1) UNSIGNED NOT NULL -, CHANGE COLUMN `createdby_ckey` `createdby_ckey` VARCHAR(32) NULL DEFAULT NULL -, CHANGE COLUMN `createdby_ip` `createdby_ip` VARCHAR(32) NULL DEFAULT NULL -, CHANGE COLUMN `for_trialmin` `for_trialmin` VARCHAR(32) NULL DEFAULT NULL -, CHANGE COLUMN `dontshow` `dontshow` TINYINT(1) UNSIGNED NOT NULL; - -START TRANSACTION; -ALTER TABLE `feedback`.`poll_textreply` - CHANGE COLUMN `replytext` `replytext` VARCHAR(2048) NOT NULL -, ADD COLUMN `ipTEMP` INT UNSIGNED NOT NULL AFTER `ip`; -SET SQL_SAFE_UPDATES = 0; -UPDATE `feedback`.`poll_textreply` - SET `ip` = IF(`ip` IS NULL OR `ip` = '','0',`ip`); -UPDATE `feedback`.`poll_textreply` - SET `ipTEMP` = INET_ATON(`ip`); -SET SQL_SAFE_UPDATES = 1; -ALTER TABLE `feedback`.`poll_textreply` - DROP COLUMN `ip` -, CHANGE COLUMN `ipTEMP` `ip` INT(10) UNSIGNED NOT NULL; -COMMIT; - -START TRANSACTION; -ALTER TABLE `feedback`.`poll_vote` - CHANGE COLUMN `ckey` `ckey` VARCHAR(32) NOT NULL -, ADD COLUMN `ipTEMP` INT UNSIGNED NOT NULL AFTER `ip`; -SET SQL_SAFE_UPDATES = 0; -UPDATE `feedback`.`poll_vote` - SET `ip` = IF(`ip` IS NULL OR `ip` = '','0',`ip`); -UPDATE `feedback`.`poll_vote` - SET `ipTEMP` = INET_ATON(`ip`); -SET SQL_SAFE_UPDATES = 1; -ALTER TABLE `feedback`.`poll_vote` - DROP COLUMN `ip` -, CHANGE COLUMN `ipTEMP` `ip` INT(10) UNSIGNED NOT NULL; -COMMIT; - -/*---------------------------------------------------- - -These queries are to be run after the above. -These indexes are designed with only the codebase queries in mind. -You may find it helpful to modify or create your own indexes if you utilise additional queries for other services. - -----------------------------------------------------*/ - -ALTER TABLE `feedback`.`ban` - ADD INDEX `idx_ban_checkban` (`ckey` ASC, `bantype` ASC, `expiration_time` ASC, `unbanned` ASC, `job` ASC) -, ADD INDEX `idx_ban_isbanned` (`ckey` ASC, `ip` ASC, `computerid` ASC, `bantype` ASC, `expiration_time` ASC, `unbanned` ASC) -, ADD INDEX `idx_ban_count` (`id` ASC, `a_ckey` ASC, `bantype` ASC, `expiration_time` ASC, `unbanned` ASC); - -ALTER TABLE `feedback`.`ipintel` - ADD INDEX `idx_ipintel` (`ip` ASC, `intel` ASC, `date` ASC); - -ALTER TABLE `feedback`.`library` - ADD INDEX `idx_lib_id_del` (`id` ASC, `deleted` ASC) -, ADD INDEX `idx_lib_del_title` (`deleted` ASC, `title` ASC) -, ADD INDEX `idx_lib_search` (`deleted` ASC, `author` ASC, `title` ASC, `category` ASC); - -ALTER TABLE `feedback`.`messages` - ADD INDEX `idx_msg_ckey_time` (`targetckey` ASC, `timestamp` ASC) -, ADD INDEX `idx_msg_type_ckeys_time` (`type` ASC, `targetckey` ASC, `adminckey` ASC, `timestamp` ASC) -, ADD INDEX `idx_msg_type_ckey_time_odr` (`type` ASC, `targetckey` ASC, `timestamp` ASC); - -ALTER TABLE `feedback`.`player` - ADD INDEX `idx_player_cid_ckey` (`computerid` ASC, `ckey` ASC) -, ADD INDEX `idx_player_ip_ckey` (`ip` ASC, `ckey` ASC); - -ALTER TABLE `feedback`.`poll_option` - ADD INDEX `idx_pop_pollid` (`pollid` ASC); - -ALTER TABLE `feedback`.`poll_question` - ADD INDEX `idx_pquest_question_time_ckey` (`question` ASC, `starttime` ASC, `endtime` ASC, `createdby_ckey` ASC, `createdby_ip` ASC) -, ADD INDEX `idx_pquest_time_admin` (`starttime` ASC, `endtime` ASC, `adminonly` ASC) -, ADD INDEX `idx_pquest_id_time_type_admin` (`id` ASC, `starttime` ASC, `endtime` ASC, `polltype` ASC, `adminonly` ASC); - -ALTER TABLE `feedback`.`poll_vote` - ADD INDEX `idx_pvote_pollid_ckey` (`pollid` ASC, `ckey` ASC) -, ADD INDEX `idx_pvote_optionid_ckey` (`optionid` ASC, `ckey` ASC); - -ALTER TABLE `feedback`.`poll_textreply` - ADD INDEX `idx_ptext_pollid_ckey` (`pollid` ASC, `ckey` ASC); \ No newline at end of file diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql index 137df5bb43a..e751b130890 100644 --- a/SQL/tgstation_schema.sql +++ b/SQL/tgstation_schema.sql @@ -59,9 +59,18 @@ CREATE TABLE `admin_ranks` ( `rank` varchar(40) NOT NULL, `flags` int(16) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1; +) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; +insert into admin_ranks (rank, flags) values ('Moderator',2); +insert into admin_ranks (rank, flags) values ('Admin Candidate',2); +insert into admin_ranks (rank, flags) values ('Trial Admin',5638); +insert into admin_ranks (rank, flags) values ('Badmin',5727); +insert into admin_ranks (rank, flags) values ('Game Admin',8063); +insert into admin_ranks (rank, flags) values ('Game Master',65535); +insert into admin_ranks (rank, flags) values ('Host',65535); +insert into admin_ranks (rank, flags) values ('Coder',5168); + -- -- Table structure for table `ban` -- @@ -72,31 +81,28 @@ DROP TABLE IF EXISTS `ban`; CREATE TABLE `ban` ( `id` int(11) NOT NULL AUTO_INCREMENT, `bantime` datetime NOT NULL, - `server_ip` int(10) unsigned NOT NULL, - `server_port` smallint(5) unsigned NOT NULL, - `bantype` enum('PERMABAN','TEMPBAN','JOB_PERMABAN','JOB_TEMPBAN','ADMIN_PERMABAN','ADMIN_TEMPBAN') NOT NULL, - `reason` varchar(2048) NOT NULL, + `serverip` varchar(32) NOT NULL, + `bantype` varchar(32) NOT NULL, + `reason` text NOT NULL, `job` varchar(32) DEFAULT NULL, `duration` int(11) NOT NULL, + `rounds` int(11) DEFAULT NULL, `expiration_time` datetime NOT NULL, `ckey` varchar(32) NOT NULL, `computerid` varchar(32) NOT NULL, - `ip` int(10) unsigned NOT NULL, + `ip` varchar(32) NOT NULL, `a_ckey` varchar(32) NOT NULL, `a_computerid` varchar(32) NOT NULL, - `a_ip` int(10) unsigned NOT NULL, - `who` varchar(2048) NOT NULL, - `adminwho` varchar(2048) NOT NULL, - `edits` varchar(2048) DEFAULT NULL, - `unbanned` tinyint(3) unsigned DEFAULT NULL, + `a_ip` varchar(32) NOT NULL, + `who` text NOT NULL, + `adminwho` text NOT NULL, + `edits` text, + `unbanned` int(2) DEFAULT NULL, `unbanned_datetime` datetime DEFAULT NULL, `unbanned_ckey` varchar(32) DEFAULT NULL, `unbanned_computerid` varchar(32) DEFAULT NULL, - `unbanned_ip` int(10) unsigned DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `idx_ban_checkban` (`ckey`,`bantype`,`expiration_time`,`unbanned`,`job`), - KEY `idx_ban_isbanned` (`ckey`,`ip`,`computerid`,`bantype`,`expiration_time`,`unbanned`), - KEY `idx_ban_count` (`id`,`a_ckey`,`bantype`,`expiration_time`,`unbanned`) + `unbanned_ip` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; @@ -110,10 +116,9 @@ DROP TABLE IF EXISTS `connection_log`; CREATE TABLE `connection_log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `datetime` datetime DEFAULT NULL, - `server_ip` int(10) unsigned NOT NULL, - `server_port` smallint(5) unsigned NOT NULL, + `serverip` varchar(45) DEFAULT NULL, `ckey` varchar(45) DEFAULT NULL, - `ip` int(10) unsigned NOT NULL, + `ip` varchar(18) DEFAULT NULL, `computerid` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; @@ -128,23 +133,23 @@ DROP TABLE IF EXISTS `death`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `death` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `pod` varchar(50) NOT NULL, - `coord` varchar(32) NOT NULL, - `mapname` varchar(32) NOT NULL, - `server_ip` int(10) unsigned NOT NULL, - `server_port` smallint(5) unsigned NOT NULL, + `pod` text NOT NULL COMMENT 'Place of death', + `coord` text NOT NULL COMMENT 'X, Y, Z POD', + `mapname` text NOT NULL, + `server` text NOT NULL, `tod` datetime NOT NULL COMMENT 'Time of death', - `job` varchar(32) NOT NULL, - `special` varchar(32) DEFAULT NULL, - `name` varchar(32) NOT NULL, - `byondkey` varchar(32) NOT NULL, - `laname` varchar(32) DEFAULT NULL, - `lakey` varchar(32) DEFAULT NULL, - `gender` enum('neuter','male','female','plural') NOT NULL, - `bruteloss` smallint(5) unsigned NOT NULL, - `brainloss` smallint(5) unsigned NOT NULL, - `fireloss` smallint(5) unsigned NOT NULL, - `oxyloss` smallint(5) unsigned NOT NULL, + `job` text NOT NULL, + `special` text NOT NULL, + `name` text NOT NULL, + `byondkey` text NOT NULL, + `laname` text NOT NULL COMMENT 'Last attacker name', + `lakey` text NOT NULL COMMENT 'Last attacker key', + `gender` text NOT NULL, + `bruteloss` int(11) NOT NULL, + `brainloss` int(11) NOT NULL, + `fireloss` int(11) NOT NULL, + `oxyloss` int(11) NOT NULL, + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; @@ -167,22 +172,6 @@ CREATE TABLE `feedback` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Table structure for table `ipintel` --- - -DROP TABLE IF EXISTS `ipintel`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `ipintel` ( - `ip` int(10) unsigned NOT NULL, - `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `intel` double NOT NULL DEFAULT '0', - PRIMARY KEY (`ip`), - KEY `idx_ipintel` (`ip`,`intel`,`date`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - -- -- Table structure for table `legacy_population` -- @@ -204,49 +193,22 @@ CREATE TABLE `legacy_population` ( -- DROP TABLE IF EXISTS `library`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; CREATE TABLE `library` ( `id` int(11) NOT NULL AUTO_INCREMENT, `author` varchar(45) NOT NULL, `title` varchar(45) NOT NULL, `content` text NOT NULL, - `category` enum('Any','Fiction','Non-Fiction','Adult','Reference','Religion') NOT NULL, - `ckey` varchar(32) NOT NULL DEFAULT 'LEGACY', - `datetime` datetime NOT NULL, - `deleted` tinyint(1) unsigned DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `deleted_idx` (`deleted`), - KEY `idx_lib_id_del` (`id`,`deleted`), - KEY `idx_lib_del_title` (`deleted`,`title`), - KEY `idx_lib_search` (`deleted`,`author`,`title`,`category`) + `category` varchar(45) NOT NULL, + `ckey` varchar(45) DEFAULT 'LEGACY', + `datetime` datetime DEFAULT NULL, + `deleted` tinyint(1) DEFAULT NULL, + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; -- --- Table structure for table `messages` +-- Create an index to speed up the libary -- - -DROP TABLE IF EXISTS `messages`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `messages` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `type` enum('memo','message','message sent','note','watchlist entry') NOT NULL, - `targetckey` varchar(32) NOT NULL, - `adminckey` varchar(32) NOT NULL, - `text` varchar(2048) NOT NULL, - `timestamp` datetime NOT NULL, - `server` varchar(32) DEFAULT NULL, - `secret` tinyint(1) unsigned NOT NULL, - `lasteditor` varchar(32) DEFAULT NULL, - `edits` varchar(2048) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `idx_msg_ckey_time` (`targetckey`,`timestamp`), - KEY `idx_msg_type_ckeys_time` (`type`,`targetckey`,`adminckey`,`timestamp`), - KEY `idx_msg_type_ckey_time_odr` (`type`,`targetckey`,`timestamp`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; +CREATE INDEX deleted_idx ON `library` (`deleted`); -- -- Table structure for table `player` @@ -260,13 +222,11 @@ CREATE TABLE `player` ( `ckey` varchar(32) NOT NULL, `firstseen` datetime NOT NULL, `lastseen` datetime NOT NULL, - `ip` int(10) unsigned NOT NULL, + `ip` varchar(18) NOT NULL, `computerid` varchar(32) NOT NULL, `lastadminrank` varchar(32) NOT NULL DEFAULT 'Player', PRIMARY KEY (`id`), - UNIQUE KEY `ckey` (`ckey`), - KEY `idx_player_cid_ckey` (`computerid`,`ckey`), - KEY `idx_player_ip_ckey` (`ip`,`ckey`) + UNIQUE KEY `ckey` (`ckey`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; @@ -287,8 +247,7 @@ CREATE TABLE `poll_option` ( `descmin` varchar(32) DEFAULT NULL, `descmid` varchar(32) DEFAULT NULL, `descmax` varchar(32) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `idx_pop_pollid` (`pollid`) + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; @@ -301,20 +260,17 @@ DROP TABLE IF EXISTS `poll_question`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `poll_question` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `polltype` enum('OPTION','TEXT','NUMVAL','MULTICHOICE','IRV') NOT NULL, + `polltype` varchar(16) NOT NULL DEFAULT 'OPTION', `starttime` datetime NOT NULL, `endtime` datetime NOT NULL, `question` varchar(255) NOT NULL, - `adminonly` tinyint(1) unsigned NOT NULL, + `adminonly` tinyint(1) DEFAULT '0', `multiplechoiceoptions` int(2) DEFAULT NULL, - `createdby_ckey` varchar(32) DEFAULT NULL, - `createdby_ip` varchar(32) DEFAULT NULL, - `for_trialmin` varchar(32) DEFAULT NULL, - `dontshow` tinyint(1) unsigned NOT NULL, - PRIMARY KEY (`id`), - KEY `idx_pquest_question_time_ckey` (`question`,`starttime`,`endtime`,`createdby_ckey`,`createdby_ip`), - KEY `idx_pquest_time_admin` (`starttime`,`endtime`,`adminonly`), - KEY `idx_pquest_id_time_type_admin` (`id`,`starttime`,`endtime`,`polltype`,`adminonly`) + `createdby_ckey` varchar(45) NULL DEFAULT NULL, + `createdby_ip` varchar(45) NULL DEFAULT NULL, + `for_trialmin` varchar(45) NULL DEFAULT NULL, + `dontshow` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; @@ -330,11 +286,10 @@ CREATE TABLE `poll_textreply` ( `datetime` datetime NOT NULL, `pollid` int(11) NOT NULL, `ckey` varchar(32) NOT NULL, - `ip` int(10) unsigned NOT NULL, - `replytext` varchar(2048) NOT NULL, + `ip` varchar(18) NOT NULL, + `replytext` text NOT NULL, `adminrank` varchar(32) NOT NULL DEFAULT 'Player', - PRIMARY KEY (`id`), - KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`) + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; @@ -350,21 +305,47 @@ CREATE TABLE `poll_vote` ( `datetime` datetime NOT NULL, `pollid` int(11) NOT NULL, `optionid` int(11) NOT NULL, - `ckey` varchar(32) NOT NULL, - `ip` int(10) unsigned NOT NULL, + `ckey` varchar(255) NOT NULL, + `ip` varchar(16) NOT NULL, `adminrank` varchar(32) NOT NULL, `rating` int(2) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `idx_pvote_pollid_ckey` (`pollid`,`ckey`), - KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`) + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- +-- Table structure for table `ipintel` +-- + +DROP TABLE IF EXISTS `ipintel`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `ipintel` ( +`ip` INT UNSIGNED NOT NULL , +`date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL , +`intel` REAL NOT NULL DEFAULT '0', +PRIMARY KEY ( `ip` ) +) ENGINE = INNODB; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `messages` +-- + +DROP TABLE IF EXISTS `messages`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `messages` ( + `id` int(11) NOT NULL AUTO_INCREMENT , + `type` varchar(32) NOT NULL , + `targetckey` varchar(32) NOT NULL , + `adminckey` varchar(32) NOT NULL , + `text` text NOT NULL , + `timestamp` datetime NOT NULL , + `server` varchar(32) NULL , + `secret` tinyint(1) NULL DEFAULT 1 , + `lasteditor` varchar(32) NULL , + `edits` text NULL , + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql index dfbe04f0957..63d32eed08e 100644 --- a/SQL/tgstation_schema_prefixed.sql +++ b/SQL/tgstation_schema_prefixed.sql @@ -34,7 +34,7 @@ CREATE TABLE `SS13_admin` ( -- Table structure for table `SS13_admin_log` -- -DROP TABLE IF EXISTS `SS13_dmin_log`; +DROP TABLE IF EXISTS `SS13_admin_log`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `SS13_admin_log` ( @@ -59,9 +59,18 @@ CREATE TABLE `SS13_admin_ranks` ( `rank` varchar(40) NOT NULL, `flags` int(16) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1; +) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; +insert into SS13_admin_ranks (rank, flags) values ('Moderator',2); +insert into SS13_admin_ranks (rank, flags) values ('Admin Candidate',2); +insert into SS13_admin_ranks (rank, flags) values ('Trial Admin',5638); +insert into SS13_admin_ranks (rank, flags) values ('Badmin',5727); +insert into SS13_admin_ranks (rank, flags) values ('Game Admin',8063); +insert into SS13_admin_ranks (rank, flags) values ('Game Master',65535); +insert into SS13_admin_ranks (rank, flags) values ('Host',65535); +insert into SS13_admin_ranks (rank, flags) values ('Coder',5168); + -- -- Table structure for table `SS13_ban` -- @@ -72,31 +81,28 @@ DROP TABLE IF EXISTS `SS13_ban`; CREATE TABLE `SS13_ban` ( `id` int(11) NOT NULL AUTO_INCREMENT, `bantime` datetime NOT NULL, - `server_ip` int(10) unsigned NOT NULL, - `server_port` smallint(5) unsigned NOT NULL, - `bantype` enum('PERMABAN','TEMPBAN','JOB_PERMABAN','JOB_TEMPBAN','ADMIN_PERMABAN','ADMIN_TEMPBAN') NOT NULL, - `reason` varchar(2048) NOT NULL, + `serverip` varchar(32) NOT NULL, + `bantype` varchar(32) NOT NULL, + `reason` text NOT NULL, `job` varchar(32) DEFAULT NULL, `duration` int(11) NOT NULL, + `rounds` int(11) DEFAULT NULL, `expiration_time` datetime NOT NULL, `ckey` varchar(32) NOT NULL, `computerid` varchar(32) NOT NULL, - `ip` int(10) unsigned NOT NULL, + `ip` varchar(32) NOT NULL, `a_ckey` varchar(32) NOT NULL, `a_computerid` varchar(32) NOT NULL, - `a_ip` int(10) unsigned NOT NULL, - `who` varchar(2048) NOT NULL, - `adminwho` varchar(2048) NOT NULL, - `edits` varchar(2048) DEFAULT NULL, - `unbanned` tinyint(3) unsigned DEFAULT NULL, + `a_ip` varchar(32) NOT NULL, + `who` text NOT NULL, + `adminwho` text NOT NULL, + `edits` text, + `unbanned` int(2) DEFAULT NULL, `unbanned_datetime` datetime DEFAULT NULL, `unbanned_ckey` varchar(32) DEFAULT NULL, `unbanned_computerid` varchar(32) DEFAULT NULL, - `unbanned_ip` int(10) unsigned DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `idx_ban_checkban` (`ckey`,`bantype`,`expiration_time`,`unbanned`,`job`), - KEY `idx_ban_isbanned` (`ckey`,`ip`,`computerid`,`bantype`,`expiration_time`,`unbanned`), - KEY `idx_ban_count` (`id`,`a_ckey`,`bantype`,`expiration_time`,`unbanned`) + `unbanned_ip` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; @@ -110,10 +116,9 @@ DROP TABLE IF EXISTS `SS13_connection_log`; CREATE TABLE `SS13_connection_log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `datetime` datetime DEFAULT NULL, - `server_ip` int(10) unsigned NOT NULL, - `server_port` smallint(5) unsigned NOT NULL, + `serverip` varchar(45) DEFAULT NULL, `ckey` varchar(45) DEFAULT NULL, - `ip` int(10) unsigned NOT NULL, + `ip` varchar(18) DEFAULT NULL, `computerid` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; @@ -128,23 +133,22 @@ DROP TABLE IF EXISTS `SS13_death`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `SS13_death` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `pod` varchar(50) NOT NULL, - `coord` varchar(32) NOT NULL, - `mapname` varchar(32) NOT NULL, - `server_ip` int(10) unsigned NOT NULL, - `server_port` smallint(5) unsigned NOT NULL, + `pod` text NOT NULL COMMENT 'Place of death', + `coord` text NOT NULL COMMENT 'X, Y, Z POD', + `mapname` text NOT NULL, + `server` text NOT NULL, `tod` datetime NOT NULL COMMENT 'Time of death', - `job` varchar(32) NOT NULL, - `special` varchar(32) DEFAULT NULL, - `name` varchar(32) NOT NULL, - `byondkey` varchar(32) NOT NULL, - `laname` varchar(32) DEFAULT NULL, - `lakey` varchar(32) DEFAULT NULL, - `gender` enum('neuter','male','female','plural') NOT NULL, - `bruteloss` smallint(5) unsigned NOT NULL, - `brainloss` smallint(5) unsigned NOT NULL, - `fireloss` smallint(5) unsigned NOT NULL, - `oxyloss` smallint(5) unsigned NOT NULL, + `job` text NOT NULL, + `special` text NOT NULL, + `name` text NOT NULL, + `byondkey` text NOT NULL, + `laname` text NOT NULL COMMENT 'Last attacker name', + `lakey` text NOT NULL COMMENT 'Last attacker key', + `gender` text NOT NULL, + `bruteloss` int(11) NOT NULL, + `brainloss` int(11) NOT NULL, + `fireloss` int(11) NOT NULL, + `oxyloss` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; @@ -167,22 +171,6 @@ CREATE TABLE `SS13_feedback` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Table structure for table `SS13_ipintel` --- - -DROP TABLE IF EXISTS `SS13_ipintel`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `SS13_ipintel` ( - `ip` int(10) unsigned NOT NULL, - `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `intel` double NOT NULL DEFAULT '0', - PRIMARY KEY (`ip`), - KEY `idx_ipintel` (`ip`,`intel`,`date`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - -- -- Table structure for table `SS13_legacy_population` -- @@ -204,49 +192,17 @@ CREATE TABLE `SS13_legacy_population` ( -- DROP TABLE IF EXISTS `SS13_library`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; CREATE TABLE `SS13_library` ( `id` int(11) NOT NULL AUTO_INCREMENT, `author` varchar(45) NOT NULL, `title` varchar(45) NOT NULL, `content` text NOT NULL, - `category` enum('Any','Fiction','Non-Fiction','Adult','Reference','Religion') NOT NULL, - `ckey` varchar(32) NOT NULL DEFAULT 'LEGACY', - `datetime` datetime NOT NULL, - `deleted` tinyint(1) unsigned DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `deleted_idx` (`deleted`), - KEY `idx_lib_id_del` (`id`,`deleted`), - KEY `idx_lib_del_title` (`deleted`,`title`), - KEY `idx_lib_search` (`deleted`,`author`,`title`,`category`) + `category` varchar(45) NOT NULL, + `ckey` varchar(45) DEFAULT 'LEGACY', + `datetime` datetime DEFAULT NULL, + `deleted` tinyint(1) DEFAULT NULL, + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `SS13_messages` --- - -DROP TABLE IF EXISTS `SS13_messages`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `SS13_messages` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `type` enum('memo','message','message sent','note','watchlist entry') NOT NULL, - `targetckey` varchar(32) NOT NULL, - `adminckey` varchar(32) NOT NULL, - `text` varchar(2048) NOT NULL, - `timestamp` datetime NOT NULL, - `server` varchar(32) DEFAULT NULL, - `secret` tinyint(1) unsigned NOT NULL, - `lasteditor` varchar(32) DEFAULT NULL, - `edits` varchar(2048) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `idx_msg_ckey_time` (`targetckey`,`timestamp`), - KEY `idx_msg_type_ckeys_time` (`type`,`targetckey`,`adminckey`,`timestamp`), - KEY `idx_msg_type_ckey_time_odr` (`type`,`targetckey`,`timestamp`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; -- -- Table structure for table `SS13_player` @@ -260,13 +216,11 @@ CREATE TABLE `SS13_player` ( `ckey` varchar(32) NOT NULL, `firstseen` datetime NOT NULL, `lastseen` datetime NOT NULL, - `ip` int(10) unsigned NOT NULL, + `ip` varchar(18) NOT NULL, `computerid` varchar(32) NOT NULL, `lastadminrank` varchar(32) NOT NULL DEFAULT 'Player', PRIMARY KEY (`id`), - UNIQUE KEY `ckey` (`ckey`), - KEY `idx_player_cid_ckey` (`computerid`,`ckey`), - KEY `idx_player_ip_ckey` (`ip`,`ckey`) + UNIQUE KEY `ckey` (`ckey`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; @@ -287,8 +241,7 @@ CREATE TABLE `SS13_poll_option` ( `descmin` varchar(32) DEFAULT NULL, `descmid` varchar(32) DEFAULT NULL, `descmax` varchar(32) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `idx_pop_pollid` (`pollid`) + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; @@ -301,20 +254,17 @@ DROP TABLE IF EXISTS `SS13_poll_question`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `SS13_poll_question` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `polltype` enum('OPTION','TEXT','NUMVAL','MULTICHOICE','IRV') NOT NULL, + `polltype` varchar(16) NOT NULL DEFAULT 'OPTION', `starttime` datetime NOT NULL, `endtime` datetime NOT NULL, `question` varchar(255) NOT NULL, - `adminonly` tinyint(1) unsigned NOT NULL, + `adminonly` tinyint(1) DEFAULT '0', `multiplechoiceoptions` int(2) DEFAULT NULL, - `createdby_ckey` varchar(32) DEFAULT NULL, - `createdby_ip` varchar(32) DEFAULT NULL, - `for_trialmin` varchar(32) DEFAULT NULL, - `dontshow` tinyint(1) unsigned NOT NULL, - PRIMARY KEY (`id`), - KEY `idx_pquest_question_time_ckey` (`question`,`starttime`,`endtime`,`createdby_ckey`,`createdby_ip`), - KEY `idx_pquest_time_admin` (`starttime`,`endtime`,`adminonly`), - KEY `idx_pquest_id_time_type_admin` (`id`,`starttime`,`endtime`,`polltype`,`adminonly`) + `createdby_ckey` varchar(45) NULL DEFAULT NULL, + `createdby_ip` varchar(45) NULL DEFAULT NULL, + `for_trialmin` varchar(45) NULL DEFAULT NULL, + `dontshow` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; @@ -330,11 +280,10 @@ CREATE TABLE `SS13_poll_textreply` ( `datetime` datetime NOT NULL, `pollid` int(11) NOT NULL, `ckey` varchar(32) NOT NULL, - `ip` int(10) unsigned NOT NULL, - `replytext` varchar(2048) NOT NULL, + `ip` varchar(18) NOT NULL, + `replytext` text NOT NULL, `adminrank` varchar(32) NOT NULL DEFAULT 'Player', - PRIMARY KEY (`id`), - KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`) + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; @@ -350,21 +299,47 @@ CREATE TABLE `SS13_poll_vote` ( `datetime` datetime NOT NULL, `pollid` int(11) NOT NULL, `optionid` int(11) NOT NULL, - `ckey` varchar(32) NOT NULL, - `ip` int(10) unsigned NOT NULL, + `ckey` varchar(255) NOT NULL, + `ip` varchar(16) NOT NULL, `adminrank` varchar(32) NOT NULL, `rating` int(2) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `idx_pvote_pollid_ckey` (`pollid`,`ckey`), - KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`) + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- +-- Table structure for table `SS13_ipintel` +-- + +DROP TABLE IF EXISTS `SS13_ipintel`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `SS13_ipintel` ( +`ip` INT UNSIGNED NOT NULL , +`date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL , +`intel` REAL NOT NULL DEFAULT '0', +PRIMARY KEY ( `ip` ) +) ENGINE = INNODB; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `SS13_messages` +-- + +DROP TABLE IF EXISTS `SS13_messages`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `SS13_messages` ( + `id` int(11) NOT NULL AUTO_INCREMENT , + `type` varchar(32) NOT NULL , + `targetckey` varchar(32) NOT NULL , + `adminckey` varchar(32) NOT NULL , + `text` text NOT NULL , + `timestamp` datetime NOT NULL , + `server` varchar(32) NULL , + `secret` tinyint(1) NULL DEFAULT 1 , + `lasteditor` varchar(32) NULL , + `edits` text NULL , + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm index a5aead43aff..3e35d83715d 100644 --- a/code/modules/admin/DB_ban/functions.dm +++ b/code/modules/admin/DB_ban/functions.dm @@ -1,7 +1,7 @@ #define MAX_ADMIN_BANS_PER_ADMIN 1 //Either pass the mob you wish to ban in the 'banned_mob' attribute, or the banckey, banip and bancid variables. If both are passed, the mob takes priority! If a mob is not passed, banckey is the minimum that needs to be passed! banip and bancid are optional. -/datum/admins/proc/DB_ban_record(bantype, mob/banned_mob, duration = -1, reason, job = "", banckey = null, banip = null, bancid = null) +/datum/admins/proc/DB_ban_record(bantype, mob/banned_mob, duration = -1, reason, job = "", rounds = 0, banckey = null, banip = null, bancid = null) if(!check_rights(R_BAN)) return @@ -10,6 +10,7 @@ src << "Failed to establish database connection." return + var/serverip = "[world.internet_address]:[world.port]" var/bantype_pass = 0 var/bantype_str var/maxadminbancheck //Used to limit the number of active bans of a certein type that each admin can give. Used to protect against abuse or mutiny. @@ -120,7 +121,7 @@ usr << "You already logged [MAX_ADMIN_BANS_PER_ADMIN] admin ban(s) or more. Do not abuse this function!" return - var/sql = "INSERT INTO [format_table_name("ban")] (`bantime`,`server_ip`,`server_port`,`bantype`,`reason`,`job`,`duration`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`) VALUES (Now(), INET_ATON('[world.internet_address]'), '[world.port]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', INET_ATON('[ip]'), '[a_ckey]', '[a_computerid]', INET_ATON('[a_ip]'), '[who]', '[adminwho]')" + var/sql = "INSERT INTO [format_table_name("ban")] (`id`,`bantime`,`serverip`,`bantype`,`reason`,`job`,`duration`,`rounds`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`,`edits`,`unbanned`,`unbanned_datetime`,`unbanned_ckey`,`unbanned_computerid`,`unbanned_ip`) VALUES (null, Now(), '[serverip]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], [(rounds)?"[rounds]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', '[ip]', '[a_ckey]', '[a_computerid]', '[a_ip]', '[who]', '[adminwho]', '', null, null, null, null, null)" var/DBQuery/query_insert = dbcon.NewQuery(sql) query_insert.Execute() usr << "Ban saved to database." @@ -304,7 +305,7 @@ var/unban_computerid = src.owner:computer_id var/unban_ip = src.owner:address - var/sql_update = "UPDATE [format_table_name("ban")] SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = '[unban_ckey]', unbanned_computerid = '[unban_computerid]', unbanned_ip = INET_ATON('[unban_ip]') WHERE id = [id]" + var/sql_update = "UPDATE [format_table_name("ban")] SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = '[unban_ckey]', unbanned_computerid = '[unban_computerid]', unbanned_ip = '[unban_ip]' WHERE id = [id]" message_admins("[key_name_admin(usr)] has lifted [pckey]'s ban.",1) var/DBQuery/query_update = dbcon.NewQuery(sql_update) diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index a543e6fe81b..7e1b8f038b6 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -74,18 +74,20 @@ if(computer_id) cidquery = " OR computerid = '[computer_id]' " - var/DBQuery/query = dbcon.NewQuery("SELECT ckey, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)") + var/DBQuery/query = dbcon.NewQuery("SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)") query.Execute() while(query.NextRow()) var/pckey = query.item[1] - var/ackey = query.item[2] - var/reason = query.item[3] - var/expiration = query.item[4] - var/duration = query.item[5] - var/bantime = query.item[6] - var/bantype = query.item[7] + //var/pip = query.item[2] + //var/pcid = query.item[3] + var/ackey = query.item[4] + var/reason = query.item[5] + var/expiration = query.item[6] + var/duration = query.item[7] + var/bantime = query.item[8] + var/bantype = query.item[9] if (bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN") //admin bans MUST match on ckey to prevent cid-spoofing attacks // as well as dynamic ip abuse diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index e824428106a..3910310caa7 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -4,7 +4,7 @@ return 0 if(!M.client) //no cache. fallback to a DBQuery - var/DBQuery/query = dbcon.NewQuery("SELECT reason FROM [format_table_name("ban")] WHERE ckey = '[sanitizeSQL(M.ckey)]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[sanitizeSQL(rank)]'") + var/DBQuery/query = dbcon.NewQuery("SELECT reason FROM [format_table_name("ban")] WHERE ckey = '[sanitizeSQL(M.ckey)]' AND job = '[sanitizeSQL(rank)]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") if(!query.Execute()) log_game("SQL ERROR obtaining jobbans. Error : \[[query.ErrorMsg()]\]\n") return diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 80282b7d911..7d3dad07644 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -249,7 +249,7 @@ else message_admins("Ban process: A mob matching [playermob.ckey] was found at location [playermob.x], [playermob.y], [playermob.z]. Custom ip and computer id fields replaced with the ip and computer id from the located mob.") - if(!DB_ban_record(bantype, playermob, banduration, banreason, banjob, banckey, banip, bancid )) + if(!DB_ban_record(bantype, playermob, banduration, banreason, banjob, null, banckey, banip, bancid )) usr << "Failed to apply ban." return create_message("note", banckey, null, banreason, null, null, 0, 0) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 24065a8a8df..b7984a7fe4c 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -351,7 +351,7 @@ var/next_external_rsc = 0 var/sql_ckey = sanitizeSQL(ckey) - var/DBQuery/query_ip = dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ip = INET_ATON('[address]') AND ckey != '[sql_ckey]'") + var/DBQuery/query_ip = dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ip = '[address]' AND ckey != '[sql_ckey]'") query_ip.Execute() related_accounts_ip = "" while(query_ip.NextRow()) @@ -375,11 +375,12 @@ var/next_external_rsc = 0 var/sql_admin_rank = sanitizeSQL(admin_rank) - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("player")] (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[sql_ckey]', Now(), Now(), INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]') ON DUPLICATE KEY UPDATE lastseen = VALUES(lastseen), ip = VALUES(ip), computerid = VALUES(computerid), lastadminrank = VALUES(lastadminrank)") + var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("player")] (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[sql_ckey]', Now(), Now(), '[sql_ip]', '[sql_computerid]', '[sql_admin_rank]') ON DUPLICATE KEY UPDATE lastseen = VALUES(lastseen), ip = VALUES(ip), computerid = VALUES(computerid), lastadminrank = VALUES(lastadminrank)") query_insert.Execute() //Logging player access - var/DBQuery/query_accesslog = dbcon.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_ip`,`server_port`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),INET_ATON('[world.internet_address]'),'[world.port]''[sql_ckey]',INET_ATON('[sql_ip]'),'[sql_computerid]');") + var/serverip = "[world.internet_address]:[world.port]" + var/DBQuery/query_accesslog = dbcon.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`serverip`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),'[serverip]','[sql_ckey]','[sql_ip]','[sql_computerid]');") query_accesslog.Execute() /client/proc/check_randomizer(topic) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index c6202d60114..5f9377a2b19 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -745,7 +745,7 @@ var/list/preferences_datums = list() if(href_list["jobbancheck"]) var/job = sanitizeSQL(href_list["jobbancheck"]) var/sql_ckey = sanitizeSQL(user.ckey) - var/DBQuery/query_get_jobban = dbcon.NewQuery("SELECT reason, bantime, duration, expiration_time, a_ckey FROM [format_table_name("ban")] WHERE ckey = '[sql_ckey]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[job]'") + var/DBQuery/query_get_jobban = dbcon.NewQuery("SELECT reason, bantime, duration, expiration_time, a_ckey FROM [format_table_name("ban")] WHERE ckey = '[sql_ckey]' AND job = '[job]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") if(!query_get_jobban.Execute()) var/err = query_get_jobban.ErrorMsg() log_game("SQL ERROR obtaining reason from ban table. Error : \[[err]\]\n") diff --git a/code/modules/mob/new_player/poll.dm b/code/modules/mob/new_player/poll.dm index 6a8346c07ee..1083a9b3543 100644 --- a/code/modules/mob/new_player/poll.dm +++ b/code/modules/mob/new_player/poll.dm @@ -6,7 +6,7 @@ if(!dbcon.IsConnected()) usr << "Failed to establish database connection." return - var/DBQuery/query_get_poll = dbcon.NewQuery("SELECT id, question FROM [format_table_name("poll_question")] WHERE Now() BETWEEN starttime AND endtime [(client.holder ? "" : "AND adminonly = false")]") + var/DBQuery/query_get_poll = dbcon.NewQuery("SELECT id, question FROM [format_table_name("poll_question")] WHERE [(client.holder ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime") if(!query_get_poll.Execute()) var/err = query_get_poll.ErrorMsg() log_game("SQL ERROR obtaining id, question from poll_question table. Error : \[[err]\]\n") @@ -386,7 +386,17 @@ if (!pollid || pollid < 0) return 0 //validate the poll is actually the right type of poll and its still active - var/DBQuery/select_query = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime AND polltype = '[type]' [(holder ? "" : "AND adminonly = false")]") + var/DBQuery/select_query = dbcon.NewQuery({" + SELECT id + FROM [format_table_name("poll_question")] + WHERE + [(holder ? "" : "adminonly = false AND")] + id = [pollid] + AND + Now() BETWEEN starttime AND endtime + AND + polltype = '[type]' + "}) if (!select_query.Execute()) var/err = select_query.ErrorMsg() log_game("SQL ERROR validating poll via poll_question table. Error : \[[err]\]\n") @@ -451,7 +461,7 @@ for (var/vote in numberedvotelist) if (sqlrowlist != "") sqlrowlist += ", " //a comma (,) at the start of the first row to insert will trigger a SQL error - sqlrowlist += "(Now(), [pollid], [vote], '[sanitizeSQL(ckey)]', INET_ATON('[sanitizeSQL(address)]'), '[sanitizeSQL(rank)]')" + sqlrowlist += "(Now(), [pollid], [vote], '[sanitizeSQL(ckey)]', '[sanitizeSQL(address)]', '[sanitizeSQL(rank)]')" //now lets delete their old votes (if any) var/DBQuery/voted_query = dbcon.NewQuery("DELETE FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") @@ -485,7 +495,7 @@ var/adminrank = poll_check_voted(pollid) if(!adminrank) return - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')") + var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', '[client.address]', '[adminrank]')") if(!query_insert.Execute()) var/err = query_insert.ErrorMsg() log_game("SQL ERROR adding vote to table. Error : \[[err]\]\n") @@ -514,7 +524,7 @@ if(!(length(replytext) > 0) || !(length(replytext) <= 8000)) usr << "The text you entered was invalid or too long. Please correct the text and submit again." return - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("poll_textreply")] (datetime ,pollid ,ckey ,ip ,replytext ,adminrank) VALUES (Now(), [pollid], '[ckey]', INET_ATON('[client.address]'), '[replytext]', '[adminrank]')") + var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("poll_textreply")] (datetime ,pollid ,ckey ,ip ,replytext ,adminrank) VALUES (Now(), [pollid], '[ckey]', '[client.address]', '[replytext]', '[adminrank]')") if(!query_insert.Execute()) var/err = query_insert.ErrorMsg() log_game("SQL ERROR adding text reply to table. Error : \[[err]\]\n") @@ -544,7 +554,7 @@ var/adminrank = "Player" if(client.holder) adminrank = client.holder.rank - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime ,pollid ,optionid ,ckey ,ip ,adminrank, rating) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]', [(isnull(rating)) ? "null" : rating])") + var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime ,pollid ,optionid ,ckey ,ip ,adminrank, rating) VALUES (Now(), [pollid], [optionid], '[ckey]', '[client.address]', '[adminrank]', [(isnull(rating)) ? "null" : rating])") if(!query_insert.Execute()) var/err = query_insert.ErrorMsg() log_game("SQL ERROR adding vote to table. Error : \[[err]\]\n") @@ -586,7 +596,7 @@ var/adminrank = "Player" if(client.holder) adminrank = client.holder.rank - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')") + var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', '[client.address]', '[adminrank]')") if(!query_insert.Execute()) var/err = query_insert.ErrorMsg() log_game("SQL ERROR adding vote to table. Error : \[[err]\]\n") diff --git a/code/orphaned_procs/statistics.dm b/code/orphaned_procs/statistics.dm index b8eccb06e26..58a473138d7 100644 --- a/code/orphaned_procs/statistics.dm +++ b/code/orphaned_procs/statistics.dm @@ -269,10 +269,11 @@ var/datum/feedback/blackbox = new() var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") var/coord = "[L.x], [L.y], [L.z]" var/map = MAP_NAME + var/server = "[world.internet_address]:[world.port]" if(!dbcon.Connect()) log_game("SQL ERROR during death reporting. Failed to connect.") else - var/DBQuery/query = dbcon.NewQuery("INSERT INTO [format_table_name("death")] (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord, mapname, server_ip, server_port) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[L.gender]', [L.getBruteLoss()], [L.getFireLoss()], [L.brainloss], [L.getOxyLoss()], '[coord]', '[map]', INET_ATON('[world.internet_address]'), '[world.port]')") + var/DBQuery/query = dbcon.NewQuery("INSERT INTO [format_table_name("death")] (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord, mapname, server) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[L.gender]', [L.getBruteLoss()], [L.getFireLoss()], [L.brainloss], [L.getOxyLoss()], '[coord]', '[map]', '[server]')") if(!query.Execute()) var/err = query.ErrorMsg() log_game("SQL ERROR during death reporting. Error : \[[err]\]\n")