From 1e5602fc4c75e859cce050322eb5e76c9291bc22 Mon Sep 17 00:00:00 2001 From: oliver Date: Tue, 19 May 2015 11:56:46 +0200 Subject: [PATCH] add routines to database create-script --- db/create.sql | 205 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) diff --git a/db/create.sql b/db/create.sql index 7fb329b8..b93ba39f 100644 --- a/db/create.sql +++ b/db/create.sql @@ -1943,6 +1943,211 @@ CREATE TABLE `xplevels` ( CONSTRAINT `xplevels_ibfk_2` FOREIGN KEY (`seminary_id`) REFERENCES `seminaries` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping routines for database 'z' +-- +/*!50003 DROP PROCEDURE IF EXISTS `update_cache_charactergroups` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +DELIMITER ;; +CREATE DEFINER=`z`@`%` PROCEDURE `update_cache_charactergroups`( + IN CHARACTERGROUPID INT(11) +) +BEGIN + /* XPs */ + REPLACE INTO cache_charactergroups + (charactergroup_id, xps) + SELECT charactergroups.id, IFNULL(SUM(ROUND(charactergroupsquests.xps * charactergroupsquests_groups.xps_factor)),0) AS xps + FROM charactergroups + LEFT JOIN charactergroupsquests_groups ON charactergroupsquests_groups.charactergroup_id = charactergroups.id + LEFT JOIN charactergroupsquests ON charactergroupsquests.id = charactergroupsquests_groups.charactergroupsquest_id + WHERE charactergroups.id = CHARACTERGROUPID; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 DROP PROCEDURE IF EXISTS `update_cache_charactergroups_charactergroupsquest` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +DELIMITER ;; +CREATE DEFINER=`z`@`%` PROCEDURE `update_cache_charactergroups_charactergroupsquest`( + IN CHARACTERGROUPSQUESTID INT(11) +) +BEGIN + DECLARE CHARACTERGROUPID INT; + DECLARE done INT DEFAULT FALSE; + DECLARE charactergroups_cursor CURSOR FOR + SELECT charactergroup_id + FROM charactergroupsquests_groups + WHERE charactergroupsquest_id = CHARACTERGROUPSQUESTID; + DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + + SET done = 0; + OPEN charactergroups_cursor; + get_charactergroups: LOOP + FETCH charactergroups_cursor INTO CHARACTERGROUPID; + IF done = TRUE THEN + LEAVE get_charactergroups; + END IF; + CALL update_cache_charactergroups(CHARACTERGROUPID); + END LOOP get_charactergroups; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 DROP PROCEDURE IF EXISTS `update_cache_characters` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +DELIMITER ;; +CREATE DEFINER=`z`@`%` PROCEDURE `update_cache_characters`( + IN CHARACTERID INT(11) +) +BEGIN + DECLARE QUESTXPS INT UNSIGNED; + DECLARE GROUPSXPS INT UNSIGNED; + DECLARE TOTALXPS INT UNSIGNED; + DECLARE XPLEVELID INT; + DECLARE AVATARID INT; + + /* XPs */ + SELECT IFNULL(SUM(quests.xps),0) INTO QUESTXPS + FROM quests_characters + LEFT JOIN quests ON quests.id = quests_characters.quest_id + WHERE quests_characters.character_id = CHARACTERID AND quests_characters.status = 3; + SELECT IFNULL(SUM(cache_charactergroups.xps),0) INTO GROUPSXPS + FROM characters_charactergroups + LEFT JOIN cache_charactergroups ON cache_charactergroups.charactergroup_id = characters_charactergroups.charactergroup_id + WHERE characters_charactergroups.character_id = CHARACTERID; + SET TOTALXPS = QUESTXPS + GROUPSXPS; + + /* XP-level */ + SELECT ( + SELECT id + FROM xplevels + WHERE seminary_id = charactertypes.seminary_id AND xps = ( + SELECT MAX(xps) + FROM xplevels AS xplevels_sub + WHERE xps <= TOTALXPS + ) + ) INTO XPLEVELID + FROM characters + LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id + WHERE characters.id = CHARACTERID; + + /* Avatar */ + SELECT avatars.id INTO AVATARID + FROM characters + LEFT JOIN avatars ON avatars.charactertype_id = characters.charactertype_id AND avatars.xplevel_id = XPLEVELID + WHERE characters.id = CHARACTERID; + + /* Set values */ + REPLACE INTO cache_characters + (character_id, xps, quest_xps, xplevel_id, avatar_id) + VALUES + (CHARACTERID, TOTALXPS, QUESTXPS, XPLEVELID, AVATARID); +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 DROP PROCEDURE IF EXISTS `update_cache_characters_charactergroup` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +DELIMITER ;; +CREATE DEFINER=`z`@`%` PROCEDURE `update_cache_characters_charactergroup`( + IN CHARACTERGROUPID INT(11) +) +BEGIN + DECLARE CHARACTERID INT; + DECLARE done INT DEFAULT FALSE; + DECLARE characters_cursor CURSOR FOR + SELECT character_id + FROM characters_charactergroups + WHERE charactergroup_id = CHARACTERGROUPID; + DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + + SET done = 0; + OPEN characters_cursor; + get_characters: LOOP + FETCH characters_cursor INTO CHARACTERID; + IF done = TRUE THEN + LEAVE get_characters; + END IF; + CALL update_cache_characters(CHARACTERID); + END LOOP get_characters; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 DROP PROCEDURE IF EXISTS `update_cache_characters_quest` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +DELIMITER ;; +CREATE DEFINER=`z`@`%` PROCEDURE `update_cache_characters_quest`( + IN QUESTID INT(11) +) +BEGIN + DECLARE CHARACTERID INT; + DECLARE done INT DEFAULT FALSE; + DECLARE characters_cursor CURSOR FOR + SELECT character_id + FROM quests_characters + WHERE quest_id = QUESTID AND status = 3; + DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + + SET done = 0; + OPEN characters_cursor; + get_characters: LOOP + FETCH characters_cursor INTO CHARACTERID; + IF done = TRUE THEN + LEAVE get_characters; + END IF; + CALL update_cache_characters(CHARACTERID); + END LOOP get_characters; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;