diff --git a/db/migrations/stored/R__procedures.sql b/db/migrations/stored/R__procedures.sql index 2a2c54ce7930fc9b91a3d150c9c8b0e7f9087520..e1ff76f2b4899b683d2cec480d6420130a8fa024 100644 --- a/db/migrations/stored/R__procedures.sql +++ b/db/migrations/stored/R__procedures.sql @@ -1559,11 +1559,11 @@ NO SQL BEGIN SELECT teachers.ID AS 'ID' FROM teachers - INNER JOIN disciplines_teaches ON disciplines_teaches.TeacherID = teachers.ID - INNER JOIN disciplines ON disciplines.ID = disciplines_teaches.DisciplineID + INNER JOIN disciplines_teachers ON disciplines_teachers.TeacherID = teachers.ID + INNER JOIN disciplines ON disciplines.ID = disciplines_teachers.DisciplineID INNER JOIN disciplines_study_plans ON disciplines_study_plans.DisciplineID = disciplines.ID WHERE disciplines_study_plans.StudyPlanID = pStudyPlanID AND - teachers.SemesterID = COALESCE(pSemesterID, disciplines.SemesterID) AND + disciplines.SemesterID = COALESCE(pSemesterID, disciplines.SemesterID) AND (pLoadAll OR disciplines.Subtype IS NULL); END // diff --git a/db/postgresql/functions.sql b/db/postgresql/functions.sql new file mode 100644 index 0000000000000000000000000000000000000000..a46ac53985776a39f75b98669969386a94d19ab6 --- /dev/null +++ b/db/postgresql/functions.sql @@ -0,0 +1,4564 @@ +-- ВСПОМОГАТЕЛЬНЫЕ +DROP FUNCTION IF EXISTS public.iif_sql(BOOLEAN, integer, integer); + +CREATE OR REPLACE FUNCTION iif_sql(BOOLEAN, integer, integer) +RETURNS integer AS +$$ +SELECT CASE $1 WHEN TRUE THEN $2 ELSE $3 END +$$ +LANGUAGE SQL IMMUTABLE; + + + +------------------------------------------------------------------------------------------- + + +-- +-- Name: getsemestersinfo(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getsemestersinfo(integer); + +CREATE OR REPLACE FUNCTION public.getsemestersinfo(psemesterid integer) + RETURNS setof semesters +AS $$ +-- select public.getsemestersinfo(:psemesterid -- put the psemesterid parameter value instead of 'psemesterid' (int4)); +SELECT semesters.* -- ID, Year, Num + FROM semesters + WHERE case when $1 <> 0 then semesters.ID = $1 else true end + ORDER BY semesters.ID DESC; +$$ LANGUAGE sql; + +-- +-- Name: getdepartmentidbyname(character varying); Type: FUNCTION; +-- +DROP FUNCTION IF EXISTS public.getdepartmentidbyname(character varying); + +CREATE OR REPLACE FUNCTION public.getdepartmentidbyname(pdepartmentname character varying) + RETURNS integer +as $$ +-- select public.getdepartmentidbyname( :pdepartmentname -- put the pdepartmentname parameter value instead of 'pdepartmentname' (varchar)); +-- РІРёРґРёРјРѕ расчитано РЅР° уникальность имени кафедры, РІРѕР·РјРѕР¶РЅРѕ РЅРµ используется, или РЅСѓР¶РЅРѕ добавить еще параметр - факультет + SELECT departments.ID as ID + FROM departments + WHERE departments.Name = pDepartmentName; +$$ language sql; + +-- +-- Name: getbonusmodule(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getbonusmodule(integer); + +CREATE OR REPLACE FUNCTION public.getbonusmodule(pdisciplineid integer) + RETURNS integer +AS $$ +-- select public.getbonusmodule(:pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4)); +-- limit 1 оставлено, хотя ситуация СЃ возникновением РІ РѕРґРЅРѕР№ дисциплине нескольких бонусных модулей сомнительная, +-- может это РЅСѓР¶РЅРѕ контролировать ограничением РЅР° таблицу + SELECT modules.ID FROM modules + WHERE modules.DisciplineID = pDisciplineID AND modules.Type = 'bonus' + LIMIT 1; +$$ LANGUAGE sql; + +-- +-- Name: getauthtokens(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getauthtokens(integer); + +CREATE OR REPLACE FUNCTION public.getauthtokens(paccountid integer) + RETURNS TABLE(accountid integer, created timestamp without time zone, accessed timestamp without time zone, mask integer) +AS $$ +-- select * from public.getauthtokens(:paccountid -- put the paccountid parameter value instead of 'paccountid' (int4)); +-- если вызывать select public.getauthtokens(...); выдает таблицу СЃ РѕРґРЅРёРј солбцом - РІСЃРµ данные склены РІ СЃРїРёСЃРѕРє + SELECT accountID, Created, Accessed, Mask + FROM auth_tokens + INNER JOIN accounts ON accounts.ID = auth_tokens.AccountID + WHERE + auth_tokens.AccountID = pAccountID OR + pAccountID = 0 + ORDER BY auth_tokens.Created DESC; +$$ LANGUAGE sql; + +-- +-- Name: getcompounddisciplinesforgrade(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getcompounddisciplinesforgrade(integer); + +CREATE OR REPLACE FUNCTION public.getcompounddisciplinesforgrade(pgradeid integer) + RETURNS TABLE(id integer, name character varying) +AS $$ +--select * from public.getcompounddisciplinesforgrade( :pgradeid -- put the pgradeid parameter value instead of 'pgradeid' (int4)); + SELECT compound_disciplines.ID, + compound_disciplines.Name + FROM compound_disciplines + WHERE compound_disciplines.GradeID = pGradeID; +$$ LANGUAGE sql; + +-- +-- Name: getdisciplines(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getdisciplines(integer, integer); + +CREATE OR REPLACE FUNCTION public.getdisciplines( + pfacultyid integer, + psemesterid integer) +RETURNS table( +id integer +,SubjectID integer +,SubjectName character varying +,Type exam_credit_grading_credit +,isMapCreated boolean) +AS $$ +--select * from public.getdisciplines( +-- :pfacultyid, -- put the pfacultyid parameter value instead of 'pfacultyid' (int4) +-- :psemesterid -- put the psemesterid parameter value instead of 'psemesterid' (int4) +--); + SELECT view_disciplines.DisciplineID AS ID, + view_disciplines.SubjectID, + view_disciplines.SubjectName, + view_disciplines.ExamType AS Type, + (view_disciplines.MaxRate = 100) AS isMapCreated + FROM view_disciplines + WHERE view_disciplines.SemesterID = pSemesterID AND + view_disciplines.FacultyID = pFacultyID + ORDER BY view_disciplines.SubjectName ASC; +$$ LANGUAGE sql; + +-- +-- Name: getdisciplinesforteacher(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getdisciplinesforteacher(integer, integer); + +CREATE OR REPLACE FUNCTION public.getdisciplinesforteacher( + pteacherid integer, + psemesterid integer) +RETURNS table( +id integer +,Type exam_credit_grading_credit +,Subtype scientific_disciplinary_coursework +,GradeID integer +,GradeNum integer +,Degree bachelor_master_specialist +,GroupID integer +,GroupNum integer +,GroupName character varying +,SubjectID integer +,SubjectName character varying +,AuthorID integer +,IsLocked integer +,IsMapCreated boolean) +AS $$ +--select public.getdisciplinesforteacher( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :psemesterid -- put the psemesterid parameter value instead of 'psemesterid' (int4) +--); + SELECT DISTINCT view_disciplines.DisciplineID AS ID, + view_disciplines.ExamType AS Type, + view_disciplines.Subtype, + view_disciplines.GradeID, + view_disciplines.GradeNum, + view_disciplines.Degree, + view_groups.GroupID, + view_groups.GroupNum, + view_groups.GroupName, + view_disciplines.SubjectID, + view_disciplines.SubjectName, + view_disciplines.AuthorID, + view_disciplines.IsLocked AS IsLocked, -- bodging, db schema remembered lowerCase + (view_disciplines.MaxRate = 100) AS IsMapCreated + FROM disciplines_teachers + INNER JOIN view_disciplines ON disciplines_teachers.DisciplineID = view_disciplines.DisciplineID + INNER JOIN semesters ON semesters.ID = view_disciplines.SemesterID + LEFT JOIN disciplines_groups ON disciplines_groups.DisciplineID = disciplines_teachers.DisciplineID + LEFT JOIN view_groups ON view_groups.GroupID = disciplines_groups.GroupID AND view_groups.Year = semesters.Year + WHERE disciplines_teachers.TeacherID = pTeacherID AND view_disciplines.SemesterID = pSemesterID + ORDER BY view_disciplines.GradeID ASC, + view_disciplines.SubjectName ASC, + view_disciplines.DisciplineID ASC, + view_groups.GroupNum ASC; +$$ LANGUAGE sql; + +-- +-- Name: getfinalforminfo(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getfinalforminfo(integer, integer); + +CREATE OR REPLACE FUNCTION public.getfinalforminfo( + pdisciplineid integer, + pgroupid integer) +RETURNS table( +GroupNum integer +,GroupName character varying +,GradeID integer +,GradeNum integer +,Degree bachelor_master_specialist +,SpecID integer +,SpecName character varying +,SpecAbbr character varying +,SpecCode character varying +,FacultyID integer +,FacultyName character varying +,FacultyAbbr character varying +,ExamType exam_credit_grading_credit +,SubjectID integer +,SubjectName character varying +,SubjectAbbr character varying +,AuthorID integer +,LastName character varying +,FirstName character varying +,SecondName character varying +,JobPosition character varying +,DepID integer +,DepName character varying +,Year integer +,SemesterNum integer) +AS $$ +--select * from public.getfinalforminfo( +-- :pdisciplineid, -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +-- :pgroupid -- put the pgroupid parameter value instead of 'pgroupid' (int4) +--); + SELECT study_groups.GroupNum AS GroupNum, + groups_years.Name AS GroupName, + grades.ID AS GradeID, + grades.Num AS GradeNum, + grades.Degree AS Degree, + specializations.ID AS SpecID, + specializations.Name AS SpecName, + specializations.Abbr AS SpecAbbr, + specializations.Code AS SpecCode, + faculties.ID AS FacultyID, + faculties.Name AS FacultyName, + faculties.Abbr AS FacultyAbbr, + disciplines.ExamType AS ExamType, + subjects.ID AS SubjectID, + subjects.Name AS SubjectName, + subjects.Abbr AS SubjectAbbr, + teachers.ID AS AuthorID, + accounts.LastName AS LastName, + accounts.FirstName AS FirstName, + accounts.SecondName AS SecondName, + job_positions.Name AS JobPosition, + departments.ID AS DepID, + departments.Name AS DepName, + semesters.Year AS Year, + semesters.Num AS SemesterNum + FROM study_groups + INNER JOIN grades ON study_groups.GradeID = grades.ID + INNER JOIN disciplines ON disciplines.ID = pDisciplineID + INNER JOIN subjects ON disciplines.SubjectID = subjects.ID + INNER JOIN teachers ON teachers.ID = disciplines.AuthorID + INNER JOIN accounts ON teachers.AccountID = accounts.ID + INNER JOIN departments ON departments.ID = teachers.DepartmentID + INNER JOIN job_positions ON job_positions.ID = teachers.JobPositionID + INNER JOIN semesters ON disciplines.SemesterID = semesters.ID + INNER JOIN groups_years ON groups_years.GroupID = study_groups.ID AND groups_years.Year = semesters.Year + INNER JOIN specializations ON groups_years.SpecializationID = specializations.ID + INNER JOIN faculties ON faculties.ID = specializations.FacultyID + WHERE study_groups.ID = pGroupID + LIMIT 1; +$$ LANGUAGE sql; + +-- +-- Name: getgrades(); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getgrades(); + +CREATE OR REPLACE FUNCTION public.getgrades( + ) +RETURNS setof grades +AS $$ +--select public.getgrades(); +SELECT grades.* -- ID, Num, Degree + FROM grades + ORDER BY grades.ID; +$$ LANGUAGE sql; + +-- +-- Name: getgroups(integer, integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getgroups(integer, integer, integer); + +CREATE OR REPLACE FUNCTION public.getgroups( + pgradeid integer, + pfacultyid integer, + psemesterid integer) +RETURNS table( +id integer +,GroupNum integer +,SpecID integer +,SpecName character varying +,SpecAbbr character varying) +AS $$ +--select * from public.getgroups( +-- :pgradeid, -- put the pgradeid parameter value instead of 'pgradeid' (int4) +-- :pfacultyid, -- put the pfacultyid parameter value instead of 'pfacultyid' (int4) +-- :psemesterid -- put the psemesterid parameter value instead of 'psemesterid' (int4) +--); + SELECT view_groups.GroupID AS ID, + view_groups.GroupNum, + view_groups.SpecID, + view_groups.SpecName, + view_groups.SpecAbbr + FROM view_groups + INNER JOIN semesters ON semesters.ID = pSemesterID + WHERE view_groups.GradeID = pGradeID AND + view_groups.FacultyID = pFacultyID AND + view_groups.Year = semesters.Year + ORDER BY view_groups.GroupNum ASC; +$$ LANGUAGE sql; + +-- +-- Name: userecoverytoken(character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.userecoverytoken(character varying); + +CREATE OR REPLACE FUNCTION public.userecoverytoken(ptoken character varying) + RETURNS integer + LANGUAGE plpgsql +AS $$ + DECLARE vChecker INT DEFAULT -1; +BEGIN + -- set token used + -- select public.userecoverytoken( + -- :ptoken -- put the ptoken parameter value instead of 'ptoken' (varchar) + --); + UPDATE recovery_tokens + SET IsUsed = 1 + WHERE Token = pToken; + -- LIMIT 1; РЅРµ нужен, С‚.Рє. token имеет unique key + GET diagnostics vChecker=ROW_COUNT; --РґСЂСѓРіРѕРіРѕ СЃРїРѕСЃРѕР±Р° РЅРµ нашла + -- RETURN ROW_COUNT-1; + return vchecker-1; +END; +$$; + +-- +-- Name: updaterequest(integer, character varying, text); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.updaterequest(integer, character varying, text); + +CREATE OR REPLACE FUNCTION public.updaterequest(prequestid integer, ptitle character varying, pdescription text) + RETURNS integer + LANGUAGE plpgsql +AS $$ + DECLARE retValue INT DEFAULT -1; +BEGIN + --DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; непонятно зачем обрабочик,ошибки быть РЅРµ может +-- select public.UpdateRequest( +-- :pRequestID, -- put the pRequestID parameter value instead of 'pRequestID' (INT) +-- :pTitle, -- put the pTitle parameter value instead of 'pTitle' (VARCHAR(50)) +-- :pDescription -- put the pDescription parameter value instead of 'pDescription' (CHAR(1)) +--); + UPDATE requests + SET requests.Description = pDescription, + requests.Title = pTitle, + requests.Date = NOW() + WHERE requests.ID = pRequestID AND + requests.Description IS NULL AND + requests.Title IS NULL; + --LIMIT 1; -- запрос через id РЅРµ может вернуть больше 1 строки + --RETURN ROW_COUNT()-1; + GET diagnostics retValue=ROW_COUNT; + return retValue-1; +END; +$$; + +-- +-- Name: teacher_getidfromexternalid(varchar); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.teacher_getidfromexternalid(varchar); + +CREATE OR REPLACE FUNCTION public.teacher_getidfromexternalid(pteacherexternalid character varying) + RETURNS integer + LANGUAGE plpgsql +AS $$ + DECLARE pID INT DEFAULT -1; +begin +-- select public.teacher_getidfromexternalid( +-- :pteacherexternalid -- put the pteacherexternalid parameter value instead of 'pteacherexternalid' (varchar) +--); + SELECT teachers.ID INTO pID + FROM teachers + INNER JOIN accounts ON teachers.AccountID = accounts.ID + WHERE accounts.ExternalID = pTeacherExternalID + LIMIT 1; -- скорее всего РЅРµ требуется + RETURN pID; + END; +$$; + +-- +-- Name: jobpositions_get(); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.jobpositions_get(); + +CREATE OR REPLACE FUNCTION public.jobpositions_get() + RETURNS setof job_positions + LANGUAGE sql +AS $$ +--select public.jobpositions_get(); +SELECT job_positions.* -- ID, Name + FROM job_positions + ORDER BY job_positions.Name; +$$; + +-- +-- Name: getgroupsfordiscipline(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.etgroupsfordiscipline(integer); + +CREATE OR REPLACE FUNCTION public.getgroupsfordiscipline( + pdisciplineid integer) +RETURNS table( +ID integer +,GroupNum integer +,GradeID integer +,GradeNum integer +,Degree bachelor_master_specialist +,SpecID integer +,SpecName character varying +,SpecAbbr character varying) +AS $$ +--select * from public.getgroupsfordiscipline( +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); + SELECT view_groups.GroupID AS ID, + view_groups.GroupNum, + view_groups.GradeID, + view_groups.GradeNum, + view_groups.Degree, + view_groups.SpecID, + view_groups.SpecName, + view_groups.SpecAbbr + FROM disciplines_groups + INNER JOIN disciplines ON disciplines_groups.DisciplineID = disciplines.ID + INNER JOIN semesters ON disciplines.SemesterID = semesters.ID + INNER JOIN view_groups ON disciplines_groups.GroupID = view_groups.GroupID + WHERE disciplines_groups.DisciplineID = pDisciplineID + AND view_groups.Year = semesters.Year + ORDER BY view_groups.GradeID ASC, view_groups.GroupID ASC; + +$$ Language sql; + +-- +-- Name: getjobpositionidbyname(character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getjobpositionidbyname(character varying); + +CREATE OR REPLACE FUNCTION public.getjobpositionidbyname( + pjobpositionname character varying) +RETURNS integer +AS $$ +--select public.getjobpositionidbyname( +-- :pjobpositionname -- put the pjobpositionname parameter value instead of 'pjobpositionname' (varchar) +--); + + SELECT job_positions.ID as ID + FROM job_positions + WHERE job_positions.Name = pJobPositionName; +$$ Language sql; + +-- +-- Name: getjobpositions(); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getjobpositions(); + +CREATE OR REPLACE FUNCTION public.getjobpositions( + ) +RETURNS setof job_positions +AS $$ +--select * from public.getjobpositions(); +SELECT job_positions.* -- ID, Name + FROM job_positions + ORDER BY job_positions.Name; +$$ Language sql; + +-- +-- Name: getratesall(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getratesall(integer, integer); + +CREATE OR REPLACE FUNCTION public.getratesall( + pstudentid integer, + pdisciplineid integer) +RETURNS table( +ModuleID integer +,ModuleName character varying +,SubmoduleID integer +,SubmoduleName character varying +,MaxRate integer +,SubmoduleType current_landmark_control +,SubmoduleOrderNum integer +,Rate integer +,Date date +,ModuleType regular_exam_bonus_extra +,ExamPeriodOption absence_pass) +AS $$ +--select * from public.getratesall( +-- :pstudentid, -- put the pstudentid parameter value instead of 'pstudentid' (int4) +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); + + SELECT view_roadmap.ModuleID, + view_roadmap.ModuleName, + view_roadmap.SubmoduleID, + view_roadmap.SubmoduleName, + view_roadmap.SubmoduleRate AS MaxRate, + view_roadmap.SubmoduleType, + view_roadmap.SubmoduleOrderNum, + rating_table.Rate, + rating_table.Date, + view_roadmap.ModuleType, + exam_period_options.Type As ExamPeriodOption + FROM view_roadmap + LEFT JOIN rating_table ON rating_table.SubmoduleID = view_roadmap.SubmoduleID AND + rating_table.recordbookid = pStudentID + LEFT JOIN exam_period_options ON exam_period_options.recordbookid = pStudentID AND + exam_period_options.SubmoduleID = view_roadmap.SubmoduleID + WHERE view_roadmap.DisciplineID = pDisciplineID + ORDER BY view_roadmap.ModuleOrderNum ASC, + view_roadmap.SubmoduleOrderNum ASC; +$$ Language sql; + +-- +-- Name: getratesexam(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getratesexam(integer, integer); + +CREATE OR REPLACE FUNCTION public.getratesexam( + pstudentid integer, + pdisciplineid integer) +RETURNS table( +ModuleID integer +,ModuleName character varying +,SubmoduleID integer +,SubmoduleName character varying +,MaxRate integer +,SubmoduleType current_landmark_control +,Rate integer +,Date date +,ModuleType regular_exam_bonus_extra +,ExamPeriodOption absence_pass) +AS $$ +--select * from public.getratesexam( +-- :pstudentid, -- put the pstudentid parameter value instead of 'pstudentid' (int4) +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); + SELECT view_roadmap.ModuleID, + view_roadmap.ModuleName, + view_roadmap.SubmoduleID, + view_roadmap.SubmoduleName, + view_roadmap.SubmoduleRate AS MaxRate, + view_roadmap.SubmoduleType, + rating_table.Rate, + rating_table.Date, + view_roadmap.ModuleType, + exam_period_options.Type As ExamPeriodOption + FROM view_roadmap + LEFT JOIN rating_table ON rating_table.SubmoduleID = view_roadmap.SubmoduleID AND + rating_table.recordbookid = pStudentID + LEFT JOIN exam_period_options ON exam_period_options.recordbookid = pStudentID AND + exam_period_options.SubmoduleID = view_roadmap.SubmoduleID + WHERE view_roadmap.DisciplineID = pDisciplineID + ORDER BY view_roadmap.ModuleOrderNum ASC, + view_roadmap.SubmoduleOrderNum ASC; +$$ Language sql; + +-- +-- Name: getrecoveryinfobyemail(character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getrecoveryinfobyemail(character varying); + +CREATE OR REPLACE FUNCTION public.getrecoveryinfobyemail( + pemail character varying) +RETURNS table( +ID integer +,AccountID integer +,Date timestamp +,Token character varying +,IsUsed smallint) +AS $$ +--select * from public.getrecoveryinfobyemail( +-- :pemail -- put the pemail parameter value instead of 'pemail' (varchar) +--); + + SELECT recovery_tokens.ID, + recovery_tokens.AccountID, + recovery_tokens.Date, + recovery_tokens.Token, + recovery_tokens.IsUsed + FROM accounts + INNER JOIN recovery_tokens ON recovery_tokens.AccountID = accounts.ID + WHERE accounts.EMail = pEMail AND + recovery_tokens.IsUsed = 0 + LIMIT 1; +$$ Language sql; + +-- +-- Name: getrecoveryinfobytoken(character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getrecoveryinfobytoken(character varying); + +CREATE OR REPLACE FUNCTION public.getrecoveryinfobytoken( + ptoken character varying) +RETURNS table( +ID integer +,AccountID integer +,Date timestamp +,Token character varying +,IsUsed smallint) +AS $$ +--select * from public.getrecoveryinfobytoken( +-- :ptoken -- put the ptoken parameter value instead of 'ptoken' (varchar) +--); + + SELECT recovery_tokens.ID, + recovery_tokens.AccountID, + recovery_tokens.Date, + recovery_tokens.Token, + recovery_tokens.IsUsed + FROM recovery_tokens + WHERE recovery_tokens.Token = pToken + LIMIT 1; +$$ Language sql; + +-- +-- Name: internalismapcreated(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.internalismapcreated(integer); + +CREATE OR REPLACE FUNCTION public.internalismapcreated(pdisciplineid integer) + RETURNS boolean + AS $$ +--select public.internalismapcreated( +-- :pdisciplineid-- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); +declare maxRate integer; +BEGIN + maxRate=null; + SELECT disciplines.MaxRate FROM disciplines into maxRate + WHERE disciplines.ID = pDisciplineID ; + RETURN (maxrate is not null and maxrate=100); +END +$$ LANGUAGE plpgsql; + +-- +-- Name: internalismaplocked(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.internalismaplocked(integer); + +CREATE OR REPLACE FUNCTION public.internalismaplocked(pdisciplineid integer) + RETURNS boolean +AS $$ +--select public.internalismaplocked( +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); +declare isLocked integer; +BEGIN + isLocked =null; + SELECT disciplines.IsLocked into isLocked + FROM disciplines + WHERE disciplines.ID = pDisciplineID; + return (isLocked is not null and isLocked =1); +END +$$ LANGUAGE plpgsql; + +-- +-- Name: internalisteacherauthor(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.internalisteacherauthor(integer, integer); + +CREATE OR REPLACE FUNCTION public.internalisteacherauthor(pteacherid integer, pdisciplineid integer) + RETURNS boolean +AS $$ +--select public.internalisteacherauthor( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); +declare author integer; +BEGIN + author = NULL; + SELECT disciplines.AuthorID into author + FROM disciplines + WHERE disciplines.ID = pDisciplineID; + return (author is not null and author = pTeacherID); +END +$$ LANGUAGE plpgsql; + +-- +-- Name: internalisteacherbound(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.internalisteacherbound(integer, integer); + +CREATE OR REPLACE FUNCTION public.internalisteacherbound(pteacherid integer, pdisciplineid integer) + RETURNS boolean +AS $$ +--select public.internalisteacherbound( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); +BEGIN +RETURN EXISTS ( + SELECT * FROM disciplines_teachers + WHERE disciplines_teachers.TeacherID = pTeacherID AND disciplines_teachers.DisciplineID = pDisciplineID + ); +END +$$ LANGUAGE plpgsql; + +-- +-- Name: internalordermoduletypesforsession(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.internalordermoduletypesforsession(integer); + +CREATE OR REPLACE FUNCTION public.internalordermoduletypesforsession(pmoduletype integer) + RETURNS integer +AS $$ +--select public.internalordermoduletypesforsession( +-- :pmoduletype -- put the pmoduletype parameter value instead of 'pmoduletype' (int4) +--); +BEGIN +RETURN (CASE pModuleType + WHEN 4 THEN 1 -- extra + WHEN 2 THEN 2 -- exam + WHEN 3 THEN 3 -- bonus + ELSE 4 +END); +end +$$ LANGUAGE plpgsql; + +-- +-- Name: addmodule(integer, integer, character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.addmodule(integer, integer, character varying); + +CREATE OR REPLACE FUNCTION public.addmodule(pteacherid integer, pdisciplineid integer, pname character varying) + RETURNS integer +AS $$ + + DECLARE vOrderNum INT DEFAULT 0; + DECLARE currID int DEFAULT 0; +BEGIN +--select public.addmodule( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :pdisciplineid, -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +-- :pname -- put the pname parameter value instead of 'pname' (varchar) +--); + + if (NOT InternalIsTeacherAuthor(pTeacherID, pDisciplineID) OR InternalIsMapLocked(pDisciplineID) )THEN + RETURN -2; + end if; + -- get free orderNum for module with type 'regular' + SELECT coalesce(MAX(modules.OrderNum)+1,1) into vOrderNum + FROM modules + WHERE modules.DisciplineID = pDisciplineID AND modules.Type = 'regular'; + + INSERT INTO modules (Name, OrderNum, DisciplineID ) VALUES (pName, vOrderNum, pDisciplineID) returning id into currID; + RETURN currID; +EXCEPTION + WHEN others then return -1; +end +$$ LANGUAGE plpgsql; + +-- +-- Name: addsubmoduleunsafe(integer, integer, character varying, character varying, character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.addsubmoduleunsafe(integer, integer, character varying, character varying, character varying); + +CREATE OR REPLACE FUNCTION public.addsubmoduleunsafe(pmoduleid integer, pmaxrate integer, pname character varying, pdescription character varying, pcontroltype character varying) + RETURNS integer + +AS $$ +--select public.addsubmoduleunsafe( +-- :pmoduleid, -- put the pmoduleid parameter value instead of 'pmoduleid' (int4) +-- :pmaxrate, -- put the pmaxrate parameter value instead of 'pmaxrate' (int4) +-- :pname, -- put the pname parameter value instead of 'pname' (varchar) +-- :pdescription, -- put the pdescription parameter value instead of 'pdescription' (varchar) +-- :pcontroltype -- put the pcontroltype parameter value instead of 'pcontroltype' (varchar) +--); + DECLARE vOrderNum INT DEFAULT -1; vIsLocked INT DEFAULT -1; vDescription VARCHAR(200); recId int ; +BEGIN + -- check discipline lock + SELECT disciplines.IsLocked INTO vIsLocked + FROM modules + INNER JOIN disciplines ON disciplines.ID = modules.DisciplineID + WHERE modules.ID = pModuleID + LIMIT 1; + IF vIsLocked != 0 THEN + RETURN -2; + END IF; + + -- get free order + SELECT COALESCE(MAX(submodules.OrderNum),0)+1 FROM submodules + WHERE submodules.ModuleID = pModuleID LIMIT 1 into vOrderNum; + + if (vDescription = '') THEN vDescription := NULL ; + ELSE vDescription :=pDescription; + end if ; -- очень странная проверка + INSERT INTO submodules (ModuleID, MaxRate, OrderNum, Name, Description, Type) VALUES + (pModuleID, pMaxRate, vOrderNum, pName, vDescription, pControlType) returning id into recID; + RETURN recID; + exception + when others then return -1; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: addsubmodule(integer, integer, integer, character varying, character varying, character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.addsubmodule(integer, integer, integer, character varying, character varying, character varying); + +CREATE OR REPLACE FUNCTION public.addsubmodule(pteacherid integer, pmoduleid integer, pmaxrate integer, pname character varying, pdescription character varying, pcontroltype character varying) + RETURNS integer + +AS $$ + + DECLARE vIsLocked BOOLEAN DEFAULT TRUE; + vID integer default null; +begin +-- select public.addsubmodule( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :pmoduleid, -- put the pmoduleid parameter value instead of 'pmoduleid' (int4) +-- :pmaxrate, -- put the pmaxrate parameter value instead of 'pmaxrate' (int4) +-- :pname, -- put the pname parameter value instead of 'pname' (varchar) +-- :pdescription, -- put the pdescription parameter value instead of 'pdescription' (varchar) +-- :pcontroltype -- put the pcontroltype parameter value instead of 'pcontroltype' (varchar) +--); + + -- check author and discipline lock + SELECT disciplines.AuthorID into vID + FROM modules + INNER JOIN disciplines ON disciplines.ID = modules.DisciplineID + WHERE modules.ID = pModuleID + LIMIT 1; + IF vID is null or vID !=pTeacherID THEN + RETURN -2; + END IF; + + RETURN AddSubmoduleUnsafe(pModuleID, pMaxRate, pName, pDescription, pControlType); + +END; +$$ LANGUAGE plpgsql; + + +-- +-- Name: addmoduleextra(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.addmoduleextra(integer, integer); + +CREATE OR REPLACE FUNCTION public.addmoduleextra(pteacherid integer, pdisciplineid integer) + RETURNS integer +AS $$ + DECLARE vChecker INT DEFAULT -1; vModule INT DEFAULT -1; vType INT DEFAULT -1; vGap INT DEFAULT -1; +begin +-- select public.AddModuleExtra( +-- :pTeacherID, -- put the pTeacherID parameter value instead of 'pTeacherID' (INT) +-- :pDisciplineID -- put the pDisciplineID parameter value instead of 'pDisciplineID' (INT) +--); + + IF NOT InternalIsTeacherAuthor(pTeacherID, pDisciplineID) + THEN + RETURN -1; + END IF; + -- try to find existing extra module + SELECT modules.ID INTO vChecker + FROM modules + WHERE modules.DisciplineID = pDisciplineID AND modules.Type = 'extra' + LIMIT 1; + IF vChecker > 0 THEN + RETURN -2; + END IF; + + -- add extra module + INSERT INTO modules + (Name, OrderNum, DisciplineID, Type) + VALUES ('Добор баллов' , 2900666 , pDisciplineID, 'extra'); + + -- get discipline exam type + SELECT modules.ID, disciplines.ExamType INTO vModule, vType + FROM modules + INNER JOIN disciplines ON disciplines.ID = modules.DisciplineID + WHERE modules.DisciplineID = pDisciplineID AND + modules.Type = 'extra' + LIMIT 1; + IF vModule <= 0 THEN + RETURN -1; + END IF; + + -- 1 extra attempt for exam and 2 for credit + vGap := -1; + IF vType = 1 THEN -- exam + vGap := 7; + END IF; + IF vType = 2 OR vType = 3 THEN -- credit, grading_credit + vGap := 29; + vChecker := addsubmodule(pTeacherID, vModule, vGap, '', NULL, 'LandmarkControl'); + END IF; + + vChecker := AddSubmodule(pTeacherID, vModule, vGap, '', NULL, 'LandmarkControl'); + RETURN vModule; + exception + when others then return -1; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: addmoduleexamunsafe(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.addmoduleexamunsafe(integer); + +CREATE OR REPLACE FUNCTION public.addmoduleexamunsafe(pdisciplineid integer) + RETURNS integer +AS $$ + DECLARE vModule INT DEFAULT -1; vChecker INT DEFAULT -1; + vIsExamExists BOOLEAN; vTemp int; +BEGIN +--select public.AddModuleExamUnsafe( +-- :pDisciplineID -- put the pDisciplineID parameter value instead of 'pDisciplineID' (INT) +--); + IF InternalIsMapLocked(pDisciplineID) THEN + RETURN -1; + END IF; + + vIsExamExists := EXISTS( + SELECT * FROM modules + WHERE modules.DisciplineID = pDisciplineID AND modules.Type = 'exam' + LIMIT 1 + ); + IF vIsExamExists THEN + RETURN -2; + END IF; + + INSERT INTO modules (Name, OrderNum, DisciplineID, Type) VALUES ('Ркзамен' , 3141592 , pDisciplineID, 'exam') + returning ID into vModule; + -- 3 attempt for pass exam -- разобраться почему так? + SELECT AddSubmoduleUnsafe(vModule, 40, '', NULL, 'LandmarkControl') INTO vTemp; + SELECT AddSubmoduleUnsafe(vModule, 40, '', NULL, 'LandmarkControl') INTO vTemp; + SELECT AddSubmoduleUnsafe(vModule, 40, '', NULL, 'LandmarkControl') INTO vTemp; + RETURN vModule; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: addmoduleexam(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.addmoduleexam(integer, integer); +CREATE OR REPLACE FUNCTION public.addmoduleexam(pteacherid integer, pdisciplineid integer) + RETURNS integer +AS $$ + DECLARE vModule INT DEFAULT -1; vChecker INT DEFAULT -1; + vIsExamExists BOOLEAN; +begin +-- select public.addmoduleexam( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); + IF (NOT InternalIsTeacherAuthor(pTeacherID, pDisciplineID) OR + InternalIsMapLocked(pDisciplineID)) + THEN + RETURN -1; + END IF; + + RETURN AddModuleExamUnsafe(pDisciplineID); +END +$$ LANGUAGE plpgsql; + +-- +-- Name: addmodulebonus(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.addmodulebonus(integer, integer); + +CREATE OR REPLACE FUNCTION public.addmodulebonus(pteacherid integer, pdisciplineid integer) + RETURNS integer +AS $$ + DECLARE vChecker INT DEFAULT -1; vModuleID INT DEFAULT -1; +begin +-- select public.addmodulebonus( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); + IF (NOT InternalIsTeacherAuthor(pTeacherID, pDisciplineID) OR + InternalIsMapLocked(pDisciplineID)) + THEN + RETURN -1; + END IF; + -- check existing of bonus module + SELECT modules.ID INTO vChecker + FROM modules + WHERE modules.DisciplineID = pDisciplineID AND + modules.Type = 'bonus'; + IF vChecker > 0 THEN + RETURN -2; + END IF; + + INSERT INTO modules + (Name, OrderNum, DisciplineID, Type) + VALUES ('Бонусные баллы' , 2141692 , pDisciplineID, 'bonus') RETURNING ID into vModuleID; + vChecker := AddSubmodule(pTeacherID, vModuleID, 10, '', NULL, 'LandmarkControl'); + RETURN 0; -- почему??? +END +$$ LANGUAGE plpgsql; + +-- +-- Name: getdisciplinetypeexam(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getdisciplinetypeexam(integer); + +CREATE OR REPLACE FUNCTION public.getdisciplinetypeexam(pdisciplineid integer) + RETURNS exam_credit_grading_credit +AS $$ +--select public.getdisciplinetypeexam( +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); + select examtype + from disciplines + where id=pdisciplineid; + $$ LANGUAGE sql; + +-- +-- Name: getdisciplineproperty(integer, grade_subject_author_semester_milestone_type_maxrate); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getdisciplineproperty(integer, grade_subject_author_semester_milestone_type_maxrate); + +CREATE OR REPLACE FUNCTION public.getdisciplineproperty(pdisciplineid integer, ptype grade_subject_author_semester_milestone_type_maxrate) + RETURNS integer +AS $$ + DECLARE vRes INT DEFAULT -1; +begin +-- select public.getdisciplineproperty( +-- :pdisciplineid, -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +-- :ptype -- put the ptype parameter value instead of 'ptype' (grade_subject_author_semester_milestone_type_maxrate) +--); + SELECT CASE pType + WHEN 'semester' THEN disciplines.SemesterID + WHEN 'author' THEN disciplines.AuthorID + WHEN 'grade' THEN disciplines.GradeID + WHEN 'subject' THEN disciplines.SubjectID + WHEN 'milestone' THEN disciplines.Milestone + -- WHEN 'type' THEN cast (disciplines.ExamType as integer) +0 + WHEN 'maxrate' THEN disciplines.MaxRate + else -1 + END INTO vRes + FROM disciplines + WHERE disciplines.ID = pDisciplineID + LIMIT 1; + RETURN vRes; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: calculatemaxrateforextra(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.calculatemaxrateforextra(integer, integer); + +CREATE OR REPLACE FUNCTION public.calculatemaxrateforextra(pdisciplineid integer, pRecordBookID integer) + RETURNS integer +AS $$ + DECLARE vExamType exam_credit_grading_credit DEFAULT NULL; + vDiscID INT DEFAULT 0; vLim INT DEFAULT 0; vResult INT DEFAULT 0; +BEGIN +--select public.calculatemaxrateforextra( +-- :pdisciplineid, -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +-- :pRecordBookID -- put the pRecordBookID parameter value instead of 'pRecordBookID' (int4) +--); + -- get disc type + --vExamType := GetDisciplineProperty(pDisciplineID, 'type'); + vExamType := GetDisciplineTypeExam(pDisciplineID); + -- submodule doesn't exists + IF vExamType IS NULL --OR vExamType <= 0 + THEN + RETURN -1; + END IF; + vLim := CASE WHEN vExamType = 'exam' THEN 38 ELSE 60 END; + + SELECT SUM(CASE WHEN view_roadmap.ModuleType = 'regular' THEN rating_table.Rate ELSE 0 END) INTO vResult + FROM view_roadmap + LEFT JOIN rating_table + --ON rating_table.StudentID = pStudentID AND + ON rating_table.recordbookid = pRecordBookID AND + rating_table.SubmoduleID = view_roadmap.SubmoduleID + WHERE view_roadmap.DisciplineID = pDisciplineID + LIMIT 1; + RETURN vLim - vResult; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: changemodulename(integer, integer, character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.changemodulename(integer, integer, character varying); + +CREATE OR REPLACE FUNCTION public.changemodulename(pteacherid integer, pmoduleid integer, pname character varying) + RETURNS integer +AS $$ + DECLARE vDisciplineID INT DEFAULT -1; + vAlreadySameName BOOL DEFAULT FALSE; + rowUpd int; +BEGIN +--select public.changesubmoduledescription( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :psubmoduleid, -- put the psubmoduleid parameter value instead of 'psubmoduleid' (int4) +-- :pdescription -- put the pdescription parameter value instead of 'pdescription' (varchar) +--); + + SELECT DisciplineID FROM modules WHERE ID = pModuleID LIMIT 1 into vDisciplineID; + IF InternalIsMapLocked(vDisciplineID) THEN + RETURN -1; + END IF; + + -- Bodging, strange row_count() behaviour in some cases. + -- i.e. update 1 module row. In case it's new and old names are same, row_count value may be 0. + vAlreadySameName := EXISTS( + SELECT * FROM modules + WHERE modules.ID = pModuleID AND modules.Type = 'regular' AND modules.Name = pName + LIMIT 1 + ); + IF vAlreadySameName THEN + return 0; + END IF; + + UPDATE modules + SET modules.Name = pName + WHERE modules.ID = pModuleID AND modules.Type = 'regular'; + --LIMIT 1; + get diagnostics rowUpd = ROW_COUNT; + RETURN rowUpd-1; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: changesubmoduledescription(integer, integer, character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.changesubmoduledescription(integer, integer, character varying); + +CREATE OR REPLACE FUNCTION public.changesubmoduledescription(pteacherid integer, psubmoduleid integer, pdescription character varying) + RETURNS integer +AS $$ + DECLARE vIsLocked INT DEFAULT -1; + declare test int default 0; +BEGIN +--select public.changesubmoduledescription( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :psubmoduleid, -- put the psubmoduleid parameter value instead of 'psubmoduleid' (int4) +-- :pdescription -- put the pdescription parameter value instead of 'pdescription' (varchar) +--); + + SELECT disciplines.IsLocked INTO vIsLocked + FROM view_roadmap + INNER JOIN disciplines ON disciplines.ID = view_roadmap.DisciplineID + WHERE view_roadmap.SubmoduleID = pSubmoduleID AND disciplines.AuthorID = pTeacherID + LIMIT 1; + IF vIsLocked != 0 THEN + RETURN -1; + END IF; + + UPDATE submodules + SET submodules.Description = pDescription + WHERE submodules.ID = pSubmoduleID; + --LIMIT 1; + RETURN 0; +END; + +$$ LANGUAGE plpgsql; + +-- +-- Name: changesubmodulemaxandcontrol(integer, integer, integer, character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.changesubmodulemaxandcontrol(integer, integer, integer, character varying); + +CREATE OR REPLACE FUNCTION public.changesubmodulemaxandcontrol(pteacherid integer, psubmoduleid integer, pmaxrate integer, pcontroltype character varying) + RETURNS integer +AS $$ + DECLARE vChecker INT DEFAULT -1; + vDisciplineID INT DEFAULT -1; + vIsLocked INT DEFAULT -1; + vNewDiscMaxRate INT DEFAULT -1; + vCurRate INT DEFAULT -1; + rowUpd INT; +BEGIN +--select public.changesubmodulemaxandcontrol( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :psubmoduleid, -- put the psubmoduleid parameter value instead of 'psubmoduleid' (int4) +-- :pmaxrate, -- put the pmaxrate parameter value instead of 'pmaxrate' (int4) +-- :pcontroltype -- put the pcontroltype parameter value instead of 'pcontroltype' (varchar) +--); + -- check that discipline and submodule exists and doesn't locked + SELECT disciplines.IsLocked, + disciplines.MaxRate - submodules.MaxRate + pMaxRate + INTO vIsLocked, vNewDiscMaxRate + FROM submodules + INNER JOIN modules ON submodules.ModuleID = modules.ID + INNER JOIN disciplines ON disciplines.ID = modules.DisciplineID + WHERE submodules.ID = pSubmoduleID AND + disciplines.AuthorID = pTeacherID + LIMIT 1; + IF vIsLocked != 0 OR + vNewDiscMaxRate > 100 + THEN + RETURN -1; + END IF; + + UPDATE submodules + SET submodules.MaxRate = pMaxRate, + submodules.Type = pControlType + WHERE submodules.ID = pSubmoduleID; + --LIMIT 1; + get diagnostics rowUpd = ROW_COUNT; + RETURN rowUpd-1; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: changesubmodulename(integer, integer, character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.changesubmodulename(integer, integer, character varying); + +CREATE OR REPLACE FUNCTION public.changesubmodulename(pteacherid integer, psubmoduleid integer, pname character varying) + RETURNS integer +AS $$ + + DECLARE vIsLocked INT DEFAULT -1; +BEGIN +--select public.changesubmodulename( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :psubmoduleid, -- put the psubmoduleid parameter value instead of 'psubmoduleid' (int4) +-- :pname -- put the pname parameter value instead of 'pname' (varchar) +--); + + SELECT disciplines.IsLocked INTO vIsLocked + FROM view_roadmap + INNER JOIN disciplines ON disciplines.ID = view_roadmap.DisciplineID + WHERE view_roadmap.SubmoduleID = pSubmoduleID AND disciplines.AuthorID = pTeacherID + LIMIT 1; + IF vIsLocked != 0 THEN + RETURN -1; + END IF; + + UPDATE submodules + SET submodules.Name = pName + WHERE submodules.ID = pSubmoduleID; + --LIMIT 1; + RETURN 0; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: createrequest(integer, character varying, text, boolean); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.createrequest(integer, character varying, text, boolean); + +CREATE OR REPLACE FUNCTION public.createrequest(paccountid integer, ptitle character varying, pdescription text, pimage boolean) + RETURNS integer +AS $$ +declare ROWID integer; hi integer default 0; +begin +-- select public.createrequest( +-- :paccountid, -- put the paccountid parameter value instead of 'paccountid' (int4) +-- :ptitle, -- put the ptitle parameter value instead of 'ptitle' (varchar) +-- :pdescription, -- put the pdescription parameter value instead of 'pdescription' (text) +-- :pimage -- put the pimage parameter value instead of 'pimage' (bool) +--); + + --DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; + + if pImage then hi=1; --несовпадение типов boolean Рё integer + end if; + + INSERT INTO requests (AccountID, Title, Description, Status, HasImage) + -- VALUES (pAccountID, pTitle, pDescription, 'opened', pImage) + VALUES (pAccountID, pTitle, pDescription, 'opened', hi) + returning id into rowid; + RETURN rowid; + exception + when others then return -1; + +END +$$ LANGUAGE plpgsql; + +-- +-- Name: deletemodule(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.deletemodule(integer, integer); + +CREATE OR REPLACE FUNCTION public.deletemodule(pteacherid integer, pmoduleid integer) + RETURNS integer +AS $$ + DECLARE vDisciplineID INT DEFAULT -1; + curs cursor for select id from modules WHERE modules.DisciplineID = vDisciplineID AND + modules.Type = 'regular' + ORDER BY modules.OrderNum ASC; + counter int; +BEGIN +--select public.deletemodule( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :pmoduleid -- put the pmoduleid parameter value instead of 'pmoduleid' (int4) +--); + + -- get discipline ID + SELECT disciplines.ID FROM modules + INNER JOIN disciplines ON modules.DisciplineID = disciplines.ID AND disciplines.AuthorID = pTeacherID + WHERE modules.ID = pModuleID LIMIT 1 +into vDisciplineID; + + -- check rights + if NOT InternalIsTeacherAuthor(pTeacherID, vDisciplineID) OR + InternalIsMapLocked(vDisciplineID) + THEN + RETURN -1; + END if; + + DELETE FROM submodules + WHERE submodules.ModuleID = pModuleID; + DELETE FROM modules + WHERE modules.ID = pModuleID; + + -- restore continuous ordering + --РЅСѓР¶РЅРѕ сделать через РєСѓСЂСЃРѕСЂ + set counter = 0; + for rec in curs loop + counter = counter + 1; + update modules set modules.OrderNum = counter WHERE CURRENT of curs; + end loop; + /*update modules + SET modules.OrderNum = (counter = counter + 1) + WHERE modules.DisciplineID = vDisciplineID AND + modules.Type = 'regular'; + select modules + ORDER BY modules.OrderNum ASC; +*/ + RETURN 0; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: deletemodulebonus(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.deletemodulebonus(integer, integer); + +CREATE OR REPLACE FUNCTION public.deletemodulebonus(pteacherid integer, pdisciplineid integer) + RETURNS integer +AS $$ + DECLARE vBonusModuleID INT DEFAULT -1; +begin +-- select public.deletemodulebonus( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); + + CASE WHEN NOT InternalIsTeacherAuthor(pTeacherID, pDisciplineID) OR + InternalIsMapLocked(pDisciplineID) + THEN + RETURN -1; + else null; + END CASE; + + CASE WHEN GetBonusModule(pDisciplineID) <= 0 THEN + RETURN -1; + else null; + END CASE; + + DELETE FROM submodules + WHERE vBonusModuleID = submodules.ModuleID; + + DELETE FROM modules + WHERE vBonusModuleID = modules.ID; + --LIMIT 1; + + RETURN 0; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: deletesubmodule(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.deletesubmodule(integer, integer); + +CREATE OR REPLACE FUNCTION public.deletesubmodule(pteacherid integer, psubmoduleid integer) + RETURNS integer +AS $$ + + DECLARE vIsLocked INT DEFAULT -1; vModuleID INT DEFAULT -1; + counter INT; + curs cursor for + select ID from submodules + where submodules.ModuleID = vModuleID + ORDER BY submodules.OrderNum ASC; +BEGIN +--select public.deletesubmodule( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :psubmoduleid -- put the psubmoduleid parameter value instead of 'psubmoduleid' (int4) +--); + SELECT modules.ID, disciplines.IsLocked + INTO vModuleID, vIsLocked + FROM submodules + INNER JOIN modules ON modules.ID = submodules.ModuleID + INNER JOIN disciplines ON modules.DisciplineID = disciplines.ID + WHERE disciplines.AuthorID = pTeacherID AND + submodules.ID = pSubmoduleID + LIMIT 1; + IF vIsLocked != 0 THEN + RETURN -1; + END IF; + + -- handler will catch constraint violation + DELETE FROM submodules + WHERE submodules.ID = pSubmoduleID; + --LIMIT 1; + + -- restore continuous ordering + counter = 0; + for rec in curs loop + counter = counter + 1; + update sumodules set submodules.OrderNum = counter WHERE CURRENT of curs; + end loop; + /* UPDATE submodules + SET submodules.OrderNum = (counter = counter + 1) + WHERE submodules.ModuleID = vModuleID; + + select submodules + ORDER BY submodules.OrderNum ASC; +*/ + RETURN 0; + exception + when others then return -1; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: department_getidbyexternalid(character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.department_getidbyexternalid(character varying); + +CREATE OR REPLACE FUNCTION public.department_getidbyexternalid(pdepartmentexternalid character varying) + RETURNS integer +AS $$ +--select public.department_getidbyexternalid( +-- :pdepartmentexternalid -- put the pdepartmentexternalid parameter value instead of 'pdepartmentexternalid' (varchar) +--); + SELECT departments.ID as ID + FROM departments + WHERE departments.ExternalID = pDepartmentExternalID; --поле unique +$$ LANGUAGE sql; + +-- +-- Name: department_getidbyname(character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.department_getidbyname(character varying); + +CREATE OR REPLACE FUNCTION public.department_getidbyname(pdepartmentname character varying) + RETURNS setof integer +AS $$ +-- select public.department_getidbyname( +-- :pdepartmentname -- put the pdepartmentname parameter value instead of 'pdepartmentname' (varchar) +--); + SELECT departments.ID as ID + FROM departments + WHERE departments.Name = pDepartmentName; +$$ LANGUAGE sql; + +-- +-- Name: department_search(character varying, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.department_search(character varying, integer); + +CREATE OR REPLACE FUNCTION public.department_search(pname character varying, pfacultyid integer) + RETURNS integer +AS $$ +BEGIN +-- select public.department_search( +-- :pname, -- put the pname parameter value instead of 'pname' (varchar) +-- :pfacultyid -- put the pfacultyid parameter value instead of 'pfacultyid' (int4) +--); +RETURN COALESCE(( + SELECT departments.ID FROM departments + WHERE departments.Name = pName AND departments.FacultyID = pFacultyID LIMIT 1 +), -1); +END +$$ LANGUAGE plpgsql; + +-- +-- Name: discipline_countratings(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_countratings(integer); + +CREATE OR REPLACE FUNCTION public.discipline_countratings(pdisciplineid integer) + RETURNS bigint +AS $$ +--select public.discipline_countratings( +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); + SELECT COUNT(rating_table.recordbookid) FROM view_roadmap + LEFT JOIN rating_table ON rating_table.SubmoduleID = view_roadmap.SubmoduleID + WHERE view_roadmap.DisciplineID = pDisciplineID +$$ language sql; + +-- +-- Name: getratesfordiscipline(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getratesfordiscipline(integer); + +CREATE OR REPLACE FUNCTION public.getratesfordiscipline(pdisciplineid integer) + RETURNS + table ( +SubmoduleID integer +,StudentID integer +,Rate integer) +AS $$ + DECLARE vSemesterID INT DEFAULT -1; +begin +-- select * from public.getratesfordiscipline( +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); + vSemesterID := GetDisciplineProperty(pDisciplineID, 'semester'); + + return QUERY SELECT view_roadmap.SubmoduleID, + rating_table.recordbookid, + rating_table.Rate + FROM view_roadmap + LEFT JOIN rating_table ON rating_table.SubmoduleID = view_roadmap.SubmoduleID + INNER JOIN students_groups ON students_groups.SemesterID = vSemesterID AND + students_groups.recordbookid = rating_table.recordbookid + WHERE view_roadmap.DisciplineID = pDisciplineID; + --ORDER BY rating_table.recordbookid; + return; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: faculty_getidfromexternalid(varchar); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.faculty_getidfromexternalid(varchar); + +CREATE OR REPLACE FUNCTION public.faculty_getidfromexternalid(pFacultyExternalID character varying) + RETURNS integer + +AS $$ + DECLARE pID INT DEFAULT -1; +begin +-- select public.faculty_getidfromexternalid( +-- :pFacultyExternalID -- put the pFacultyExternalID parameter value instead of 'pFacultyExternalID' (varchar) +--); + SELECT faculties.ID INTO pID + FROM faculties + WHERE faculties.ExternalID = pFacultyExternalID + LIMIT 1; -- скорее всего РЅРµ требуется + RETURN pID; + END; +$$ LANGUAGE plpgsql; + +-- +-- Name: faculty_update(integer, text, text, text); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.faculty_update(integer, text, text, text); + +CREATE OR REPLACE FUNCTION public.faculty_update(pfacultyid integer, pfacultyexternalid text, pfacultyname text, pfacultyabbr text) + RETURNS integer +AS $$ +begin +-- select public.faculty_update( +-- :pfacultyid, -- put the pfacultyid parameter value instead of 'pfacultyid' (int4) +-- :pfacultyexternalid, -- put the pfacultyexternalid parameter value instead of 'pfacultyexternalid' (text) +-- :pfacultyname, -- put the pfacultyname parameter value instead of 'pfacultyname' (text) +-- :pfacultyabbr -- put the pfacultyabbr parameter value instead of 'pfacultyabbr' (text) +--); + IF pFacultyExternalID IS NOT NULL THEN + UPDATE faculties SET ExternalID = pFacultyExternalID WHERE ID = pFacultyID; + END IF; + + IF pFacultyName IS NOT NULL THEN + UPDATE faculties SET Name = pFacultyName WHERE ID = pFacultyID; + END IF; + + IF pFacultyAbbr IS NOT NULL THEN + UPDATE faculties SET Abbr = pFacultyAbbr WHERE ID = pFacultyID; + END IF; + + RETURN pFacultyID; + EXCEPTION + when others then + RETURN -1; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: faculty_create(integer, text, text, text); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.faculty_create( text, text, text); + + CREATE OR REPLACE FUNCTION public.faculty_create( + pFacultyExternalID TEXT, + pFacultyName TEXT, + pFacultyAbbr TEXT +) +RETURNS INT +AS $$ + DECLARE vInnerID integer DEFAULT -1; +begin +-- select public.faculty_create( +-- :pfacultyexternalid, -- put the pfacultyexternalid parameter value instead of 'pfacultyexternalid' (text) +-- :pfacultyname, -- put the pfacultyname parameter value instead of 'pfacultyname' (text) +-- :pfacultyabbr -- put the pfacultyabbr parameter value instead of 'pfacultyabbr' (text) +--); + SELECT faculties.id into vInnerID + FROM faculties + WHERE faculties.externalid LIKE pFacultyExternalID OR faculties."name" LIKE pFacultyName + LIMIT 1 ; + + IF vInnerID IS NULL THEN + INSERT INTO faculties (ExternalID, "name", Abbr) VALUES (pFacultyExternalID, pFacultyName, pFacultyAbbr) + returning id into vInnerID; + RETURN vInnnerID; + ELSE + RETURN (SELECT Faculty_Update(vInnerID, pFacultyExternalID, pFacultyName, pFacultyAbbr)); + END IF; + EXCEPTION + when others then + RETURN -1; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: creategroup(integer, integer, character varying, integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.creategroup(integer, integer, character varying, integer, integer); + +CREATE OR REPLACE FUNCTION public.creategroup( + pgradeid integer, + pgroupnum integer, + pSpecName character varying, + pFacultyID integer, + pyear integer) + RETURNS integer +AS $$ + DECLARE vGroupID INT DEFAULT null; + vSpecId INT DEFAULT null; + vGroupYear INT DEFAULT null; + vIsSpecMatch INT DEFAULT null; + +BEGIN +--select public.creategroup( +-- :pgradeid, -- put the pgradeid parameter value instead of 'pgradeid' (int4) +-- :pgroupnum, -- put the pgroupnum parameter value instead of 'pgroupnum' (int4) +-- :pspecname, -- put the pspecname parameter value instead of 'pspecname' (varchar) +-- :pfacultyid, -- put the pfacultyid parameter value instead of 'pfacultyid' (int4) +-- :pyear -- put the pyear parameter value instead of 'pyear' (int4) +--); +-- create specialization vSpecId - UNIQUE (pSpecName,pFacultyID) + select specializations.id into vSpecId + from specializations + where specializations.facultyid=pFacultyID and specializations."name" like pSpecName; + if (vSpecId is null) then + INSERT INTO specializations (Name, Abbr, FacultyID) + VALUES (pSpecName, NULL, pFacultyID) + returning id into vSpecId; + end if; + +-- create group vGroupID - UNIQUE (pGradeID, pGroupNum, pFacultyID) + select study_groups.id into vGroupID + from study_groups + where study_groups.gradeid=pgradeID + and study_groups.groupnum= pGroupNum + and study_groups.facultyid=pFacultyID; + if ( vGroupID is null) then + INSERT INTO study_groups (GradeID, GroupNum, FacultyID) + VALUES (pGradeID, pGroupNum, pFacultyID) + returning id into vGroupID ; + end if; + + SELECT groups_years.GroupID, groups_years.SpecializationID = vSpecId + INTO vGroupYear, vIsSpecMatch + FROM groups_years + WHERE groups_years.GroupID = vGroupID AND groups_years.Year = pYear + LIMIT 1; + + IF (vGroupYear is null) THEN + INSERT INTO groups_years (GroupID, Year, SpecializationID) + VALUES (vGroupID, pYear, vSpecId); + ELSEIF NOT vIsSpecMatch THEN + RETURN -1; + END IF; + + RETURN vGroupID; + EXCEPTION + when others then + RETURN -1; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: department_create_with_externalid(character varying, text, character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.department_create_with_externalid(character varying, text, character varying); + +CREATE OR REPLACE FUNCTION public.department_create_with_externalid( + pDepartmentExternalID VARCHAR, + pDepartmentName TEXT, + pFacultyExternalID VARCHAR +) +RETURNS INT +AS $$ + DECLARE vInnerID INT default null; vFacultyInnerID INT DEFAULT null; +begin +-- select public.department_create_with_externalid( +-- :pdepartmentexternalid, -- put the pdepartmentexternalid parameter value instead of 'pdepartmentexternalid' (varchar) +-- :pdepartmentname, -- put the pdepartmentname parameter value instead of 'pdepartmentname' (text) +-- :pfacultyexternalid -- put the pfacultyexternalid parameter value instead of 'pfacultyexternalid' (varchar) +--); + vFacultyInnerID = Faculty_GetIdByExternalID(pFacultyExternalID); + IF vFacultyInnerID IS NULL THEN + RETURN -2; + END IF; + + SELECT ID into vInnerID + FROM departments + WHERE departments.ExternalID LIKE pDepartmentExternalID OR departments.Name LIKE pDepartmentName + LIMIT 1; + + IF vInnerID IS NULL THEN + INSERT INTO departments (ExternalID, Name, FacultyID) + VALUES (pDepartmentExternalID, pDepartmentName, vFacultyInnerID) returning id into vInnerID; + RETURN vInnerID; + else + SELECT Department_Update(vInnerID, pDepartmentExternalID, pDepartmentName, vFacultyInnerID) into vInnerID; + RETURN vInnerID; + END IF; + EXCEPTION + when others then RETURN -1; +END + $$ LANGUAGE plpgsql; + +-- +-- Name: jobposition_create(character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.jobposition_create(character varying); + + CREATE OR REPLACE FUNCTION public.jobposition_create(pjobpositionname character varying) + RETURNS integer +AS $$ +declare vInsertID integer; +begin +-- select public.jobposition_create( +-- :pjobpositionname -- put the pjobpositionname parameter value instead of 'pjobpositionname' (varchar) +--); + INSERT INTO job_positions (Name) VALUES (pJobPositionName) returning id into vInsertID; + RETURN vInsertID; + exception + when others then RETURN -1; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: recordbook_getidfromexternalid(character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.recordbook_getidfromexternalid(character varying); + +CREATE OR REPLACE FUNCTION public.recordbook_getidfromexternalid( + pRecordBookExternalID VARCHAR +) +RETURNS INT +AS $$ +DECLARE pID INT DEFAULT null; +begin +-- select public.recordbook_getidfromexternalid( +-- :precordbookexternalid -- put the precordbookexternalid parameter value instead of 'precordbookexternalid' (varchar) +--); + + SELECT record_books.ID INTO pID + FROM record_books + WHERE record_books.ExternalID = pRecordBookExternalID + LIMIT 1; + if pID is null then return -1; + else RETURN pID; + end if; + END + $$ LANGUAGE plpgsql; + +-- +-- Name: signinbytoken(character); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.signinbytoken(character); + + CREATE OR REPLACE FUNCTION public.signinbytoken(ptoken character) + RETURNS integer + +AS $$ + + DECLARE vAccountID INT DEFAULT -1; +BEGIN +--select public.signinbytoken( +-- :ptoken -- put the ptoken parameter value instead of 'ptoken' (bpchar) +--); + SELECT auth_tokens.AccountID INTO vAccountID + FROM auth_tokens + WHERE auth_tokens.Token = pToken; + --LIMIT 1; + + IF vAccountID is null THEN + RETURN -1; -- token not found + END IF; + + UPDATE auth_tokens + SET Accessed = CURRENT_TIMESTAMP + WHERE auth_tokens.Token = pToken; + --LIMIT 1; + + INSERT INTO logs_signin(AccountID) VALUES (vAccountID); + RETURN vAccountID; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: internalisstudentattached(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- + +DROP FUNCTION IF EXISTS public.internalisstudentattached(integer, integer); + +CREATE OR REPLACE FUNCTION public.internalisstudentattached(pstudentid integer, pdisciplineid integer) + RETURNS boolean + +AS $$ + DECLARE vAttachType attach_detach DEFAULT 'detach'; +BEGIN +--select public.internalisstudentattached( +-- :pstudentid, -- put the pstudentid parameter value instead of 'pstudentid' (int4) +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); + + SELECT view_disciplines_recordbooks.Type INTO vAttachType + FROM view_disciplines_recordbooks + WHERE view_disciplines_recordbooks.RecordBookID = pRecordBookID AND + view_disciplines_recordbooks.DisciplineID = pDisciplineID + LIMIT 1; + RETURN 'attach' = COALESCE(vAttachType, 'attach'); +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: Discipline_SetExamPeriodOption(integer, integer, absence_pass); Type: FUNCTION; Schema: public; Owner: - +-- + +DROP FUNCTION IF EXISTS public.Discipline_SetExamPeriodOption(integer, integer, absence_pass); + +CREATE or REPLACE FUNCTION public.Discipline_SetExamPeriodOption( + pRecordBookID INT, + pSubmoduleID INT, + pType absence_pass default null +) RETURNS int +AS $$ + DECLARE vType INT DEFAULT NULL; +BEGIN +--select public.discipline_setexamperiodoption( +-- :precordbookid, -- put the precordbookid parameter value instead of 'precordbookid' (int4) +-- :psubmoduleid, -- put the psubmoduleid parameter value instead of 'psubmoduleid' (int4) +-- :ptype -- put the ptype parameter value instead of 'ptype' (absence_pass) +--); + IF pType is not null THEN + vType = pType; + END IF; + + INSERT INTO exam_period_options (RecordBookID, SubmoduleID, Type) VALUES(pRecordBookID, pSubmoduleID, vType) + ON conflict ON CONSTRAINT exam_period_options_recordbookid_submoduleid_key + do update set exam_period_options.Type = vType; + + RETURN 0; + EXCEPTION + when others + then RETURN -1; +end +$$ LANGUAGE plpgsql; + +-- +-- Name: getstudentgroup(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getstudentgroup(integer, integer); + +CREATE OR REPLACE FUNCTION public.getstudentgroup(precordbookID integer, psemesterid integer) + RETURNS integer +AS $$ +begin +-- select public.GetStudentGroup( +-- :pRecordBookID, -- put the pRecordBookID parameter value instead of 'pRecordBookID' (INT) +-- :pSemesterID -- put the pSemesterID parameter value instead of 'pSemesterID' (INT) +--); + +RETURN COALESCE(( + SELECT students_groups.GroupID FROM students_groups + join record_books on record_books.id=students_groups.recordbookid + WHERE record_books.id=precordbookID + AND students_groups.SemesterID = pSemesterID + AND students_groups.State != 'expulsion' + LIMIT 1 +), -1); +END +$$ LANGUAGE plpgsql; + +-- +-- Name: subject_create(integer, text, varchar, varchar); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.subject_create(integer, text, varchar, varchar); + +CREATE OR REPLACE FUNCTION public.subject_create(pfacultyid integer, psubjectname text, psubjectabbr character varying, pexternalid character varying) + RETURNS integer +AS $$ + DECLARE vSubjectID INT DEFAULT -1; +begin +-- select public.subject_create( +-- :pfacultyid, -- put the pfacultyid parameter value instead of 'pfacultyid' (int4) +-- :psubjectname, -- put the psubjectname parameter value instead of 'psubjectname' (text) +-- :psubjectabbr, -- put the psubjectabbr parameter value instead of 'psubjectabbr' (varchar) +-- :pexternalid -- put the pexternalid parameter value instead of 'pexternalid' (varchar) +--); + IF pSubjectName = '' THEN RETURN -1; END IF; +-- create/get subject (subject name is unique key) + INSERT INTO subjects (Name, Abbr, ExternalID) VALUES (pSubjectName, pSubjectAbbr, pExternalID) + ON conflict on constraint subjects_name_key + do update set + -- subjects.ID = LAST_INSERT_ID(subjects.ID), + subjects.Name = pSubjectName, + subjects.Abbr = COALESCE(pSubjectAbbr, subjects.Abbr), + subjects.ExternalID = COALESCE(pExternalID, subjects.ExternalID) + returning id into vSubjectID; -- должно вернуть или новый ID или ID измененной записи + BEGIN --handler block + + INSERT INTO subjects_faculties (SubjectID, FacultyID) VALUES (vSubjectID, pFacultyID) + on conflict on constraint subjects_faculties_subjectid_facultyid_key --just stub + do nothing; + EXCEPTION + when others then RETURN -1; + END; + RETURN vSubjectID; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: sha1(varchar); Type: FUNCTION; Schema: public; Owner: - +-- для шифровки пароля +-- +DROP FUNCTION IF EXISTS public.sha1(varchar); + +CREATE OR REPLACE FUNCTION public.sha1( +password varchar) +RETURNS varchar +AS $$ + SELECT ENCODE(DIGEST(password,'sha1'),'hex'); +$$ LANGUAGE sql; + +-- +-- Name: signin(character varying, character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.signin(character varying, character varying); + +CREATE OR REPLACE FUNCTION public.signin(ploginormail character varying, ppassword character varying) + RETURNS integer + +AS $$ + DECLARE vAccountID INT DEFAULT -1; +BEGIN +--select public.signin( +-- :ploginormail, -- put the ploginormail parameter value instead of 'ploginormail' (varchar) +-- :ppassword -- put the ppassword parameter value instead of 'ppassword' (varchar) +--); + --check account existence + SELECT accounts.ID INTO vAccountID FROM accounts + WHERE accounts.Password = SHA1(pPassword) AND + (accounts.Login = pLoginOrMail OR accounts.EMail = pLoginOrMail) + LIMIT 1; + IF vAccountID is null THEN + RETURN -1; + END IF; + + INSERT INTO logs_signin (AccountID) VALUES (vAccountID); + RETURN vAccountID; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: subject_getbyexternalid(character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.subject_getbyexternalid(character varying); + +CREATE OR REPLACE FUNCTION public.subject_getbyexternalid(psubjectexternalid character varying) + RETURNS integer + +AS $$ + DECLARE vID INT DEFAULT -1; +begin +-- select public.subject_getbyexternalid( +-- :psubjectexternalid -- put the psubjectexternalid parameter value instead of 'psubjectexternalid' (varchar) +--); + SELECT subjects.ID INTO vID + FROM subjects + WHERE subjects.ExternalID = pSubjectExternalID + LIMIT 1; + if vID is null then return -1; + else RETURN vID; + end if; +END + $$ LANGUAGE plpgsql; + + -- +-- Name: account_createactivated(character varying,character varying,character varying,character varying,character varying,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.account_createactivated(character varying,character varying,character varying,character varying,character varying,integer); + + CREATE OR REPLACE FUNCTION public.account_createactivated( +plastname character varying, +pfirstname character varying, +psecondname character varying, +pexternalid character varying, +pINILA character varying, +puserroleid integer) + RETURNS integer +AS $$ +declare vID int; +begin +-- select public.account_createactivated( +-- :plastname, -- put the plastname parameter value instead of 'plastname' (varchar) +-- :pfirstname, -- put the pfirstname parameter value instead of 'pfirstname' (varchar) +-- :psecondname, -- put the psecondname parameter value instead of 'psecondname' (varchar) +-- :pexternalid, -- put the pexternalid parameter value instead of 'pexternalid' (varchar) +-- :pinila, -- put the pinila parameter value instead of 'pinila' (varchar) +-- :puserroleid -- put the puserroleid parameter value instead of 'puserroleid' (int4) +--); + + INSERT INTO accounts (ExternalID, INILA, Login , Password , EMail, LastName, FirstName, SecondName, UserRoleID) + VALUES ( pExternalID,pINILA,NULL, NULL, NULL, pLastName, pFirstName, pSecondName, pUserRoleID) returning id into vID; + RETURN vID; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: account_getidfrominila(character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.account_getidfrominila(character varying); + +CREATE OR REPLACE FUNCTION public.account_getidfrominila( + pAccountINILA VARCHAR +) +RETURNS INT + +AS $$ + DECLARE pID INT DEFAULT -1; +begin +-- select public.account_getidfrominila( +-- :paccountinila -- put the paccountinila parameter value instead of 'paccountinila' (varchar) +--); + SELECT accounts.ID INTO pID + FROM accounts + WHERE accounts.INILA = pAccountINILA + LIMIT 1; + if pID is null then return -1; + else RETURN pID; + end if; + END + $$ LANGUAGE plpgsql; + +-- +-- Name: account_getidfromexternalid(character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.account_getidfromexternalid(character varying); + + CREATE OR REPLACE FUNCTION public.account_getidfromexternalid( + pAccountExternalID VARCHAR +) +RETURNS INT +AS $$ + DECLARE pID INT DEFAULT null; +begin +-- select public.account_getidfromexternalid( +-- :paccountexternalid -- put the paccountexternalid parameter value instead of 'paccountexternalid' (varchar) +--); + SELECT accounts.ID INTO pID + FROM accounts + WHERE accounts.ExternalID = pAccountExternalID + LIMIT 1; + if pID isnull then return -1; + else RETURN pID; + + end if; + END + $$ LANGUAGE plpgsql; + +-- +-- Name: logbind(integer,integer,integer,attach_detach, group_student); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.logbind(integer,integer,integer,attach_detach, group_student); + + CREATE OR REPLACE FUNCTION public.logbind(pdisciplineid integer, pteacherid integer, entityid integer, pattach attach_detach, ptype group_student) + RETURNS integer +AS $$ + declare countR int default 0; +BEGIN +-- select public.logbind( +-- :pdisciplineid, -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :entityid, -- put the entityid parameter value instead of 'entityid' (int4) +-- :pattach, -- put the pattach parameter value instead of 'pattach' (attach_detach) +-- :ptype -- put the ptype parameter value instead of 'ptype' (group_student) +--); + + IF pType = 'group' THEN + INSERT INTO logs_binds_groups + (DisciplineID, TeacherID, GroupID, Type) + VALUES (pDisciplineID, pTeacherID, EntityID, pAttach); + ELSEIF pType = 'student' THEN + INSERT INTO logs_binds_students + (DisciplineID, TeacherID, StudentID, Type) + VALUES (pDisciplineID, pTeacherID, EntityID, pAttach); + END IF; + get diagnostics countR = ROW_COUNT; + RETURN countR-1; + EXCEPTION + when others then RETURN -1; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: bindgroup(integer,integer,integer,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.bindgroup(integer,integer,integer); + +CREATE OR REPLACE FUNCTION public.bindgroup(pteacherid integer, pdisciplineid integer, pgroupid integer) + RETURNS integer + +AS $$ +declare vres int; +begin +-- select public.bindgroup( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :pdisciplineid, -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +-- :pgroupid, -- put the pgroupid parameter value instead of 'pgroupid' (int4) +-- :vres -- put the vres parameter value instead of 'vres' (int4) +--); + + -- todo: move to php layer + IF (pTeacherID IS NOT NULL AND NOT InternalIsTeacherBound(pTeacherID, pDisciplineID)) + OR InternalIsMapLocked(pDisciplineID) THEN + RETURN -1; + END IF; + -- already bound + IF EXISTS( + SELECT * FROM disciplines_groups + WHERE disciplines_groups.DisciplineID = pDisciplineID AND disciplines_groups.GroupID = pGroupID + ) THEN + RETURN 1; + END IF; + + -- bind whole group + INSERT INTO disciplines_groups (DisciplineID, GroupID) SELECT ( pDisciplineID, pGroupID ); + SELECT LogBind(pDisciplineID, pTeacherID, pGroupID, 'attach', 'group') INTO vRes; + RETURN RemoveStudentsAttach(pDisciplineID, pGroupID); -- delete students of this group which were bound to discipline before + exception + when others then RETURN -3; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: controlstudentgroup(integer,integer,common_outlet_expulsion_leave,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.controlstudentgroup(integer,integer,common_outlet_expulsion_leave,integer); + +CREATE OR REPLACE FUNCTION public.controlstudentgroup(precordbookid integer, pgroupid integer, pstate common_outlet_expulsion_leave, psemesterid integer) + RETURNS integer + +AS $$ +DECLARE vChecker INT DEFAULT 0; +begin +-- select public.controlstudentgroup( +-- :precordbookid, -- put the precordbookid parameter value instead of 'precordbookid' (int4) +-- :pgroupid, -- put the pgroupid parameter value instead of 'pgroupid' (int4) +-- :pstate, -- put the pstate parameter value instead of 'pstate' (common_outlet_expulsion_leave) +-- :psemesterid -- put the psemesterid parameter value instead of 'psemesterid' (int4) +--); + INSERT INTO students_groups (RecordBookID, GroupID, SemesterID, State) + VALUES (pRecordBookID, pGroupID, pSemesterID, pState) + ON conflict on CONSTRAINT students_groups_semesterid_recordbookid_key + do update set + students_groups.GroupID = pGroupID, + students_groups.State = pState, + students_groups.Date = current_date; + get diagnostics vChecker=ROW_COUNT; + RETURN vchecker-1; + EXCEPTION + when others then RETURN -1; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: departments_get(integer); Type: FUNCTION; Schema: public; Owner: - +-- + DROP FUNCTION IF EXISTS public.departments_get(integer); + + CREATE OR REPLACE FUNCTION public.departments_get(pfacultyid integer) + RETURNS SETOF departments +AS $$ +begin +-- select public.departments_get( +-- :pfacultyid -- put the pfacultyid parameter value instead of 'pfacultyid' (int4) +--); + if (pFacultyID is null) or (pFacultyID = 0) THEN + SELECT departments.* FROM departments + ORDER BY departments.Name ASC; + ELSE + SELECT departments.* -- ID, Name, FacultyID + FROM departments + WHERE departments.FacultyID = pFacultyID + ORDER BY departments.Name ASC; + END if; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: discipline_bindteacher(integer,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_bindteacher(integer,integer); + +CREATE OR REPLACE FUNCTION public.discipline_bindteacher(pdisciplineid integer, pbindingteacherid integer) + RETURNS integer +AS $$ +BEGIN +--select public.discipline_bindteacher( +-- :pdisciplineid, -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +-- :pbindingteacherid -- put the pbindingteacherid parameter value instead of 'pbindingteacherid' (int4) +--); + +--try to insert BindingTeacher in access list + INSERT INTO disciplines_teachers (DisciplineID, TeacherID) VALUES (pDisciplineID, pBindingTeacherID) + on conflict on constraint disciplines_teachers_disciplineid_teacherid_key --just stub + do nothing; + RETURN 0; + EXCEPTION + when others then RETURN -1; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: discipline_create(integer, integer, integer, exam_credit_grading_credit, integer, integer, integer, integer, integer, scientific_disciplinary_coursework); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_create(integer, integer, integer, exam_credit_grading_credit, integer, integer, integer, integer, integer, scientific_disciplinary_coursework); + +CREATE OR REPLACE FUNCTION public.discipline_create(pteacherid integer, pgradeid integer, psubjectid integer, pexamtype exam_credit_grading_credit, plecturecount integer, ppracticecount integer, plabcount integer, pfacultyid integer, psemesterid integer, psubtype scientific_disciplinary_coursework) + RETURNS integer + +AS $$ + DECLARE vDisciplineID INT DEFAULT -1; + vTemp int; +begin +-- select public.Discipline_Create( +-- :pTeacherID, -- put the pTeacherID parameter value instead of 'pTeacherID' (INT) +-- :pGradeID, -- put the pGradeID parameter value instead of 'pGradeID' (INT) +-- :pSubjectID, -- put the pSubjectID parameter value instead of 'pSubjectID' (INT) +-- :pExamType, -- put the pExamType parameter value instead of 'pExamType' (ENUM(15)) +-- :pLectureCount, -- put the pLectureCount parameter value instead of 'pLectureCount' (INT) +-- :pPracticeCount, -- put the pPracticeCount parameter value instead of 'pPracticeCount' (INT) +-- :pLabCount, -- put the pLabCount parameter value instead of 'pLabCount' (INT) +-- :pFacultyID, -- put the pFacultyID parameter value instead of 'pFacultyID' (INT) +-- :pSemesterID, -- put the pSemesterID parameter value instead of 'pSemesterID' (INT) +-- :pSubtype -- put the pSubtype parameter value instead of 'pSubtype' (ENUM(24)) +--); + +-- todo: make more flexible creation of coursework +-- I mean, while creating scientific coursework +-- we don't have the SubjectID field, but we must. +-- 346 is used as a default id for scientific courseworks. +-- This constant is duplicated in Model_Helper_CourseWorkBuilder + + IF pSubtype IS NOT NULL THEN + pSubjectID := 346; + END IF; + -- create discipline + INSERT INTO disciplines + ( AuthorID, GradeID, SubjectID, ExamType, LectureCount, PracticeCount, + LabCount, SemesterID, FacultyID, Subtype) + VALUES + (pTeacherID, pGradeID, pSubjectID, pExamType, pLectureCount, pPracticeCount, + pLabCount, pSemesterID, pFacultyID, pSubtype) + returning ID into vDisciplineID; + + SELECT Discipline_BindTeacher(vDisciplineID, pTeacherID) INTO vTemp; + -- add exam and extra modules + IF pExamType = 'exam' THEN + SELECT AddModuleExamUnsafe(vDisciplineID) INTO vTemp; + END IF; + SELECT AddModuleExtra(pTeacherID, vDisciplineID) INTO vTemp; + + RETURN vDisciplineID; + EXCEPTION + when others then RETURN -1; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: discipline_delegate(integer, integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_delegate(integer, integer, integer); + +CREATE OR REPLACE FUNCTION public.discipline_delegate(pdisciplineid integer, pnewauthorid integer, vtemp integer) + RETURNS integer + +AS $$ + declare vtemp int; +BEGIN +-- select public.discipline_delegate( +-- :pdisciplineid, -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +-- :pnewauthorid, -- put the pnewauthorid parameter value instead of 'pnewauthorid' (int4) +-- :vtemp -- put the vtemp parameter value instead of 'vtemp' (int4) +--); + + SELECT Discipline_BindTeacher(pDisciplineID, pNewAuthorID) INTO vTemp; + UPDATE disciplines + SET disciplines.AuthorID = pNewAuthorID + WHERE disciplines.ID = pDisciplineID; + get diagnostics vtemp = ROW_COUNT; + RETURN vtemp-1; + EXCEPTION + when others then RETURN -1; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: createaccount(character varying, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.createaccount(character varying, integer); + +CREATE OR REPLACE FUNCTION public.createaccount(pcode character varying, puserroleid integer) + RETURNS integer + +AS $$ +declare insID int; +begin +-- select public.createaccount( +-- :pcode, -- put the pcode parameter value instead of 'pcode' (varchar) +-- :puserroleid -- put the puserroleid parameter value instead of 'puserroleid' (int4) +--); + + INSERT INTO accounts (Login , Password , EMail, UserRoleID, ActivationCode) + VALUES ( NULL, NULL, NULL, pUserRoleID, pCode) returning ID into insID; + RETURN insID; +END; +$$ LANGUAGE plpgsql; + + +-- +-- Name: createoraddstudent(character varying, character varying, character varying, character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.createoraddstudent(character varying, character varying, character varying, character varying); + +CREATE OR REPLACE FUNCTION public.createoraddstudent(pexternalid character varying, plastname character varying, pfirstname character varying, psecondname character varying) + RETURNS integer +AS $$ + DECLARE vAccountID INT DEFAULT -1; + vStudentID INT DEFAULT -1; +begin +-- select public.createoraddstudent( +-- :pexternalid, -- put the pexternalid parameter value instead of 'pexternalid' (varchar) +-- :plastname, -- put the plastname parameter value instead of 'plastname' (varchar) +-- :pfirstname, -- put the pfirstname parameter value instead of 'pfirstname' (varchar) +-- :psecondname -- put the psecondname parameter value instead of 'psecondname' (varchar) +--); + vAccountID = CreateAccount(pLastName, pFirstName, pSecondName, null, GetUserRole('student')); + + IF pExternalID is not null THEN + UPDATE accounts + SET ExternalID = pExternalID + WHERE ID = vAccountID; + END IF; + + --create student + INSERT INTO students (AccountID) + VALUES (vAccountID) returning ID into vStudentID; + RETURN vStudentID; + EXCEPTION + when others then RETURN -1; + END + $$ LANGUAGE plpgsql; + +-- +-- Name: teacher_createactivated(character varying, character varying, character varying, integer, integer, character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.teacher_createactivated(character varying, character varying, character varying, integer, integer, character varying); + + CREATE OR REPLACE FUNCTION public.teacher_createactivated( + plastname character varying, + pfirstname character varying, + psecondname character varying, + pjobpositionid integer, + pFacultyID integer, + pdepartmentid integer, + pexternalid character varying, + pINILA VARCHAR) + RETURNS integer + +AS $$ + DECLARE vAccountID INT DEFAULT -1; + insID int; +BEGIN +--select public.teacher_createactivated( +-- :plastname, -- put the plastname parameter value instead of 'plastname' (varchar) +-- :pfirstname, -- put the pfirstname parameter value instead of 'pfirstname' (varchar) +-- :psecondname, -- put the psecondname parameter value instead of 'psecondname' (varchar) +-- :pjobpositionid, -- put the pjobpositionid parameter value instead of 'pjobpositionid' (int4) +-- :pdepartmentid, -- put the pdepartmentid parameter value instead of 'pdepartmentid' (int4) +-- :pexternalid -- put the pexternalid parameter value instead of 'pexternalid' (varchar) +--); + vAccountID = Account_CreateActivated(pLastName, pFirstName, pSecondName, pExternalID, pINILA, GetUserRole('teacher')); + + -- add new teacher + INSERT INTO teachers (AccountID, JobPositionID, DepartmentID, FacultyID) VALUES + (vAccountID, pJobPositionID, pDepartmentID, pFacultyID) returning ID into insID; + RETURN insID; + EXCEPTION + when others then RETURN -1; + END; +$$ LANGUAGE plpgsql; + +-- +-- Name: teacher_getidfrominila(character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.teacher_getidfrominila(character varying); + +CREATE OR REPLACE FUNCTION public.teacher_getidfrominila( +pTeacherINILA VARCHAR +) +RETURNS INT + +AS $$ + DECLARE pID INT DEFAULT null; +begin +-- select public.Teacher_GetIDFromINILA( +-- :pTeacherINILA -- put the pTeacherINILA parameter value instead of 'pTeacherINILA' (VARCHAR(40)) +--); + SELECT teachers.ID INTO pID + FROM teachers + INNER JOIN accounts ON teachers.AccountID = accounts.ID + WHERE accounts.INILA = pTeacherINILA + LIMIT 1; + if pID is null then pID = -1; + end if; + RETURN pID; + END + $$ LANGUAGE plpgsql; + +-- +-- Name: student_changeinfo integer,character varying,character varying,character varying,character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.student_changeinfo (integer,character varying,character varying,character varying,character varying); + + CREATE OR REPLACE FUNCTION public.student_changeinfo(pid integer, pexternalid character varying, plastname character varying, pfirstname character varying, psecondname character varying) + RETURNS integer + +AS $$ +DECLARE vAccountID INT DEFAULT -1; + vStudentID INT DEFAULT -1; +begin +-- select public.student_changeinfo( +-- :pid, -- put the pid parameter value instead of 'pid' (int4) +-- :pexternalid, -- put the pexternalid parameter value instead of 'pexternalid' (varchar) +-- :plastname, -- put the plastname parameter value instead of 'plastname' (varchar) +-- :pfirstname, -- put the pfirstname parameter value instead of 'pfirstname' (varchar) +-- :psecondname -- put the psecondname parameter value instead of 'psecondname' (varchar) +--); + SELECT students.AccountID INTO vAccountID + FROM students + WHERE students.ID = pID; + + UPDATE accounts + SET accounts.ExternalID = COALESCE(pExternalID, accounts.ExternalID), + accounts.LastName = COALESCE(pLastName, accounts.LastName), + accounts.FirstName = COALESCE(pFirstName, accounts.FirstName), + accounts.SecondName = COALESCE(pSecondName, accounts.SecondName) + WHERE accounts.ID = vAccountID; + + RETURN 0; + EXCEPTION + when others then RETURN -1; + END + $$ LANGUAGE plpgsql; + + -- +-- Name: createstudentex(character varying,character varying,character varying,integer,integer, bachelor_master_specialist, character varying,integer, character varying,integer);Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.createstudentex(character varying,character varying,character varying,integer,integer, bachelor_master_specialist, character varying,integer, character varying,integer); + + CREATE OR REPLACE FUNCTION public.createstudentex( + plastname character varying, + pfirstname character varying, + psecondname character varying, + pgradenum integer, + pgroupnum integer, + pdegree bachelor_master_specialist, + pspecname character varying, + pfacultyid integer, + pactivationcode character varying, + psemesterid integer) + RETURNS integer + +AS $$ + +DECLARE vGradeID INT DEFAULT -1; vGroupID INT DEFAULT -1; vYear INT DEFAULT -1; +begin +-- select public.createstudentex( +-- :plastname, -- put the plastname parameter value instead of 'plastname' (varchar) +-- :pfirstname, -- put the pfirstname parameter value instead of 'pfirstname' (varchar) +-- :psecondname, -- put the psecondname parameter value instead of 'psecondname' (varchar) +-- :pgradenum, -- put the pgradenum parameter value instead of 'pgradenum' (int4) +-- :pgroupnum, -- put the pgroupnum parameter value instead of 'pgroupnum' (int4) +-- :pdegree, -- put the pdegree parameter value instead of 'pdegree' (bachelor_master_specialist) +-- :pspecname, -- put the pspecname parameter value instead of 'pspecname' (varchar) +-- :pfacultyid, -- put the pfacultyid parameter value instead of 'pfacultyid' (int4) +-- :pactivationcode, -- put the pactivationcode parameter value instead of 'pactivationcode' (varchar) +-- :psemesterid -- put the psemesterid parameter value instead of 'psemesterid' (int4) +--); + vYear := COALESCE((SELECT Year FROM semesters WHERE semesters.ID = pSemesterID LIMIT 1), -1); + vGradeID := CreateGrade(pGradeNum, pDegree); + vGroupID := CreateGroup(vGradeID, pGroupNum, pSpecName, pFacultyID, vYear); + RETURN CreateStudent(pLastName, pFirstName, pSecondName, vGroupID, pActivationCode, pSemesterID); +END +$$ LANGUAGE plpgsql; + +-- +-- Name: student_getidfromexternalid(character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.student_getidfromexternalid(character varying); + +CREATE OR REPLACE FUNCTION public.student_getidfromexternalid(paccountexternalid character varying) + RETURNS integer + +AS $$ + DECLARE pID INT DEFAULT null; +BEGIN +-- select public.student_getidfromexternalid( +-- :paccountexternalid -- put the paccountexternalid parameter value instead of 'paccountexternalid' (varchar) +--); + SELECT students.ID INTO pID + FROM accounts + JOIN students ON accounts.ID = students.AccountID + WHERE accounts.ExternalID = pAccountExternalID + LIMIT 1; + RETURN coalesce(pID, -1); + END + $$ LANGUAGE plpgsql; + +-- +-- Name: removefromgroupinsemester(integer, integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.removefromgroupinsemester(integer, integer, integer); + + CREATE OR REPLACE FUNCTION public.removefromgroupinsemester( +pRecordBook integer, +pgroupid integer, +psemesterid integer) + RETURNS integer + +AS $$ +declare vRowCount int; +BEGIN +-- select public.RemoveFromGroupInSemester( +-- :pRecordBook, -- put the pRecordBook parameter value instead of 'pRecordBook' (INT) +-- :pGroupID, -- put the pGroupID parameter value instead of 'pGroupID' (INT) +-- :pSemesterID -- put the pSemesterID parameter value instead of 'pSemesterID' (INT) +--); + DELETE FROM students_groups + WHERE students_groups.GroupID = pGroupID + and students_groups.pRecordBook = pRecordBook + and students_groups.SemesterID = pSemesterID + and students_groups.State = 'common'; + get diagnostics vRowCount = ROW_COUNT; + RETURN vRowCount-1; + EXCEPTION + when others then RETURN -1; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: plan_binddiscipline(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.plan_binddiscipline(integer, integer); + +CREATE OR REPLACE FUNCTION public.plan_binddiscipline( + pStudyPlanID INT, + pDisciplineID INT +) +RETURNS INT +AS $$ +BEGIN +-- select public.Plan_BindDiscipline( +-- :pStudyPlanID, -- put the pStudyPlanID parameter value instead of 'pStudyPlanID' (INT) +-- :pDisciplineID -- put the pDisciplineID parameter value instead of 'pDisciplineID' (INT) +--); + INSERT INTO disciplines_study_plans (StudyPlanID, DisciplineID) VALUES (pStudyPlanID, pDisciplineID) + on conflict on constraint disciplines_study_plans_studyplanid_disciplineid_key + do nothing; + RETURN 0; + EXCEPTION + when others then RETURN -1; + END +$$ LANGUAGE plpgsql; + +-- +-- Name: plan_changeinfo(integer, integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.plan_changeinfo(integer, integer, integer); + +CREATE OR REPLACE FUNCTION public.plan_changeinfo( + pID INT, + pYear INT, + pFacultyID INT +) +RETURNS INT + +AS $$ +begin +-- select public.Plan_ChangeInfo( +-- :pID, -- put the pID parameter value instead of 'pID' (INT) +-- :pYear, -- put the pYear parameter value instead of 'pYear' (INT) +-- :pFacultyID -- put the pFacultyID parameter value instead of 'pFacultyID' (INT) +--); + UPDATE study_plans + SET study_plans.Year = COALESCE(pYear, study_plans.Year), + study_plans.FacultyID = COALESCE(pFacultyID, study_plans.FacultyID) + WHERE study_plans.ID = pID; + RETURN 0; + EXCEPTION + when others then RETURN -1; +END + $$ LANGUAGE plpgsql; + +-- +-- Name: plan_create(VARCHAR, integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.plan_create(VARCHAR, integer, integer); + + CREATE OR REPLACE FUNCTION public.plan_create( + pPlanExternalID VARCHAR, + pYear INT, + pFacultyID INT +) +RETURNS INT + +AS $$ + DECLARE vID INT DEFAULT -1; +begin +-- select public.Plan_Create( +-- :pPlanExternalID, -- put the pPlanExternalID parameter value instead of 'pPlanExternalID' (VARCHAR(9)) +-- :pYear, -- put the pYear parameter value instead of 'pYear' (INT) +-- :pFacultyID -- put the pFacultyID parameter value instead of 'pFacultyID' (INT) +--); + INSERT INTO study_plans (ExternalID, Year, FacultyID) VALUES (pPlanExternalID, pYear, pFacultyID) + on conflict on constraint study_plans_externalid_key + do UPDATE set study_plans.Year = pYear, study_plans.FacultyID = pFacultyID + returning id into vID; + + RETURN vID; + END + $$ LANGUAGE plpgsql; + +-- +-- Name: plan_getdisciplines(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.plan_getdisciplines(integer, integer); + + CREATE OR REPLACE FUNCTION public.plan_getdisciplines(pstudyplanid integer, psemesterid integer) + RETURNS SETOF integer + +AS $$ +--select public.plan_getdisciplines( +-- :pstudyplanid, -- put the pstudyplanid parameter value instead of 'pstudyplanid' (int4) +-- :psemesterid -- put the psemesterid parameter value instead of 'psemesterid' (int4) +--); + +SELECT disciplines.ID AS ID + FROM disciplines + INNER JOIN disciplines_study_plans ON disciplines_study_plans.DisciplineID = disciplines.ID + WHERE disciplines_study_plans.StudyPlanID = pStudyPlanID AND + disciplines.SemesterID = COALESCE(pSemesterID, disciplines.SemesterID); --??????? + $$ LANGUAGE sql; + +-- +-- Name: plan_getidfromexternalid(VARCHAR); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.plan_getidfromexternalid(VARCHAR); + + CREATE OR REPLACE FUNCTION public.plan_getidfromexternalid(pplanexternalid character varying) + RETURNS integer + +AS $$ + DECLARE vID INT DEFAULT null; +begin +-- select public.plan_getidfromexternalid( +-- :pplanexternalid -- put the pplanexternalid parameter value instead of 'pplanexternalid' (varchar) +--); + SELECT study_plans.ID INTO vID + FROM study_plans + WHERE study_plans.ExternalID = pPlanExternalID + LIMIT 1; + + RETURN coalesce(vID,-1); + END + $$ LANGUAGE plpgsql; + +-- +-- Name: plan_getinfo(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.plan_getinfo(integer); + + CREATE OR REPLACE FUNCTION public.plan_getinfo(pid integer) + RETURNS SETOF study_plans + +AS $$ +--select public.plan_getinfo( +-- :pid -- put the pid parameter value instead of 'pid' (int4) +--); + +SELECT study_plans.* + FROM study_plans + WHERE study_plans.ID = pID + LIMIT 1; + $$ LANGUAGE sql; + +-- +-- Name:recordbook_bind(VARCHAR, integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.recordbook_bind(VARCHAR, integer, integer); + + CREATE OR REPLACE FUNCTION public.recordbook_bind(pexternalid character varying, pstudentid integer, pplanid integer) + RETURNS integer + +AS $$ + DECLARE vRecordBookID INT DEFAULT -1; +BEGIN +--select public.recordbook_bind( +-- :pexternalid, -- put the pexternalid parameter value instead of 'pexternalid' (varchar) +-- :pstudentid, -- put the pstudentid parameter value instead of 'pstudentid' (int4) +-- :pplanid -- put the pplanid parameter value instead of 'pplanid' (int4) +--); + INSERT INTO record_books (StudentID, ExternalID) + VALUES (pStudentID, pExternalID) + on conflict on constraint record_books_externalid_key do + update set StudentID = pStudentID, + record_books.ID = LAST_INSERT_ID(record_books.ID) + returning ID into vRecordBookID; + + INSERT INTO record_books_plans (RecordBookID, StudyPlanID) + VALUES (vRecordBookID, pPlanID) + on conflict on constraint recordbookid_studyplanid_record_books_plans_key do + nothing; + + RETURN vRecordBookID; + + EXCEPTION + when others then RETURN -1; + END + $$ LANGUAGE plpgsql; + + -- +-- Name:recordbook_changeinfo(integer, VARCHAR, integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.recordbook_changeinfo(integer, VARCHAR, integer, integer); + + CREATE OR REPLACE FUNCTION public.recordbook_changeinfo( + pID INT, + pExternalID VARCHAR, + pStudentID int, + pPlanID int +) +RETURNS INT + +AS $$ + declare vRes int; +begin +-- select public.recordbook_changeinfo( +-- :pid, -- put the pid parameter value instead of 'pid' (int4) +-- :pexternalid, -- put the pexternalid parameter value instead of 'pexternalid' (varchar) +-- :pstudentid, -- put the pstudentid parameter value instead of 'pstudentid' (int4) +-- :pplanid -- put the pplanid parameter value instead of 'pplanid' (int4) +--); + + + UPDATE record_books + SET record_books.ExternalID = COALESCE(pExternalID, record_books.ExternalID) + WHERE record_books.ID = pID; + SELECT RecordBook_Bind(pExternalID, pStudentID, pPlanID) INTO vRes; + RETURN 0; + EXCEPTION + when others then RETURN -1; + END + $$ LANGUAGE plpgsql; + +-- +-- Name: recordbook_getinfo(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.recordbook_getinfo(integer); + + CREATE OR REPLACE FUNCTION public.recordbook_getinfo(precordbook integer) + RETURNS TABLE(id integer, externalid character varying, studentid integer) + +AS $$ +--select * from public.recordbook_getinfo( +-- :precordbook -- put the precordbook parameter value instead of 'precordbook' (int4) +--); + +SELECT + record_books.ID, + record_books.ExternalID, + record_books.StudentID + FROM record_books + WHERE record_books.ID = pRecordBook; + $$ LANGUAGE sql; + +-- +-- Name: gettextmark(character,character varying,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.gettextmark(character,character varying,integer); + + CREATE OR REPLACE FUNCTION public.gettextmark(isafterexam character, examtype character varying, rate integer) + RETURNS character varying + +AS $$ + + declare markTextId int; + markText varchar(100); +begin +-- select public.gettextmark( +-- :isafterexam, -- put the isafterexam parameter value instead of 'isafterexam' (bpchar) +-- :examtype, -- put the examtype parameter value instead of 'examtype' (varchar) +-- :rate -- put the rate parameter value instead of 'rate' (int4) +--); + if examType = 'credit' then + if rate < 60 then + markTextId := 6;--незачет + else + markTextId := 7;--зачет + end if; + elseif examType = 'gradingcredit' then + if rate >= 85 then + markTextId := 5;--неуд. + elseif rate >= 70 then + markTextId := 4;--хорошо + elseif rate >= 60 then + markTextId := 3;--СѓРґРѕРІР». + else + markTextId := 2;--неуд. + end if; + elseif isAfterExam = '0' then + if rate < 38 then + markTextId := 1;--недопуск + else + return ' ' ; + end if; + else + if rate >= 85 then + markTextId := 5;--неуд. + elseif rate >= 70 then + markTextId := 4;--хорошо + elseif rate >= 60 then + markTextId := 3;--СѓРґРѕРІР». + else + markTextId := 2;--неуд. + end if; + end if; + select name from text_mark where id = markTextId into markText; + return markText; +END; +$$ LANGUAGE plpgsql; + + +-- +-- Name: checkaccountexistence(text, login_email_code); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.checkaccountexistence(text, login_email_code); + +CREATE OR REPLACE FUNCTION public.checkaccountexistence(pdata text, ptype login_email_code) + RETURNS boolean +AS $$ +begin +-- select public.checkaccountexistence( +-- :pdata, -- put the pdata parameter value instead of 'pdata' (text) +-- :ptype -- put the ptype parameter value instead of 'ptype' (login_email_code) +--); + +RETURN EXISTS( + SELECT * FROM accounts + WHERE CASE pType + WHEN 'login' THEN pData = accounts.Login + WHEN 'email' THEN pData = accounts.EMail + WHEN 'code' THEN pData = accounts.ActivationCode + ELSE FALSE + END + LIMIT 1 +); +end +$$ LANGUAGE plpgsql; + +-- +-- Name: createauthtoken(integer, character varying, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.createauthtoken(integer, character varying, integer); + +CREATE OR REPLACE FUNCTION public.createauthtoken(paccountid integer, pdescription character varying, prightmask integer) + RETURNS character varying +AS $$ + + DECLARE vTries int DEFAULT 13; -- number of tries to generate unique token + vCreated boolean DEFAULT FALSE; + -- vSeed int DEFAULT FLOOR(4294967296 * RAND(CURRENT_TIMESTAMP ^ LAST_INSERT_ID() ^ (pAccountID << 10))); + vToken char(40); +BEGIN +--select public.createauthtoken( +-- :paccountid, -- put the paccountid parameter value instead of 'paccountid' (int4) +-- :pdescription, -- put the pdescription parameter value instead of 'pdescription' (varchar) +-- :prightmask -- put the prightmask parameter value instead of 'prightmask' (int4) +--); + SELECT setseed(FLOOR(4294967296 * (CURRENT_TIMESTAMP # (pAccountID << 10)))); -- ??????? + WHILE (NOT vCreated AND vTries > 0) loop + begin + + vToken := SHA1(RANDOM()); + vTries := vTries - 1; + vCreated := TRUE; + INSERT INTO auth_tokens(Token, AccountID, Description, Mask) VALUES (vToken, pAccountID, pDescription, pRightMask); + EXCEPTION + when others + then vCreated := FALSE; + end; + END loop; + + RETURN IF(vCreated, vToken, NULL); +END +$$ LANGUAGE plpgsql; + +-- +-- Name: getuserfullnamebyaccountid(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getuserfullnamebyaccountid(integer); + +CREATE OR REPLACE FUNCTION public.getuserfullnamebyaccountid(paccountid integer) + RETURNS character varying + +AS $$ + + DECLARE vUserFullName VARCHAR(255); + vChecker INT DEFAULT null; +BEGIN +--select public.getuserfullnamebyaccountid( +-- :paccountid -- put the paccountid parameter value instead of 'paccountid' (int4) +--); + -- try to find student with that account id + SELECT students.ID, CONCAT(students.LastName,' ',students.FirstName,' ',students.SecondName) + INTO vChecker, vUserFullName + FROM students + WHERE students.AccountID = pAccountID + LIMIT 1; + + IF vChecker is null THEN -- try to find teacher with that account id + SELECT teachers.ID, CONCAT(teachers.LastName,' ',teachers.FirstName,' ',teachers.SecondName) + INTO vChecker, vUserFullName + FROM teachers + WHERE teachers.AccountID = pAccountID + LIMIT 1; + + IF vChecker is null THEN + RETURN ''; + END IF; + END IF; + + RETURN vUserFullName; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: getuserrole(student_teacher_admin_dean); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getuserrole(student_teacher_admin_dean); + +CREATE OR REPLACE FUNCTION public.getuserrole(ptype student_teacher_admin_dean) + RETURNS integer +AS $$ + +BEGIN +--select public.getuserrole( +-- :ptype -- put the ptype parameter value instead of 'ptype' (student_teacher_admin_dean) +--); +RETURN (CASE pType + WHEN 'dean' THEN 4 + WHEN 'teacher' THEN 2 + WHEN 'admin' THEN 3 + ELSE 1 +END); +end +$$ LANGUAGE plpgsql; + +-- +-- Name: createrecoverytoken(character varying, character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.createrecoverytoken(character varying, character varying); + +CREATE OR REPLACE FUNCTION public.createrecoverytoken(paccountoremail character varying, ptoken character varying) + RETURNS character varying +AS $$ + DECLARE vAccountID INT DEFAULT null; + DECLARE vUserFullName TEXT; +BEGIN +--select public.createrecoverytoken( +-- :paccountoremail, -- put the paccountoremail parameter value instead of 'paccountoremail' (varchar) +-- :ptoken -- put the ptoken parameter value instead of 'ptoken' (varchar) +--); + -- get account ID + SELECT accounts.ID INTO vAccountID + FROM accounts + WHERE accounts.EMail = pAccountOrEMail OR + accounts.Login = pAccountOrEMail + LIMIT 1; + IF vAccountID is null THEN + RETURN ''; + END IF; + + vUserFullName := GetUserFullNameByAccountID(vAccountID); + IF vUserFullName IS NULL OR vUserFullName = '' THEN + RETURN ''; + END IF; + + -- transform all unused recovery tokens into used + UPDATE recovery_tokens + SET recovery_tokens.isUsed = 1 + WHERE recovery_tokens.isUsed = 0 AND + recovery_tokens.AccountID = vAccountID; + + -- handle catch constraints violations + INSERT INTO recovery_tokens + ( AccountID, Token ) + VALUES (vAccountID, pToken); + RETURN vUserFullName; + EXCEPTION + when others then RETURN -2; -- тип ??? +END +$$ LANGUAGE plpgsql; + +-- +-- Name: findgroup(integer, integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.findgroup(integer, integer, integer); + +CREATE OR REPLACE FUNCTION public.findgroup(pgradeid integer, pgroupnum integer, pfacultyid integer) + RETURNS integer +AS $$ +begin +-- select public.findgroup( +-- :pgradeid, -- put the pgradeid parameter value instead of 'pgradeid' (int4) +-- :pgroupnum, -- put the pgroupnum parameter value instead of 'pgroupnum' (int4) +-- :pfacultyid -- put the pfacultyid parameter value instead of 'pfacultyid' (int4) +--); + +RETURN COALESCE(( + SELECT study_groups.ID FROM study_groups + WHERE study_groups.GradeID = pGradeID + AND study_groups.GroupNum = pGroupNum + AND study_groups.FacultyID = pFacultyID + LIMIT 1 +), -1); +END +$$ LANGUAGE plpgsql; + +-- +-- Name: deleteauthtoken(character); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.deleteauthtoken(character); + +CREATE OR REPLACE FUNCTION public.deleteauthtoken(ptoken character) + RETURNS integer + +AS $$ +declare vCount int; +begin +-- select public.deleteauthtoken( +-- :ptoken -- put the ptoken parameter value instead of 'ptoken' (bpchar) +--); + + DELETE FROM auth_tokens + WHERE auth_tokens.Token = pToken; + get diagnostics vCount=ROW_COUNT; + RETURN vCount-1; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: department_create(character varying, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.department_create(character varying, integer); + +CREATE OR REPLACE FUNCTION public.department_create(pname character varying, pfacultyid integer) + RETURNS integer + +AS $$ +declare vID int; +begin +-- select public.department_create( +-- :pname, -- put the pname parameter value instead of 'pname' (varchar) +-- :pfacultyid -- put the pfacultyid parameter value instead of 'pfacultyid' (int4) +--); + + INSERT INTO departments (Name, FacultyID) VALUES (pName, pFacultyID) + ON conflict on constraint departments_name_facultyid_key do + update set departments.facultyid=pFacultyID returning id into vID; + + RETURN vID; -- может достаточно return 0; ??? + EXCEPTION + when others then RETURN -1; +end +$$ LANGUAGE plpgsql; + +-- +-- Name: department_update(integer, text, text, text); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.department_update(integer, text, text, text); + +CREATE OR REPLACE FUNCTION public.department_update(pdepartmentid integer, pdepartmentexternalid text, pdepartmentname text, pfacultyid text) + RETURNS integer + +AS $$ +begin +-- select public.department_update( +-- :pdepartmentid, -- put the pdepartmentid parameter value instead of 'pdepartmentid' (int4) +-- :pdepartmentexternalid, -- put the pdepartmentexternalid parameter value instead of 'pdepartmentexternalid' (text) +-- :pdepartmentname, -- put the pdepartmentname parameter value instead of 'pdepartmentname' (text) +-- :pfacultyid -- put the pfacultyid parameter value instead of 'pfacultyid' (text) +--); + + IF pDepartmentExternalID IS NOT NULL THEN + UPDATE departments SET ExternalID = pDepartmentExternalID WHERE ID = pDepartmentID; + END IF; + + IF pDepartmentName IS NOT NULL THEN + UPDATE departments SET Name = pDepartmentName WHERE ID = pDepartmentID; + END IF; + + IF pFacultyID IS NOT NULL THEN + UPDATE departments SET FacultyID = pFacultyID WHERE ID = pDepartmentID; + END IF; + + RETURN pDepartmentID; + EXCEPTION when others then RETURN -1; +end + $$ LANGUAGE plpgsql; + +-- +-- Name: detachallstudents(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.detachallstudents(integer); + +CREATE OR REPLACE FUNCTION public.detachallstudents(pdisciplineid integer) + RETURNS integer + +AS $$ +begin +-- select public.detachallstudents( +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); + + DELETE FROM disciplines_groups + WHERE disciplines_groups.DisciplineID = pDisciplineID; + DELETE FROM disciplines_students + WHERE disciplines_students.DisciplineID = pDisciplineID; + RETURN 0; +END; +$$ LANGUAGE plpgsql; + +----------------------------------------------------------------------------------------------------------------------------------------- + +-- +-- Name: discipline_find(integer, integer, integer, exam_credit_grading_credit); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_find(integer, integer, integer, exam_credit_grading_credit); + +CREATE OR REPLACE FUNCTION public.discipline_find(pstudyplanid integer, psemesterid integer, psubjectid integer, pexamtype exam_credit_grading_credit) + RETURNS SETOF integer + +AS $$ +--select public.discipline_find( +-- :pstudyplanid, -- put the pstudyplanid parameter value instead of 'pstudyplanid' (int4) +-- :psemesterid, -- put the psemesterid parameter value instead of 'psemesterid' (int4) +-- :psubjectid, -- put the psubjectid parameter value instead of 'psubjectid' (int4) +-- :pexamtype -- put the pexamtype parameter value instead of 'pexamtype' (exam_credit_grading_credit) +--); + SELECT disciplines.ID + FROM disciplines + INNER JOIN disciplines_study_plans ON disciplines.ID = disciplines_study_plans.DisciplineID + WHERE disciplines_study_plans.StudyPlanID = pStudyPlanID AND + disciplines.SemesterID = pSemesterID AND + disciplines.SubjectID = pSubjectID AND + disciplines.ExamType = pExamType; + $$ LANGUAGE sql; + + -- +-- Name: discipline_getidfromexternalid(character varying); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_getidfromexternalid(character varying); + + CREATE OR REPLACE FUNCTION public.discipline_getidfromexternalid(pdisciplineexternalid character varying) + RETURNS integer + +AS $$ +begin +-- select public.discipline_getidfromexternalid( +-- :pdisciplineexternalid -- put the pdisciplineexternalid parameter value instead of 'pdisciplineexternalid' (varchar) +--); + return + coalesce( + (SELECT disciplines.ID FROM disciplines + WHERE disciplines.ExternalID = pDisciplineExternalID + LIMIT 1), + -1); + +end + $$ LANGUAGE plpgsql; + +-- +-- Name: discipline_getinfo(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_getinfo(integer); + +CREATE OR REPLACE FUNCTION public.discipline_getinfo(pdisciplineid integer) + RETURNS TABLE(id integer, authorid integer, gradeid integer, gradenum integer, degree bachelor_master_specialist, type exam_credit_grading_credit, lectures integer, practice integer, labs integer, semesterid integer, subjectid integer, subjectname character varying, subjectabbr character varying, facultyid integer, facultyname character varying, islocked integer, milestone integer, subtype scientific_disciplinary_coursework, compounddiscid integer, ismapcreated boolean, isbonus boolean, semesternum integer, semesteryear integer) + +AS $$ + + DECLARE vIsBonus BOOLEAN; +begin +-- select * from public.discipline_getinfo( +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); + + vIsBonus := EXISTS( + SELECT * FROM modules + WHERE modules.DisciplineID = pDisciplineID AND + modules.Type = 'bonus' + LIMIT 1 + ); + + SELECT + view_disciplines.DisciplineID AS ID, + view_disciplines.AuthorID, + view_disciplines.GradeID, + view_disciplines.GradeNum, + view_disciplines.Degree, + view_disciplines.ExamType AS Type, + view_disciplines.LectureCount AS Lectures, + view_disciplines.PracticeCount AS Practice, + view_disciplines.LabCount AS Labs, + view_disciplines.SemesterID, + view_disciplines.SubjectID, + view_disciplines.SubjectName, + view_disciplines.SubjectAbbr, + view_disciplines.FacultyID, + view_disciplines.FacultyName, + view_disciplines.IsLocked, + view_disciplines.Milestone, + view_disciplines.Subtype, + view_disciplines.CompoundDiscID, + (view_disciplines.MaxRate = 100) AS IsMapCreated, + vIsBonus AS IsBonus, + semesters.Num AS semesterNum, -- TODO: Camelize + semesters.Year AS semesterYear + FROM view_disciplines + INNER JOIN semesters ON semesters.ID = view_disciplines.SemesterID + WHERE view_disciplines.DisciplineID = pDisciplineID + LIMIT 1; +END ; +$$ LANGUAGE plpgsql; + +-- +-- Name: discipline_delete(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_delete(integer); + +CREATE OR REPLACE FUNCTION public.discipline_delete(pdisciplineid integer) + RETURNS integer + +AS $$ +begin +-- select public.discipline_delete( +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); + + -- delete roadmap + DELETE FROM submodules + WHERE submodules.moduleID in ( + select modules.id FROM modules + WHERE modules.DisciplineID = pDisciplineID + ); + + DELETE FROM modules + WHERE modules.DisciplineID = pDisciplineID; + + -- detach all entities from discipline + DELETE FROM disciplines_teachers + WHERE disciplines_teachers.DisciplineID = pDisciplineID; + DELETE FROM disciplines_students + WHERE disciplines_students.DisciplineID = pDisciplineID; + DELETE FROM disciplines_groups + WHERE disciplines_groups.DisciplineID = pDisciplineID; + DELETE FROM logs_binds_groups + WHERE logs_binds_groups.DisciplineID = pDisciplineID; + DELETE FROM logs_binds_students + WHERE logs_binds_students.DisciplineID = pDisciplineID; + + -- delete discipline + DELETE FROM disciplines + WHERE disciplines.ID = pDisciplineID; + --LIMIT 1; + + RETURN 0; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: discipline_getinfobysubmodule(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_getinfobysubmodule(integer); + +CREATE OR REPLACE FUNCTION public.discipline_getinfobysubmodule(psubmoduleid integer) + + RETURNS TABLE(id integer, authorid integer, gradeid integer, gradenum integer, degree bachelor_master_specialist, type exam_credit_grading_credit, lectures integer, practice integer, labs integer, semesterid integer, subjectid integer, subjectname character varying, subjectabbr character varying, facultyid integer, facultyname character varying, islocked integer, milestone integer, subtype scientific_disciplinary_coursework, compounddiscid integer, ismapcreated boolean, isbonus boolean, semesternum integer, semesteryear integer) + +AS $$ + + DECLARE vDisciplineID INT DEFAULT -1; +begin +-- select * from public.discipline_getinfobysubmodule( +-- :psubmoduleid -- put the psubmoduleid parameter value instead of 'psubmoduleid' (int4) +--); + SELECT modules.DisciplineID + INTO vDisciplineID + FROM submodules + INNER JOIN modules ON submodules.ModuleID = modules.ID + WHERE submodules.ID = pSubmoduleID + LIMIT 1; + + return query select * from Discipline_GetInfo(vDisciplineID); +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: discipline_getmodules(integer, exam_rate_all); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_getmodules(integer, exam_rate_all); + +CREATE OR REPLACE FUNCTION public.discipline_getmodules(pdisciplineid integer, ptype exam_rate_all) + RETURNS + table ( + ID integer, + Name varchar, + type regular_exam_bonus_extra + ) + +AS $$ +begin +-- select public.discipline_getmodules( +-- :pdisciplineid, -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +-- :ptype -- put the ptype parameter value instead of 'ptype' (exam_rate_all) +--); + SELECT modules.ID, + modules.Name, + modules.Type + FROM modules + WHERE modules.DisciplineID = pDisciplineID AND + CASE pType + WHEN 'exam' THEN modules.Type = 'exam' OR modules.Type = 'extra' + WHEN 'rate' THEN modules.Type != 'exam' + ELSE TRUE + END + ORDER BY + CASE pType + WHEN 'exam' THEN InternalOrderModuleTypesForSession(modules.Type) + WHEN 'rate' THEN modules.Type # 1 -- XOR 1, 3, 2, 4 ASC + ELSE TRUE + END ASC, + modules.OrderNum ASC; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: discipline_getstudents(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_getstudents(integer); + +CREATE OR REPLACE FUNCTION public.discipline_getstudents(pdisciplineid integer) + RETURNS TABLE(id integer, recordbookid integer, lastname character varying, firstname character varying, secondname character varying, gradeid integer, gradenum integer, degree bachelor_master_specialist, groupid integer, groupnum integer, attachtype attach_detach) + +AS $$ + DECLARE vSemesterID int DEFAULT -1; +BEGIN + --select * from public.Discipline_GetStudents( +-- :pDisciplineID -- put the pDisciplineID parameter value instead of 'pDisciplineID' (INT) +--); + vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester'); + return query + SELECT view_students.StudentID AS ID, + view_students.RecordBookID, + view_students.LastName, + view_students.FirstName, + view_students.SecondName, + view_students.GradeID, + view_students.GradeNum, + view_students.Degree, + view_students.GroupID, + view_students.GroupNum, + view_disciplines_recordbooks.Type AS AttachType + FROM view_disciplines_recordbooks + INNER JOIN view_students ON view_disciplines_recordbooks.RecordBookID = view_students.RecordBookID + WHERE view_students.SemesterID = vSemesterID AND view_disciplines_recordbooks.DisciplineID = pDisciplineID + ORDER BY view_disciplines_recordbooks.Type = 'attach' ASC, + view_students.GradeID ASC, + view_students.GroupNum ASC, + view_students.LastName ASC, + view_students.FirstName ASC; +END + $$ LANGUAGE plpgsql; + +-- +-- Name: discipline_getsubmodules(integer,exam_rate_all); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_getsubmodules(integer,exam_rate_all); + + CREATE OR REPLACE FUNCTION public.discipline_getsubmodules(pdisciplineid integer, ptype exam_rate_all) + RETURNS table( + ModuleID integer, + ID integer, + Name varchar, + Rate integer, + type current_landmark_control + ) + +AS $$ + +begin +-- select * from public.discipline_getsubmodules( +-- :pdisciplineid, -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +-- :ptype -- put the ptype parameter value instead of 'ptype' (exam_rate_all) +--); +return query + SELECT view_roadmap.ModuleID, + view_roadmap.SubmoduleID AS ID, + view_roadmap.SubmoduleName AS Name, + view_roadmap.SubmoduleRate AS Rate, + view_roadmap.SubmoduleType AS Type + FROM view_roadmap + WHERE view_roadmap.DisciplineID = pDisciplineID AND + CASE pType + WHEN 'exam' THEN view_roadmap.ModuleType = 'exam' OR view_roadmap.ModuleType = 'extra' + WHEN 'rate' THEN view_roadmap.ModuleType != 'exam' OR view_roadmap.SubmoduleOrderNum = 1 + ELSE TRUE + END + ORDER BY + view_roadmap.ModuleOrderNum ASC, + view_roadmap.SubmoduleOrderNum ASC; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: discipline_getwithfullness( noukd_norate_full, integer,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_getwithfullness( noukd_norate_full, integer,integer); + +CREATE OR REPLACE FUNCTION public.discipline_getwithfullness(ptype noukd_norate_full, psemesterid integer, pfacultyid integer) + RETURNS SETOF integer + +AS $$ +--select public.discipline_getwithfullness( +-- :ptype, -- put the ptype parameter value instead of 'ptype' (noukd_norate_full) +-- :psemesterid, -- put the psemesterid parameter value instead of 'psemesterid' (int4) +-- :pfacultyid -- put the pfacultyid parameter value instead of 'pfacultyid' (int4) +--); + +SELECT view_disciplines.DisciplineID AS ID + FROM view_disciplines + WHERE view_disciplines.SemesterID = pSemesterID AND + view_disciplines.FacultyID = pFacultyID AND + CASE WHEN pType = 'noukd' + THEN (view_disciplines.MaxRate != 100 AND view_disciplines.IsLocked = 0) + ELSE true + END + AND + CASE WHEN pType = 'norate' + THEN (view_disciplines.MaxRate = 100 AND view_disciplines.IsLocked = 0) + ELSE TRUE + END + AND + CASE WHEN pType = 'full' + THEN (view_disciplines.MaxRate = 100 AND view_disciplines.IsLocked = 1) + ELSE TRUE + END; + $$ LANGUAGE sql; + +-- +-- Name: discipline_setgradeunsafe(integer,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_setgradeunsafe(integer,integer); + + CREATE OR REPLACE FUNCTION public.discipline_setgradeunsafe( + pDisciplineID INT, + pGradeID INT +) +RETURNS INT + +AS $$ +declare vRow int; +begin +-- select public.Discipline_SetGradeUnsafe( +-- :pDisciplineID, -- put the pDisciplineID parameter value instead of 'pDisciplineID' (INT) +-- :pGradeID -- put the pGradeID parameter value instead of 'pGradeID' (INT) +--); + + -- set grade + UPDATE disciplines + SET disciplines.GradeID = pGradeID + WHERE disciplines.ID = pDisciplineID ; + get diagnostics vRow = ROW_COUNT; + RETURN vRow-1; + EXCEPTION + when others then RETURN -1; +END + $$ LANGUAGE plpgsql; + +-- +-- Name: discipline_setrate(integer,integer,integer,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_setrate(integer,integer,integer,integer); + + CREATE OR REPLACE FUNCTION public.discipline_setrate(pteacherid integer, precordbookid integer, psubmoduleid integer, prate integer) + RETURNS integer + +AS $$ + DECLARE vDisciplineID INT DEFAULT -1; + vMaxRate INT DEFAULT -1; + vModuleType INT DEFAULT -1; + DECLARE vIsOver BOOLEAN DEFAULT FALSE; + vIsLocked BOOLEAN DEFAULT FALSE; + vIsUsed BOOLEAN DEFAULT FALSE; + vIsUpdated boolean default false; +begin +-- select Discipline_SetRate( +-- :pTeacherID, -- put the pTeacherID parameter value instead of 'pTeacherID' (INT) +-- :pRecordBookID, -- put the pRecordBookID parameter value instead of 'pRecordBookID' (INT) +-- :pSubmoduleID, -- put the pSubmoduleID parameter value instead of 'pSubmoduleID' (INT) +-- :pRate -- put the pRate parameter value instead of 'pRate' (INT) +--); + + -- 0) check rights ПОЧЕМУ РўРђРљ ПОЗДНО ???? + IF NOT InternalIsStudentAttached(pRecordBookID, vDisciplineID) OR + NOT InternalIsTeacherBound(pTeacherID, vDisciplineID) THEN + RETURN 1; + END IF; + + IF pRate < 0 THEN + INSERT INTO logs_rating (RecordBookID, SubmoduleID, TeacherID, Rate, Action ) VALUES + (pRecordBookID, pSubmoduleID, pTeacherID, pRate, 'delete'); + + -- TODO: extract method log rate + DELETE FROM rating_table + WHERE rating_table.RecordBookID = pRecordBookID AND + rating_table.SubmoduleID = pSubmoduleID + ; + RETURN 0; + END IF; + + vIsOver = TRUE; + SELECT disciplines.ID, + disciplines.IsLocked, + disciplines.Milestone, + submodules.IsUsed, + submodules.maxRate, + modules.Type + INTO vDisciplineID, vIsLocked, vIsOver, vIsUsed, vMaxRate, vModuleType + FROM submodules + INNER JOIN modules ON submodules.ModuleID = modules.ID + INNER JOIN disciplines ON modules.DisciplineID = disciplines.ID + WHERE submodules.ID = pSubmoduleID + LIMIT 1; + -- correct max rate for extra module + IF vModuleType = 4 THEN -- 4 - extra + vMaxRate = CalculateMaxRateForExtra(vDisciplineID, pRecordBookID); + END IF; + -- 1) check rights ПОЧЕМУ РўРђРљ ПОЗДНО ???? + IF NOT InternalIsStudentAttached(pRecordBookID, vDisciplineID) OR + NOT InternalIsTeacherBound(pTeacherID, vDisciplineID) THEN + RETURN 1; + END IF; + --2) check, you can't rate regular and bonus after milestone + IF (vIsOver AND (vModuleType = 1 OR vModuleType = 3)) THEN --1 - regular, 3 - bonus + RETURN 2; + END IF; + --3) check, max rate exceeding + IF pRate > vMaxRate THEN + RETURN 3; + END IF; + -- add rate, or update old + visUpdated = FALSE; + INSERT INTO rating_table (RecordBookID, TeacherID, SubmoduleID, Rate, Date) + VALUES (pRecordBookID, pTeacherID, pSubmoduleID, pRate, current_date ) + on conflict on constraint rating_table_pkey do + update set + rating_table.TeacherID = pTeacherID, --(@isUpdated := pTeacherID), + rating_table.Rate = pRate, + rating_table.Date = current_date + returning true into visUpdated ; ---??????? если РЅРµ получится, разделить insert Рё update + --log rate + INSERT INTO logs_rating (RecordBookID, SubmoduleID, TeacherID, Rate, Action ) + VALUES (pRecordBookID, pSubmoduleID, pTeacherID, pRate, IF(@isUpdated, 'change', 'add') ); + + -- lock discipline for structure editing + IF NOT vIsLocked THEN + UPDATE disciplines + SET disciplines.IsLocked = TRUE + WHERE disciplines.ID = vDisciplineID + ; + END IF; +--add submodule to max rate counting (see triggers) + IF NOT vIsUsed THEN + UPDATE submodules + SET submodules.IsUsed = TRUE + WHERE submodules.ID = pSubmoduleID + ; + END IF; + RETURN 0; +EXCEPTION +when others then RETURN -1; +end + $$ LANGUAGE plpgsql; + +-- +-- Name: discipline_unbindteacher(integer,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.discipline_unbindteacher(integer,integer); + + CREATE OR REPLACE FUNCTION public.discipline_unbindteacher(pdisciplineid integer, pbindingteacher integer) + RETURNS integer +AS $$ +declare vRow int; +begin +-- select public.discipline_unbindteacher( +-- :pdisciplineid, -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +-- :pbindingteacher -- put the pbindingteacher parameter value instead of 'pbindingteacher' (int4) +--); + + DELETE FROM disciplines_teachers + WHERE disciplines_teachers.DisciplineID = pDisciplineID AND disciplines_teachers.TeacherID = pBindingTeacher; + --LIMIT 1; + get diagnostics vRow=ROW_COUNT; + RETURN vRow-1; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: student_getrecordbooks(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.student_getrecordbooks(integer); + +CREATE OR REPLACE FUNCTION public.student_getrecordbooks(pStudentID INT) +RETURNS table ( +ID integer, +ExternalID varchar, +degree bachelor_master_specialist +) + +AS $$ +-- select * from Student_GetRecordBooks( +-- :pStudentID -- put the pStudentID parameter value instead of 'pStudentID' (INT) +--); + + SELECT DISTINCT + view_students.RecordBookID AS ID, + view_students.RecordBookNumber AS ExternalID, + view_students.Degree + FROM view_students + WHERE view_students.StudentID = pStudentID; + $$ LANGUAGE sql; + +-- +-- Name: student_getrecordbookandgroup(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.student_getrecordbookandgroup(integer, integer); + + CREATE OR REPLACE FUNCTION public.student_getrecordbookandgroup( + pStudentID INT, + pSemesterID int) +RETURNS table ( +RecordBookID integer, +GroupID integer +) + +AS $$ +-- select * from Student_GetRecordBookAndGroup( +-- :pStudentID, -- put the pStudentID parameter value instead of 'pStudentID' (INT) +-- :pSemesterID -- put the pSemesterID parameter value instead of 'pSemesterID' (INT) +--); + SELECT record_books.ID AS RecordBookID, + students_groups.GroupID AS GroupID + FROM students_groups + JOIN record_books ON record_books.ID = students_groups.RecordBookID + WHERE record_books.StudentID = pStudentID AND + students_groups.SemesterID = pSemesterID AND + students_groups.State != 'expulsion'; + $$ LANGUAGE sql; + +-- +-- Name: student_getdisciplinestemp(integer, integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.student_getdisciplinestemp(integer, integer); + + CREATE OR REPLACE FUNCTION public.student_getdisciplinestemp( +pRecordBookID INT, pSemesterID INT +) +RETURNS INT + +AS $$ +begin +--вспомогательная +--создает временную таблицу для РґСЂСѓРіРѕР№ функции +-- изменила РіСЂСѓРїРїРёСЂРѕРІРєСѓ !!!!! + CREATE TEMPORARY TABLE tStudentDisciplines AS ( + SELECT disc_rb.DisciplineID + FROM ( + SELECT view_disciplines_recordbooks.DisciplineID, + view_disciplines_recordbooks.RecordBookID, + COALESCE(view_disciplines_recordbooks.Type) AS type + FROM view_disciplines_recordbooks + WHERE view_disciplines_recordbooks.SemesterID = pSemesterID AND + view_disciplines_recordbooks.RecordBookID = pRecordBookID + GROUP BY view_disciplines_recordbooks.DisciplineID, + view_disciplines_recordbooks.RecordBookID, + view_disciplines_recordbooks.Type + ) AS disc_rb + where disc_rb.type is null or disc_rb.Type != 'detach' + ); + RETURN 0; +END + $$ LANGUAGE plpgsql; + +-- +-- Name: student_getteacherslist(integer, integer,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.student_getteacherslist(integer, integer,integer); + + CREATE OR REPLACE FUNCTION public.student_getteacherslist( +pRecordBookID INT, +pSemesterID INT, +pLoadAll INT +) +RETURNS table ( +DisciplineID integer, +TeacherID integer, +LastName varchar, +FirstName varchar, +SecondName varchar +) + +AS $$ + DECLARE vRes integer; vStudentGroup INT DEFAULT -1; +BEGIN +--select * from public.Student_GetTeachersList( +-- :pRecordBookID, -- put the pRecordBookID parameter value instead of 'pRecordBookID' (INT) +-- :pSemesterID, -- put the pSemesterID parameter value instead of 'pSemesterID' (INT) +-- :pLoadAll -- put the pLoadAll parameter value instead of 'pLoadAll' (INT) +--); +-- разобраться СЃ параметром pLoadAll - поставила для него проверку ==1 + DROP TABLE IF EXISTS tStudentDisciplines; + vRes = Student_GetDisciplinesTemp(pRecordBookID, pSemesterID); + return query + SELECT tStudentDisciplines.DisciplineID, + teachers.ID AS TeacherID, + accounts.LastName, + accounts.FirstName, + accounts.SecondName + FROM tStudentDisciplines + INNER JOIN disciplines ON disciplines.ID = tStudentDisciplines.DisciplineID + LEFT JOIN disciplines_teachers ON disciplines_teachers.DisciplineID = tStudentDisciplines.DisciplineID + INNER JOIN teachers ON teachers.ID = disciplines_teachers.TeacherID + INNER JOIN accounts ON teachers.AccountID = accounts.ID + WHERE pLoadAll=1 OR disciplines.Subtype IS NULL + ORDER BY tStudentDisciplines.DisciplineID ASC, + accounts.LastName ASC, + accounts.FirstName ASC; +END + $$ LANGUAGE plpgsql; + +-- +-- Name: student_getinfo(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.student_getinfo(integer); + + CREATE OR REPLACE FUNCTION public.student_getinfo(pid integer) + RETURNS TABLE(id integer, lastname character varying, firstname character varying, secondname character varying, accountid integer, semesterid integer, groupid integer, groupnum integer, groupname character varying, gradeid integer, gradenum integer, degree bachelor_master_specialist, specid integer, specname character varying, specabbr character varying, speccode character varying, facultyid integer, facultyname character varying, facultyabbr character varying) + +AS $$ +--select * from public.student_getinfo( +-- :pid -- put the pid parameter value instead of 'pid' (int4) +--); + + SELECT + view_students.StudentID AS ID, + view_students.LastName, + view_students.FirstName, + view_students.SecondName, + view_students.AccountID, + view_students.SemesterID, + view_students.GroupID, + view_students.GroupNum, + view_students.GroupName, + view_students.GradeID, + view_students.GradeNum, + view_students.Degree, + view_students.SpecID, + view_students.SpecName, + view_students.SpecAbbr, + view_students.SpecCode, + view_students.FacultyID, + view_students.FacultyName, + view_students.FacultyAbbr + FROM view_students WHERE pID = view_students.StudentID; + --LIMIT 1; + +$$ LANGUAGE sql; + + +-- +-- Name: student_getdisciplines(integer,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.student_getdisciplines(integer,integer); + +CREATE OR REPLACE FUNCTION public.student_getdisciplines(precordbookid integer, psemesterid integer) + RETURNS TABLE(id integer, subjectid integer, subjectname character varying, type exam_credit_grading_credit, subtype scientific_disciplinary_coursework, lastname character varying, firstname character varying, secondname character varying, rate integer, maxcurrentrate integer) + +AS $$ +DECLARE vRes INT DEFAULT -1; +begin +-- select public.student_getdisciplines( +-- :precordbookid, -- put the precordbookid parameter value instead of 'precordbookid' (int4) +-- :psemesterid -- put the psemesterid parameter value instead of 'psemesterid' (int4) +--); + + DROP TABLE IF EXISTS tStudentDisciplines; + vRes = Student_GetDisciplinesTemp(pRecordBookID, pSemesterID); + return query + SELECT view_disciplines.DisciplineID AS ID, + view_disciplines.SubjectID, + view_disciplines.SubjectName, + view_disciplines.ExamType AS Type, + view_disciplines.Subtype, + accounts.LastName, + accounts.FirstName, + accounts.SecondName, + ( tDR.RateExam + tDR.RateMExam ) AS Rate, + ( tDR.MaxRegularRate + tDR.MaxExamRate ) AS MaxCurrentRate + FROM ( + SELECT tRating.DisciplineID, + SUM( + iif_sql( tRating.SubmoduleIsUsed AND + tRating.ModuleType is not null and + tRating.ModuleType = 'regular', + tRating.SubmoduleRate, 0) + ) AS MaxRegularRate, + MAX( + iif_sql( tRating.SubmoduleIsUsed AND + tRating.ModuleType is not null and + tRating.ModuleType = 'exam', + tRating.SubmoduleRate, 0) + ) AS MaxExamRate, + SUM( + iif_sql(tRating.ModuleType is not null and + tRating.ModuleType != 'exam', tRating.Rate, 0) + ) AS RateMExam, + MAX( + iif_sql(tRating.ModuleType is not null and + tRating.ModuleType = 'exam' AND + tRating.Rate IS NOT NULL, tRating.Rate, 0) + ) AS RateExam + FROM ( + SELECT tStudentDisciplines.DisciplineID, + vr.SubmoduleRate, + vr.ModuleType, + rt.Rate, + vr.SubmoduleIsUsed + FROM tStudentDisciplines + LEFT JOIN view_roadmap AS vr ON vr.DisciplineID = tStudentDisciplines.DisciplineID + LEFT JOIN rating_table AS rt ON rt.RecordBookID = pRecordBookID AND + rt.SubmoduleID = vr.SubmoduleID + ) AS tRating + GROUP BY tRating.DisciplineID + ) AS tDR + INNER JOIN view_disciplines ON view_disciplines.DisciplineID = tDR.DisciplineID + INNER JOIN teachers ON teachers.ID = view_disciplines.AuthorID + INNER JOIN accounts ON teachers.AccountID = accounts.ID + ORDER BY view_disciplines.ExamType ASC, view_disciplines.SubjectName ASC; +end + $$ LANGUAGE plpgsql; + +-- +-- Name: stats_getsupportrequestfrequency(date); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.stats_getsupportrequestfrequency(date); + + CREATE OR REPLACE FUNCTION public.stats_getsupportrequestfrequency(dlimit date) + RETURNS + table ( + counted_leads bigint, + count_date date + ) + +AS $$ + +-- select public.stats_getsupportrequestfrequency( +-- :dlimit -- put the dlimit parameter value instead of 'dlimit' (date) +--); +SELECT + count(DATE(requests.Date)) as counted_leads, DATE(requests.Date) as count_date +FROM requests WHERE requests.Date > dLimit +GROUP BY DATE(requests.Date); + +$$ LANGUAGE sql; + +-- +-- Name: unbindstudent(integer,integer,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.unbindstudent(integer,integer,integer); + +CREATE OR REPLACE FUNCTION public.unbindstudent(pteacherid integer, pdisciplineid integer, precordbookid integer) + RETURNS integer + +AS $$ + DECLARE vInGroup int DEFAULT -1; + vStudentGroupID int DEFAULT -1; + vSemesterID INT DEFAULT -1; +BEGIN +--select public.unbindstudent( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :pdisciplineid, -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +-- :precordbookid -- put the precordbookid parameter value instead of 'precordbookid' (int4) +--); + +-- todo: move to php layer + IF pTeacherID IS NOT NULL AND NOT InternalIsTeacherBound(pTeacherID, pDisciplineID) THEN + RETURN -1; + END IF; + + vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester'); + vStudentGroupID = GetStudentGroup(pRecordBookID, vSemesterID); + + --2. check if student's group is bound yet + vInGroup = EXISTS( + SELECT * FROM disciplines_groups + WHERE disciplines_groups.DisciplineID = pDisciplineID AND + disciplines_groups.GroupID = vStudentGroupID + LIMIT 1 + ); + + IF vInGroup > 0 THEN --student in general group + INSERT INTO disciplines_students (DisciplineID, RecordBookID, Type) + VALUES (pDisciplineID, pRecordBookID, 'detach') + ON conflict on constraint disciplines_students_recordbookid_disciplineid_key do + UPDATE set disciplines_students.Type = 'detach'; + ELSE + DELETE FROM disciplines_students + WHERE disciplines_students.DisciplineID = pDisciplineID AND + disciplines_students.RecordBookID = pRecordBookID + ; + END IF; + RETURN LogBind(pDisciplineID, pTeacherID, pRecordBookID, 'detach', 'student'); + EXCEPTION + when others then RETURN -1; +END + $$ LANGUAGE plpgsql; + +-- +-- Name: removestudentsattach(integer,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.removestudentsattach(integer,integer); + + CREATE OR REPLACE FUNCTION public.removestudentsattach(pdisciplineid integer, pgroupid integer) + RETURNS integer + +AS $$ + + DECLARE vSemesterID INT; +begin +-- select public.removestudentsattach( +-- :pdisciplineid, -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +-- :pgroupid -- put the pgroupid parameter value instead of 'pgroupid' (int4) +--); + + vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester'); + DELETE FROM disciplines_students + WHERE disciplines_students.DisciplineID = pDisciplineID AND + disciplines_students.StudentID IN ( + SELECT students_groups.StudentID FROM students_groups + WHERE students_groups.GroupID = pGroupID AND students_groups.SemesterID = vSemesterID + ); + RETURN 0; +END; +$$ LANGUAGE plpgsql; + +-- +-- Name: unbindgroup(integer,integer,integer,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.unbindgroup(integer,integer,integer,integer); + +CREATE OR REPLACE FUNCTION public.unbindgroup(pteacherid integer, pdisciplineid integer, pgroupid integer, vres integer) + RETURNS integer + +AS $$ +declare vRes int; +begin +-- select public.unbindgroup( +-- :pteacherid, -- put the pteacherid parameter value instead of 'pteacherid' (int4) +-- :pdisciplineid, -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +-- :pgroupid, -- put the pgroupid parameter value instead of 'pgroupid' (int4) +-- :vres -- put the vres parameter value instead of 'vres' (int4) +--); + + -- todo: move to php layer + CASE WHEN NOT InternalIsTeacherBound(pTeacherID, pDisciplineID) OR InternalIsMapLocked(pDisciplineID) THEN + RETURN -1; + else null; + END CASE; + -- detach group from the discipline + DELETE FROM disciplines_groups + WHERE disciplines_groups.DisciplineID = pDisciplineID AND disciplines_groups.GroupID = pGroupID; + --LIMIT 1; + + SELECT LogBind(pDisciplineID, pTeacherID, pGroupID, 'detach', 'group') INTO vRes; + RETURN RemoveStudentsAttach(pDisciplineID, pGroupID); +END +$$ LANGUAGE plpgsql; + +-- +-- Name: getfullinfo(integer,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public.getfullinfo(integer,integer); + +CREATE OR REPLACE FUNCTION public.getfullinfo(puserid integer, psemesterid integer) + RETURNS table ( + "StudentID" integer, + "GroupID" integer, + "GroupNum" integer, + "GroupName" varchar, + "GradeID" integer, + "GradeNum" integer, + "Degree" bachelor_master_specialist, + "SpecID" integer, + "SpecName" varchar, + "SpecAbbr" varchar, + "SpecCode" varchar, + "SemesterID" integer, + -- teacher info + "TeacherID" integer, + "DepID" integer, + "DepName" varchar, + "JobPositionName" varchar, + --faculty info + "FacultyID" integer, + "FacultyName" varchar, + "FacultyAbbr" varchar, + -- account info + "ID" integer, + "Login" varchar, + "EMail" varchar, + "LastName" varchar, + "FirstName" varchar, + "SecondName" varchar, + "Type" student_teacher, + "RoleID" integer, + "Role" varchar, + "RoleMark" integer, + "IsEnabled" int2, + "Code" varchar + ) +AS $$ +DECLARE vAccountType student_teacher; +begin + + SELECT user_roles."type" INTO vAccountType + FROM accounts + INNER JOIN user_roles ON accounts.UserRoleID = user_roles.ID + WHERE accounts.ID = pUserID + LIMIT 1; + +-- type 1: student +-- 2: teacher + IF vAccountType = 'student' then + return query + SELECT + -- personal students info + students.ID as "StudentID", + -- group info + view_groups_reduced.groupid as "GroupID", + view_groups_reduced.groupnum as "GroupNum", + view_groups_reduced.groupname as "GroupName", + view_groups_reduced.gradeid as "GradeID", + view_groups_reduced.gradenum as "GradeNum", + view_groups_reduced."degree" as "Degree", + view_groups_reduced.specid as "SpecID", + view_groups_reduced.specname as "SpecName", + view_groups_reduced.specabbr as "SpecAbbr", + view_groups_reduced.speccode as "SpecCode", + students_groups.SemesterID as "SemesterID", + -- teacher info + cast(null as integer) as "TeacherID", + cast(null as integer) as "DepID", + cast(null as varchar) as "DepName", + cast(null as varchar) as "JobPositionName", + + --faculty info + view_groups_reduced.facultyid as "FacultyID", + view_groups_reduced.facultyname as "FacultyName", + view_groups_reduced.facultyabbr as "FacultyAbbr", + -- account info + accounts.ID as "ID", + accounts.Login as "Login", + accounts.EMail as "EMail", + accounts.LastName as "LastName", + accounts.FirstName as "FirstName", + accounts.SecondName as "SecondName", + user_roles."type" as "Type", + accounts.UserRoleID AS "RoleID", + user_roles.RoleName AS "Role", + user_roles.Mark AS "RoleMark", + accounts.IsEnabled as "IsEnabled", + accounts.ActivationCode AS "Code" + FROM students + INNER JOIN accounts ON accounts.ID = students.AccountID + INNER JOIN user_roles ON user_roles.ID = accounts.UserRoleID + LEFT JOIN record_books ON record_books.StudentID = students.ID + LEFT JOIN students_groups ON students_groups.RecordBookID = record_books.ID + LEFT JOIN view_groups_reduced ON view_groups_reduced.GroupID = students_groups.GroupID + WHERE students.AccountID = pUserID and (pSemesterID is null or students_groups.SemesterID = pSemesterID ) + ORDER BY students_groups.SemesterID DESC + LIMIT 1; + ELSE + return query + SELECT + -- personal students info РЅРµ олучается поставить null???? + cast(null as integer) as "StudentID", + -- group info + cast(null as integer) as "GroupID", + cast(null as integer) as "GroupNum", + cast(null as varchar) as "GroupName", + cast(null as integer) as "GradeID", + cast(null as integer) as "GradeNum", + cast(null as bachelor_master_specialist) as "Degree", + cast(null as integer) as "SpecID", + cast(null as varchar) as "SpecName", + cast(null as varchar) as "SpecAbbr", + cast(null as varchar) as "SpecCode", + cast(null as integer) as "SemesterID", + -- teacher info + view_teachers.TeacherID as "TeacherID", + view_teachers.DepID as "DepID", + view_teachers.DepName as "DepName", + view_teachers.JobPositionName as "JobPositionName", + --faculty info + view_teachers.FacultyID as "FacultyID", + view_teachers.FacultyName as "FacultyName", + view_teachers.FacultyAbbr as "FacultyAbbr", + + -- account info + accounts.ID as "ID", + accounts.Login as "Login", + accounts.EMail as "EMail", + accounts.LastName as "LastName", + accounts.FirstName as "FirstName", + accounts.SecondName as "SecondName", + user_roles."type" as "Type", + accounts.UserRoleID AS "RoleID", + user_roles.RoleName AS "Role", + user_roles.Mark AS "RoleMark", + accounts.IsEnabled as "IsEnabled", + accounts.ActivationCode AS "Code" + FROM view_teachers + INNER JOIN accounts ON accounts.ID = view_teachers.AccountID + INNER JOIN user_roles ON user_roles.ID = accounts.UserRoleID + WHERE view_teachers.AccountID = pUserID + LIMIT 1; + END IF; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: Plan_GetTeachers(integer,integer,integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public."Plan_GetTeachers"(INTEGER, INTEGER, INTEGER); + +CREATE OR REPLACE FUNCTION public."Plan_GetTeachers"(pStudyPlanID INTEGER, pSemesterID INTEGER, + pLoadAll INTEGER) -- todo: replace bool + RETURNS TABLE( + "ID" integer + ) +AS $$ +--select * from public.getgroups( +-- :pgradeid, -- put the pgradeid parameter value instead of 'pgradeid' (int4) +-- :pfacultyid, -- put the pfacultyid parameter value instead of 'pfacultyid' (int4) +-- :psemesterid -- put the psemesterid parameter value instead of 'psemesterid' (int4) +--); +SELECT teachers.ID AS "ID" +FROM teachers + INNER JOIN disciplines_teachers ON disciplines_teachers.TeacherID = teachers.ID + INNER JOIN disciplines ON disciplines.ID = disciplines_teachers.DisciplineID + INNER JOIN disciplines_study_plans ON disciplines_study_plans.DisciplineID = disciplines.ID +WHERE disciplines_study_plans.StudyPlanID = pStudyPlanID AND + disciplines.SemesterID = COALESCE(pSemesterID, disciplines.SemesterID) AND + (pLoadAll = 1 OR disciplines.Subtype IS NULL); +$$ LANGUAGE sql; + +-- +-- Name: GetRatesHistory(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public."GetRatesHistory"(INTEGER); + +CREATE OR REPLACE FUNCTION public."GetRatesHistory"( + pDisciplineID INTEGER) + RETURNS TABLE( + "ID" INTEGER, + "Date" DATE, + "Rate" INTEGER, + "StudentLast" VARCHAR, + "StudentFirst" VARCHAR, + "StudentSecond" VARCHAR, + "TeacherLast" VARCHAR, + "TeacherFirst" VARCHAR, + "TeacherSecond" VARCHAR, + "SubmoduleName" VARCHAR, + "ModuleName" VARCHAR + ) +AS $$ +SELECT logs_rating.ID AS "ID", + DATE(logs_rating.Date) As "Date", + logs_rating.Rate AS "Rate", + studentAccount.LastName AS "StudentLast", + studentAccount.FirstName AS "StudentFirst", + studentAccount.SecondName AS "StudentSecond", + teacherAccount.LastName AS "TeacherLast", + teacherAccount.FirstName AS "TeacherFirst", + teacherAccount.SecondName AS "TeacherSecond", + submodules.Name AS "SubmoduleName", + modules.Name AS "ModuleName" +FROM logs_rating + INNER JOIN record_books ON record_books.ID = logs_rating.RecordBookID + INNER JOIN students ON students.ID = record_books.StudentID + INNER JOIN accounts as studentAccount ON students.AccountID = studentAccount.ID + INNER JOIN teachers ON teachers.ID = logs_rating.TeacherID + INNER JOIN accounts as teacherAccount ON teachers.AccountID = teacherAccount.ID + INNER JOIN submodules ON submodules.ID = logs_rating.SubmoduleID + INNER JOIN modules ON modules.ID = submodules.ModuleID +WHERE modules.DisciplineID = pDisciplineID +ORDER BY logs_rating.Date DESC; +$$ LANGUAGE sql; + +-- +-- Name: DeleteModuleExam(integer); Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public."DeleteModuleExam"(INTEGER, INTEGER); + +CREATE OR REPLACE FUNCTION public."DeleteModuleExam"( + pTeacherID INTEGER, + pDisciplineID INTEGER) + RETURNS INTEGER +AS $$ +DECLARE vExamModuleID INTEGER DEFAULT -1; +BEGIN + -- check teacher rights + IF NOT InternalIsTeacherAuthor(pTeacherID, pDisciplineID) OR + InternalIsMapLocked(pDisciplineID) + THEN + RETURN -1; + END IF; + + -- get exam module ID + SELECT modules.ID INTO vExamModuleID + FROM modules + WHERE modules.Type = 'exam' AND + modules.DisciplineID = pDisciplineID + LIMIT 1; + + IF vExamModuleID <= 0 THEN + RETURN -1; + END IF; + + -- everything is checked then delete + DELETE FROM submodules + WHERE vExamModuleID = submodules.ModuleID; + + DELETE FROM modules + WHERE vExamModuleID = modules.ID; + RETURN 0; +END +$$ LANGUAGE plpgsql; + + +-- +-- Name: GetStudents(INTEGER, INTEGER, INTEGER, INTEGER, VARCHAR(100), VARCHAR(100), VARCHAR(100)); +-- Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public."GetStudents"(INTEGER, INTEGER, INTEGER, INTEGER, VARCHAR(100), VARCHAR(100), VARCHAR(100)); + +CREATE OR REPLACE FUNCTION public."GetStudents"( + pFacultyID INTEGER, + pGradeID INTEGER, + pGroupID INTEGER, + pSemesterID INTEGER, + pWord1 VARCHAR(100), + pWord2 VARCHAR(100), + pWord3 VARCHAR(100)) + RETURNS TABLE( + "ID" INTEGER, + "LastName" VARCHAR, + "FirstName" VARCHAR, + "SecondName" VARCHAR, + "AccountID" INTEGER, + "GradeID" INTEGER, + "GradeNum" INTEGER, + "Degree" INTEGER, + "GroupID" INTEGER, + "GroupNum" INTEGER + ) +AS $$ +DECLARE FullName VARCHAR; +BEGIN + SELECT view_students.StudentID AS "ID", + view_students.LastName AS "LastName", + view_students.FirstName AS "FirstName", + view_students.SecondName AS "SecondName", + view_students.AccountID AS "AccountID", + view_students.GradeID AS "GradeID", + view_students.GradeNum AS "GradeNum", + view_students.Degree AS "Degree", + view_students.GroupID AS "GroupID", + view_students.GroupNum AS "GroupNum", + CONCAT(view_students.LastName, ' ', view_students.FirstName, ' ', view_students.SecondName) AS "FullName" + FROM view_students + WHERE + CASE WHEN pSemesterID != 0 THEN view_students.SemesterID = pSemesterID ELSE + TRUE + END AND + CASE WHEN pFacultyID != 0 THEN view_students.FacultyID = pFacultyID ELSE TRUE END AND + CASE WHEN pGradeID != 0 THEN view_students.GradeID = pGradeID ELSE TRUE END AND + CASE WHEN pGroupID != 0 THEN view_students.GroupID = pGroupID ELSE TRUE END AND + CASE WHEN pWord1 != '' AND FullName != '' THEN + FullName LIKE CONCAT('%', pWord1, '%') AND + FullName LIKE CONCAT('%', pWord2, '%') AND + FullName LIKE CONCAT('%', pWord3, '%') + ELSE TRUE END; +END +$$ LANGUAGE plpgsql; + +-- +-- Name: SearchStudents(INTEGER, INTEGER, INTEGER, VARCHAR(100), INTEGER); +-- Type: FUNCTION; Schema: public; Owner: - +-- +DROP FUNCTION IF EXISTS public."SearchStudents"(INTEGER, INTEGER, INTEGER, VARCHAR(100), INTEGER); + +CREATE OR REPLACE FUNCTION public."SearchStudents"( + pGradeID INTEGER, + pGroupID INTEGER, + pFacultyID INTEGER, + pFullName VARCHAR(100), + pDisciplineID INTEGER) + RETURNS TABLE( + "ID" INTEGER, + "LastName" VARCHAR, + "FirstName" VARCHAR, + "SecondName" VARCHAR, + "GradeID" INTEGER, + "GradeNum" INTEGER, + "Degree" INTEGER, + "GroupID" INTEGER, + "GroupNum" INTEGER + ) +AS $$ +DECLARE vSemesterID INTEGER DEFAULT -1; + DECLARE vRes INTEGER DEFAULT -1; +BEGIN + + DROP TABLE IF EXISTS tDisciplineStudents; + SELECT Discipline_GetStudentsTemp(pDisciplineID) INTO vRes; + + SELECT view_students.StudentID AS "ID", + view_students.LastName AS "LastName", + view_students.FirstName AS "FirstName", + view_students.SecondName AS "SecondName", + view_students.GradeID AS "GradeID", + view_students.GradeNum AS "GradeNum", + view_students.Degree AS "Degree", + view_students.GroupID AS "GroupID", + view_students.GroupNum AS "GroupNum", + CONCAT(view_students.LastName, ' ', view_students.FirstName, ' ', view_students.SecondName) AS "FullName" + FROM view_students + LEFT JOIN tDisciplineStudents ON tDisciplineStudents.StudentID = view_students.StudentID + WHERE view_students.SemesterID = vSemesterID AND + view_students.FacultyID = pFacultyID AND + view_students.GradeID = pGradeID AND + (pGroupID = 0 OR view_students.GroupID = pGroupID) AND + tDisciplineStudents.StudentID IS NULL AND + CASE WHEN pFullName != '' THEN + FullName LIKE CONCAT('%', pFullName, '%') + ELSE TRUE END + ORDER BY view_students.GradeID ASC, + view_students.GroupID ASC, + view_students.LastName ASC, + view_students.FirstName ASC; +END +$$ LANGUAGE plpgsql; + +--- Триггеры ---------------------------------------------------------------------------------------------------------------------------- + +-- +-- Name: submodule_i(); Type: TRIGGER FUNCTION; Schema: public; Owner: - +-- +DROP TRIGGER IF EXISTS tr_i_submodule ON submodules; +DROP FUNCTION IF EXISTS public.submodule_i(); + +CREATE OR REPLACE FUNCTION public.submodule_i() + RETURNS trigger + AS $$ + declare vDisciplineID int default 0; addmax int default 0; addcur int default 0; + declare vAccumType boolean default false; vChangeMax boolean default false; + declare vModuleType regular_exam_bonus_extra default 'extra'; +begin + -- todo: check repeated bonus + select modules.Type into vModuleType + from modules + where modules.ID = new.ModuleID + limit 1; + + if (vModuleType is not null and(vModuleType = 'regular' or vModuleType = 'exam') )then + + vAccumType = (vModuleType != 'exam'); + + select disciplines.ID into vDisciplineID + from modules + inner join disciplines on disciplines.ID = modules.DisciplineID + where modules.ID = new.ModuleID + limit 1; + + if (new.OrderNum is null) then + vChangeMax = vAccumType; + else vChangeMax = vAccumType or new.OrderNum = 1; + end if; + + if (new.isused) then addcur=new.MaxRate; end if; + if (vChangeMax) then addmax = new.maxrate; end if; + + update disciplines + set disciplines.CurRate = disciplines.CurRate + addcur, + disciplines.MaxRate = disciplines.MaxRate + addmax + where disciplines.ID = vDisciplineID; + end if; +end + $$ LANGUAGE plpgsql; + + CREATE TRIGGER tr_i_submodule BEFORE INSERT on submodules for each row + EXECUTE PROCEDURE submodule_i(); + +-- +-- Name: submodule_u(); Type: TRIGGER FUNCTION; Schema: public; Owner: - +-- +DROP TRIGGER IF EXISTS tr_u_submodule ON submodules; +DROP FUNCTION IF EXISTS public.submodule_u(); + +CREATE OR REPLACE FUNCTION public.submodule_u() +RETURNS trigger + +AS $$ + declare vDisciplineID int default 0; + declare vAccumType boolean default false; + vChangeMaxOld boolean default false; + vChangeMaxNew boolean default false; + declare vModuleType regular_exam_bonus_extra default 'extra'; +begin +/* -- странная ситуация + * if old.ModuleID != new.ModuleID then + signal sqlstate '45000'; + end if;*/ + + -- todo: check repeated bonus + select modules.Type into vModuleType + from modules + where modules.ID = new.ModuleID + limit 1; + + + if (vModuleType is not null and (vModuleType = 'regular' or vModuleType = 'exam') )then + vAccumType = (vModuleType != 'exam'); + + -- todo: extract foo + select disciplines.ID into vDisciplineID + from modules + inner join disciplines on disciplines.ID = modules.DisciplineID + where modules.ID = old.ModuleID + limit 1; + if (new.OrderNum is null) then + vChangeMaxOld = vAccumType; + vChangeMaxNew = vAccumType; + else + vChangeMaxOld = vAccumType or old.OrderNum = 1; + vChangeMaxNew = vAccumType or new.OrderNum = 1; + end if; + + update disciplines + set disciplines.CurRate = disciplines.CurRate + - iif_sql(old.isUsed, old.MaxRate, 0) + + iif_sql(new.isUsed, new.MaxRate, 0), + disciplines.MaxRate = disciplines.MaxRate + - iif_sql(vChangeMaxOld, old.MaxRate, 0) + + iif_sql(vChangeMaxNew, new.MaxRate, 0) + where disciplines.ID = vDisciplineID; + + end if; +end + $$ LANGUAGE plpgsql; + +CREATE trigger tr_u_submodule before update on submodules for each row + execute procedure submodule_u(); + +-- +-- Name: submodule_d(); Type: TRIGGER FUNCTION; Schema: public; Owner: - +-- +DROP TRIGGER IF EXISTS tr_d_submodule ON submodules; +DROP FUNCTION IF EXISTS public.submodule_d(); + +CREATE OR REPLACE FUNCTION public.submodule_d() + RETURNS trigger +AS $$ + declare vDisciplineID int default 0; + declare vAccumType boolean default false; + vChangeMax boolean default false; + declare vModuleType regular_exam_bonus_extra default 'extra'; +begin + -- todo: check repeated bonus + select modules.Type into vModuleType + from modules + where modules.ID = old.ModuleID + limit 1; + + if (vModuleType is not null)and (vModuleType = 'regular' or vModuleType = 'exam') then + vAccumType = ( vModuleType != 'exam'); + + -- todo: extract foo + select disciplines.ID into vDisciplineID + from modules + inner join disciplines on disciplines.ID = modules.DisciplineID + where modules.ID = old.ModuleID + limit 1; + if old.OrderNum is null then + vChangeMax = vAccumType; + else + vChangeMax = vAccumType or old.OrderNum = 1; + end if; + + update disciplines + set disciplines.CurRate = disciplines.CurRate - iif_sql(old.isUsed, old.MaxRate, 0), + disciplines.MaxRate = disciplines.MaxRate - iif_sql(vChangeMax, old.MaxRate, 0) + where disciplines.ID = vDisciplineID; + end if; + +end + $$ LANGUAGE plpgsql; + +CREATE trigger tr_d_submodule before delete on submodules for each row + execute procedure submodule_d(); + diff --git a/db/postgresql/keys_and_index.sql b/db/postgresql/keys_and_index.sql new file mode 100644 index 0000000000000000000000000000000000000000..1bcb258ec3db45e9d4e9f272b66b24987c2f8eb1 --- /dev/null +++ b/db/postgresql/keys_and_index.sql @@ -0,0 +1,1608 @@ +ALTER TABLE ONLY accounts + ADD CONSTRAINT accounts_email_key UNIQUE (email); + + +-- +-- TOC entry 2422 (class 2606 OID 45947) +-- Name: accounts accounts_lactivationcode_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY accounts + ADD CONSTRAINT accounts_lactivationcode_key UNIQUE (activationcode); + + +-- +-- TOC entry 2424 (class 2606 OID 45949) +-- Name: accounts accounts_login_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY accounts + ADD CONSTRAINT accounts_login_key UNIQUE (login); + + +-- +-- TOC entry 2426 (class 2606 OID 45943) +-- Name: accounts accounts_pk; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY accounts + ADD CONSTRAINT accounts_pk PRIMARY KEY (id); + + +-- +-- TOC entry 2430 (class 2606 OID 45964) +-- Name: auth_tokens auth_tokens_token_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY auth_tokens + ADD CONSTRAINT auth_tokens_token_key UNIQUE (token); + + +-- +-- TOC entry 2451 (class 2606 OID 46040) +-- Name: compound_disciplines compound_disciplines_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY compound_disciplines + ADD CONSTRAINT compound_disciplines_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2453 (class 2606 OID 46061) +-- Name: departments departments_name_facultyid_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY departments + ADD CONSTRAINT departments_name_facultyid_key UNIQUE (name, facultyid); + + +-- +-- TOC entry 2455 (class 2606 OID 46059) +-- Name: departments departments_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY departments + ADD CONSTRAINT departments_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2457 (class 2606 OID 46063) +-- Name: departments departments_uk_1; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY departments + ADD CONSTRAINT departments_uk_1 UNIQUE (externalid); + + +-- +-- TOC entry 2489 (class 2606 OID 46284) +-- Name: disciplines_exam_type disciplines_exam_examtypename_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_exam_type + ADD CONSTRAINT disciplines_exam_examtypename_key UNIQUE (examtypename); + + +-- +-- TOC entry 2491 (class 2606 OID 46282) +-- Name: disciplines_exam_type disciplines_exam_type_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_exam_type + ADD CONSTRAINT disciplines_exam_type_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2500 (class 2606 OID 46325) +-- Name: disciplines_groups disciplines_groups_disciplineid_groupid_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_groups + ADD CONSTRAINT disciplines_groups_disciplineid_groupid_key UNIQUE (disciplineid, groupid); + + +-- +-- TOC entry 2502 (class 2606 OID 46323) +-- Name: disciplines_groups disciplines_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_groups + ADD CONSTRAINT disciplines_groups_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2482 (class 2606 OID 46234) +-- Name: disciplines disciplines_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines + ADD CONSTRAINT disciplines_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2511 (class 2606 OID 46371) +-- Name: disciplines_students disciplines_students_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_students + ADD CONSTRAINT disciplines_students_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2513 (class 2606 OID 46373) +-- Name: disciplines_students disciplines_students_recordbookid_disciplineid_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_students + ADD CONSTRAINT disciplines_students_recordbookid_disciplineid_key UNIQUE (recordbookid, disciplineid); + + +-- +-- TOC entry 2522 (class 2606 OID 46436) +-- Name: disciplines_study_plans disciplines_study_plans_pk; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_study_plans + ADD CONSTRAINT disciplines_study_plans_pk PRIMARY KEY (id); + + +-- +-- TOC entry 2524 (class 2606 OID 46438) +-- Name: disciplines_study_plans disciplines_study_plans_studyplanid_disciplineid_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_study_plans + ADD CONSTRAINT disciplines_study_plans_studyplanid_disciplineid_key UNIQUE (studyplanid, disciplineid); + + +-- +-- TOC entry 2528 (class 2606 OID 46457) +-- Name: disciplines_teachers disciplines_teachers_disciplineid_teacherid_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_teachers + ADD CONSTRAINT disciplines_teachers_disciplineid_teacherid_key UNIQUE (disciplineid, teacherid); + + +-- +-- TOC entry 2530 (class 2606 OID 46455) +-- Name: disciplines_teachers disciplines_teachers_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_teachers + ADD CONSTRAINT disciplines_teachers_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2543 (class 2606 OID 46525) +-- Name: exam_period_options exam_period_options_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY exam_period_options + ADD CONSTRAINT exam_period_options_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2545 (class 2606 OID 46527) +-- Name: exam_period_options exam_period_options_recordbookid_submoduleid_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY exam_period_options + ADD CONSTRAINT exam_period_options_recordbookid_submoduleid_key UNIQUE (recordbookid, submoduleid); + + +-- +-- TOC entry 2432 (class 2606 OID 45992) +-- Name: faculties faculties_name_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY faculties + ADD CONSTRAINT faculties_name_key UNIQUE (name); + + +-- +-- TOC entry 2434 (class 2606 OID 45990) +-- Name: faculties faculties_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY faculties + ADD CONSTRAINT faculties_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2436 (class 2606 OID 45994) +-- Name: faculties faculties_uk_1; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY faculties + ADD CONSTRAINT faculties_uk_1 UNIQUE (externalid); + + +-- +-- TOC entry 2438 (class 2606 OID 45996) +-- Name: faculties faculties_uk_3; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY faculties + ADD CONSTRAINT faculties_uk_3 UNIQUE (abbr); + + +-- +-- TOC entry 2445 (class 2606 OID 46033) +-- Name: grades grade_2; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY grades + ADD CONSTRAINT grade_2 UNIQUE (num, degree); + + +-- +-- TOC entry 2447 (class 2606 OID 46031) +-- Name: grades grades_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY grades + ADD CONSTRAINT grades_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2550 (class 2606 OID 46545) +-- Name: groups_years groups_years_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY groups_years + ADD CONSTRAINT groups_years_pkey PRIMARY KEY (year, groupid); + + +-- +-- TOC entry 2471 (class 2606 OID 46189) +-- Name: job_positions job_positions_name_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY job_positions + ADD CONSTRAINT job_positions_name_key UNIQUE (name); + + +-- +-- TOC entry 2473 (class 2606 OID 46187) +-- Name: job_positions job_positions_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY job_positions + ADD CONSTRAINT job_positions_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2556 (class 2606 OID 46570) +-- Name: logs_binds_groups logs_binds_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY logs_binds_groups + ADD CONSTRAINT logs_binds_groups_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2560 (class 2606 OID 46595) +-- Name: logs_binds_students logs_binds_students_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY logs_binds_students + ADD CONSTRAINT logs_binds_students_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2564 (class 2606 OID 46620) +-- Name: logs_rating logs_rating_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY logs_rating + ADD CONSTRAINT logs_rating_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2570 (class 2606 OID 46645) +-- Name: logs_signin logs_signin_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY logs_signin + ADD CONSTRAINT logs_signin_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2534 (class 2606 OID 46496) +-- Name: modules modules_ordernum_disciplineid_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY modules + ADD CONSTRAINT modules_ordernum_disciplineid_key UNIQUE (ordernum, disciplineid); + + +-- +-- TOC entry 2536 (class 2606 OID 46494) +-- Name: modules modules_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY modules + ADD CONSTRAINT modules_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2572 (class 2606 OID 46658) +-- Name: rating_table rating_table_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY rating_table + ADD CONSTRAINT rating_table_pkey PRIMARY KEY (recordbookid, submoduleid); + + +-- +-- TOC entry 2505 (class 2606 OID 46364) +-- Name: record_books record_books_externalid_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY record_books + ADD CONSTRAINT record_books_externalid_key UNIQUE (externalid); + + +-- +-- TOC entry 2507 (class 2606 OID 46362) +-- Name: record_books record_books_pk; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY record_books + ADD CONSTRAINT record_books_pk PRIMARY KEY (id); + + +-- +-- TOC entry 2577 (class 2606 OID 46688) +-- Name: record_books_plans record_books_plans_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY record_books_plans + ADD CONSTRAINT record_books_plans_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2579 (class 2606 OID 46690) +-- Name: record_books_plans recordbookid_studyplanid_record_books_plans_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY record_books_plans + ADD CONSTRAINT recordbookid_studyplanid_record_books_plans_key UNIQUE (recordbookid, studyplanid); + + +-- +-- TOC entry 2583 (class 2606 OID 46709) +-- Name: recovery_tokens recovery_tokens_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY recovery_tokens + ADD CONSTRAINT recovery_tokens_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2585 (class 2606 OID 46711) +-- Name: recovery_tokens recovery_tokens_token_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY recovery_tokens + ADD CONSTRAINT recovery_tokens_token_key UNIQUE (token); + + +-- +-- TOC entry 2588 (class 2606 OID 46730) +-- Name: requests requests_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY requests + ADD CONSTRAINT requests_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2590 (class 2606 OID 46746) +-- Name: schema_version schema_version_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY schema_version + ADD CONSTRAINT schema_version_pkey PRIMARY KEY (installed_rank); + + +-- +-- TOC entry 2466 (class 2606 OID 46132) +-- Name: semesters semesters_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY semesters + ADD CONSTRAINT semesters_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2468 (class 2606 OID 46134) +-- Name: semesters semesters_year_num_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY semesters + ADD CONSTRAINT semesters_year_num_key UNIQUE (year, num); + + +-- +-- TOC entry 2441 (class 2606 OID 46007) +-- Name: specializations specializations_name_facultyid_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY specializations + ADD CONSTRAINT specializations_name_facultyid_key UNIQUE (name, facultyid); + + +-- +-- TOC entry 2443 (class 2606 OID 46005) +-- Name: specializations specializations_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY specializations + ADD CONSTRAINT specializations_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2599 (class 2606 OID 46766) +-- Name: students_groups students_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY students_groups + ADD CONSTRAINT students_groups_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2601 (class 2606 OID 46768) +-- Name: students_groups students_groups_semesterid_recordbookid_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY students_groups + ADD CONSTRAINT students_groups_semesterid_recordbookid_key UNIQUE (semesterid, recordbookid); + + +-- +-- TOC entry 2594 (class 2606 OID 46753) +-- Name: students students_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY students + ADD CONSTRAINT students_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2603 (class 2606 OID 46799) +-- Name: study_form study_form_formname_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY study_form + ADD CONSTRAINT study_form_formname_key UNIQUE (formname); + + +-- +-- TOC entry 2605 (class 2606 OID 46797) +-- Name: study_form study_form_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY study_form + ADD CONSTRAINT study_form_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2495 (class 2606 OID 46305) +-- Name: study_groups study_groups_facultyid_gradeid_groupnum_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY study_groups + ADD CONSTRAINT study_groups_facultyid_gradeid_groupnum_key UNIQUE (facultyid, gradeid, groupnum); + + +-- +-- TOC entry 2497 (class 2606 OID 46303) +-- Name: study_groups study_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY study_groups + ADD CONSTRAINT study_groups_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2517 (class 2606 OID 46416) +-- Name: study_plans study_plans_externalid_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY study_plans + ADD CONSTRAINT study_plans_externalid_key UNIQUE (externalid); + + +-- +-- TOC entry 2519 (class 2606 OID 46414) +-- Name: study_plans study_plans_pk; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY study_plans + ADD CONSTRAINT study_plans_pk PRIMARY KEY (id); + + +-- +-- TOC entry 2609 (class 2606 OID 46805) +-- Name: subjects_faculties subjects_faculties_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY subjects_faculties + ADD CONSTRAINT subjects_faculties_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2611 (class 2606 OID 46807) +-- Name: subjects_faculties subjects_faculties_subjectid_facultyid_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY subjects_faculties + ADD CONSTRAINT subjects_faculties_subjectid_facultyid_key UNIQUE (subjectid, facultyid); + + +-- +-- TOC entry 2460 (class 2606 OID 46094) +-- Name: subjects subjects_name_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY subjects + ADD CONSTRAINT subjects_name_key UNIQUE (name); + + +-- +-- TOC entry 2462 (class 2606 OID 46092) +-- Name: subjects subjects_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY subjects + ADD CONSTRAINT subjects_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2539 (class 2606 OID 46513) +-- Name: submodules submodules_moduleid_ordernum_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY submodules + ADD CONSTRAINT submodules_moduleid_ordernum_key UNIQUE (moduleid, ordernum); + + +-- +-- TOC entry 2541 (class 2606 OID 46511) +-- Name: submodules submodules_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY submodules + ADD CONSTRAINT submodules_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2479 (class 2606 OID 46196) +-- Name: teachers teachers_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY teachers + ADD CONSTRAINT teachers_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2613 (class 2606 OID 46825) +-- Name: text_mark text_mark_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY text_mark + ADD CONSTRAINT text_mark_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2418 (class 2606 OID 45927) +-- Name: user_roles user_roles_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY user_roles + ADD CONSTRAINT user_roles_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2464 (class 2606 OID 46126) +-- Name: years years_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY years + ADD CONSTRAINT years_pkey PRIMARY KEY (num); + + +-- +-- TOC entry 2428 (class 1259 OID 45965) +-- Name: accountid_auth_tokens; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX accountid_auth_tokens ON auth_tokens USING btree (accountid); + + +-- +-- TOC entry 2568 (class 1259 OID 46651) +-- Name: accountid_logs_signin; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX accountid_logs_signin ON logs_signin USING btree (accountid); + + +-- +-- TOC entry 2581 (class 1259 OID 46717) +-- Name: accountid_recovery_tokens; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX accountid_recovery_tokens ON recovery_tokens USING btree (accountid); + + +-- +-- TOC entry 2586 (class 1259 OID 46736) +-- Name: accountid_requests; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX accountid_requests ON requests USING btree (accountid); + + +-- +-- TOC entry 2592 (class 1259 OID 46759) +-- Name: accountid_students; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX accountid_students ON students USING btree (accountid); + + +-- +-- TOC entry 2474 (class 1259 OID 46217) +-- Name: accountid_teachers; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX accountid_teachers ON teachers USING btree (accountid); + + +-- +-- TOC entry 2448 (class 1259 OID 46051) +-- Name: compound_disciplines_ibfk_1; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX compound_disciplines_ibfk_1 ON compound_disciplines USING btree (specializationid); + + +-- +-- TOC entry 2449 (class 1259 OID 46052) +-- Name: compound_disciplines_ibfk_2; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX compound_disciplines_ibfk_2 ON compound_disciplines USING btree (gradeid); + + +-- +-- TOC entry 2480 (class 1259 OID 46265) +-- Name: compounddiscid_disciplines; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX compounddiscid_disciplines ON disciplines USING btree (compounddiscid); + + +-- +-- TOC entry 2498 (class 1259 OID 46336) +-- Name: disciplineid_disciplines_groups; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX disciplineid_disciplines_groups ON disciplines_groups USING btree (disciplineid); + + +-- +-- TOC entry 2509 (class 1259 OID 46384) +-- Name: disciplineid_disciplines_students; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX disciplineid_disciplines_students ON disciplines_students USING btree (disciplineid); + + +-- +-- TOC entry 2526 (class 1259 OID 46468) +-- Name: disciplineid_disciplines_teachers; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX disciplineid_disciplines_teachers ON disciplines_teachers USING btree (disciplineid); + + +-- +-- TOC entry 2553 (class 1259 OID 46586) +-- Name: disciplineid_logs_binds_groups; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX disciplineid_logs_binds_groups ON logs_binds_groups USING btree (disciplineid); + + +-- +-- TOC entry 2558 (class 1259 OID 46611) +-- Name: disciplineid_logs_binds_students; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX disciplineid_logs_binds_students ON logs_binds_students USING btree (disciplineid); + + +-- +-- TOC entry 2532 (class 1259 OID 46502) +-- Name: disciplineid_modules; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX disciplineid_modules ON modules USING btree (disciplineid); + + +-- +-- TOC entry 2458 (class 1259 OID 46069) +-- Name: facultyid_departments; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX facultyid_departments ON departments USING btree (facultyid); + + +-- +-- TOC entry 2483 (class 1259 OID 46266) +-- Name: facultyid_disciplines; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX facultyid_disciplines ON disciplines USING btree (facultyid); + + +-- +-- TOC entry 2439 (class 1259 OID 46013) +-- Name: facultyid_specializations; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX facultyid_specializations ON specializations USING btree (facultyid); + + +-- +-- TOC entry 2492 (class 1259 OID 46316) +-- Name: facultyid_study_groups; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX facultyid_study_groups ON study_groups USING btree (facultyid); + + +-- +-- TOC entry 2515 (class 1259 OID 46427) +-- Name: facultyid_study_plans; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX facultyid_study_plans ON study_plans USING btree (facultyid); + + +-- +-- TOC entry 2606 (class 1259 OID 46818) +-- Name: facultyid_subjects_faculties; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX facultyid_subjects_faculties ON subjects_faculties USING btree (facultyid); + + +-- +-- TOC entry 2475 (class 1259 OID 46218) +-- Name: facultyid_teachers; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX facultyid_teachers ON teachers USING btree (departmentid); + + +-- +-- TOC entry 2484 (class 1259 OID 46267) +-- Name: gradeid_disciplines; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX gradeid_disciplines ON disciplines USING btree (gradeid); + + +-- +-- TOC entry 2493 (class 1259 OID 46317) +-- Name: gradeid_study_groups; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX gradeid_study_groups ON study_groups USING btree (gradeid); + + +-- +-- TOC entry 2503 (class 1259 OID 46337) +-- Name: groupid_disciplines_groups; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX groupid_disciplines_groups ON disciplines_groups USING btree (groupid); + + +-- +-- TOC entry 2548 (class 1259 OID 46561) +-- Name: groupid_groups_years; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX groupid_groups_years ON groups_years USING btree (groupid); + + +-- +-- TOC entry 2554 (class 1259 OID 46587) +-- Name: groupid_logs_binds_groups; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX groupid_logs_binds_groups ON logs_binds_groups USING btree (groupid); + + +-- +-- TOC entry 2595 (class 1259 OID 46784) +-- Name: groupid_students_groups; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX groupid_students_groups ON students_groups USING btree (groupid); + + +-- +-- TOC entry 2476 (class 1259 OID 46219) +-- Name: jobpositionid_teachers; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX jobpositionid_teachers ON teachers USING btree (jobpositionid); + + +-- +-- TOC entry 2537 (class 1259 OID 46519) +-- Name: moduleid_submodules; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX moduleid_submodules ON submodules USING btree (moduleid); + + +-- +-- TOC entry 2514 (class 1259 OID 46385) +-- Name: recordbookid_disciplines_students; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX recordbookid_disciplines_students ON disciplines_students USING btree (recordbookid); + + +-- +-- TOC entry 2546 (class 1259 OID 46538) +-- Name: recordbookid_exam_period_options; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX recordbookid_exam_period_options ON exam_period_options USING btree (recordbookid); + + +-- +-- TOC entry 2561 (class 1259 OID 46612) +-- Name: recordbookid_logs_binds_students; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX recordbookid_logs_binds_students ON logs_binds_students USING btree (recordbookid); + + +-- +-- TOC entry 2565 (class 1259 OID 46636) +-- Name: recordbookid_logs_rating; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX recordbookid_logs_rating ON logs_rating USING btree (recordbookid); + + +-- +-- TOC entry 2573 (class 1259 OID 46674) +-- Name: recordbookid_rating_table; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX recordbookid_rating_table ON rating_table USING btree (recordbookid); + + +-- +-- TOC entry 2596 (class 1259 OID 46785) +-- Name: recordbookid_students_groups; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX recordbookid_students_groups ON students_groups USING btree (recordbookid); + + +-- +-- TOC entry 2591 (class 1259 OID 46747) +-- Name: schema_version_s_idx; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX schema_version_s_idx ON schema_version USING btree (success); + + +-- +-- TOC entry 2485 (class 1259 OID 46268) +-- Name: semesterid_disciplines; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX semesterid_disciplines ON disciplines USING btree (semesterid); + + +-- +-- TOC entry 2597 (class 1259 OID 46786) +-- Name: semesterid_students_groups; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX semesterid_students_groups ON students_groups USING btree (semesterid); + + +-- +-- TOC entry 2551 (class 1259 OID 46562) +-- Name: specializationid_groups_years; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX specializationid_groups_years ON groups_years USING btree (specializationid); + + +-- +-- TOC entry 2508 (class 1259 OID 46365) +-- Name: studentid_record_books; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX studentid_record_books ON record_books USING btree (studentid); + + +-- +-- TOC entry 2525 (class 1259 OID 46449) +-- Name: studyplanid_disciplines_study_plans; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX studyplanid_disciplines_study_plans ON disciplines_study_plans USING btree (studyplanid); + + +-- +-- TOC entry 2580 (class 1259 OID 46701) +-- Name: studyplanid_record_books_plans; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX studyplanid_record_books_plans ON record_books_plans USING btree (studyplanid); + + +-- +-- TOC entry 2486 (class 1259 OID 46269) +-- Name: subjectid_disciplines; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX subjectid_disciplines ON disciplines USING btree (subjectid); + + +-- +-- TOC entry 2607 (class 1259 OID 46819) +-- Name: subjectid_subjects_faculties; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX subjectid_subjects_faculties ON subjects_faculties USING btree (subjectid); + + +-- +-- TOC entry 2547 (class 1259 OID 46539) +-- Name: submoduleid_exam_period_options; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX submoduleid_exam_period_options ON exam_period_options USING btree (submoduleid); + + +-- +-- TOC entry 2566 (class 1259 OID 46637) +-- Name: submoduleid_logs_rating; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX submoduleid_logs_rating ON logs_rating USING btree (submoduleid); + + +-- +-- TOC entry 2574 (class 1259 OID 46675) +-- Name: submoduleid_rating_table; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX submoduleid_rating_table ON rating_table USING btree (submoduleid); + + +-- +-- TOC entry 2487 (class 1259 OID 46270) +-- Name: teacherid_disciplines; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX teacherid_disciplines ON disciplines USING btree (authorid); + + +-- +-- TOC entry 2531 (class 1259 OID 46469) +-- Name: teacherid_disciplines_teachers; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX teacherid_disciplines_teachers ON disciplines_teachers USING btree (teacherid); + + +-- +-- TOC entry 2557 (class 1259 OID 46588) +-- Name: teacherid_logs_binds_groups; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX teacherid_logs_binds_groups ON logs_binds_groups USING btree (teacherid); + + +-- +-- TOC entry 2562 (class 1259 OID 46613) +-- Name: teacherid_logs_binds_students; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX teacherid_logs_binds_students ON logs_binds_students USING btree (teacherid); + + +-- +-- TOC entry 2567 (class 1259 OID 46638) +-- Name: teacherid_logs_rating; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX teacherid_logs_rating ON logs_rating USING btree (teacherid); + + +-- +-- TOC entry 2575 (class 1259 OID 46676) +-- Name: teacherid_rating_table; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX teacherid_rating_table ON rating_table USING btree (teacherid); + + +-- +-- TOC entry 2477 (class 1259 OID 46220) +-- Name: teachers_ibfk_4; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX teachers_ibfk_4 ON teachers USING btree (facultyid); + + +-- +-- TOC entry 2427 (class 1259 OID 45955) +-- Name: userroleid; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX userroleid ON accounts USING btree (userroleid); + + +-- +-- TOC entry 2469 (class 1259 OID 46140) +-- Name: year_2; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX year_2 ON semesters USING btree (year); + + +-- +-- TOC entry 2552 (class 1259 OID 46563) +-- Name: year_groups_years; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX year_groups_years ON groups_years USING btree (year); + + +-- +-- TOC entry 2520 (class 1259 OID 46428) +-- Name: year_study_plans; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX year_study_plans ON study_plans USING btree (year); + + +-- +-- TOC entry 2614 (class 2606 OID 45950) +-- Name: accounts accounts_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY accounts + ADD CONSTRAINT accounts_ibfk_1 FOREIGN KEY (userroleid) REFERENCES user_roles(id); + + +-- +-- TOC entry 2616 (class 2606 OID 46041) +-- Name: compound_disciplines compound_disciplines_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY compound_disciplines + ADD CONSTRAINT compound_disciplines_ibfk_1 FOREIGN KEY (specializationid) REFERENCES specializations(id); + + +-- +-- TOC entry 2617 (class 2606 OID 46046) +-- Name: compound_disciplines compound_disciplines_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY compound_disciplines + ADD CONSTRAINT compound_disciplines_ibfk_2 FOREIGN KEY (gradeid) REFERENCES grades(id); + + +-- +-- TOC entry 2618 (class 2606 OID 46064) +-- Name: departments departments_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY departments + ADD CONSTRAINT departments_ibfk_1 FOREIGN KEY (facultyid) REFERENCES faculties(id); + + +-- +-- TOC entry 2632 (class 2606 OID 46326) +-- Name: disciplines_groups disciplines_groups_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_groups + ADD CONSTRAINT disciplines_groups_ibfk_1 FOREIGN KEY (disciplineid) REFERENCES disciplines(id); + + +-- +-- TOC entry 2633 (class 2606 OID 46331) +-- Name: disciplines_groups disciplines_groups_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_groups + ADD CONSTRAINT disciplines_groups_ibfk_2 FOREIGN KEY (groupid) REFERENCES study_groups(id); + + +-- +-- TOC entry 2624 (class 2606 OID 46235) +-- Name: disciplines disciplines_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines + ADD CONSTRAINT disciplines_ibfk_1 FOREIGN KEY (subjectid) REFERENCES subjects(id); + + +-- +-- TOC entry 2625 (class 2606 OID 46240) +-- Name: disciplines disciplines_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines + ADD CONSTRAINT disciplines_ibfk_2 FOREIGN KEY (semesterid) REFERENCES semesters(id); + + +-- +-- TOC entry 2626 (class 2606 OID 46245) +-- Name: disciplines disciplines_ibfk_3; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines + ADD CONSTRAINT disciplines_ibfk_3 FOREIGN KEY (authorid) REFERENCES teachers(id); + + +-- +-- TOC entry 2627 (class 2606 OID 46250) +-- Name: disciplines disciplines_ibfk_4; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines + ADD CONSTRAINT disciplines_ibfk_4 FOREIGN KEY (facultyid) REFERENCES faculties(id); + + +-- +-- TOC entry 2628 (class 2606 OID 46255) +-- Name: disciplines disciplines_ibfk_5; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines + ADD CONSTRAINT disciplines_ibfk_5 FOREIGN KEY (gradeid) REFERENCES grades(id); + + +-- +-- TOC entry 2629 (class 2606 OID 46260) +-- Name: disciplines disciplines_ibfk_6; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines + ADD CONSTRAINT disciplines_ibfk_6 FOREIGN KEY (compounddiscid) REFERENCES compound_disciplines(id); + + +-- +-- TOC entry 2634 (class 2606 OID 46374) +-- Name: disciplines_students disciplines_students_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_students + ADD CONSTRAINT disciplines_students_ibfk_1 FOREIGN KEY (disciplineid) REFERENCES disciplines(id); + + +-- +-- TOC entry 2635 (class 2606 OID 46379) +-- Name: disciplines_students disciplines_students_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_students + ADD CONSTRAINT disciplines_students_ibfk_2 FOREIGN KEY (recordbookid) REFERENCES record_books(id); + + +-- +-- TOC entry 2638 (class 2606 OID 46439) +-- Name: disciplines_study_plans disciplines_study_plans_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_study_plans + ADD CONSTRAINT disciplines_study_plans_ibfk_1 FOREIGN KEY (disciplineid) REFERENCES disciplines(id); + + +-- +-- TOC entry 2639 (class 2606 OID 46444) +-- Name: disciplines_study_plans disciplines_study_plans_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_study_plans + ADD CONSTRAINT disciplines_study_plans_ibfk_2 FOREIGN KEY (studyplanid) REFERENCES study_plans(id); + + +-- +-- TOC entry 2640 (class 2606 OID 46458) +-- Name: disciplines_teachers disciplines_teachers_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_teachers + ADD CONSTRAINT disciplines_teachers_ibfk_1 FOREIGN KEY (disciplineid) REFERENCES disciplines(id); + + +-- +-- TOC entry 2641 (class 2606 OID 46463) +-- Name: disciplines_teachers disciplines_teachers_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY disciplines_teachers + ADD CONSTRAINT disciplines_teachers_ibfk_2 FOREIGN KEY (teacherid) REFERENCES teachers(id); + + +-- +-- TOC entry 2644 (class 2606 OID 46528) +-- Name: exam_period_options exam_period_options_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY exam_period_options + ADD CONSTRAINT exam_period_options_ibfk_1 FOREIGN KEY (submoduleid) REFERENCES submodules(id); + + +-- +-- TOC entry 2645 (class 2606 OID 46533) +-- Name: exam_period_options exam_period_options_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY exam_period_options + ADD CONSTRAINT exam_period_options_ibfk_2 FOREIGN KEY (recordbookid) REFERENCES record_books(id); + + +-- +-- TOC entry 2646 (class 2606 OID 46546) +-- Name: groups_years groups_years_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY groups_years + ADD CONSTRAINT groups_years_ibfk_1 FOREIGN KEY (groupid) REFERENCES study_groups(id); + + +-- +-- TOC entry 2647 (class 2606 OID 46551) +-- Name: groups_years groups_years_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY groups_years + ADD CONSTRAINT groups_years_ibfk_2 FOREIGN KEY (year) REFERENCES years(num); + + +-- +-- TOC entry 2648 (class 2606 OID 46556) +-- Name: groups_years groups_years_ibfk_3; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY groups_years + ADD CONSTRAINT groups_years_ibfk_3 FOREIGN KEY (specializationid) REFERENCES specializations(id); + + +-- +-- TOC entry 2649 (class 2606 OID 46571) +-- Name: logs_binds_groups logs_binds_groups_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY logs_binds_groups + ADD CONSTRAINT logs_binds_groups_ibfk_1 FOREIGN KEY (disciplineid) REFERENCES disciplines(id); + + +-- +-- TOC entry 2650 (class 2606 OID 46576) +-- Name: logs_binds_groups logs_binds_groups_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY logs_binds_groups + ADD CONSTRAINT logs_binds_groups_ibfk_2 FOREIGN KEY (teacherid) REFERENCES teachers(id); + + +-- +-- TOC entry 2651 (class 2606 OID 46581) +-- Name: logs_binds_groups logs_binds_groups_ibfk_3; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY logs_binds_groups + ADD CONSTRAINT logs_binds_groups_ibfk_3 FOREIGN KEY (groupid) REFERENCES study_groups(id); + + +-- +-- TOC entry 2652 (class 2606 OID 46596) +-- Name: logs_binds_students logs_binds_students_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY logs_binds_students + ADD CONSTRAINT logs_binds_students_ibfk_1 FOREIGN KEY (disciplineid) REFERENCES disciplines(id); + + +-- +-- TOC entry 2653 (class 2606 OID 46601) +-- Name: logs_binds_students logs_binds_students_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY logs_binds_students + ADD CONSTRAINT logs_binds_students_ibfk_2 FOREIGN KEY (teacherid) REFERENCES teachers(id); + + +-- +-- TOC entry 2654 (class 2606 OID 46606) +-- Name: logs_binds_students logs_binds_students_ibfk_3; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY logs_binds_students + ADD CONSTRAINT logs_binds_students_ibfk_3 FOREIGN KEY (recordbookid) REFERENCES record_books(id); + + +-- +-- TOC entry 2655 (class 2606 OID 46621) +-- Name: logs_rating logs_rating_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY logs_rating + ADD CONSTRAINT logs_rating_ibfk_1 FOREIGN KEY (recordbookid) REFERENCES record_books(id); + + +-- +-- TOC entry 2656 (class 2606 OID 46626) +-- Name: logs_rating logs_rating_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY logs_rating + ADD CONSTRAINT logs_rating_ibfk_2 FOREIGN KEY (submoduleid) REFERENCES submodules(id); + + +-- +-- TOC entry 2657 (class 2606 OID 46631) +-- Name: logs_rating logs_rating_ibfk_3; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY logs_rating + ADD CONSTRAINT logs_rating_ibfk_3 FOREIGN KEY (teacherid) REFERENCES teachers(id); + + +-- +-- TOC entry 2658 (class 2606 OID 46646) +-- Name: logs_signin logs_signin_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY logs_signin + ADD CONSTRAINT logs_signin_ibfk_1 FOREIGN KEY (accountid) REFERENCES accounts(id); + + +-- +-- TOC entry 2642 (class 2606 OID 46497) +-- Name: modules modules_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY modules + ADD CONSTRAINT modules_ibfk_1 FOREIGN KEY (disciplineid) REFERENCES disciplines(id); + + +-- +-- TOC entry 2659 (class 2606 OID 46659) +-- Name: rating_table rating_table_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY rating_table + ADD CONSTRAINT rating_table_ibfk_1 FOREIGN KEY (recordbookid) REFERENCES record_books(id); + + +-- +-- TOC entry 2660 (class 2606 OID 46664) +-- Name: rating_table rating_table_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY rating_table + ADD CONSTRAINT rating_table_ibfk_2 FOREIGN KEY (submoduleid) REFERENCES submodules(id); + + +-- +-- TOC entry 2661 (class 2606 OID 46669) +-- Name: rating_table rating_table_ibfk_3; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY rating_table + ADD CONSTRAINT rating_table_ibfk_3 FOREIGN KEY (teacherid) REFERENCES teachers(id); + + +-- +-- TOC entry 2662 (class 2606 OID 46691) +-- Name: record_books_plans record_books_plans_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY record_books_plans + ADD CONSTRAINT record_books_plans_ibfk_1 FOREIGN KEY (recordbookid) REFERENCES record_books(id); + + +-- +-- TOC entry 2663 (class 2606 OID 46696) +-- Name: record_books_plans record_books_plans_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY record_books_plans + ADD CONSTRAINT record_books_plans_ibfk_2 FOREIGN KEY (studyplanid) REFERENCES study_plans(id); + + +-- +-- TOC entry 2664 (class 2606 OID 46712) +-- Name: recovery_tokens recovery_tokens_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY recovery_tokens + ADD CONSTRAINT recovery_tokens_ibfk_1 FOREIGN KEY (accountid) REFERENCES accounts(id); + + +-- +-- TOC entry 2665 (class 2606 OID 46731) +-- Name: requests requests_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY requests + ADD CONSTRAINT requests_ibfk_1 FOREIGN KEY (accountid) REFERENCES accounts(id) ON UPDATE SET NULL ON DELETE SET NULL; + + +-- +-- TOC entry 2619 (class 2606 OID 46135) +-- Name: semesters semesters_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY semesters + ADD CONSTRAINT semesters_ibfk_1 FOREIGN KEY (year) REFERENCES years(num); + + +-- +-- TOC entry 2615 (class 2606 OID 46008) +-- Name: specializations specializations_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY specializations + ADD CONSTRAINT specializations_ibfk_1 FOREIGN KEY (facultyid) REFERENCES faculties(id); + + +-- +-- TOC entry 2667 (class 2606 OID 46769) +-- Name: students_groups students_groups_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY students_groups + ADD CONSTRAINT students_groups_ibfk_1 FOREIGN KEY (recordbookid) REFERENCES record_books(id); + + +-- +-- TOC entry 2668 (class 2606 OID 46774) +-- Name: students_groups students_groups_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY students_groups + ADD CONSTRAINT students_groups_ibfk_2 FOREIGN KEY (groupid) REFERENCES study_groups(id); + + +-- +-- TOC entry 2669 (class 2606 OID 46779) +-- Name: students_groups students_groups_ibfk_3; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY students_groups + ADD CONSTRAINT students_groups_ibfk_3 FOREIGN KEY (semesterid) REFERENCES semesters(id); + + +-- +-- TOC entry 2666 (class 2606 OID 46754) +-- Name: students students_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY students + ADD CONSTRAINT students_ibfk_2 FOREIGN KEY (accountid) REFERENCES accounts(id); + + +-- +-- TOC entry 2630 (class 2606 OID 46306) +-- Name: study_groups study_groups_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY study_groups + ADD CONSTRAINT study_groups_ibfk_2 FOREIGN KEY (gradeid) REFERENCES grades(id); + + +-- +-- TOC entry 2631 (class 2606 OID 46311) +-- Name: study_groups study_groups_ibfk_3; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY study_groups + ADD CONSTRAINT study_groups_ibfk_3 FOREIGN KEY (facultyid) REFERENCES faculties(id); + + +-- +-- TOC entry 2636 (class 2606 OID 46417) +-- Name: study_plans study_plans_fk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY study_plans + ADD CONSTRAINT study_plans_fk_1 FOREIGN KEY (year) REFERENCES years(num); + + +-- +-- TOC entry 2637 (class 2606 OID 46422) +-- Name: study_plans study_plans_fk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY study_plans + ADD CONSTRAINT study_plans_fk_2 FOREIGN KEY (facultyid) REFERENCES faculties(id); + + +-- +-- TOC entry 2670 (class 2606 OID 46808) +-- Name: subjects_faculties subjects_faculties_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY subjects_faculties + ADD CONSTRAINT subjects_faculties_ibfk_1 FOREIGN KEY (facultyid) REFERENCES faculties(id); + + +-- +-- TOC entry 2671 (class 2606 OID 46813) +-- Name: subjects_faculties subjects_faculties_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY subjects_faculties + ADD CONSTRAINT subjects_faculties_ibfk_2 FOREIGN KEY (subjectid) REFERENCES subjects(id); + + +-- +-- TOC entry 2643 (class 2606 OID 46514) +-- Name: submodules submodules_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY submodules + ADD CONSTRAINT submodules_ibfk_1 FOREIGN KEY (moduleid) REFERENCES modules(id); + + +-- +-- TOC entry 2620 (class 2606 OID 46197) +-- Name: teachers teachers_ibfk_1; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY teachers + ADD CONSTRAINT teachers_ibfk_1 FOREIGN KEY (accountid) REFERENCES accounts(id); + + +-- +-- TOC entry 2621 (class 2606 OID 46202) +-- Name: teachers teachers_ibfk_2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY teachers + ADD CONSTRAINT teachers_ibfk_2 FOREIGN KEY (departmentid) REFERENCES departments(id); + + +-- +-- TOC entry 2622 (class 2606 OID 46207) +-- Name: teachers teachers_ibfk_3; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY teachers + ADD CONSTRAINT teachers_ibfk_3 FOREIGN KEY (jobpositionid) REFERENCES job_positions(id); + + +-- +-- TOC entry 2623 (class 2606 OID 46212) +-- Name: teachers teachers_ibfk_4; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY teachers + ADD CONSTRAINT teachers_ibfk_4 FOREIGN KEY (facultyid) REFERENCES faculties(id); diff --git a/db/postgresql/tables_and_views.sql b/db/postgresql/tables_and_views.sql new file mode 100644 index 0000000000000000000000000000000000000000..4cf5f205c1f7ccbd665033333e47a36011f0d368 --- /dev/null +++ b/db/postgresql/tables_and_views.sql @@ -0,0 +1,1232 @@ +CREATE SEQUENCE seq_accounts + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +SET default_with_oids = false; + +-- +-- TOC entry 202 (class 1259 OID 45928) +-- Name: accounts; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE accounts ( + id integer DEFAULT nextval('seq_accounts'::regclass) NOT NULL, + inila character varying(40) DEFAULT NULL::character varying, + externalid character varying(9) DEFAULT NULL::character varying, + login character varying(50) DEFAULT NULL::character varying, + password character varying(64) DEFAULT NULL::character varying, + email character varying(255) DEFAULT NULL::character varying, + lastname character varying(30) NOT NULL, + firstname character varying(30) NOT NULL, + secondname character varying(30) NOT NULL, + userroleid integer NOT NULL, + activationcode character varying(40) DEFAULT NULL::character varying, + isenabled smallint DEFAULT (1)::smallint NOT NULL +); + + +-- +-- TOC entry 203 (class 1259 OID 45956) +-- Name: auth_tokens; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE auth_tokens ( + token character(40) NOT NULL, + accountid integer NOT NULL, + description character varying(60) DEFAULT ''::character varying NOT NULL, + created timestamp(0) without time zone DEFAULT now() NOT NULL, + accessed timestamp(0) without time zone DEFAULT '2000-01-01 00:00:00'::timestamp without time zone NOT NULL, + mask integer DEFAULT 0 NOT NULL +); + + +-- +-- TOC entry 171 (class 1259 OID 35310) +-- Name: seq_compound_discip; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_compound_discip + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 207 (class 1259 OID 46034) +-- Name: compound_disciplines; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE compound_disciplines ( + id integer DEFAULT nextval('seq_compound_discip'::regclass) NOT NULL, + name character varying(200) DEFAULT 'РљСѓСЂСЃ РїРѕ выбору'::character varying, + gradeid integer NOT NULL, + specializationid integer NOT NULL +); + + +-- +-- TOC entry 172 (class 1259 OID 35313) +-- Name: seq_departments; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_departments + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 208 (class 1259 OID 46053) +-- Name: departments; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE departments ( + id integer DEFAULT nextval('seq_departments'::regclass) NOT NULL, + name character varying(200) DEFAULT NULL::character varying, + facultyid integer NOT NULL, + externalid character varying(9) +); + + +-- +-- TOC entry 173 (class 1259 OID 35316) +-- Name: seq_disciplines; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_disciplines + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 214 (class 1259 OID 46221) +-- Name: disciplines; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE disciplines ( + id integer DEFAULT nextval('seq_disciplines'::regclass) NOT NULL, + externalid character varying(9) DEFAULT NULL::character varying, + gradeid integer, + subjectid integer NOT NULL, + authorid integer NOT NULL, + examtype exam_credit_grading_credit NOT NULL, + semesterid integer NOT NULL, + practicecount integer DEFAULT 0 NOT NULL, + lecturecount integer DEFAULT 0 NOT NULL, + labcount integer DEFAULT 0 NOT NULL, + facultyid integer NOT NULL, + milestone integer DEFAULT 0 NOT NULL, + milestonedate date, + subtype scientific_disciplinary_coursework, + compounddiscid integer, + maxrate integer DEFAULT 0 NOT NULL, + currate integer DEFAULT 0 NOT NULL, + islocked integer DEFAULT 0 NOT NULL +); + + +-- +-- TOC entry 215 (class 1259 OID 46275) +-- Name: seq_disciplines_exam_type; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_disciplines_exam_type + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 216 (class 1259 OID 46277) +-- Name: disciplines_exam_type; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE disciplines_exam_type ( + id integer DEFAULT nextval('seq_disciplines_exam_type'::regclass) NOT NULL, + examtypename character varying(40) NOT NULL +); + + +-- +-- TOC entry 174 (class 1259 OID 35319) +-- Name: seq_disciplines_groups; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_disciplines_groups + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 218 (class 1259 OID 46318) +-- Name: disciplines_groups; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE disciplines_groups ( + id integer DEFAULT nextval('seq_disciplines_groups'::regclass) NOT NULL, + disciplineid integer NOT NULL, + groupid integer NOT NULL +); + + +-- +-- TOC entry 175 (class 1259 OID 35322) +-- Name: seq_disciplines_students; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_disciplines_students + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 221 (class 1259 OID 46366) +-- Name: disciplines_students; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE disciplines_students ( + id integer DEFAULT nextval('seq_disciplines_students'::regclass) NOT NULL, + disciplineid integer NOT NULL, + type attach_detach NOT NULL, + recordbookid integer +); + + +-- +-- TOC entry 224 (class 1259 OID 46429) +-- Name: seq_disciplines_study_plans; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_disciplines_study_plans + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 225 (class 1259 OID 46431) +-- Name: disciplines_study_plans; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE disciplines_study_plans ( + id integer DEFAULT nextval('seq_disciplines_study_plans'::regclass) NOT NULL, + disciplineid integer NOT NULL, + studyplanid integer NOT NULL +); + + +-- +-- TOC entry 176 (class 1259 OID 35325) +-- Name: seq_disciplines_teachers; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_disciplines_teachers + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 226 (class 1259 OID 46450) +-- Name: disciplines_teachers; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE disciplines_teachers ( + id integer DEFAULT nextval('seq_disciplines_teachers'::regclass) NOT NULL, + disciplineid integer NOT NULL, + teacherid integer NOT NULL +); + + +-- +-- TOC entry 177 (class 1259 OID 35328) +-- Name: seq_exam_period_options; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_exam_period_options + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 229 (class 1259 OID 46520) +-- Name: exam_period_options; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE exam_period_options ( + id integer DEFAULT nextval('seq_exam_period_options'::regclass) NOT NULL, + submoduleid integer NOT NULL, + recordbookid integer, + type absence_pass +); + + +-- +-- TOC entry 178 (class 1259 OID 35331) +-- Name: seq_faculties; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_faculties + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 204 (class 1259 OID 45984) +-- Name: faculties; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE faculties ( + id integer DEFAULT nextval('seq_faculties'::regclass) NOT NULL, + name character varying(100) NOT NULL, + abbr character varying(20) NOT NULL, + externalid character varying(9) DEFAULT NULL::character varying +); + + +-- +-- TOC entry 179 (class 1259 OID 35334) +-- Name: seq_grades; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_grades + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 206 (class 1259 OID 46026) +-- Name: grades; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE grades ( + id integer DEFAULT nextval('seq_grades'::regclass) NOT NULL, + num integer NOT NULL, + degree bachelor_master_specialist NOT NULL +); + + +-- +-- TOC entry 230 (class 1259 OID 46540) +-- Name: groups_years; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE groups_years ( + groupid integer NOT NULL, + year integer NOT NULL, + specializationid integer NOT NULL, + name character varying(50) DEFAULT NULL::character varying +); + + +-- +-- TOC entry 180 (class 1259 OID 35337) +-- Name: seq_job_positions; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_job_positions + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 212 (class 1259 OID 46182) +-- Name: job_positions; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE job_positions ( + id integer DEFAULT nextval('seq_job_positions'::regclass) NOT NULL, + name character varying(200) NOT NULL +); + + +-- +-- TOC entry 181 (class 1259 OID 35340) +-- Name: seq_logs_binds_groups; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_logs_binds_groups + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 231 (class 1259 OID 46564) +-- Name: logs_binds_groups; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE logs_binds_groups ( + id integer DEFAULT nextval('seq_logs_binds_groups'::regclass) NOT NULL, + disciplineid integer NOT NULL, + teacherid integer NOT NULL, + groupid integer NOT NULL, + date timestamp(0) without time zone DEFAULT now() NOT NULL, + type attach_detach NOT NULL +); + + +-- +-- TOC entry 182 (class 1259 OID 35343) +-- Name: seq_logs_binds_students; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_logs_binds_students + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 232 (class 1259 OID 46589) +-- Name: logs_binds_students; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE logs_binds_students ( + id integer DEFAULT nextval('seq_logs_binds_students'::regclass) NOT NULL, + disciplineid integer NOT NULL, + teacherid integer, + date timestamp(0) without time zone DEFAULT now() NOT NULL, + type attach_detach NOT NULL, + recordbookid integer +); + + +-- +-- TOC entry 183 (class 1259 OID 35346) +-- Name: seq_logs_rating; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_logs_rating + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 233 (class 1259 OID 46614) +-- Name: logs_rating; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE logs_rating ( + id integer DEFAULT nextval('seq_logs_rating'::regclass) NOT NULL, + submoduleid integer NOT NULL, + teacherid integer NOT NULL, + rate integer NOT NULL, + date timestamp(0) without time zone DEFAULT now() NOT NULL, + action add_change_delete NOT NULL, + recordbookid integer +); + + +-- +-- TOC entry 184 (class 1259 OID 35349) +-- Name: seq_logs_signin; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_logs_signin + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 234 (class 1259 OID 46639) +-- Name: logs_signin; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE logs_signin ( + id integer DEFAULT nextval('seq_logs_signin'::regclass) NOT NULL, + accountid integer NOT NULL, + date timestamp(0) without time zone DEFAULT now() NOT NULL +); + + +-- +-- TOC entry 200 (class 1259 OID 35604) +-- Name: seq_modules; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_modules + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 227 (class 1259 OID 46489) +-- Name: modules; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE modules ( + id integer DEFAULT nextval('seq_modules'::regclass) NOT NULL, + name character varying(200) NOT NULL, + ordernum integer NOT NULL, + disciplineid integer NOT NULL, + type regular_exam_bonus_extra +); + + +-- +-- TOC entry 236 (class 1259 OID 46680) +-- Name: seq_record_books_plans; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_record_books_plans + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 237 (class 1259 OID 46682) +-- Name: record_books_plans; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE record_books_plans ( + id integer DEFAULT nextval('seq_record_books_plans'::regclass) NOT NULL, + recordbookid integer NOT NULL, + studyplanid integer NOT NULL, + bindingtime timestamp(0) without time zone DEFAULT now() NOT NULL +); + + +-- +-- TOC entry 191 (class 1259 OID 35371) +-- Name: seq_students_groups; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_students_groups + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 242 (class 1259 OID 46760) +-- Name: students_groups; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE students_groups ( + id integer DEFAULT nextval('seq_students_groups'::regclass) NOT NULL, + groupid integer NOT NULL, + semesterid integer NOT NULL, + date date, + state common_outlet_expulsion_leave DEFAULT 'common'::common_outlet_expulsion_leave NOT NULL, + recordbookid integer +); + + +-- +-- TOC entry 252 (class 1259 OID 46937) +-- Name: private_view_disciplines_recordbooks_without_type; Type: VIEW; Schema: public; Owner: - +-- + +CREATE VIEW private_view_disciplines_recordbooks_without_type AS + SELECT DISTINCT disciplines_students.recordbookid, + disciplines_students.disciplineid, + disciplines.semesterid + FROM (disciplines_students + JOIN disciplines ON ((disciplines_students.disciplineid = disciplines.id))) +UNION + SELECT DISTINCT students_groups.recordbookid, + disciplines_groups.disciplineid, + disciplines.semesterid + FROM ((disciplines_groups + JOIN disciplines ON ((disciplines_groups.disciplineid = disciplines.id))) + LEFT JOIN students_groups ON ((((students_groups.groupid = disciplines_groups.groupid) AND (students_groups.semesterid = disciplines.semesterid)) AND (students_groups.state <= 'outlet'::common_outlet_expulsion_leave)))) + GROUP BY students_groups.recordbookid, disciplines_groups.disciplineid, disciplines.semesterid +UNION + SELECT DISTINCT record_books_plans.recordbookid, + disciplines_study_plans.disciplineid, + disciplines.semesterid + FROM ((disciplines_study_plans + LEFT JOIN record_books_plans ON ((disciplines_study_plans.studyplanid = record_books_plans.studyplanid))) + JOIN disciplines ON ((disciplines_study_plans.disciplineid = disciplines.id))) + GROUP BY record_books_plans.recordbookid, disciplines_study_plans.disciplineid, disciplines.semesterid; + + +-- +-- TOC entry 235 (class 1259 OID 46653) +-- Name: rating_table; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE rating_table ( + teacherid integer NOT NULL, + submoduleid integer NOT NULL, + rate integer NOT NULL, + date date NOT NULL, + recordbookid integer DEFAULT 0 NOT NULL +); + + +-- +-- TOC entry 219 (class 1259 OID 46354) +-- Name: seq_record_books; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_record_books + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 220 (class 1259 OID 46356) +-- Name: record_books; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE record_books ( + id integer DEFAULT nextval('seq_record_books'::regclass) NOT NULL, + studentid integer NOT NULL, + externalid character varying(50) DEFAULT NULL::character varying +); + + +-- +-- TOC entry 185 (class 1259 OID 35352) +-- Name: seq_recovery_tokens; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_recovery_tokens + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 238 (class 1259 OID 46702) +-- Name: recovery_tokens; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE recovery_tokens ( + id integer DEFAULT nextval('seq_recovery_tokens'::regclass) NOT NULL, + accountid integer NOT NULL, + date timestamp(0) without time zone DEFAULT now() NOT NULL, + token character varying(100) NOT NULL, + isused smallint DEFAULT (0)::smallint NOT NULL +); + + +-- +-- TOC entry 187 (class 1259 OID 35359) +-- Name: seq_requests; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_requests + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 239 (class 1259 OID 46718) +-- Name: requests; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE requests ( + id integer DEFAULT nextval('seq_requests'::regclass) NOT NULL, + accountid integer, + title character varying(50) DEFAULT NULL::character varying, + description text, + date timestamp(0) without time zone DEFAULT now() NOT NULL, + status opened_processed_closed DEFAULT 'opened'::opened_processed_closed, + hasimage integer DEFAULT 0 NOT NULL +); + + +-- +-- TOC entry 240 (class 1259 OID 46737) +-- Name: schema_version; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE schema_version ( + installed_rank integer NOT NULL, + version character varying(50) DEFAULT NULL::character varying, + description character varying(200) NOT NULL, + type character varying(20) NOT NULL, + script character varying(1000) NOT NULL, + checksum integer, + installed_by character varying(100) NOT NULL, + installed_on timestamp(0) without time zone DEFAULT now() NOT NULL, + execution_time integer NOT NULL, + success smallint NOT NULL +); + + +-- +-- TOC entry 188 (class 1259 OID 35362) +-- Name: seq_semesters; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_semesters + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 211 (class 1259 OID 46127) +-- Name: semesters; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE semesters ( + id integer DEFAULT nextval('seq_semesters'::regclass) NOT NULL, + year integer NOT NULL, + num integer NOT NULL +); + + +-- +-- TOC entry 186 (class 1259 OID 35357) +-- Name: seq_report_params; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_report_params + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 189 (class 1259 OID 35365) +-- Name: seq_specializations; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_specializations + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 190 (class 1259 OID 35368) +-- Name: seq_students; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_students + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 243 (class 1259 OID 46790) +-- Name: seq_study_form; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_study_form + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 192 (class 1259 OID 35374) +-- Name: seq_study_groups; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_study_groups + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 222 (class 1259 OID 46407) +-- Name: seq_study_plans; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_study_plans + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 193 (class 1259 OID 35377) +-- Name: seq_subjects; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_subjects + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 194 (class 1259 OID 35380) +-- Name: seq_subjects_faculties; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_subjects_faculties + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 195 (class 1259 OID 35384) +-- Name: seq_submodules; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_submodules + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 196 (class 1259 OID 35387) +-- Name: seq_teachers; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_teachers + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 197 (class 1259 OID 35390) +-- Name: seq_text_mark; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_text_mark + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 198 (class 1259 OID 35393) +-- Name: seq_user_roles; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE seq_user_roles + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 205 (class 1259 OID 45997) +-- Name: specializations; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE specializations ( + id integer DEFAULT nextval('seq_specializations'::regclass) NOT NULL, + name character varying(200) DEFAULT NULL::character varying, + abbr character varying(20) DEFAULT NULL::character varying, + code character varying(12) DEFAULT NULL::character varying, + facultyid integer NOT NULL +); + + +-- +-- TOC entry 241 (class 1259 OID 46748) +-- Name: students; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE students ( + id integer DEFAULT nextval('seq_students'::regclass) NOT NULL, + accountid integer NOT NULL +); + + +-- +-- TOC entry 244 (class 1259 OID 46792) +-- Name: study_form; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE study_form ( + id integer DEFAULT nextval('seq_study_form'::regclass) NOT NULL, + formname character varying(40) NOT NULL +); + + +-- +-- TOC entry 217 (class 1259 OID 46298) +-- Name: study_groups; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE study_groups ( + id integer DEFAULT nextval('seq_study_groups'::regclass) NOT NULL, + gradeid integer NOT NULL, + groupnum integer NOT NULL, + facultyid integer NOT NULL, + formid integer +); + + +-- +-- TOC entry 223 (class 1259 OID 46409) +-- Name: study_plans; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE study_plans ( + id integer DEFAULT nextval('seq_study_plans'::regclass) NOT NULL, + externalid integer NOT NULL, + year integer, + facultyid integer +); + + +-- +-- TOC entry 209 (class 1259 OID 46084) +-- Name: subjects; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE subjects ( + id integer DEFAULT nextval('seq_subjects'::regclass) NOT NULL, + externalid character varying(9) DEFAULT NULL::character varying, + typeid integer DEFAULT (-1), + name character varying(200) NOT NULL, + abbr character varying(20) DEFAULT NULL::character varying +); + + +-- +-- TOC entry 245 (class 1259 OID 46800) +-- Name: subjects_faculties; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE subjects_faculties ( + id integer DEFAULT nextval('seq_subjects_faculties'::regclass) NOT NULL, + subjectid integer NOT NULL, + facultyid integer NOT NULL +); + + +-- +-- TOC entry 228 (class 1259 OID 46503) +-- Name: submodules; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE submodules ( + id integer DEFAULT nextval('seq_submodules'::regclass) NOT NULL, + moduleid integer NOT NULL, + maxrate integer NOT NULL, + ordernum integer NOT NULL, + name character varying(200) NOT NULL, + description character varying(200) DEFAULT NULL::character varying, + isused smallint DEFAULT (0)::smallint NOT NULL, + type current_landmark_control DEFAULT 'CurrentControl'::current_landmark_control NOT NULL +); + + +-- +-- TOC entry 213 (class 1259 OID 46190) +-- Name: teachers; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE teachers ( + id integer DEFAULT nextval('seq_teachers'::regclass) NOT NULL, + jobpositionid integer NOT NULL, + departmentid integer, + accountid integer NOT NULL, + status integer DEFAULT 1, + facultyid integer NOT NULL +); + + +-- +-- TOC entry 246 (class 1259 OID 46820) +-- Name: text_mark; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE text_mark ( + id integer DEFAULT nextval('seq_text_mark'::regclass) NOT NULL, + name character varying(100) NOT NULL +); + + +-- +-- TOC entry 201 (class 1259 OID 45922) +-- Name: user_roles; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE user_roles ( + id integer DEFAULT nextval('seq_user_roles'::regclass) NOT NULL, + type student_teacher NOT NULL, + rolename character varying(30) NOT NULL, + mark integer NOT NULL +); + + +-- +-- TOC entry 247 (class 1259 OID 46889) +-- Name: view_disciplines; Type: VIEW; Schema: public; Owner: - +-- + +CREATE VIEW view_disciplines AS + SELECT disciplines.id AS disciplineid, + disciplines.authorid, + disciplines.examtype, + disciplines.lecturecount, + disciplines.practicecount, + disciplines.labcount, + disciplines.semesterid, + disciplines.islocked, + disciplines.milestone, + disciplines.subtype, + disciplines.compounddiscid, + disciplines.maxrate, + disciplines.currate, + grades.id AS gradeid, + grades.num AS gradenum, + grades.degree, + subjects.id AS subjectid, + subjects.name AS subjectname, + subjects.abbr AS subjectabbr, + faculties.id AS facultyid, + faculties.name AS facultyname, + faculties.abbr AS facultyabbr, + compound_disciplines.name AS compounddiscname + FROM ((((disciplines + JOIN subjects ON ((subjects.id = disciplines.subjectid))) + JOIN faculties ON ((faculties.id = disciplines.facultyid))) + LEFT JOIN grades ON ((grades.id = disciplines.gradeid))) + LEFT JOIN compound_disciplines ON ((compound_disciplines.id = disciplines.compounddiscid))); + + +-- +-- TOC entry 253 (class 1259 OID 46947) +-- Name: view_disciplines_recordbooks; Type: VIEW; Schema: public; Owner: - +-- + +CREATE VIEW view_disciplines_recordbooks AS + SELECT private_view_disciplines_recordbooks_without_type.recordbookid, + private_view_disciplines_recordbooks_without_type.disciplineid, + private_view_disciplines_recordbooks_without_type.semesterid, + disciplines_students.type + FROM ((private_view_disciplines_recordbooks_without_type + JOIN record_books ON ((private_view_disciplines_recordbooks_without_type.recordbookid = record_books.id))) + LEFT JOIN disciplines_students ON (((private_view_disciplines_recordbooks_without_type.recordbookid = disciplines_students.recordbookid) AND (private_view_disciplines_recordbooks_without_type.disciplineid = disciplines_students.disciplineid)))); + + +-- +-- TOC entry 249 (class 1259 OID 46899) +-- Name: view_groups; Type: VIEW; Schema: public; Owner: - +-- + +CREATE VIEW view_groups AS + SELECT study_groups.id AS groupid, + study_groups.groupnum, + groups_years.name AS groupname, + grades.id AS gradeid, + grades.num AS gradenum, + grades.degree, + specializations.id AS specid, + specializations.name AS specname, + specializations.abbr AS specabbr, + specializations.code AS speccode, + faculties.id AS facultyid, + faculties.name AS facultyname, + faculties.abbr AS facultyabbr, + groups_years.year + FROM ((((groups_years + JOIN study_groups ON ((groups_years.groupid = study_groups.id))) + JOIN specializations ON ((groups_years.specializationid = specializations.id))) + JOIN grades ON ((study_groups.gradeid = grades.id))) + JOIN faculties ON ((faculties.id = specializations.facultyid))); + + +-- +-- TOC entry 248 (class 1259 OID 46894) +-- Name: view_groups_reduced; Type: VIEW; Schema: public; Owner: - +-- + +CREATE VIEW view_groups_reduced AS + SELECT study_groups.id AS groupid, + study_groups.groupnum, + groups_years.name AS groupname, + grades.id AS gradeid, + grades.num AS gradenum, + grades.degree, + specializations.id AS specid, + specializations.name AS specname, + specializations.abbr AS specabbr, + specializations.code AS speccode, + faculties.id AS facultyid, + faculties.name AS facultyname, + faculties.abbr AS facultyabbr + FROM (((((groups_years + LEFT JOIN groups_years t ON (((groups_years.groupid = t.groupid) AND (groups_years.year < t.year)))) + JOIN study_groups ON ((groups_years.groupid = study_groups.id))) + JOIN specializations ON ((groups_years.specializationid = specializations.id))) + JOIN grades ON ((study_groups.gradeid = grades.id))) + JOIN faculties ON ((faculties.id = specializations.facultyid))) + WHERE (t.groupid IS NULL); + + +-- +-- TOC entry 254 (class 1259 OID 46958) +-- Name: view_roadmap; Type: VIEW; Schema: public; Owner: - +-- + +CREATE VIEW view_roadmap AS + SELECT modules.disciplineid, + modules.id AS moduleid, + modules.name AS modulename, + modules.ordernum AS moduleordernum, + modules.type AS moduletype, + submodules.id AS submoduleid, + submodules.name AS submodulename, + submodules.ordernum AS submoduleordernum, + submodules.maxrate AS submodulerate, + submodules.type AS submoduletype, + submodules.isused AS submoduleisused + FROM (modules + LEFT JOIN submodules ON ((submodules.moduleid = modules.id))); + + +-- +-- TOC entry 251 (class 1259 OID 46909) +-- Name: view_students; Type: VIEW; Schema: public; Owner: - +-- + +CREATE VIEW view_students AS + SELECT students.id AS studentid, + accounts.externalid, + accounts.lastname, + accounts.firstname, + accounts.secondname, + students.accountid, + record_books.id AS recordbookid, + record_books.externalid AS recordbooknumber, + students_groups.semesterid, + view_groups_reduced.groupid, + view_groups_reduced.groupnum, + view_groups_reduced.groupname, + view_groups_reduced.gradeid, + view_groups_reduced.gradenum, + view_groups_reduced.degree, + view_groups_reduced.specid, + view_groups_reduced.specname, + view_groups_reduced.specabbr, + view_groups_reduced.speccode, + view_groups_reduced.facultyid, + view_groups_reduced.facultyname, + view_groups_reduced.facultyabbr + FROM ((((students + LEFT JOIN accounts ON ((accounts.id = students.accountid))) + LEFT JOIN record_books ON ((record_books.studentid = students.id))) + LEFT JOIN students_groups ON ((students_groups.recordbookid = record_books.id))) + LEFT JOIN view_groups_reduced ON ((view_groups_reduced.groupid = students_groups.groupid))); + + +-- +-- TOC entry 250 (class 1259 OID 46904) +-- Name: view_teachers; Type: VIEW; Schema: public; Owner: - +-- + +CREATE VIEW view_teachers AS + SELECT teachers.id AS teacherid, + accounts.lastname, + accounts.firstname, + accounts.secondname, + teachers.accountid, + job_positions.id AS jobpositionid, + job_positions.name AS jobpositionname, + departments.id AS depid, + departments.name AS depname, + faculties.id AS facultyid, + faculties.name AS facultyname, + faculties.abbr AS facultyabbr + FROM ((((teachers + LEFT JOIN accounts ON ((teachers.accountid = accounts.id))) + LEFT JOIN departments ON ((departments.id = teachers.departmentid))) + JOIN faculties ON ((teachers.facultyid = faculties.id))) + JOIN job_positions ON ((job_positions.id = teachers.jobpositionid))); + + +-- +-- TOC entry 210 (class 1259 OID 46122) +-- Name: years; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE years ( + num integer NOT NULL +); diff --git a/db/postgresql/types.sql b/db/postgresql/types.sql new file mode 100644 index 0000000000000000000000000000000000000000..b39c1190259e410a005659dc9450083aa3f51b07 --- /dev/null +++ b/db/postgresql/types.sql @@ -0,0 +1,153 @@ +CREATE TYPE absence_pass AS ENUM ( + 'absence', + 'pass' +); + +--ALTER TYPE absence_pass; + +CREATE TYPE add_change_delete AS ENUM ( + 'add', + 'change', + 'delete' +); + +--ALTER TYPE add_change_delete; + +CREATE TYPE attach_detach AS ENUM ( + 'attach', + 'detach' +); + +--ALTER TYPE attach_detach; + +CREATE TYPE bachelor_master_specialist AS ENUM ( + 'bachelor', + 'master', + 'specialist' +); + +--ALTER TYPE bachelor_master_specialist; + +CREATE TYPE common_outlet_expulsion_leave AS ENUM ( + 'common', + 'outlet', + 'expulsion', + 'leave' +); + +--ALTER TYPE common_outlet_expulsion_leave; + +CREATE TYPE current_landmark_control AS ENUM ( + 'CurrentControl', + 'LandmarkControl' +); + +--ALTER TYPE current_landmark_control; + +CREATE TYPE exam_credit_grading_credit AS ENUM ( + 'exam', + 'credit', + 'grading_credit' +); + +--ALTER TYPE exam_credit_grading_credit; + +CREATE TYPE exam_rate_all AS ENUM ( + 'exam', + 'rate', + 'all' +); + +--ALTER TYPE exam_rate_all; + +CREATE TYPE grade_subject_author_semester_milestone_type_maxrate AS ENUM ( + 'grade', + 'subject', + 'author', + 'semester', + 'milestone', + 'type', + 'maxrate' +); + +--ALTER TYPE grade_subject_author_semester_milestone_type_maxrate; + +CREATE TYPE group_student AS ENUM ( + 'group', + 'student' +); + +--ALTER TYPE group_student; + +CREATE TYPE login_email_code AS ENUM ( + 'login', + 'email', + 'code' +); + +--ALTER TYPE login_email_code; + +CREATE TYPE login_email_password AS ENUM ( + 'login', + 'email', + 'password' +); + +--ALTER TYPE login_email_password; + +CREATE TYPE none_src_dst AS ENUM ( + 'none', + 'src', + 'dst' +); + +--ALTER TYPE none_src_dst; + +CREATE TYPE opened_processed_closed AS ENUM ( + 'opened', + 'processed', + 'closed' +); + +--ALTER TYPE opened_processed_closed; + +CREATE TYPE opened_processed_closed_all AS ENUM ( + 'opened', + 'processed', + 'closed', + 'all' +); + +--ALTER TYPE opened_processed_closed_all; + +CREATE TYPE regular_exam_bonus_extra AS ENUM ( + 'regular', + 'exam', + 'bonus', + 'extra' +); + +--ALTER TYPE regular_exam_bonus_extra; + +CREATE TYPE scientific_disciplinary_coursework AS ENUM ( + 'scientific_coursework', + 'disciplinary_coursework' +); + +--ALTER TYPE scientific_disciplinary_coursework; + +CREATE TYPE student_teacher AS ENUM ( + 'student', + 'teacher' +); + +--ALTER TYPE student_teacher; + +CREATE TYPE student_teacher_admin_dean AS ENUM ( + 'student', + 'teacher', + 'admin', + 'dean' +); + +CREATE TYPE noukd_norate_full AS ENUM ('noukd', 'norate', 'full'); \ No newline at end of file diff --git a/~dev_rating/application/classes/Controller/Handler/Teachers.php b/~dev_rating/application/classes/Controller/Handler/Teachers.php index e2187fe3bb75cb7826e181b0043b0a6e768012de..ba824a7016909d505c6cbcf96e984b62176bee95 100644 --- a/~dev_rating/application/classes/Controller/Handler/Teachers.php +++ b/~dev_rating/application/classes/Controller/Handler/Teachers.php @@ -67,7 +67,7 @@ class Controller_Handler_Teachers extends Controller_Handler } private static function createDepartment($name, Model_Faculty $faculty) { - $sql = 'SELECT Department_Create(:name, :faculty) AS `id`'; + $sql = 'SELECT * FROM Department_Create(:name, :faculty) AS "id"'; return DB::query(Database::SELECT, $sql) ->param(':name', $name) ->param(':faculty', $faculty->ID) diff --git a/~dev_rating/application/classes/Controller/JavaAuthentication.php b/~dev_rating/application/classes/Controller/JavaAuthentication.php index 93768066bc336fe3685c8a9043a42ea4138590fe..b66ffdf652d46bc5cffb7848669c017515d5801c 100644 --- a/~dev_rating/application/classes/Controller/JavaAuthentication.php +++ b/~dev_rating/application/classes/Controller/JavaAuthentication.php @@ -44,7 +44,7 @@ class Controller_JavaAuthentication extends Controller $userPassword="userPassword"; $response="{\"session_hash\": \"".md5($s_id.$secretKey)."\","; - $sql = "SELECT `SaveSession`('$s_id', '$userLogin', '$userPassword') AS `Num`;"; + $sql = "SELECT * FROM SaveSession('$s_id', '$userLogin', '$userPassword') AS "Num";"; $res = DB::query(Database::SELECT, $sql)->execute(); $response=$response." \"record_id\": ".$res[0]['Num']."}"; echo $response; @@ -59,7 +59,7 @@ class Controller_JavaAuthentication extends Controller $userPassword="userPassword"; $response="{\"session_hash\": \"".md5($s_id.$secretKey)."\","; - $sql = "SELECT `SaveSession`('$s_id', '$userLogin', '$userPassword') AS `Num`;"; + $sql = "SELECT * FROM SaveSession('$s_id', '$userLogin', '$userPassword') AS "Num";"; $res = DB::query(Database::SELECT, $sql)->execute(); $response=$response." \"record_id\": ".$res[0]['Num']."}"; //echo $response;*/ @@ -95,7 +95,7 @@ class Controller_JavaAuthentication extends Controller $userPassword = $user->LastName . $user->FirstName; //$response="{\"session_hash\": \"".md5($s_id.$secret_key)."\","; - //echo "SELECT `SaveSession`('$s_id', '$userLogin', '$userPassword') AS `Num`;"; + //echo "SELECT * FROM SaveSession('$s_id', '$userLogin', '$userPassword') AS "Num";"; /*echo "String for hash:".$secretKey.$openKey.$userLogin.$userPassword."<br/>"; echo "Hash:".md5($secretKey.$openKey.$userLogin.$userPassword)."<br/>";*/ @@ -104,7 +104,7 @@ class Controller_JavaAuthentication extends Controller exit; // TODO: move to Model - $sql = "SELECT `SaveSession`(:session, :login, :password) AS Num"; + $sql = "SELECT * FROM SaveSession(:session, :login, :password) AS Num"; $res = DB::query(Database::SELECT, $sql) ->param(':session', $sessionID) ->param(':login', $userLogin) diff --git a/~dev_rating/application/classes/Model/Account.php b/~dev_rating/application/classes/Model/Account.php index fad2086a0f886b838e2dd7fe73d61b5883b123f9..3aa62bdee63ab0d5955e5ff90f10a7d2f4fc9f2b 100644 --- a/~dev_rating/application/classes/Model/Account.php +++ b/~dev_rating/application/classes/Model/Account.php @@ -18,7 +18,7 @@ class Model_Account extends Model if ($id <= 0) throw new LogicException(Error::ID_IS_INCORRECT); $semesterID = $semesterID ?: User::instance()->SemesterID; - $sql = 'CALL `GetFullInfo`(:id, :semester);'; + $sql = 'SELECT * FROM GetFullInfo(:id, :semester);'; return DB::query(Database::SELECT, $sql) ->param(':id', (int) $id) ->param(':semester', (int) $semesterID) @@ -31,7 +31,7 @@ class Model_Account extends Model * @return bool true, if password was changed */ public static function changePassword($accountID, $newPassword) { - $sql = 'SELECT `ChangeAccountData`(:account, :value, "password") AS Num'; + $sql = 'SELECT * FROM ChangeAccountData(:account, :value, "password") AS Num'; return (bool) DB::query(Database::SELECT, $sql) ->parameters([ ':account' => $accountID, @@ -48,7 +48,7 @@ class Model_Account extends Model if (!preg_match('/^[a-zA-Z0-9_\-\.]{2,}$/', $newLogin)) throw new InvalidArgumentException('Логин содержит некорректные символы'); - $sql = 'SELECT `ChangeAccountData`(:account, :value, "login") AS Num'; + $sql = 'SELECT * FROM ChangeAccountData(:account, :value, "login") AS Num'; return (bool) DB::query(Database::SELECT, $sql) ->parameters([ ':account' => $accountID, @@ -62,7 +62,7 @@ class Model_Account extends Model * @return bool true, if email was changed */ public static function changeEMail($accountID, $newEmail) { - $sql = 'SELECT `ChangeAccountData`(:account, :value, "email") AS Num'; + $sql = 'SELECT * FROM ChangeAccountData(:account, :value, "email") AS Num'; return (bool) DB::query(Database::SELECT, $sql) ->parameters([ ':account' => $accountID, @@ -76,7 +76,7 @@ class Model_Account extends Model * @return bool */ public static function checkAccountExistenceBy($type, $value) { - $sql = 'SELECT `CheckAccountExistence`(:value, :type) AS Num'; + $sql = 'SELECT * FROM CheckAccountExistence(:value, :type) AS Num'; return (bool) DB::query(Database::SELECT, $sql) ->param(':value', $value) ->param(':type', $type) @@ -94,7 +94,7 @@ class Model_Account extends Model } public static function isActivationCodeValid($code) { - $sql = "SELECT `CheckAccountExistence`(:acode, 'code') AS Num"; + $sql = "SELECT * FROM CheckAccountExistence(:acode, 'code') AS Num"; $res = DB::query(Database::SELECT, $sql) ->param(':acode', $code) ->execute()->get('Num'); @@ -102,7 +102,7 @@ class Model_Account extends Model } public static function activateAccount($login, $password, $email, $code) { - $sql = 'SELECT `ActivateAccount`(:code, :login, :email, :pass) AS `Num`'; + $sql = 'SELECT * FROM ActivateAccount(:code, :login, :email, :pass) AS "Num"'; return DB::query(Database::SELECT, $sql) ->parameters([ ':code' => $code, @@ -117,7 +117,7 @@ class Model_Account extends Model // ===================================== public static function checkAuth($login, $password) { - $sql = 'SELECT `SignIn`(:login, :pass) AS `ID`'; + $sql = 'SELECT * FROM SignIn(:login, :pass) AS "ID"'; return DB::query(Database::SELECT, $sql) ->param(':login', $login) ->param(':pass', $password) @@ -125,14 +125,14 @@ class Model_Account extends Model } public static function checkAuthOpenID($globalKey) { - $sql = 'SELECT `SignInByOpenID`(:key) AS `ID`'; + $sql = 'SELECT * FROM SignInByOpenID(:key) AS "ID"'; return DB::query(Database::SELECT, $sql) ->param(':key', $globalKey) ->execute()->get('ID'); } public static function checkAuthToken($token) { - $sql = 'SELECT `SignInByToken`(:token) AS `ID`'; + $sql = 'SELECT * FROM SignInByToken(:token) AS "ID"'; return DB::query(Database::SELECT, $sql) ->param(':token', $token) ->execute()->get('ID'); @@ -144,7 +144,7 @@ class Model_Account extends Model // ===================================== public static function createRecoveryToken($email, $token) { - $sql = 'SELECT `CreateRecoveryToken`(:email, :token) AS UserName'; + $sql = 'SELECT * FROM CreateRecoveryToken(:email, :token) AS UserName'; return DB::query(Database::SELECT, $sql) ->param(':email', $email) ->param(':token', $token) @@ -165,7 +165,7 @@ class Model_Account extends Model } public static function useRecoveryToken($token) { - $sql = 'SELECT `UseRecoveryToken`(:token) AS Num'; + $sql = 'SELECT * FROM UseRecoveryToken(:token) AS Num'; return DB::query(Database::SELECT, $sql) ->param(':token', $token) ->execute()->get('Num'); @@ -181,7 +181,7 @@ class Model_Account extends Model * @return string token, if it was created. Empty string otherwise */ public static function createAuthToken($accountID, $mask = 0, $description = '') { - $sql = 'SELECT `CreateAuthToken`(:user, :description, :mask) AS `token`'; + $sql = 'SELECT * FROM CreateAuthToken(:user, :description, :mask) AS "token"'; return DB::query(Database::SELECT, $sql) ->parameters([ ':user' => (int) $accountID, @@ -191,7 +191,7 @@ class Model_Account extends Model } public static function deleteAuthToken($token) { - $sql = 'SELECT `deleteAuthToken`(:token) AS `res`'; + $sql = 'SELECT * FROM deleteAuthToken(:token) AS "res"'; return DB::query(Database::SELECT, $sql) ->param(':token', $token) ->execute()->get('res'); @@ -202,7 +202,7 @@ class Model_Account extends Model * @return mixed */ public static function getAuthTokens($accountID = 0) { - $sql = 'CALL `GetAuthTokens`(:user)'; + $sql = 'SELECT * FROM GetAuthTokens(:user)'; return DB::query(Database::SELECT, $sql) ->param(':user', (int) $accountID) ->execute(); diff --git a/~dev_rating/application/classes/Model/Discipline.php b/~dev_rating/application/classes/Model/Discipline.php index a4c97bd6c4b52e3889448d20f945919b5e7fafed..4afb5a6d8b6a7e87867b54e05d8dbfc1319d5a0c 100644 --- a/~dev_rating/application/classes/Model/Discipline.php +++ b/~dev_rating/application/classes/Model/Discipline.php @@ -43,7 +43,7 @@ class Model_Discipline extends Model_Container * @throws HTTP_Exception if discipline does not exist */ protected function getRawData($id) { - $sql = 'CALL `Discipline_GetInfo`(:id)'; + $sql = 'SELECT * FROM Discipline_GetInfo(:id)'; $info = DB::query(Database::SELECT, $sql) ->param(':id', $id)->execute(); @@ -58,7 +58,7 @@ class Model_Discipline extends Model_Container * @throws HTTP_Exception if discipline does not exist */ protected function getRawDataBySubmoduleID($id) { - $sql = 'CALL `Discipline_GetInfoBySubmodule`(:id)'; + $sql = 'SELECT * FROM Discipline_GetInfoBySubmodule(:id)'; $info = DB::query(Database::SELECT, $sql) ->param(':id', $id)->execute(); @@ -80,8 +80,8 @@ class Model_Discipline extends Model_Container * Create new discipline in db, based on $data. */ protected function create() { - $sql = 'SELECT `Discipline_Create`(AuthorID, GradeID, SubjectID, Type, Lectures, Practice, - Labs, FacultyID, SemesterID, Subtype) AS `ID`'; + $sql = 'SELECT * FROM Discipline_Create(AuthorID, GradeID, SubjectID, Type, Lectures, Practice, + Labs, FacultyID, SemesterID, Subtype) AS "ID"'; $this->data[self::$ID_FIELD] = DB::query(Database::SELECT, $sql) ->parameters($this->data) @@ -89,14 +89,14 @@ class Model_Discipline extends Model_Container } public function delete() { - $sql = 'SELECT `Discipline_Delete`(:id)'; + $sql = 'SELECT * FROM Discipline_Delete(:id)'; DB::query(Database::SELECT, $sql)->param(':id', $this->ID)->execute(); } // todo: should return Model_Group[] public function getGroups() { - $sql = 'CALL `GetGroupsForDiscipline`(:id)'; + $sql = 'SELECT * FROM GetGroupsForDiscipline(:id)'; return DB::query(Database::SELECT, $sql) ->param(':id', $this->ID) ->execute()->as_array(); @@ -104,7 +104,7 @@ class Model_Discipline extends Model_Container /** Get groups with separately attached students. */ public function getAllGroups() { - $sql = 'CALL `GetGroupsForDisciplineAll`(:id)'; + $sql = 'SELECT * FROM GetGroupsForDisciplineAll(:id)'; return DB::query(Database::SELECT, $sql)->param(':id', $this->ID)->execute(); } @@ -115,13 +115,13 @@ class Model_Discipline extends Model_Container // todo: should return Model_Teacher[] public function getTeachers() { - $sql = 'CALL `GetTeachersForDiscipline`(:id)'; + $sql = 'SELECT * FROM GetTeachersForDiscipline(:id)'; return DB::query(Database::SELECT, $sql) ->param(':id', $this->ID)->execute(); } public function hasTeacher($teacherID) { - $sql = 'SELECT `InternalIsTeacherBound`(:teacher, :discipline) AS `res`'; + $sql = 'SELECT * FROM InternalIsTeacherBound(:teacher, :discipline) AS "res"'; return DB::query(Database::SELECT, $sql) ->param(':discipline', $this->ID) ->param(':teacher', $teacherID) @@ -132,7 +132,7 @@ class Model_Discipline extends Model_Container if ($this->ID == $teacher->ID) return; - $sql = 'SELECT `Discipline_BindTeacher`(:id, :teacher)'; + $sql = 'SELECT * FROM Discipline_BindTeacher(:id, :teacher)'; DB::query(Database::SELECT, $sql) ->param(':teacher', $teacher->ID) ->param(':id', $this->ID) @@ -143,7 +143,7 @@ class Model_Discipline extends Model_Container if ($this->ID == $teacher->ID) return; - $sql = 'SELECT `Discipline_UnbindTeacher`(:id, :teacher)'; + $sql = 'SELECT * FROM Discipline_UnbindTeacher(:id, :teacher)'; DB::query(Database::SELECT, $sql) ->param(':teacher', $teacher->ID) ->param(':id', $this->ID) @@ -158,7 +158,7 @@ class Model_Discipline extends Model_Container if ($this->ID == $teacher->ID) return; - $sql = 'SELECT `Discipline_Delegate`(:id, :teacher)'; + $sql = 'SELECT * FROM Discipline_Delegate(:id, :teacher)'; DB::query(Database::SELECT, $sql) ->param(':teacher', $teacher->ID) ->param(':id', $this->ID) @@ -169,12 +169,12 @@ class Model_Discipline extends Model_Container if ($this->GradeID == $grade) return 0; - $sql = 'SELECT `Discipline_SetGradeUnsafe`(:discipline, :grade) AS `ErrorCode`'; + $sql = 'SELECT * FROM Discipline_SetGradeUnsafe(:discipline, :grade) AS "ErrorCode"'; return DB::query(Database::SELECT, $sql) ->parameters([ ':discipline' => $this->ID, ':grade' => $grade, - ])->execute()->get('ErrorCode'); + ])->execute()->get('"ErrorCode"'); } public function changeGrade($teacherID, $grade) { @@ -195,7 +195,7 @@ class Model_Discipline extends Model_Container $this->Milestone = $stage; - $sql = 'SELECT `RestrictAfterMilestone`(:discipline, :milestone)'; + $sql = 'SELECT * FROM RestrictAfterMilestone(:discipline, :milestone)'; DB::query(Database::SELECT, $sql) ->parameters([ ':discipline' => $this->ID, @@ -204,7 +204,7 @@ class Model_Discipline extends Model_Container } public static function find($studyPlanID, $semesterID, $subjectID, $type) { - $sql = 'CALL `Discipline_Find`(:studyPlanID, :semesterID, :subjectID, :type)'; + $sql = 'SELECT * FROM Discipline_Find(:studyPlanID, :semesterID, :subjectID, :type)'; $data = DB::query(Database::SELECT, $sql) ->parameters([ ':studyPlanID' => $studyPlanID, @@ -226,8 +226,8 @@ class Model_Discipline extends Model_Container public function update() { throw new BadMethodCallException('Method is not implemented yet!'); // тут РЅСѓР¶РЅРѕ делать апдейт записи РІ БД РїРѕ полям СѓР¶Рµ указанным РІ модели -// $sql = 'SELECT `Discipline_ChangeInfo` (ID, AuthorID, GradeID, SubjectID, Type, Lectures, Practice, -// Labs, FacultyID, SemesterID, Subtype) AS `Success`'; +// $sql = 'SELECT * FROM Discipline_ChangeInfo(ID, AuthorID, GradeID, SubjectID, Type, Lectures, Practice, +// Labs, FacultyID, SemesterID, Subtype) AS "Success"'; // $res = DB::query(Database::SELECT, $sql) // ->parameters($this->getRawData($this->ID)) // ->execute(); diff --git a/~dev_rating/application/classes/Model/Disciplines.php b/~dev_rating/application/classes/Model/Disciplines.php index 16325df568d5160a5b1b8694efecafa30fa0196c..d2a5efb926b129d698b8c276c85feb41f166dc17 100644 --- a/~dev_rating/application/classes/Model/Disciplines.php +++ b/~dev_rating/application/classes/Model/Disciplines.php @@ -3,7 +3,7 @@ class Model_Disciplines extends Model { public static function getWithFullness($type, $semesterID, $facultyID) { - $sql = 'CALL `Discipline_GetWithFullness`(:type, :semesterID, :facultyID)'; + $sql = 'SELECT * FROM Discipline_GetWithFullness(:type, :semesterID, :facultyID)'; $info = DB::query(Database::SELECT, $sql) ->param(':type', $type) ->param(':semesterID', $semesterID) diff --git a/~dev_rating/application/classes/Model/Faculties.php b/~dev_rating/application/classes/Model/Faculties.php index bc6bb2dc0648f16a71759681cf3df979af0335b2..63d7aa3f2d228abc268eaee18fc2cb2967953cd8 100644 --- a/~dev_rating/application/classes/Model/Faculties.php +++ b/~dev_rating/application/classes/Model/Faculties.php @@ -4,13 +4,13 @@ class Model_Faculties extends Model { // todo: should generate an array of Model_Faculty public static function load() { - $sql = 'CALL `GetFaculties`(); '; + $sql = 'SELECT * FROM GetFaculties(); '; return DB::query(Database::SELECT, $sql) ->execute()->as_array(); } public static function createFaculty($externalID, $name, $abbr) { - $sql = 'SELECT `Faculty_Create`(:externalID, :name, :abbr) AS `ID`;'; + $sql = 'SELECT * FROM Faculty_Create(:externalID, :name, :abbr) AS "ID";'; $query = DB::query(Database::SELECT, $sql) ->param(':externalID', $externalID) ->param(':name', $name) @@ -25,7 +25,7 @@ class Model_Faculties extends Model } public static function getDepartments($facultyID = 0) { - $sql = 'CALL `Departments_Get`(:faculty)'; + $sql = 'SELECT * FROM Departments_Get(:faculty)'; $result = DB::query(Database::SELECT, $sql) ->param(':faculty', $facultyID) ->execute(); @@ -42,7 +42,7 @@ class Model_Faculties extends Model } public static function getDepartmentIdByName($departmentName) { - $sql = 'CALL `Department_GetIdByName`(:name)'; + $sql = 'SELECT * FROM Department_GetIdByName(:name)'; $id = DB::query(Database::SELECT, $sql) ->param(':name', $departmentName) ->execute(); @@ -54,7 +54,7 @@ class Model_Faculties extends Model } public static function getDepartmentIdByExternalID($departmentExternalID) { - $sql = 'CALL `Department_GetIdByExternalID`(:depExternalID)'; + $sql = 'SELECT * FROM Department_GetIdByExternalID(:depExternalID)'; $result = DB::query(Database::SELECT, $sql) ->param(':depExternalID', $departmentExternalID) ->execute(); @@ -66,7 +66,7 @@ class Model_Faculties extends Model } public static function getIdByExternalID($facultyExternalID) { - $sql = 'SELECT `Faculty_GetIdByExternalID`(:facultyExternalID) AS `ID`'; + $sql = 'SELECT * FROM Faculty_GetIdByExternalID(:facultyExternalID) AS "ID"'; $result = DB::query(Database::SELECT, $sql) ->param(':facultyExternalID', $facultyExternalID) ->execute(); @@ -80,7 +80,7 @@ class Model_Faculties extends Model } public static function createDepartment($departmentName, $facultyID) { - $sql = 'SELECT `Department_Create`(:name, :facultyID) AS `ID`;'; + $sql = 'SELECT * FROM Department_Create(:name, :facultyID) AS "ID";'; $result = DB::query(Database::SELECT, $sql) ->param(':name', $departmentName) ->param(':facultyID', $facultyID) @@ -93,7 +93,7 @@ class Model_Faculties extends Model } public static function createDepartmentWithExternalID($externalID, $name, $facultyExternalID) { - $sql = 'SELECT `Department_Create_With_ExternalID`(:externalID, :name, :facultyExternalID) AS `ID`;'; + $sql = 'SELECT * FROM Department_Create_With_ExternalID(:externalID, :name, :facultyExternalID) AS "ID";'; $result = DB::query(Database::SELECT, $sql) ->param(':externalID', $externalID) ->param(':name', $name) @@ -107,7 +107,7 @@ class Model_Faculties extends Model } public static function getJobPositionIdByName($jobPositionName) { - $sql = 'CALL `JobPosition_GetIdByName`(:name)'; + $sql = 'SELECT * FROM JobPosition_GetIdByName(:name)'; $result = DB::query(Database::SELECT, $sql) ->param(':name', $jobPositionName) ->execute(); @@ -119,7 +119,7 @@ class Model_Faculties extends Model } public static function createJobPosition($jobPositionName) { - $sql = 'SELECT `JobPosition_Create`(:name) AS `ID`;'; + $sql = 'SELECT * FROM JobPosition_Create(:name) AS "ID";'; $result = DB::query(Database::SELECT, $sql) ->param(':name', $jobPositionName) ->execute(); diff --git a/~dev_rating/application/classes/Model/Faculty.php b/~dev_rating/application/classes/Model/Faculty.php index 80de277e775527e76bf0f2c19e52c87b1e4750d9..4680e923d711237460c1122dd498caa50243d601 100644 --- a/~dev_rating/application/classes/Model/Faculty.php +++ b/~dev_rating/application/classes/Model/Faculty.php @@ -30,7 +30,7 @@ class Model_Faculty extends Model */ public function getMilestone($semesterID = null) { $semesterID = $semesterID ?: User::instance()->SemesterID; - $sql = 'SELECT `GetMilestone`(:faculty, :semester) AS `Num`'; + $sql = 'SELECT * FROM GetMilestone(:faculty, :semester) AS "Num"'; return DB::query(Database::SELECT, $sql) ->param(':faculty', $this->ID) ->param(':semester', $semesterID) @@ -46,7 +46,7 @@ class Model_Faculty extends Model throw new LogicException('Milestone argument is incorrect!'); $semesterID = $semesterID ?: User::instance()->SemesterID; - $sql = 'SELECT `RestrictAfterMilestoneForCredits`(:facultyID, :milestone, :semesterID)'; + $sql = 'SELECT * FROM RestrictAfterMilestoneForCredits(:facultyID, :milestone, :semesterID)'; DB::query(Database::SELECT, $sql) ->parameters([ ':facultyID' => $this->ID, @@ -61,7 +61,7 @@ class Model_Faculty extends Model */ public function getDisciplines($semesterID = null) { $semesterID = $semesterID ?: User::instance()->SemesterID; - $sql = 'CALL `GetDisciplines`(:id, :semesterID)'; + $sql = 'SELECT * FROM GetDisciplines(:id, :semesterID)'; $query = DB::query(Database::SELECT, $sql) ->param(':id', $this->ID) ->param(':semesterID', $semesterID) @@ -81,7 +81,7 @@ class Model_Faculty extends Model */ public function getGroups($grade, $semesterID = null) { $semesterID = $semesterID ?: User::instance()->SemesterID; - $sql = 'CALL `GetGroups`(:grade, :facultyID, :semesterID)'; + $sql = 'SELECT * FROM GetGroups(:grade, :facultyID, :semesterID)'; return DB::query(Database::SELECT, $sql) ->param(':grade', (int) $grade) ->param(':facultyID', $this->ID) @@ -90,14 +90,14 @@ class Model_Faculty extends Model } public function getSubjects() { - $sql = 'CALL `GetSubjects`(:faculty)'; + $sql = 'SELECT * FROM GetSubjects(:faculty)'; return DB::query(Database::SELECT, $sql) ->param(':faculty', $this->ID) ->execute()->as_array(); } public function getDepartments() { - $sql = 'CALL `Departments_Get`(:faculty)'; + $sql = 'SELECT * FROM Departments_Get(:faculty)'; return DB::query(Database::SELECT, $sql) ->param(':faculty', $this->ID) ->execute()->as_array(); diff --git a/~dev_rating/application/classes/Model/Grades.php b/~dev_rating/application/classes/Model/Grades.php index bdaa5f2bbd7178b108993ce764dda8f26430dacc..68ff870a3bc0d163db19e3f204b94808ec5f1002 100644 --- a/~dev_rating/application/classes/Model/Grades.php +++ b/~dev_rating/application/classes/Model/Grades.php @@ -9,16 +9,16 @@ class Model_Grades extends Model { /** @return Database_Result */ public static function loadAll() { - return DB::query(Database::SELECT, 'CALL `GetGrades`()')->execute(); + return DB::query(Database::SELECT, 'SELECT * FROM GetGrades()')->execute(); } public static function getCompoundDisciplinesForGrade($gradeID){ - return DB::query(Database::SELECT, 'CALL `GetCompoundDisciplinesForGrade`(:gradeID)') + return DB::query(Database::SELECT, 'SELECT * FROM GetCompoundDisciplinesForGrade(:gradeID)') ->param(':gradeID', $gradeID)->execute()->as_array(); } public static function getID($gradeNum, $degree) { - $sql = 'CALL `Grade_GetID`(:gradeNum, :degree)'; + $sql = 'SELECT * FROM Grade_GetID(:gradeNum, :degree)'; $res = DB::query(Database::SELECT, $sql) ->param(':gradeNum', $gradeNum) ->param(':degree', $degree) diff --git a/~dev_rating/application/classes/Model/Group.php b/~dev_rating/application/classes/Model/Group.php index e7d65539e0eeb9f805bfa326d4af221752350f51..67a9d84e48475ce2ef6cfbd155772e3cef971444 100644 --- a/~dev_rating/application/classes/Model/Group.php +++ b/~dev_rating/application/classes/Model/Group.php @@ -15,7 +15,7 @@ class Model_Group extends Model } public static function findOrCreate($gradeID, $groupNum, $specialization, $facultyID, $year) { - $sql = 'SELECT `CreateGroup`(:gradeID, :groupNum, :specialization, :facultyID, :year) AS `ID`'; + $sql = 'SELECT * FROM CreateGroup(:gradeID, :groupNum, :specialization, :facultyID, :year) AS "ID"'; $id = DB::query(Database::SELECT, $sql) ->param(':gradeID', $gradeID) ->param(':groupNum', $groupNum) @@ -32,7 +32,7 @@ class Model_Group extends Model /** @return Model_Discipline[] */ public function getDisciplines($lazy = true, $semesterID = null) { $semesterID = $semesterID ?: User::instance()->SemesterID; - $sql = 'CALL `GetDisciplinesForGroup`(:id, :semesterID)'; + $sql = 'SELECT * FROM GetDisciplinesForGroup(:id, :semesterID)'; $query = DB::query(Database::SELECT, $sql) ->param(':id', $this->ID) ->param(':semesterID', $semesterID) diff --git a/~dev_rating/application/classes/Model/Logs.php b/~dev_rating/application/classes/Model/Logs.php index cec32ebc39b952b1fdfc9a232f2a71f8c9f1cfa8..d8ad719c60cd59fa97bab82d2d4d54f3b0924d3c 100644 --- a/~dev_rating/application/classes/Model/Logs.php +++ b/~dev_rating/application/classes/Model/Logs.php @@ -12,7 +12,7 @@ class Model_Logs extends Model { public static function load() { - $query = 'CALL `GetSignInHistory`(50)'; + $query = 'SELECT * FROM GetSignInHistory(50)'; return DB::query(Database::SELECT, $query)->execute()->as_array(); } diff --git a/~dev_rating/application/classes/Model/Map.php b/~dev_rating/application/classes/Model/Map.php index cd492d9dfff52c6025a274b9a93e3111e99057a9..bdc1cf65a42ca2038a8adf9030fb604328f7bce9 100644 --- a/~dev_rating/application/classes/Model/Map.php +++ b/~dev_rating/application/classes/Model/Map.php @@ -14,7 +14,7 @@ class Model_Map extends Model } public function addModuleBonus($teacherID) { - $sql = 'SELECT `AddModuleBonus`(:teacher, :discipline) AS `Num`'; + $sql = 'SELECT * FROM AddModuleBonus(:teacher, :discipline) AS "Num"'; return DB::query(Database::SELECT, $sql) ->param(':teacher', $teacherID) ->param(':discipline', $this->discipline->ID) @@ -22,7 +22,7 @@ class Model_Map extends Model } public function deleteModuleBonus($teacherID) { - $sql = 'SELECT `DeleteModuleBonus`(:teacher, :discipline) AS `Num`'; + $sql = 'SELECT * FROM DeleteModuleBonus(:teacher, :discipline) AS "Num"'; return DB::query(Database::SELECT, $sql) ->param(':teacher', $teacherID) ->param(':discipline', $this->discipline->ID) @@ -31,7 +31,7 @@ class Model_Map extends Model /** @return int ID of created module, -2 if map is locked or teacher is not author */ public function addModule($teacherID, $title = '') { - $sql = 'SELECT `AddModule`(:teacher, :discipline, :title) AS `Num`'; + $sql = 'SELECT * FROM AddModule(:teacher, :discipline, :title) AS "Num"'; return DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, @@ -43,7 +43,7 @@ class Model_Map extends Model /** @return int ID of created submodule, -2 if map is locked */ public static function addSubmodule($teacherID, $moduleID, $controlType = 'current', $maxRate = 0, $title = '', $description = '') { - $sql = 'SELECT `AddSubmodule`(:teacher, :moduleID, :maxRate, :title, :desc, :control) AS `Num`'; + $sql = 'SELECT * FROM AddSubmodule(:teacher, :moduleID, :maxRate, :title, :desc, :control) AS "Num"'; return DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, @@ -58,7 +58,7 @@ class Model_Map extends Model /** @return bool true, if err occurred */ public static function deleteModule($teacherID, $moduleID) { - $sql = 'SELECT `DeleteModule`(:teacher, :module) AS `Num`'; + $sql = 'SELECT * FROM DeleteModule(:teacher, :module) AS "Num"'; return (bool) DB::query(Database::SELECT, $sql) ->param(':teacher', $teacherID) ->param(':module', $moduleID) @@ -67,7 +67,7 @@ class Model_Map extends Model /** @return bool true, if err occurred */ public static function deleteSubmodule($teacherID, $submoduleID) { - $sql = 'SELECT `DeleteSubmodule`(:teacher, :submodule) AS `Num`'; + $sql = 'SELECT * FROM DeleteSubmodule(:teacher, :submodule) AS "Num"'; return (bool) DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, @@ -77,7 +77,7 @@ class Model_Map extends Model /** @return bool true, if err occurred */ public static function setModuleName($teacherID, $moduleID, $name) { - $sql = 'SELECT `ChangeModuleName`(:teacher, :module, :name) AS `Num`'; + $sql = 'SELECT * FROM ChangeModuleName(:teacher, :module, :name) AS "Num"'; $result = DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, @@ -90,7 +90,7 @@ class Model_Map extends Model /** @return bool true, if err occurred */ public static function setSubmoduleName($teacherID, $submoduleID, $name) { - $sql = 'SELECT `ChangeSubmoduleName`(:teacher, :submodule, :name) AS `Num`'; + $sql = 'SELECT * FROM ChangeSubmoduleName(:teacher, :submodule, :name) AS "Num"'; return DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, @@ -102,7 +102,7 @@ class Model_Map extends Model /** return @bool true, if err occurred */ public static function swapModules($teacherID, $moduleID1, $moduleID2) { - $sql = 'SELECT `SwapModuleOrder`(:teacher, :moduleID1, :moduleID2) AS `Num`'; + $sql = 'SELECT * FROM SwapModuleOrder(:teacher, :moduleID1, :moduleID2) AS "Num"'; return (bool) DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, @@ -113,7 +113,7 @@ class Model_Map extends Model /** return @bool true, if err occurred */ public static function swapSubmodules($teacherID, $submoduleID1, $submoduleID2) { - $sql = 'SELECT `SwapSubmoduleOrder`(:teacher, :submodule1, :submodule2) AS `Num`'; + $sql = 'SELECT * FROM SwapSubmoduleOrder(:teacher, :submodule1, :submodule2) AS "Num"'; return (bool) DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, @@ -123,7 +123,7 @@ class Model_Map extends Model } public static function setSubmoduleMaxAndControl($teacherID, $submoduleID, $maxRate, $controlType) { - $sql = 'SELECT `ChangeSubmoduleMaxAndControl`(:teacher, :submodule, :maxRate, :control) AS `Num`'; + $sql = 'SELECT * FROM ChangeSubmoduleMaxAndControl(:teacher, :submodule, :maxRate, :control) AS "Num"'; return DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, @@ -134,7 +134,7 @@ class Model_Map extends Model } public function changeDisciplineSubject($teacherID, $subjectID) { - $sql = 'SELECT `ChangeDisciplineSubject`(:teacher, :discipline, :subject) AS `Num`'; + $sql = 'SELECT * FROM ChangeDisciplineSubject(:teacher, :discipline, :subject) AS "Num"'; return DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, @@ -144,7 +144,7 @@ class Model_Map extends Model } public function changeDisciplineControl($teacherID, $control) { - $sql = 'SELECT `ChangeDisciplineControl`(:teacher, :discipline, :control) AS `Num`'; + $sql = 'SELECT * FROM ChangeDisciplineControl(:teacher, :discipline, :control) AS "Num"'; return DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, @@ -154,7 +154,7 @@ class Model_Map extends Model } public function changeDisciplineHours($teacherID, $hours, $type) { - $sql = 'SELECT `ChangeDisciplineHours`(:teacher, :discipline, :hours, :type) AS `Num`'; + $sql = 'SELECT * FROM ChangeDisciplineHours(:teacher, :discipline, :hours, :type) AS "Num"'; return DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, @@ -165,7 +165,7 @@ class Model_Map extends Model } public function bindGroup($teacherID, $groupID) { - $sql = 'SELECT `BindGroup`(:teacher, :discipline, :group) AS `Num`'; + $sql = 'SELECT * FROM BindGroup(:teacher, :discipline, :group) AS "Num"'; return DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, @@ -180,7 +180,7 @@ class Model_Map extends Model * @return Database_Result select from <tt>view_roadmap</tt> table */ public static function getRoadmap($discipline, $type) { - $sql = 'CALL `GetRoadmap`(:discipline, :type)'; + $sql = 'SELECT * FROM GetRoadmap(:discipline, :type)'; return DB::query(Database::SELECT, $sql) ->param(':discipline', $discipline) ->param(':type', $type) @@ -188,7 +188,7 @@ class Model_Map extends Model } public function getModules($type) { - $sql = 'CALL `Discipline_GetModules`(:discipline, :type)'; + $sql = 'SELECT * FROM Discipline_GetModules(:discipline, :type)'; return DB::query(Database::SELECT, $sql) ->param(':discipline', $this->discipline->ID) @@ -197,7 +197,7 @@ class Model_Map extends Model } public function getSubmodules($type) { - $sql = 'CALL `Discipline_GetSubmodules`(:discipline, :type)'; + $sql = 'SELECT * FROM Discipline_GetSubmodules(:discipline, :type)'; return DB::query(Database::SELECT, $sql) ->param(':discipline', $this->discipline->ID) ->param(':type', $type)->execute() @@ -205,7 +205,7 @@ class Model_Map extends Model } public function unbindGroup($teacherID, $groupID) { - $sql = 'SELECT `UnbindGroup`(:teacher, :discipline, :group) AS `Num`'; + $sql = 'SELECT * FROM UnbindGroup(:teacher, :discipline, :group) AS "Num"'; return DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, @@ -215,7 +215,7 @@ class Model_Map extends Model } public function bindStudent($teacherID, $studentID) { - $sql = 'SELECT `BindStudent`(:teacher, :discipline, :student) AS `Num`'; + $sql = 'SELECT * FROM BindStudent(:teacher, :discipline, :student) AS "Num"'; return DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, @@ -225,7 +225,7 @@ class Model_Map extends Model } public function unbindStudent($teacherID, $studentID) { - $sql = 'SELECT `UnbindStudent`(:teacher, :discipline, :student) AS `Num`'; + $sql = 'SELECT * FROM UnbindStudent(:teacher, :discipline, :student) AS "Num"'; return DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, diff --git a/~dev_rating/application/classes/Model/Plan.php b/~dev_rating/application/classes/Model/Plan.php index b14ed5a42f8c70c6c5b3ebe1440fbe688e703c25..ef78b42cd05095f5b88dc0bc1562c471352ba40a 100644 --- a/~dev_rating/application/classes/Model/Plan.php +++ b/~dev_rating/application/classes/Model/Plan.php @@ -11,7 +11,7 @@ class Model_Plan extends Model_Container { protected function getRawData($id) { - $sql = 'CALL `Plan_GetInfo`(:id)'; + $sql = 'SELECT * FROM Plan_GetInfo(:id)'; $info = DB::query(Database::SELECT, $sql) ->param(':id', $id)->execute(); @@ -26,7 +26,7 @@ class Model_Plan extends Model_Container } protected function create() { - $sql = 'SELECT `Plan_Create`(ExternalID, Year, FacultyID) AS `Identifier`'; + $sql = 'SELECT * FROM Plan_Create(ExternalID, Year, FacultyID) AS "Identifier"'; $this->data[self::$ID_FIELD] = DB::query(Database::SELECT, $sql) ->parameters($this->data) ->execute()->get('Identifier'); @@ -37,7 +37,7 @@ class Model_Plan extends Model_Container * @return Model_Plan */ public static function withExternalID($extid) { - $sql = 'SELECT `Plan_GetIDFromExternalID`(:extid) AS `ID`'; + $sql = 'SELECT * FROM Plan_GetIDFromExternalID(:extid) AS "ID"'; $id = DB::query(Database::SELECT, $sql) ->param(':extid', $extid) ->execute()->get('ID'); @@ -92,19 +92,19 @@ class Model_Plan extends Model_Container } public function update() { - $sql = 'SELECT `Plan_ChangeInfo`(:id, :year, :faculty) AS `ErrorCode`'; + $sql = 'SELECT * FROM Plan_ChangeInfo(:id, :year, :faculty) AS "ErrorCode"'; $res = DB::query(Database::SELECT, $sql) ->param(':id', $this->ID) ->param(':year', $this->Year) ->param(':faculty', $this->FacultyID) ->execute(); - if ($res->get('ErrorCode') < 0) { + if ($res->get('"ErrorCode"') < 0) { throw new Database_Exception('Plan_ChangeInfo update routine failed!'); } } public function bindDiscipline($disciplineID) { - $sql = 'SELECT `Plan_BindDiscipline`(:id, :discipline) AS `ID`'; + $sql = 'SELECT * FROM Plan_BindDiscipline(:id, :discipline) AS "ID"'; DB::query(Database::SELECT, $sql) ->param(':id', $this->ID) ->param(':discipline', $disciplineID) diff --git a/~dev_rating/application/classes/Model/Rating.php b/~dev_rating/application/classes/Model/Rating.php index bfcddd7fc03a7eee29764a4df5f49c6fc2ef9d54..f2681d20c4c9eb64579ba7457680093bc3e7f190 100644 --- a/~dev_rating/application/classes/Model/Rating.php +++ b/~dev_rating/application/classes/Model/Rating.php @@ -7,7 +7,7 @@ class Model_Rating extends Model * @return Database_Result */ public static function GetStudentsForRating($discipline) { - $sql = 'CALL `GetStudentsForRating`(:discipline)'; + $sql = 'SELECT * FROM GetStudentsForRating(:discipline)'; return DB::query(Database::SELECT, $sql) ->param(':discipline', $discipline) ->execute(); @@ -19,7 +19,7 @@ class Model_Rating extends Model * @return Database_Result */ public static function getRates($recordbook, $discipline) { - $sql = 'CALL `GetRates`(:recordbook, :discipline)'; + $sql = 'SELECT * FROM GetRates(:recordbook, :discipline)'; return DB::query(Database::SELECT, $sql) ->param(':recordbook', $recordbook) ->param(':discipline', $discipline) @@ -32,7 +32,7 @@ class Model_Rating extends Model * @return Database_Result */ public static function getRatesAll($discipline, $recordBook) { - $sql = 'CALL `GetRatesAll`(:recordBook, :discipline)'; + $sql = 'SELECT * FROM GetRatesAll(:recordBook, :discipline)'; return DB::query(Database::SELECT, $sql) ->param(':discipline', $discipline) ->param(':recordBook', $recordBook) @@ -43,7 +43,7 @@ class Model_Rating extends Model public static function getMapForStudent($student, $discipline) { # SQL routine not implemented yet throw new HTTP_Exception_500('Ртот функционал еще РЅРµ реализован!'); - $sql = 'CALL `GetMapForStudent`(:student, :discipline)'; + $sql = 'SELECT * FROM GetMapForStudent(:student, :discipline)'; return DB::query(Database::SELECT, $sql) ->param(':discipline', $discipline) ->param(':student', $student) @@ -51,7 +51,7 @@ class Model_Rating extends Model } public static function getAttestationData($discipline, $group) { - $sql = 'CALL `GetAttestationData`(:discipline, :group)'; + $sql = 'SELECT * FROM GetAttestationData(:discipline, :group)'; return DB::query(Database::SELECT, $sql) ->param(':discipline', $discipline) ->param(':group', $group) @@ -236,7 +236,7 @@ class Model_Rating extends Model } public static function SetRateSQL($teacherID, $recordBookID, $submoduleID, $rate) { - $sql = 'SELECT `Discipline_SetRate`(:teacher, :recordBook, :submodule, :rate) AS `Num`'; + $sql = 'SELECT * FROM Discipline_SetRate(:teacher, :recordBook, :submodule, :rate) AS "Num"'; $dbAnswer = DB::query(Database::SELECT, $sql) ->parameters([ ':teacher' => $teacherID, @@ -258,7 +258,7 @@ class Model_Rating extends Model } public static function SetExamPeriodOptionSQL($recordBookID, $submoduleID, $option) { - $sql = 'SELECT `Discipline_SetExamPeriodOption`(:recordBook, :submodule, :option) as `Num`'; + $sql = 'SELECT * FROM Discipline_SetExamPeriodOption(:recordBook, :submodule, :option) as "Num"'; $dbAnswer = DB::query(Database::SELECT, $sql) ->parameters([ ':recordBook' => $recordBookID, @@ -274,7 +274,7 @@ class Model_Rating extends Model } public static function getRatesForDiscipline(Model_Discipline $discipline) { - $sql = 'CALL `GetRatesForDiscipline`(:id)'; + $sql = 'SELECT * FROM GetRatesForDiscipline(:id)'; $result = DB::query(Database::SELECT, $sql) ->param(':id', $discipline->ID)->execute(); @@ -289,7 +289,7 @@ class Model_Rating extends Model } public static function getRatesForStudentsGroup($discipline, $group) { - $sql = 'CALL `GetRatesForGroup`(:discipline, :group)'; + $sql = 'SELECT * FROM GetRatesForGroup(:discipline, :group)'; return DB::query(Database::SELECT, $sql) ->parameters([ ':discipline' => $discipline, @@ -298,7 +298,7 @@ class Model_Rating extends Model } public static function getRatesForStudentsGroupByStage($discipline, $group, $stage) { - $sql = 'CALL `GetRatesForGroupByStage`(:discipline, :group, :stage)'; + $sql = 'SELECT * FROM GetRatesForGroupByStage(:discipline, :group, :stage)'; return DB::query(Database::SELECT, $sql) ->parameters([ ':discipline' => $discipline, @@ -309,7 +309,7 @@ class Model_Rating extends Model /** @return Database_RESULT Database_Result for SELECT queries */ public static function getRatesForGroupAll($group, $semester) { - $sql = 'CALL `GetRatesForGroupAll`(:group, :semester)'; + $sql = 'SELECT * FROM GetRatesForGroupAll(:group, :semester)'; return DB::query(Database::SELECT, $sql) ->parameters([ ':group' => $group, @@ -318,7 +318,7 @@ class Model_Rating extends Model } public static function getFinalFormInfo($discipline, $group) { - $sql = 'CALL `GetFinalFormInfo`(:discipline, :group)'; + $sql = 'SELECT * FROM GetFinalFormInfo(:discipline, :group)'; return DB::query(Database::SELECT, $sql) ->parameters([ ':discipline' => $discipline, @@ -332,7 +332,7 @@ class Model_Rating extends Model * @return int */ public static function count(Model_Discipline $discipline) { - $sql = 'SELECT `Discipline_CountRatings`(:discipline) AS `res`'; + $sql = 'SELECT * FROM Discipline_CountRatings(:discipline) AS "res"'; $res = DB::query(Database::SELECT, $sql) ->param(':discipline', $discipline->ID) ->execute(); @@ -341,7 +341,7 @@ class Model_Rating extends Model } public static function getHistory($discipline) { - $sql = 'CALL `GetRatesHistory`(:discipline)'; + $sql = 'SELECT * FROM GetRatesHistory(:discipline)'; return DB::query(Database::SELECT, $sql) ->param(':discipline', $discipline) ->execute(); diff --git a/~dev_rating/application/classes/Model/RecordBook.php b/~dev_rating/application/classes/Model/RecordBook.php index 6a51b97e1853be34b409f9f7bbc48b812b1bdddb..5ae3000942e4786bb23602273ab45e635bda982a 100644 --- a/~dev_rating/application/classes/Model/RecordBook.php +++ b/~dev_rating/application/classes/Model/RecordBook.php @@ -25,7 +25,7 @@ class Model_RecordBook extends Model_Container { protected function getRawData($id) { - $sql = 'CALL `RecordBook_GetInfo`(:id)'; + $sql = 'SELECT * FROM RecordBook_GetInfo(:id)'; $info = DB::query(Database::SELECT, $sql) ->param(':id', $id)->execute(); @@ -40,7 +40,7 @@ class Model_RecordBook extends Model_Container } protected function create() { - $sql = 'SELECT `RecordBook_Bind`(ExternalID, StudentID, PlanID) AS `ID`'; + $sql = 'SELECT * FROM RecordBook_Bind(ExternalID, StudentID, PlanID) AS "ID"'; $this->data[self::$ID_FIELD] = DB::query(Database::SELECT, $sql) ->parameters($this->data) ->execute()->get('ID'); @@ -54,7 +54,7 @@ class Model_RecordBook extends Model_Container } public static function withExternalID($extid) { - $sql = 'SELECT `RecordBook_GetIDFromExternalID`(:ExtID) AS `ID`'; + $sql = 'SELECT * FROM RecordBook_GetIDFromExternalID(:ExtID) AS "ID"'; $res = DB::query(Database::SELECT, $sql) ->param(':ExtID', $extid) ->execute()->get('ID'); @@ -66,7 +66,7 @@ class Model_RecordBook extends Model_Container $semesterID = $semesterID ?: User::instance()->SemesterID; $recordBookID = $this->ID; - $sql = 'CALL `Student_GetDisciplines`(:recordBookID, :semesterID)'; + $sql = 'SELECT * FROM Student_GetDisciplines(:recordBookID, :semesterID)'; $query = DB::query(Database::SELECT, $sql) ->param(':recordBookID', $recordBookID) ->param(':semesterID', $semesterID) @@ -84,7 +84,7 @@ class Model_RecordBook extends Model_Container $semesterID = $semesterID ?: User::instance()->SemesterID; $recordBookID = $this->ID; - $sql = 'CALL `Student_GetTeachersList`(:recordBookID, :semesterID, :loadAll)'; + $sql = 'SELECT * FROM Student_GetTeachersList(:recordBookID, :semesterID, :loadAll)'; $result = DB::query(Database::SELECT, $sql) ->param(':recordBookID', $recordBookID) ->param(':semesterID', $semesterID) @@ -101,11 +101,11 @@ class Model_RecordBook extends Model_Container public function update($data) { $updatedData = array_merge(['ExternalID' => null], $this->data, $data); - $sql = 'SELECT `RecordBook_ChangeInfo`(ID, ExternalID, StudentID, PlanID) AS `ErrorCode`'; + $sql = 'SELECT * FROM RecordBook_ChangeInfo(ID, ExternalID, StudentID, PlanID) AS "ErrorCode"'; $res = (int)DB::query(Database::SELECT, $sql) ->parameters($updatedData) - ->execute()->get('ErrorCode'); + ->execute()->get('"ErrorCode"'); if ($res < 0) { throw new Database_Exception('RecordBook update failed!'); } @@ -122,7 +122,7 @@ class Model_RecordBook extends Model_Container */ public function setState($group, $state="common", $semesterID = null) { $semesterID = $semesterID ?: User::instance()->SemesterID; - $sql = 'SELECT `ControlStudentGroup`(:id, :group, :state, :semesterID) AS Result'; + $sql = 'SELECT * FROM ControlStudentGroup(:id, :group, :state, :semesterID) AS Result'; DB::query(Database::SELECT, $sql) ->param(':id', $this->ID) diff --git a/~dev_rating/application/classes/Model/Roles.php b/~dev_rating/application/classes/Model/Roles.php index da1fd243927b3e4ae4ffc5e93a3771bbc44ad383..e17f834cc67d139952513a8374227fc0d5f4d9af 100644 --- a/~dev_rating/application/classes/Model/Roles.php +++ b/~dev_rating/application/classes/Model/Roles.php @@ -8,7 +8,7 @@ class Model_Roles extends Model { public static function getAccountInfo($uID, $sID) { - $sql = 'CALL `GetFullInfo`(:pUserID, :pSemesterID)'; + $sql = 'SELECT * FROM GetFullInfo(:pUserID, :pSemesterID)'; $res = DB::query(Database::SELECT, $sql) ->parameters([ ':pUserID' => $uID, @@ -19,12 +19,12 @@ class Model_Roles extends Model } public static function getRoles() { - $sql = 'CALL `GetRoles`()'; + $sql = 'SELECT * FROM GetRoles()'; return DB::query(Database::SELECT, $sql)->execute()->as_array(); } public static function setRole($ID, $role) { - $sql = 'SELECT `SetRole`(:pID, :pRole)'; + $sql = 'SELECT * FROM SetRole(:pID, :pRole)'; $result = ''; if( DB::query(Database::SELECT, $sql) diff --git a/~dev_rating/application/classes/Model/Semesters.php b/~dev_rating/application/classes/Model/Semesters.php index 5ccd07aa4ed24e7c2d0ccaa4bc701c86a924fa06..055e86079bc7de610d91a2b90f7b5ad04ab3dc9e 100644 --- a/~dev_rating/application/classes/Model/Semesters.php +++ b/~dev_rating/application/classes/Model/Semesters.php @@ -34,7 +34,7 @@ class Model_Semesters extends Model } public static function load($id) { - $data = DB::query(Database::SELECT, 'CALL `GetSemestersInfo`(:id)') + $data = DB::query(Database::SELECT, 'SELECT * FROM GetSemestersInfo(:id)') ->param(':id', $id)->execute(); if (!$data->count()) @@ -44,7 +44,7 @@ class Model_Semesters extends Model } public static function loadAll() { - $res = DB::query(Database::SELECT, 'CALL `GetSemestersInfo`(0)')->execute(); + $res = DB::query(Database::SELECT, 'SELECT * FROM GetSemestersInfo(0)')->execute(); $list = []; foreach ($res as $semester) @@ -54,7 +54,7 @@ class Model_Semesters extends Model } public static function find($year, $semesterNum) { - $data = DB::query(Database::SELECT, 'CALL `Semester_Find`(:year, :semesterNum)') + $data = DB::query(Database::SELECT, 'SELECT * FROM Semester_Find(:year, :semesterNum)') ->param(':year', $year) ->param(':semesterNum', $semesterNum) ->execute(); diff --git a/~dev_rating/application/classes/Model/Statistics.php b/~dev_rating/application/classes/Model/Statistics.php index 10883a3dfd62b59eb70014a5f2a1091a64a84792..1550e6b7309a8a37f8ae5ac789d8c155b0c7e932 100644 --- a/~dev_rating/application/classes/Model/Statistics.php +++ b/~dev_rating/application/classes/Model/Statistics.php @@ -11,7 +11,7 @@ class Model_Statistics extends Model { public static function requests($startDate, $endDate) { - $query = 'CALL `Stats_GetSupportRequestFrequency`(:startDate, :endDate)'; + $query = 'SELECT * FROM Stats_GetSupportRequestFrequency(:startDate, :endDate)'; $stats = DB::query(Database::SELECT, $query) ->param(':startDate', $startDate) ->param(':endDate', $endDate) @@ -20,7 +20,7 @@ class Model_Statistics extends Model } public static function log_ins($startDate, $endDate) { - $query = 'CALL `Stats_GetSignInFrequency`(:startDate, :endDate)'; + $query = 'SELECT * FROM Stats_GetSignInFrequency(:startDate, :endDate)'; $stats = DB::query(Database::SELECT, $query) ->param(':startDate', $startDate) ->param(':endDate', $endDate) diff --git a/~dev_rating/application/classes/Model/Student.php b/~dev_rating/application/classes/Model/Student.php index 0e04cc9e66506aaf937d602cc75187df0d47d0a7..24177084db80dccd63c017a5fdb57363af22ab6c 100644 --- a/~dev_rating/application/classes/Model/Student.php +++ b/~dev_rating/application/classes/Model/Student.php @@ -30,7 +30,7 @@ class Model_Student extends Model_Container { protected function getRawData($id) { $this->data[self::$ID_FIELD] = $id; - $sql = 'CALL `Student_GetInfo`(:id)'; + $sql = 'SELECT * FROM Student_GetInfo(:id)'; $info = DB::query(Database::SELECT, $sql) ->param(':id', $this->ID)->execute(); @@ -46,7 +46,7 @@ class Model_Student extends Model_Container } public function getRecordBooks() { - $sql = 'CALL `Student_GetRecordBooks`(:id)'; + $sql = 'SELECT * FROM Student_GetRecordBooks(:id)'; return DB::query(Database::SELECT, $sql) ->param(':id', $this->ID)->execute()->as_array(); } @@ -56,7 +56,7 @@ class Model_Student extends Model_Container } protected function create() { - $sql = 'SELECT `CreateOrAddStudent`(ExternalID, LastName, FirstName, SecondName) AS `ID`'; + $sql = 'SELECT * FROM CreateOrAddStudent(ExternalID, LastName, FirstName, SecondName) AS "ID"'; $this->data[self::$ID_FIELD] = DB::query(Database::SELECT, $sql) ->parameters($this->data) ->execute()->get('ID'); @@ -64,7 +64,7 @@ class Model_Student extends Model_Container public function update() { $updatedData = array_merge(['ExternalID' => null], $this->getRawData($this->ID), $this->data); - $sql = 'SELECT `Student_ChangeInfo`(ID, ExternalID, LastName, FirstName, SecondName) AS `Success`'; + $sql = 'SELECT * FROM Student_ChangeInfo(ID, ExternalID, LastName, FirstName, SecondName) AS "Success"'; $success = DB::query(Database::SELECT, $sql) ->parameters($updatedData) ->execute()->get('Success'); @@ -77,7 +77,7 @@ class Model_Student extends Model_Container if (!$semesterID) $semesterID = Model_System::$SemesterID; - $sql = 'SELECT `CreateStudentEx`(:last, :first, :second, :grade, :group, :degree, :spec, :faculty, :code, :semester) AS `UserID`;'; + $sql = 'SELECT * FROM CreateStudentEx(:last, :first, :second, :grade, :group, :degree, :spec, :faculty, :code, :semester) AS "UserID"'; $response = DB::query(Database::SELECT, $sql) ->parameters([ ':last' => trim($lastName), @@ -100,7 +100,7 @@ class Model_Student extends Model_Container * @return integer */ public static function withExternalID($extid) { - $sql = 'SELECT `Student_GetIDFromExternalID`(:ExtID) AS `ID`'; + $sql = 'SELECT * FROM Student_GetIDFromExternalID(:ExtID) AS "ID"'; $res = DB::query(Database::SELECT, $sql) ->param(':ExtID', $extid) ->execute()->get('ID'); @@ -112,7 +112,7 @@ class Model_Student extends Model_Container $semesterID = $semesterID ?: User::instance()->SemesterID; $recordBookID = $recordBookID ?: User::instance()->RecordBookID; - $sql = 'CALL `Student_GetDisciplines`(:recordBookID, :semesterID)'; + $sql = 'SELECT * FROM Student_GetDisciplines(:recordBookID, :semesterID)'; $query = DB::query(Database::SELECT, $sql) ->param(':recordBookID', $recordBookID) ->param(':semesterID', $semesterID) @@ -130,7 +130,7 @@ class Model_Student extends Model_Container $semesterID = $semesterID ?: User::instance()->SemesterID; $recordBookID = $recordBookID ?: User::instance()->RecordBookID; - $sql = 'CALL `Student_GetTeachersList`(:recordBookID, :semesterID, :loadAll)'; + $sql = 'SELECT * FROM Student_GetTeachersList(:recordBookID, :semesterID, :loadAll)'; $result = DB::query(Database::SELECT, $sql) ->param(':recordBookID', $recordBookID) ->param(':semesterID', $semesterID) @@ -161,7 +161,7 @@ class Model_Student extends Model_Container public function toAcademicLeave($semesterID = null) { $semesterID = $semesterID ?: User::instance()->SemesterID; throw new InvalidArgumentException('Supply recordbook id instead of student id!'); - $sql = 'SELECT `ControlStudentGroup`(:id, -1, "leave", :semesterID)'; + $sql = 'SELECT * FROM ControlStudentGroup(:id, -1, "leave", :semesterID)'; DB::query(Database::SELECT, $sql) @@ -180,7 +180,7 @@ class Model_Student extends Model_Container public function setState($group, $state="common", $semesterID = null) { $semesterID = $semesterID ?: User::instance()->SemesterID;; throw new InvalidArgumentException('Supply recordbook id instead of student id!'); - $sql = 'SELECT `ControlStudentGroup`(:id, :group, :state, :semesterID) AS Result'; + $sql = 'SELECT * FROM ControlStudentGroup(:id, :group, :state, :semesterID) AS Result'; DB::query(Database::SELECT, $sql) ->param(':id', $this->ID) diff --git a/~dev_rating/application/classes/Model/Students.php b/~dev_rating/application/classes/Model/Students.php index 0e36b4a3d882e09ccbce48e37de750d264edcd74..b124acaecc68c4531b31e5d6a8e147430c4bd461 100644 --- a/~dev_rating/application/classes/Model/Students.php +++ b/~dev_rating/application/classes/Model/Students.php @@ -4,7 +4,7 @@ class Model_Students extends Model { /** @return Model_Student[] */ public static function ofDiscipline(Model_Discipline $discipline) { - $sql = 'CALL `Discipline_GetStudents`(:id)'; + $sql = 'SELECT * FROM Discipline_GetStudents(:id)'; $result = DB::query(Database::SELECT, $sql) ->param(':id', $discipline->ID) ->execute(); @@ -26,7 +26,7 @@ class Model_Students extends Model public static function getGradeID($gradeNum, $degree) { $degree = Database::instance()->escape($degree); - $sql = 'SELECT `GetGradeID`(:gradeNum, :degree) AS `ID`'; + $sql = 'SELECT * FROM GetGradeID(:gradeNum, :degree) AS "ID"'; return DB::query(Database::SELECT, $sql) ->param(':grade', $gradeNum) ->param(':degree', $degree) @@ -34,7 +34,7 @@ class Model_Students extends Model } public static function search($facultyID, $gradeID, $groupID, $disciplineID, $name) { - $sql = 'CALL `SearchStudents`(:grade, :group, :faculty, :name, :discipline)'; + $sql = 'SELECT * FROM SearchStudents(:grade, :group, :faculty, :name, :discipline)'; return DB::query(Database::SELECT, $sql) ->parameters([ ':name' => $name, @@ -50,7 +50,7 @@ class Model_Students extends Model $words = [$words]; $words += ['', '', '']; - $sql = 'CALL `GetStudents`(:faculty, :grade, :group, :semester, :word1, :word2, :word3)'; + $sql = 'SELECT * FROM GetStudents(:faculty, :grade, :group, :semester, :word1, :word2, :word3)'; return DB::query(Database::SELECT, $sql) ->parameters([ ':word1' => $words[0], diff --git a/~dev_rating/application/classes/Model/Subject.php b/~dev_rating/application/classes/Model/Subject.php index b7fa868f63c4999eec56d5c26b31e59f0fdfddf9..c067a52790085b4320c542c01fb3977c0417b324 100644 --- a/~dev_rating/application/classes/Model/Subject.php +++ b/~dev_rating/application/classes/Model/Subject.php @@ -36,7 +36,7 @@ class Model_Subject } public static function createOrUpdate($name, $abbr, $facultyID, $extID=null) { - $sql = 'SELECT `Subject_Create`(:faculty, :name, :abbr, :extID) AS `Num`'; + $sql = 'SELECT * FROM Subject_Create(:faculty, :name, :abbr, :extID) AS "Num"'; $res = DB::query(Database::SELECT, $sql) ->parameters([ ':faculty' => $facultyID, @@ -49,7 +49,7 @@ class Model_Subject } public static function withExternalID($extID, $name, $abbr, $facultyID) { - $sql = 'SELECT `Subject_GetByExternalID`(:extID) AS `ID`'; + $sql = 'SELECT * FROM Subject_GetByExternalID(:extID) AS "ID"'; $id = DB::query(Database::SELECT, $sql) ->param(':extID', $extID) ->execute()->get('ID'); diff --git a/~dev_rating/application/classes/Model/Support.php b/~dev_rating/application/classes/Model/Support.php index b728e620e8c0684389d173afcc6e7b8d704eed4d..03a68cb51413458ea0177dde479e4be95d80d751 100644 --- a/~dev_rating/application/classes/Model/Support.php +++ b/~dev_rating/application/classes/Model/Support.php @@ -4,7 +4,7 @@ class Model_Support extends Model { // return request ID public static function createRequest($accountID, $title, $description, $hasImg = false) { - $sql = 'SELECT `CreateRequest`(:account, :title, :description, :hasImg) AS Num'; + $sql = 'SELECT * FROM CreateRequest(:account, :title, :description, :hasImg) AS Num'; return DB::query(Database::SELECT, $sql) ->param(':account', (int) $accountID) ->param(':description', $description) @@ -15,7 +15,7 @@ class Model_Support extends Model // returns status code public static function updateRequest($requestID, $title, $description) { - $sql = 'SELECT `UpdateRequest`(:requestID, :title, :description) AS Num'; + $sql = 'SELECT * FROM UpdateRequest(:requestID, :title, :description) AS Num'; return DB::query(Database::SELECT, $sql) ->param(':requestID', (int) $requestID) ->param(':description', $description) @@ -24,7 +24,7 @@ class Model_Support extends Model } public static function getRequests($userID, $offset = 0, $count = 1000, $statusFilter = 'all') { - $sql = 'CALL `GetRequests`(:offset, :count, :account, :filter)'; + $sql = 'SELECT * FROM GetRequests(:offset, :count, :account, :filter)'; return DB::query(Database::SELECT, $sql) ->param(':account', $userID) ->param(':offset', $offset) @@ -34,14 +34,14 @@ class Model_Support extends Model } public static function getNumberOfRequests($statusFilter) { - $sql = 'CALL `RequestsNum` (:filter)'; + $sql = 'SELECT * FROM RequestsNum(:filter)'; return DB::query(Database::SELECT, $sql) ->param(':filter', $statusFilter) ->execute()->get('Num'); } public static function setStatus($requestID, $status) { - $sql = 'SELECT `SetRequestStatus`(:requestID, :status) AS Num'; + $sql = 'SELECT * FROM SetRequestStatus(:requestID, :status) AS Num'; return DB::query(Database::SELECT, $sql) ->param(':requestID', (int) $requestID) ->param(':status', $status) diff --git a/~dev_rating/application/classes/Model/Teacher.php b/~dev_rating/application/classes/Model/Teacher.php index 00aaa9dee8546eb5e7fc29b7a9f90b444a17eabf..492bc123fda9a54c8b9f6d368f8fa6168d19c20e 100644 --- a/~dev_rating/application/classes/Model/Teacher.php +++ b/~dev_rating/application/classes/Model/Teacher.php @@ -30,7 +30,7 @@ class Model_Teacher extends Model_Container protected function getRawData($id) { - $sql = 'CALL `Teacher_GetInfo`(:id)'; + $sql = 'SELECT * FROM Teacher_GetInfo(:id)'; $info = DB::query(Database::SELECT, $sql) ->param(':id', $id)->execute(); @@ -49,14 +49,14 @@ class Model_Teacher extends Model_Container } public static function withExternalID($extid) { - $sql = 'SELECT `Teacher_GetIDFromExternalID`(:ExtID) AS `ID`'; + $sql = 'SELECT * FROM Teacher_GetIDFromExternalID(:ExtID) AS "ID"'; return (int)DB::query(Database::SELECT, $sql) ->param(':ExtID', $extid) ->execute()->get('ID'); } public static function withINILA($extid) { - $sql = 'SELECT `Teacher_GetIDFromINILA`(:ExtID) AS `ID`'; + $sql = 'SELECT * FROM Teacher_GetIDFromINILA(:ExtID) AS "ID"'; return (int)DB::query(Database::SELECT, $sql) ->param(':ExtID', $extid) ->execute()->get('ID'); @@ -64,15 +64,15 @@ class Model_Teacher extends Model_Container protected function create() { if ( isset($this->data['ExternalID']) ) { - $sql = 'SELECT `Teacher_CreateActivated`(LastName, FirstName, SecondName, JobPositionID, FacultyID, DepID, - ExternalID, INILA) AS `ID`'; + $sql = 'SELECT * FROM Teacher_CreateActivated(LastName, FirstName, SecondName, JobPositionID, FacultyID, DepID, + ExternalID, INILA) AS "ID"'; $this->data[self::$ID_FIELD] = DB::query(Database::SELECT, $sql) ->parameters($this->data) ->execute()->get('ID'); } else { - $sql = 'SELECT `Teacher_Create`(LastName, FirstName, SecondName, JobPositionID, DepID, - ActivationCode) AS `ID`'; + $sql = 'SELECT * FROM Teacher_Create(LastName, FirstName, SecondName, JobPositionID, DepID, + ActivationCode) AS "ID"'; $this->data[self::$ID_FIELD] = DB::query(Database::SELECT, $sql) ->parameters($this->data) @@ -85,7 +85,7 @@ class Model_Teacher extends Model_Container public function changeInfo($externalID, $inila, $lastName, $firstName, $secondName, $degreeID, $departmentID, $isWorking=true) { - $sql = 'SELECT `ChangeTeacherInfo`(:externalID, :inila, :id, :last, :first, :second, :degree, :department, :status) AS `Num`'; + $sql = 'SELECT * FROM ChangeTeacherInfo(:externalID, :inila, :id, :last, :first, :second, :degree, :department, :status) AS "Num"'; $res = DB::query(Database::SELECT, $sql) ->parameters([ ':externalID' => $externalID, @@ -106,7 +106,7 @@ class Model_Teacher extends Model_Container * @return Model_Discipline[] */ public function getDisciplines($semesterID) { - $sql = 'CALL `GetDisciplinesForTeacher`(:id, :semesterID)'; + $sql = 'SELECT * FROM GetDisciplinesForTeacher(:id, :semesterID)'; $query = DB::query(Database::SELECT, $sql) ->param(':semesterID', $semesterID) ->param(':id', $this->ID) @@ -127,7 +127,7 @@ class Model_Teacher extends Model_Container * -1 otherwise. */ public function getRightsForDiscipline(Model_Discipline $discipline) { - $sql = 'SELECT `GetEditRightsForTeacher`(:teacher, :discipline) AS `Num`'; + $sql = 'SELECT * FROM GetEditRightsForTeacher(:teacher, :discipline) AS "Num"'; return DB::query(Database::SELECT, $sql) ->param(':discipline', $discipline->ID) ->param(':teacher', $this->ID) @@ -135,7 +135,7 @@ class Model_Teacher extends Model_Container } public function getSimilarDisciplines($subjectID) { - $sql = 'CALL `Teacher_GetSimilarDisciplines`(:teacher, :subject)'; + $sql = 'SELECT * FROM Teacher_GetSimilarDisciplines(:teacher, :subject)'; return DB::query(Database::SELECT, $sql) ->param(':teacher', $this->ID) ->param(':subject', $subjectID) diff --git a/~dev_rating/application/classes/Model/Teachers.php b/~dev_rating/application/classes/Model/Teachers.php index 6f5f65f823d0784ee94ab8a5d7a3af0b9d7b875e..64489d28a6cd4534f7668f6baed4462e85a8925f 100644 --- a/~dev_rating/application/classes/Model/Teachers.php +++ b/~dev_rating/application/classes/Model/Teachers.php @@ -3,12 +3,12 @@ class Model_Teachers extends Model { public static function getJobPositions() { - $sql = 'CALL `JobPositions_Get`()'; + $sql = 'SELECT * FROM JobPositions_Get()'; return DB::query(Database::SELECT, $sql)->execute()->as_array(); } public static function ofFaculty($facultyID) { - $sql = 'CALL `GetTeachers`(:faculty, :department)'; + $sql = 'SELECT * FROM GetTeachers(:faculty, :department)'; return DB::query(Database::SELECT, $sql) ->param(':faculty', $facultyID) ->param(':department', 0) @@ -16,7 +16,7 @@ class Model_Teachers extends Model } public static function ofDepartment($departmentID) { - $sql = 'CALL `GetTeachers`(:faculty, :department)'; + $sql = 'SELECT * FROM GetTeachers(:faculty, :department)'; return DB::query(Database::SELECT, $sql) ->param(':department', $departmentID) ->param(':faculty', 0) @@ -29,7 +29,7 @@ class Model_Teachers extends Model $words = [$words]; $words += ['', '', '']; - $sql = 'CALL `SearchTeachers`(:faculty, :department, :word1, :word2, :word3, :discipline)'; + $sql = 'SELECT * FROM SearchTeachers(:faculty, :department, :word1, :word2, :word3, :discipline)'; return DB::query(Database::SELECT, $sql) ->parameters([ ':word1' => $words[0], @@ -42,7 +42,7 @@ class Model_Teachers extends Model } public static function searchTeacherNew($facultyID, $departmentID, $last, $first, $second, $disciplineID) { - $sql = 'CALL `SearchTeacherNew`(:faculty, :department, :last, :first, :second, :discipline)'; + $sql = 'SELECT * FROM SearchTeacherNew(:faculty, :department, :last, :first, :second, :discipline)'; return DB::query(Database::SELECT, $sql) ->parameters([ ':faculty' => $facultyID,