From 300e667c192d90409435c7743c4d075166db7346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Mon, 23 Nov 2015 16:34:58 +0100 Subject: [PATCH] Version 15.44.3 --- sql/swad.sql | 3 +- swad_changelog.h | 6 ++- swad_database.c | 2 +- swad_user.c | 96 ++++++++++++++++++++++++++++-------------------- 4 files changed, 64 insertions(+), 43 deletions(-) diff --git a/sql/swad.sql b/sql/swad.sql index 227d9e508..b13e0ea88 100644 --- a/sql/swad.sql +++ b/sql/swad.sql @@ -43,7 +43,8 @@ CREATE TABLE IF NOT EXISTS admin ( UsrCod INT NOT NULL, Scope ENUM('Sys','Ins','Ctr','Deg') NOT NULL, Cod INT NOT NULL, - UNIQUE INDEX(UsrCod,Scope,Cod)); + UNIQUE INDEX(UsrCod,Scope,Cod), + INDEX(Scope,Cod)); -- -- Table ann_seen: stores users who have seen global announcements -- diff --git a/swad_changelog.h b/swad_changelog.h index 6cdf8cd82..7b5c36807 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -111,11 +111,15 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.44.2 (2015/11/23)" +#define Log_PLATFORM_VERSION "SWAD 15.44.3 (2015/11/23)" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1 /* + Version 15.44.3: Nov 23, 2015 Improvement of speed in list of administrators. (187839 lines) + 1 change necessary in database: +ALTER TABLE admin ADD INDEX (Scope,Cod); + Version 15.44.2: Nov 23, 2015 Improvement of speed in list of administrators. (187819 lines) Version 15.44.1: Nov 23, 2015 Fixed bug in list of administrators. (187809 lines) Version 15.44: Nov 23, 2015 Changes in list of institution, centre and degree administrators. (187788 lines) diff --git a/swad_database.c b/swad_database.c index 607b30ae1..1df2b20b9 100644 --- a/swad_database.c +++ b/swad_database.c @@ -171,7 +171,7 @@ mysql> DESCRIBE admin; "UsrCod INT NOT NULL," "Scope ENUM('Sys','Ins','Ctr','Deg') NOT NULL," "Cod INT NOT NULL," - "UNIQUE INDEX(UsrCod,Scope,Cod))"); + "UNIQUE INDEX(UsrCod,Scope,Cod),INDEX (Scope,Cod))"); /***** Table ann_seen *****/ /* diff --git a/swad_user.c b/swad_user.c index 78a0f90bd..c16fc850c 100644 --- a/swad_user.c +++ b/swad_user.c @@ -4159,28 +4159,29 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope) break; case Sco_SCOPE_CTY: // System admins // and admins of the institutions, centres and degrees in the current country - sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data WHERE UsrCod IN (" - "SELECT UsrCod FROM admin" - " WHERE Scope='Sys'" - " UNION " - "SELECT DISTINCT admin.UsrCod FROM admin,institutions" + sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data" + " WHERE UsrCod IN " + "(SELECT UsrCod FROM admin" + " WHERE Scope='Sys')" + " OR UsrCod IN " + "(SELECT admin.UsrCod FROM admin,institutions" " WHERE admin.Scope='Ins'" " AND admin.Cod=institutions.InsCod" - " AND institutions.CtyCod='%ld'" - " UNION " - "SELECT DISTINCT admin.UsrCod FROM admin,centres,institutions" + " AND institutions.CtyCod='%ld')" + " OR UsrCod IN " + "(SELECT admin.UsrCod FROM admin,centres,institutions" " WHERE admin.Scope='Ctr'" " AND admin.Cod=centres.CtrCod" " AND centres.InsCod=institutions.InsCod" - " AND institutions.CtyCod='%ld'" - " UNION " - "SELECT DISTINCT admin.UsrCod FROM admin,degrees,centres,institutions" + " AND institutions.CtyCod='%ld')" + " OR UsrCod IN " + "(SELECT admin.UsrCod FROM admin,degrees,centres,institutions" " WHERE admin.Scope='Deg'" " AND admin.Cod=degrees.DegCod" " AND degrees.CtrCod=centres.CtrCod" " AND centres.InsCod=institutions.InsCod" - " AND institutions.CtyCod='%ld'" - ") ORDER BY Surname1,Surname2,FirstName,UsrCod", + " AND institutions.CtyCod='%ld')" + " ORDER BY Surname1,Surname2,FirstName,UsrCod", Gbl.CurrentCty.Cty.CtyCod, Gbl.CurrentCty.Cty.CtyCod, Gbl.CurrentCty.Cty.CtyCod); @@ -4188,22 +4189,25 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope) case Sco_SCOPE_INS: // System admins, // admins of the current institution, // and admins of the centres and degrees in the current institution - sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data WHERE UsrCod IN (" - "SELECT DISTINCT UsrCod FROM admin" - " WHERE Scope='Sys' OR " - " (Scope='Ins' AND Cod='%ld')" - " UNION " - "SELECT DISTINCT admin.UsrCod FROM admin,centres" + sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data" + " WHERE UsrCod IN " + "(SELECT UsrCod FROM admin" + " WHERE Scope='Sys')" + " OR UsrCod IN " + "(SELECT UsrCod FROM admin" + " WHERE Scope='Ins' AND Cod='%ld')" + " OR UsrCod IN " + "(SELECT admin.UsrCod FROM admin,centres" " WHERE admin.Scope='Ctr'" " AND admin.Cod=centres.CtrCod" - " AND centres.InsCod='%ld'" - " UNION " - "SELECT DISTINCT admin.UsrCod FROM admin,degrees,centres" + " AND centres.InsCod='%ld')" + " OR UsrCod IN " + "(SELECT admin.UsrCod FROM admin,degrees,centres" " WHERE admin.Scope='Deg'" " AND admin.Cod=degrees.DegCod" " AND degrees.CtrCod=centres.CtrCod" - " AND centres.InsCod='%ld'" - ") ORDER BY Surname1,Surname2,FirstName,UsrCod", + " AND centres.InsCod='%ld')" + " ORDER BY Surname1,Surname2,FirstName,UsrCod", Gbl.CurrentIns.Ins.InsCod, Gbl.CurrentIns.Ins.InsCod, Gbl.CurrentIns.Ins.InsCod); @@ -4212,30 +4216,42 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope) // admins of the current institution, // admins and the current centre, // and admins of the degrees in the current centre - sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data WHERE UsrCod IN (" - "SELECT DISTINCT UsrCod FROM admin" - " WHERE Scope='Sys' OR " - " (Scope='Ins' AND Cod='%ld') OR" - " (Scope='Ctr' AND Cod='%ld')" - " UNION " - "SELECT DISTINCT admin.UsrCod FROM admin,degrees" + sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data" + " WHERE UsrCod IN " + "(SELECT UsrCod FROM admin" + " WHERE Scope='Sys')" + " OR UsrCod IN " + "(SELECT UsrCod FROM admin" + " WHERE Scope='Ins' AND Cod='%ld')" + " OR UsrCod IN " + "(SELECT UsrCod FROM admin" + " WHERE Scope='Ctr' AND Cod='%ld')" + " OR UsrCod IN " + "(SELECT admin.UsrCod FROM admin,degrees" " WHERE admin.Scope='Deg'" " AND admin.Cod=degrees.DegCod" - " AND degrees.CtrCod='%ld'" - ") ORDER BY Surname1,Surname2,FirstName,UsrCod", + " AND degrees.CtrCod='%ld')" + " ORDER BY Surname1,Surname2,FirstName,UsrCod", Gbl.CurrentIns.Ins.InsCod, Gbl.CurrentCtr.Ctr.CtrCod, Gbl.CurrentCtr.Ctr.CtrCod); break; case Sco_SCOPE_DEG: // System admins // and admins of the current institution, centre or degree - sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data WHERE UsrCod IN (" - "SELECT DISTINCT UsrCod FROM admin" - " WHERE Scope='Sys' OR " - " (Scope='Ins' AND Cod='%ld') OR" - " (Scope='Ctr' AND Cod='%ld') OR" - " (Scope='Deg' AND Cod='%ld')" - ") ORDER BY Surname1,Surname2,FirstName,UsrCod", + sprintf (Query,"SELECT UsrCod,'Y',Sex FROM usr_data" + " WHERE UsrCod IN " + "(SELECT UsrCod FROM admin" + " WHERE Scope='Sys')" + " OR UsrCod IN " + "(SELECT UsrCod FROM admin" + " WHERE Scope='Ins' AND Cod='%ld')" + " OR UsrCod IN " + "(SELECT UsrCod FROM admin" + " WHERE Scope='Ctr' AND Cod='%ld')" + " OR UsrCod IN " + "(SELECT UsrCod FROM admin" + " WHERE Scope='Deg' AND Cod='%ld')" + " ORDER BY Surname1,Surname2,FirstName,UsrCod", Gbl.CurrentIns.Ins.InsCod, Gbl.CurrentCtr.Ctr.CtrCod, Gbl.CurrentDeg.Deg.DegCod);