Skip to content
Snippets Groups Projects
Commit 6252eb62 authored by RomanSteinberg's avatar RomanSteinberg
Browse files

FIX: BindGroup and BindStudent st. proc.

parent 8a505b6f
No related merge requests found
......@@ -1593,8 +1593,8 @@ END //
DROP FUNCTION IF EXISTS BindTeacher//
CREATE FUNCTION `BindTeacher`( `AccessedTeacher` INT,
`BindingTeacher` INT,
CREATE FUNCTION `BindTeacher`( `AccessedTeacherID` INT,
`BindingTeacherID` INT,
`DisciplineID` INT
) RETURNS int(11)
NO SQL
......@@ -1602,12 +1602,11 @@ BEGIN
DECLARE checker INT;
-- 1. check if AccessedTeacher is author
SELECT disciplines.ID
INTO checker
FROM `disciplines`
WHERE disciplines.ID = DisciplineID AND
disciplines.AuthorID = AccessedTeacher
disciplines.AuthorID = AccessedTeacherID
LIMIT 1;
IF NOT (checker > 0) THEN
RETURN -1;
......@@ -1619,7 +1618,7 @@ BEGIN
INTO checker
FROM `disciplines_teachers`
WHERE disciplines_teachers.DisciplineID = DisciplineID AND
disciplines_teachers.TeacherID = BindingTeacher
disciplines_teachers.TeacherID = BindingTeacherID
LIMIT 1;
IF checker > 0 THEN
RETURN 0;
......@@ -1814,7 +1813,7 @@ END //
DROP FUNCTION IF EXISTS BindGroup//
CREATE FUNCTION `BindGroup` ( `TeacherID` INT,
CREATE FUNCTION `BindGroup` ( `AccessedTeacherID` INT,
`DisciplineID` INt,
`StudyGroupID` INT
) RETURNS int(11)
......@@ -1822,26 +1821,18 @@ CREATE FUNCTION `BindGroup` ( `TeacherID` INT,
BEGIN
DECLARE checker INT;
SELECT disciplines_teachers.ID
INTO checker
FROM `disciplines_teachers`
WHERE disciplines_teachers.DisciplineID = DisciplineID AND
disciplines_teachers.TeacherID = TeacherID
LIMIT 1;
IF NOT (checker > 0) THEN
RETURN -1;
END IF;
SET checker = -1;
SELECT study_groups.ID
-- 1. check if AccessedTeacher is author
SELECT disciplines.ID
INTO checker
FROM `study_groups`
WHERE study_groups.ID = StudyGroupID
FROM `disciplines`
WHERE disciplines.ID = DisciplineID AND
disciplines.AuthorID = AccessedTeacherID
LIMIT 1;
IF NOT (checker > 0) THEN
IF NOT (checker > 0) THEN
RETURN -1;
END IF;
-- 2. check if study group is bound to discipline
SET checker = -1;
SELECT disciplines_groups.ID
INTO checker
......@@ -1853,6 +1844,7 @@ BEGIN
RETURN 0;
END IF;
-- 3. delete students of this group which were bound to discipline before
DELETE FROM `disciplines_students`
WHERE disciplines_students.DisciplineID = DisciplineID AND
disciplines_students.StudentID IN
......@@ -1860,7 +1852,8 @@ BEGIN
FROM `students`
WHERE students.StudyGroupID = StudyGroupID
);
-- 4. bind whole group
INSERT INTO `disciplines_groups` ( disciplines_groups.DisciplineID,
disciplines_groups.StudyGroupID
)
......@@ -1873,7 +1866,7 @@ END //
DROP FUNCTION IF EXISTS BindStudent//
CREATE FUNCTION `BindStudent` ( `TeacherID` INT,
CREATE FUNCTION `BindStudent` ( `AccessedTeacherID` INT,
`DisciplineID` INT,
`StudentID` INT
) RETURNS int(11)
......@@ -1881,47 +1874,56 @@ CREATE FUNCTION `BindStudent` ( `TeacherID` INT,
BEGIN
DECLARE checker, SG, temp INT;
SELECT disciplines_teachers.ID
-- 1. check if AccessedTeacher is author
SELECT disciplines.ID
INTO checker
FROM `disciplines_teachers`
WHERE disciplines_teachers.DisciplineID = DisciplineID AND
disciplines_teachers.TeacherID = TeacherID
FROM `disciplines`
WHERE disciplines.ID = DisciplineID AND
disciplines.AuthorID = AccessedTeacherID
LIMIT 1;
IF NOT (checker > 0) THEN
IF NOT (checker > 0) THEN
RETURN -1;
END IF;
SELECT students.StudyGroupID
INTO SG
FROM `students`
WHERE students.ID = StudentID
LIMIT 1;
IF NOT (SG > 0) THEN
RETURN -1;
END IF;
-- 2. check if student's group is bound yet
SET checker = -1;
SELECT disciplines_groups.ID
INTO temp
INTO checker
FROM `disciplines_groups`
WHERE disciplines_groups.DisciplineID = DisciplineID AND
disciplines_groups.StudyGroupID = SG
disciplines_groups.StudyGroupID IN
( SELECT students.StudyGroupID
FROM `students`
WHERE students.ID = StudentID )
LIMIT 1;
IF temp > 0 THEN
IF checker > 0 THEN
DELETE FROM `disciplines_students`
WHERE disciplines_students.DisciplineID = DisciplineID AND
disciplines_students.StudentID = StudentID;
ELSE
INSERT INTO `disciplines_students` ( disciplines_students.DisciplineID,
disciplines_students.StudentID,
disciplines_students.Type
)
VALUES ( DisciplineID, StudentID, 'attach');
RETURN 0;
END IF;
RETURN 0;
-- 3. check if student is bound
SET checker = -1;
SELECT disciplines_students.ID
INTO checker
FROM `disciplines_students`
WHERE disciplines_students.DisciplineID = DisciplineID AND
disciplines_students.StudentID = StudentID
LIMIT 1;
IF checker > 0 THEN
RETURN 0;
END IF;
-- 4. bind student
INSERT INTO `disciplines_students` ( disciplines_students.DisciplineID,
disciplines_students.StudentID,
disciplines_students.Type
)
VALUES ( DisciplineID, StudentID, 'attach');
RETURN 1;
END //
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment