From 5964d3cd15324effc41ec0802e6b4f2dcb0b25d6 Mon Sep 17 00:00:00 2001 From: PavelBegunkov <asml.Silence@gmail.com> Date: Sun, 15 Feb 2015 13:04:52 +0300 Subject: [PATCH] REF: some opt --- db/StoredProcedures.sql | 154 +++++------------- .../classes/Model/DataArr/StudyGroups.php | 6 - 2 files changed, 45 insertions(+), 115 deletions(-) diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql index ca648782a..c21fbd151 100644 --- a/db/StoredProcedures.sql +++ b/db/StoredProcedures.sql @@ -7,6 +7,10 @@ DROP FUNCTION IF EXISTS SetHashKey// DROP PROCEDURE IF EXISTS GetCurSemesterID// DROP PROCEDURE IF EXISTS GetHashKey// +drop function if exists InternalIsTeacherBinded// +DROP FUNCTION IF EXISTS GetSemesterID// +DROP PROCEDURE IF EXISTS GetStudyGroupsForDisciplineFull// + # ------------------------------------------------------------------------------------------- # Label: abbreviations # ------------------------------------------------------------------------------------------- @@ -36,33 +40,19 @@ CREATE FUNCTION `InternalIsStudentAttached` (`pStudentID` INT, `pDisciplineID` INT) RETURNS BOOLEAN NO SQL BEGIN - DECLARE vChecker boolean; - - # 1. student in main group and not detached OR - # 2. student attached - SELECT ( ( disciplines_students.Type IS NOT NULL AND disciplines_students.Type = 'attach' ) OR - ( disciplines_groups.GroupID IS NOT NULL AND - disciplines_groups.GroupID = study_groups.ID AND - ( disciplines_students.Type IS NULL OR disciplines_students.Type != 'detach' ) - ) - ) - INTO vChecker - FROM `students` - INNER JOIN `study_groups` ON students.GroupID = study_groups.ID - LEFT JOIN `disciplines_students` ON disciplines_students.StudentID = pStudentID AND - disciplines_students.DisciplineID = pDisciplineID - LEFT JOIN `disciplines_groups` ON study_groups.ID = disciplines_groups.GroupID AND - disciplines_groups.DisciplineID = pDisciplineID - WHERE students.ID = pStudentID - LIMIT 1; - - RETURN (vChecker IS NOT NULL AND vChecker); + RETURN EXISTS( + SELECT * FROM `view_disciplines_students` + WHERE view_disciplines_students.StudentID = pStudentID AND + view_disciplines_students.DisciplineID = pDisciplineID AND + (view_disciplines_students.AttachType IS NULL OR + view_disciplines_students.AttachType = 'attach') + ); END // # check, that teacher teach this course -drop function if exists InternalIsTeacherBinded// -CREATE FUNCTION `InternalIsTeacherBinded` +drop function if exists InternalIsTeacherBounded// +CREATE FUNCTION `InternalIsTeacherBounded` ( `pTeacherID` INT, `pDisciplineID` INT) RETURNS BOOLEAN NO SQL BEGIN @@ -247,24 +237,18 @@ END // + # check, if any module is created DROP FUNCTION IF EXISTS InternalIsMapCreated// CREATE FUNCTION `InternalIsMapCreated` ( `pDisciplineID` INT) RETURNS int(11) NO SQL BEGIN - DECLARE vRes INT DEFAULT -1; - - SELECT SUM(submodules.MaxRate) - INTO vRes - FROM `modules` - LEFT JOIN `submodules` ON submodules.ModuleID = modules.ID - WHERE modules.DisciplineID = pDisciplineID AND - (modules.Type = 'regular' OR ( modules.Type = 'exam' AND submodules.OrderNum = 1)) - LIMIT 1; - - - RETURN (vRes = 100); + SELECT EXISTS ( + SELECT * FROM `view_disciplines_results` + WHERE view_disciplines_results.DisciplineID = pDisciplineID AND + view_disciplines_results.DisciplineRateMax = 100 + ); END // @@ -279,7 +263,7 @@ BEGIN SET accounts.Notification = 1 WHERE accounts.ID = AccountID LIMIT 1; - RETURN 0; + RETURN ROW_COUNT()-1; END // @@ -337,11 +321,10 @@ DROP FUNCTION IF EXISTS GetBitmaskByPagename// CREATE FUNCTION `GetBitmaskByPagename` (`pPagename` TEXT CHARSET utf8) RETURNS int(11) NO SQL BEGIN - RETURN( SELECT page_access.Bitmask + RETURN (SELECT page_access.Bitmask FROM `page_access` WHERE page_access.Pagename = pPagename - LIMIT 1 - ); + LIMIT 1); END // @@ -354,31 +337,14 @@ END // DROP FUNCTION IF EXISTS SetSemesterID// -CREATE FUNCTION `SetSemesterID` (`SemesterID` INT) RETURNS int(11) +CREATE FUNCTION `SetSemesterID` (`pSemesterID` INT) RETURNS int(11) NO SQL BEGIN - SET @CurrentSemesterID = SemesterID; + SET @CurrentSemesterID = pSemesterID; RETURN 0; END // - - - -DROP FUNCTION IF EXISTS GetSemesterID// -CREATE FUNCTION `GetSemesterID` (`pYear` INT, `pNum` INT) RETURNS int(11) - NO SQL -BEGIN - RETURN( SELECT semesters.ID - FROM `semesters` - WHERE semesters.Year = pYear AND semesters.Num = pNum - LIMIT 1 - ); -END // - - - - DROP PROCEDURE IF EXISTS GetSemesterInfo// CREATE PROCEDURE `GetSemesterInfo` (IN `pSemesterID` INT) NO SQL @@ -520,7 +486,7 @@ CREATE PROCEDURE `GetStudyGroups` (IN `pGradeID` INT, IN `pFacultyID` INT) NO SQL BEGIN - SELECT view_groups.GroupID AS 'ID', + SELECT view_groups.GroupID AS 'ID', view_groups.GroupNum, view_groups.SpecName, view_groups.SpecAbbr @@ -531,12 +497,12 @@ BEGIN END // -# get all study groups, that takes this course +# get all general study groups, that takes this course DROP PROCEDURE IF EXISTS GetStudyGroupsForDiscipline// CREATE PROCEDURE `GetStudyGroupsForDiscipline` (IN `pDisciplineID` INT) NO SQL BEGIN - SELECT view_groups.GroupID AS 'ID', + SELECT view_groups.GroupID AS 'ID', view_groups.GroupNum, view_groups.GradeID, view_groups.GradeNum, @@ -550,28 +516,6 @@ BEGIN ORDER BY view_groups.GradeID ASC, view_groups.GroupID ASC; END // -# get all study groups, that takes this course, including groups with attached students -DROP PROCEDURE IF EXISTS GetStudyGroupsForDisciplineFull// -CREATE PROCEDURE `GetStudyGroupsForDisciplineFull` (IN `pDisciplineID` INT) - NO SQL -BEGIN - SELECT DISTINCT - view_disciplines_students.GroupID AS 'ID', - view_disciplines_students.GroupNum, - view_disciplines_students.GradeID, - view_disciplines_students.GradeNum, - view_disciplines_students.Degree, - view_disciplines_students.SpecID, - view_disciplines_students.SpecName, - view_disciplines_students.SpecAbbr - FROM `view_disciplines_students` - WHERE view_disciplines_students.DisciplineID = pDisciplineID - ORDER BY view_disciplines_students.GradeID ASC, view_disciplines_students.GroupID ASC; -END // - - - - # ------------------------------------------------------------------------------------------- @@ -686,8 +630,7 @@ CREATE PROCEDURE `GetPersonalInfo` ( IN `pUserID` INT ) NO SQL BEGIN DECLARE vAccountType INT DEFAULT -1; - SELECT user_roles.Type - INTO vAccountType + SELECT user_roles.Type INTO vAccountType FROM `accounts` INNER JOIN `user_roles` ON accounts.UserRoleID = user_roles.ID WHERE accounts.ID = pUserID @@ -743,29 +686,23 @@ CREATE FUNCTION `ActivateAccount` ) RETURNS int(11) NO SQL BEGIN - DECLARE vUserID INT DEFAULT -1; # check for matching with existing accounts (note: Login & E-Mail are unique) DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; - # check for existing of accounts with such Code - SELECT accounts.ID - INTO vUserID - FROM `accounts` - WHERE accounts.ActivationCode = pCode - LIMIT 1; - IF vUserID <= 0 THEN - RETURN -2; - END IF; - # activate account UPDATE `accounts` - SET accounts.Login = pLogin, - accounts.Password = pPassword, - accounts.EMail = pEMail, - accounts.ActivationCode = NULL - WHERE accounts.ID = vUserID + SET accounts.Login = pLogin, + accounts.Password = pPassword, + accounts.EMail = pEMail, + accounts.ActivationCode = NULL + WHERE accounts.ActivationCode = pCode AND + (@vAccountID = accounts.ID) > 0 # save accountID LIMIT 1; - RETURN vUserID; + + IF (ROW_COUNT() = 0) THEN + RETURN -2; + END IF; + RETURN @vAccountID; END // @@ -928,8 +865,7 @@ END // DROP PROCEDURE IF EXISTS GetTeachersForDiscipline// CREATE PROCEDURE `GetTeachersForDiscipline`(IN `pDisciplineID` INT) NO SQL -BEGIN - +BEGIN SELECT view_disciplines_teachers.TeacherID AS 'ID', view_disciplines_teachers.LastName, view_disciplines_teachers.FirstName, @@ -975,7 +911,7 @@ BEGIN view_teachers.DepName, (view_teachers.TeacherID = vAuthorID) AS 'IsAuthor' FROM `view_teachers` - WHERE NOT EXISTS (SELECT disciplines_teachers.ID + WHERE NOT EXISTS( SELECT disciplines_teachers.ID FROM `disciplines_teachers` WHERE disciplines_teachers.TeacherID = view_teachers.TeacherID AND disciplines_teachers.DisciplineID = pDisciplineID) AND @@ -1017,7 +953,7 @@ BEGIN END // -# TODO: check necessary + DROP FUNCTION IF EXISTS CreateTeacherByDepName// CREATE FUNCTION `CreateTeacherByDepName` ( `pLastName` VARCHAR(30) CHARSET utf8, @@ -1031,7 +967,7 @@ BEGIN DECLARE vAccountID, vChecker, vRoleID, vDepID INT DEFAULT -1; DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; -# try to find a department with pDepartmentName + # try to find a department with pDepartmentName SELECT departments.ID INTO vDepID FROM `departments` @@ -1986,7 +1922,7 @@ BEGIN IF pAuthorID = pNewAuthorID OR NOT InternalIsTeacherAuthor(pAuthorID, pDisciplineID) OR - NOT InternalIsTeacherBinded(pNewAuthorID, pDisciplineID) + NOT InternalIsTeacherBounded(pNewAuthorID, pDisciplineID) THEN RETURN -1; END IF; @@ -2095,7 +2031,7 @@ CREATE FUNCTION `CountRatings` BEGIN DECLARE vRes INT DEFAULT 0; - IF NOT InternalIsTeacherBinded(pTeacherID, pDisciplineID) THEN + IF NOT InternalIsTeacherBounded(pTeacherID, pDisciplineID) THEN RETURN -1; END IF; diff --git a/~dev_rating/application/classes/Model/DataArr/StudyGroups.php b/~dev_rating/application/classes/Model/DataArr/StudyGroups.php index beb00196a..92e7457ea 100644 --- a/~dev_rating/application/classes/Model/DataArr/StudyGroups.php +++ b/~dev_rating/application/classes/Model/DataArr/StudyGroups.php @@ -8,12 +8,6 @@ class Model_DataArr_StudyGroups extends Model return DB::query(Database::SELECT, $sql)->execute(); } - // public function getStudyGroups($Grade, $FacultyID) - // { - // $sql = "CALL `GetStudyGroups`('$Grade', '$FacultyID'); "; - // return DB::query(Database::SELECT, $sql)->execute(); - // } - public function getStudyGroups($grade, $facultyID) { $sql = "CALL `GetStudyGroups`('$grade', '$facultyID'); "; -- GitLab