From 79e80804ec25370cd858f52a0dd10bd43395248b Mon Sep 17 00:00:00 2001 From: PavelBegunkov <asml.Silence@gmail.com> Date: Sun, 21 Dec 2014 20:55:46 +0300 Subject: [PATCH] fix of fix :/ --- db/StoredProcedures.sql | 30 +++++---- db/fix.sql | 136 +++++++++++++++++++++++++++++----------- 2 files changed, 118 insertions(+), 48 deletions(-) diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql index da6a35ca0..1744c5924 100644 --- a/db/StoredProcedures.sql +++ b/db/StoredProcedures.sql @@ -2338,13 +2338,13 @@ BEGIN -- delete extra module from DELETE FROM `submodules` - WHERE submodules.ID in - (SELECT submodules.ID - FROM `modules` - LEFT JOIN `submodules` ON submodules.ModuleID = modules.ID - WHERE modules.Type = 4 and modules.DisciplineID = DisciplineID - ORDER BY submodules.OrderNum DESC LIMIT 1); - + WHERE submodules.ID IN + ( + SELECT submodules.ID + FROM `modules` + LEFT JOIN `submodules` ON submodules.ModuleID = modules.ID + WHERE modules.Type = 4 and modules.DisciplineID = DisciplineID and submodules.OrderNum > 1 + ); SET extraMax = 6; ELSE SET extraMax = 30; @@ -2988,7 +2988,7 @@ CREATE FUNCTION `AddModuleExtra` ( `TeacherID` INT, ) RETURNS int(11) NO SQL BEGIN - DECLARE checker, vModule, vType INT; + DECLARE checker, vModule, vType, vGap INT; IF NOT InternalIsTeacherAuthor(TeacherID,DisciplineID) THEN RETURN -1; @@ -3023,14 +3023,18 @@ BEGIN RETURN -1; END IF; + SET vGap = -1; IF vType = 1 THEN - SET checker = 6; - ELSE - SET checker = 30; - SET checker = AddSubmodule(TeacherID, vModule, checker, '', NULL, 'LandmarkControl'); + -- exam + SET vGap = 6; + END IF; + IF vType = 2 THEN + -- credit + SET vGap = 30; + SET checker = AddSubmodule(TeacherID, vModule, vGap, '', NULL, 'LandmarkControl'); END IF; - SET checker = AddSubmodule(TeacherID, vModule, checker, '', NULL, 'LandmarkControl'); + SET checker = AddSubmodule(TeacherID, vModule, vGap, '', NULL, 'LandmarkControl'); RETURN vModule; END // diff --git a/db/fix.sql b/db/fix.sql index 26077e051..a34b5995b 100644 --- a/db/fix.sql +++ b/db/fix.sql @@ -1,6 +1,7 @@ DELIMITER // -ALTER TABLE `modules` CHANGE `Type` `Type` enum('regular','exam', 'bonus', 'extra') NOT NULL DEFAULT 'regular'// + + DROP FUNCTION IF EXISTS AddSubmodule// CREATE FUNCTION `AddSubmodule` ( `TeacherID` INT, @@ -13,19 +14,6 @@ CREATE FUNCTION `AddSubmodule` ( `TeacherID` INT, NO SQL BEGIN DECLARE checker INT; - - SET checker = -1; - SELECT disciplines.ID - INTO checker - FROM `modules` - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID - WHERE TeacherID = disciplines.AuthorID AND - ModuleID = modules.ID - LIMIT 1; - IF checker <= 0 - THEN - RETURN -1; - END IF; SET checker = 0; @@ -63,18 +51,20 @@ CREATE FUNCTION `AddModuleExtra` ( `TeacherID` INT, ) RETURNS int(11) NO SQL BEGIN - DECLARE checker, vModule INT; + DECLARE checker, vModule, vType, vGap INT; IF NOT InternalIsTeacherAuthor(TeacherID,DisciplineID) THEN RETURN -1; END IF; + SET vType = -1; SET checker = -1; SELECT modules.ID INTO checker FROM `modules` WHERE DisciplineID = modules.DisciplineID AND - modules.Type = 4; + modules.Type = 4 + LIMIT 1; IF checker > 0 THEN RETURN -2; END IF; @@ -85,9 +75,10 @@ BEGIN VALUES ( 'Добор баллов' , 2900666 , DisciplineID, 4 ); SET vModule = -1; - SELECT modules.ID - INTO vModule + SELECT modules.ID, disciplines.ExamType + INTO vModule, vType FROM `modules` + INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID WHERE DisciplineID = modules.DisciplineID AND modules.Type = 4 LIMIT 1; @@ -95,7 +86,16 @@ BEGIN RETURN -1; END IF; - SET checker = AddSubmodule(TeacherID, vModule, 6, '', NULL, 'LandmarkControl'); + SET vGap = -1; + IF vType = 1 THEN + SET vGap = 6; + END IF; + IF vType = 2 THEN + SET vGap = 30; + SET checker = AddSubmodule(TeacherID, vModule, vGap, '', NULL, 'LandmarkControl'); + END IF; + + SET checker = AddSubmodule(TeacherID, vModule, vGap, '', NULL, 'LandmarkControl'); RETURN vModule; END // @@ -140,6 +140,9 @@ BEGIN ); END // +ALTER TABLE `modules` CHANGE `Type` `Type` enum('regular','exam', 'bonus', 'extra') NOT NULL DEFAULT 'regular'// + + DELETE FROM `rating_table` WHERE rating_table.SubmoduleID IN ( @@ -151,28 +154,91 @@ WHERE rating_table.SubmoduleID IN -SELECT AddSubmodule(disciplines.AuthorID, modules.ID, 40, '', NULL, 'LandmarkControl') AS '1', - AddSubmodule(disciplines.AuthorID, modules.ID, 40, '', NULL, 'LandmarkControl') AS '2' -FROM `modules` -INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID -WHERE modules.Type = 2// +INSERT INTO `page_access` (`ID`, `Pagename`, `Bitmask`) VALUES (NULL, 'teacher:exam', '6')// +ALTER TABLE `specializations` ADD `Code` varchar(12) NULL// -DELETE FROM `rating_table` -WHERE rating_table.SubmoduleID IN - ( SELECT submodules.ID - FROM `modules` - LEFT JOIN `submodules` ON submodules.ModuleID = modules.ID - WHERE modules.Type = 2 - )// + +-- SELECT modules.ID, AddSubmodule(disciplines.AuthorID, modules.ID, 40, '', NULL, 'LandmarkControl') AS '1' +-- FROM `modules` +-- INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID +-- WHERE modules.Type = 2 // + + + + +DROP PROCEDURE IF EXISTS fix_modules// +CREATE PROCEDURE fix_modules() +BEGIN + DECLARE checker INT; + DECLARE vid INT; + DECLARE vname INT; + -- this flag will be set to true when cursor reaches end of table + DECLARE exit_loop BOOLEAN; + -- Declare the cursor + DECLARE employee_cursor CURSOR FOR + SELECT modules.ID AS 'ID', disciplines.AuthorID + FROM `modules` + INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID + WHERE modules.Type = 2; + + -- set exit_loop flag to true if there are no more rows + DECLARE CONTINUE HANDLER FOR NOT FOUND SET exit_loop = TRUE; + -- open the cursor + OPEN employee_cursor; + -- start looping + employee_loop: LOOP + -- read the name from next row into the variables + FETCH employee_cursor INTO vid, vname; + SET checker = AddSubmodule(vname, vid, 40, '', NULL, 'LandmarkControl'); + SET checker = AddSubmodule(vname, vid, 40, '', NULL, 'LandmarkControl'); + IF exit_loop THEN + CLOSE employee_cursor; + LEAVE employee_loop; + END IF; + END LOOP employee_loop; +END // + + DROP PROCEDURE IF EXISTS fix_modules2// + CREATE PROCEDURE fix_modules2() +BEGIN + DECLARE checker INT; + DECLARE vid INT; + DECLARE vname INT; + -- this flag will be set to true when cursor reaches end of table + DECLARE exit_loop BOOLEAN; + -- Declare the cursor + DECLARE employee_cursor CURSOR FOR + SELECT disciplines.ID AS 'ID', disciplines.AuthorID + FROM `disciplines`; + + -- set exit_loop flag to true if there are no more rows + DECLARE CONTINUE HANDLER FOR NOT FOUND SET exit_loop = TRUE; + -- open the cursor + OPEN employee_cursor; + -- start looping + employee_loop: LOOP + -- read the name from next row into the variables + FETCH employee_cursor INTO vid, vname; + SET checker = AddModuleExtra(vname, vid); + IF exit_loop THEN + CLOSE employee_cursor; + LEAVE employee_loop; + END IF; + END LOOP employee_loop; +END // -SELECT AddModuleExtra(disciplines.AuthorID, disciplines.ID) -FROM `disciplines`// + CALL fix_modules()// + CALL fix_modules2()// + DROP PROCEDURE IF EXISTS fix_modules// + DROP PROCEDURE IF EXISTS fix_modules2// +-- SELECT AddModuleExtra(disciplines.AuthorID, disciplines.ID) +-- FROM `disciplines`// -INSERT INTO `rating`.`page_access` (`ID`, `Pagename`, `Bitmask`) VALUES (NULL, 'teacher:exam', '6'); -ALTER TABLE `specializations` ADD `Code` varchar(12) NULL; +DELETE FROM submodules WHERE submodules.ModuleID IN (SELECT modules.ID FROM modules WHERE modules.Type = 4)// +DELETE FROM modules WHERE modules.Type = 4// DELIMITER ; \ No newline at end of file -- GitLab