Version 20.57: Apr 05, 2021 Optimizations in database selects.

This commit is contained in:
acanas 2021-04-05 23:45:24 +02:00
parent 444bf9c76b
commit db17a4465c
39 changed files with 651 additions and 907 deletions

View File

@ -102,14 +102,15 @@ void ID_GetListIDsFromUsrCod (struct UsrData *UsrDat)
/***** Get user's IDs from database *****/ /***** Get user's IDs from database *****/
// First the confirmed (Confirmed == 'Y') // First the confirmed (Confirmed == 'Y')
// Then the unconfirmed (Confirmed == 'N') // Then the unconfirmed (Confirmed == 'N')
NumIDs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get user's IDs", NumIDs = (unsigned)
"SELECT UsrID," // row[0] DB_QuerySELECT (&mysql_res,"can not get user's IDs",
"Confirmed" // row[1] "SELECT UsrID," // row[0]
" FROM usr_ids" "Confirmed" // row[1]
" WHERE UsrCod=%ld" " FROM usr_ids"
" ORDER BY Confirmed DESC," " WHERE UsrCod=%ld"
"UsrID", " ORDER BY Confirmed DESC,"
UsrDat->UsrCod); "UsrID",
UsrDat->UsrCod);
if (NumIDs) if (NumIDs)
{ {
/***** Allocate space for the list *****/ /***** Allocate space for the list *****/
@ -182,7 +183,6 @@ unsigned ID_GetListUsrCodsFromUsrID (struct UsrData *UsrDat,
char *SubQueryAllUsrs = NULL; char *SubQueryAllUsrs = NULL;
char SubQueryOneUsr[1 + ID_MAX_BYTES_USR_ID + 1 + 1]; char SubQueryOneUsr[1 + ID_MAX_BYTES_USR_ID + 1 + 1];
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row;
size_t MaxLength; size_t MaxLength;
unsigned NumID; unsigned NumID;
unsigned NumUsr; unsigned NumUsr;
@ -216,31 +216,31 @@ unsigned ID_GetListUsrCodsFromUsrID (struct UsrData *UsrDat,
{ {
// Get user's code if I have written the correct password // Get user's code if I have written the correct password
// or if password in database is empty (new user) // or if password in database is empty (new user)
ListUsrCods->NumUsrs = ListUsrCods->NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get user's codes", DB_QuerySELECT (&mysql_res,"can not get user's codes",
"SELECT DISTINCT(usr_ids.UsrCod)" "SELECT DISTINCT(usr_ids.UsrCod)"
" FROM usr_ids," " FROM usr_ids,"
"usr_data" "usr_data"
" WHERE usr_ids.UsrID IN (%s)" " WHERE usr_ids.UsrID IN (%s)"
"%s" "%s"
" AND usr_ids.UsrCod=usr_data.UsrCod" " AND usr_ids.UsrCod=usr_data.UsrCod"
" AND (usr_data.Password='%s'" " AND (usr_data.Password='%s'"
" OR usr_data.Password='')", " OR usr_data.Password='')",
SubQueryAllUsrs, SubQueryAllUsrs,
OnlyConfirmedIDs ? " AND usr_ids.Confirmed='Y'" : OnlyConfirmedIDs ? " AND usr_ids.Confirmed='Y'" :
"", "",
EncryptedPassword); EncryptedPassword);
} }
else else
ListUsrCods->NumUsrs = ListUsrCods->NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get user's codes", DB_QuerySELECT (&mysql_res,"can not get user's codes",
"SELECT DISTINCT(UsrCod)" "SELECT DISTINCT(UsrCod)"
" FROM usr_ids" " FROM usr_ids"
" WHERE UsrID IN (%s)" " WHERE UsrID IN (%s)"
"%s", "%s",
SubQueryAllUsrs, SubQueryAllUsrs,
OnlyConfirmedIDs ? " AND Confirmed='Y'" : OnlyConfirmedIDs ? " AND Confirmed='Y'" :
""); "");
/***** Free memory for subquery string *****/ /***** Free memory for subquery string *****/
free (SubQueryAllUsrs); free (SubQueryAllUsrs);
@ -255,11 +255,8 @@ unsigned ID_GetListUsrCodsFromUsrID (struct UsrData *UsrDat,
for (NumUsr = 0; for (NumUsr = 0;
NumUsr < ListUsrCods->NumUsrs; NumUsr < ListUsrCods->NumUsrs;
NumUsr++) NumUsr++)
{ /* Get user's code */
/***** Get user's code *****/ ListUsrCods->Lst[NumUsr] = DB_GetNextCode (mysql_res);
row = mysql_fetch_row (mysql_res);
ListUsrCods->Lst[NumUsr] = Str_ConvertStrCodToLongCod (row[0]);
}
UsrDat->UsrCod = ListUsrCods->Lst[0]; // The first user found UsrDat->UsrCod = ListUsrCods->Lst[0]; // The first user found
} }
else // ListUsrCods->NumUsrs == 0 else // ListUsrCods->NumUsrs == 0

View File

@ -102,7 +102,6 @@ void MFU_GetMFUActions (struct MFU_ListMFUActions *ListMFUActions,unsigned MaxAc
{ {
extern Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD]; extern Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD];
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows; unsigned long NumRows;
unsigned long NumRow; unsigned long NumRow;
long ActCod; long ActCod;
@ -110,7 +109,7 @@ void MFU_GetMFUActions (struct MFU_ListMFUActions *ListMFUActions,unsigned MaxAc
/***** Get most frequently used actions *****/ /***** Get most frequently used actions *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get most frequently used actions", NumRows = DB_QuerySELECT (&mysql_res,"can not get most frequently used actions",
"SELECT ActCod" // row[0] "SELECT ActCod"
" FROM act_frequent" " FROM act_frequent"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" ORDER BY Score DESC," " ORDER BY Score DESC,"
@ -122,10 +121,8 @@ void MFU_GetMFUActions (struct MFU_ListMFUActions *ListMFUActions,unsigned MaxAc
NumRow < NumRows && ListMFUActions->NumActions < MaxActionsShown; NumRow < NumRows && ListMFUActions->NumActions < MaxActionsShown;
NumRow++) NumRow++)
{ {
row = mysql_fetch_row (mysql_res); /* Get action code */
ActCod = DB_GetNextCode (mysql_res);
/* Get action code (row[0]) */
ActCod = Str_ConvertStrCodToLongCod (row[0]);
if (ActCod >= 0 && ActCod <= Act_MAX_ACTION_COD) if (ActCod >= 0 && ActCod <= Act_MAX_ACTION_COD)
if ((Action = Act_FromActCodToAction[ActCod]) >= 0) if ((Action = Act_FromActCodToAction[ActCod]) >= 0)
if (Act_GetIndexInMenu (Action) >= 0) // MFU actions must be only actions shown on menu (database could contain wrong action numbers) if (Act_GetIndexInMenu (Action) >= 0) // MFU actions must be only actions shown on menu (database could contain wrong action numbers)
@ -145,7 +142,6 @@ Act_Action_t MFU_GetMyLastActionInCurrentTab (void)
{ {
extern Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD]; extern Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD];
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumActions; unsigned NumActions;
unsigned NumAct; unsigned NumAct;
long ActCod; long ActCod;
@ -157,7 +153,7 @@ Act_Action_t MFU_GetMyLastActionInCurrentTab (void)
/***** Get my most frequently used actions *****/ /***** Get my most frequently used actions *****/
NumActions = (unsigned) NumActions = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get the most frequently used actions", DB_QuerySELECT (&mysql_res,"can not get the most frequently used actions",
"SELECT ActCod" // row[0] "SELECT ActCod"
" FROM act_frequent" " FROM act_frequent"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" ORDER BY LastClick DESC," " ORDER BY LastClick DESC,"
@ -169,10 +165,8 @@ Act_Action_t MFU_GetMyLastActionInCurrentTab (void)
NumAct < NumActions; NumAct < NumActions;
NumAct++) NumAct++)
{ {
row = mysql_fetch_row (mysql_res); /* Get action code */
ActCod = DB_GetNextCode (mysql_res);
/* Get action code (row[0]) */
ActCod = Str_ConvertStrCodToLongCod (row[0]);
if (ActCod >= 0 && ActCod <= Act_MAX_ACTION_COD) if (ActCod >= 0 && ActCod <= Act_MAX_ACTION_COD)
if ((Action = Act_FromActCodToAction[ActCod]) >= 0) if ((Action = Act_FromActCodToAction[ActCod]) >= 0)
if (Act_GetTab (Act_GetSuperAction (Action)) == Gbl.Action.Tab) if (Act_GetTab (Act_GetSuperAction (Action)) == Gbl.Action.Tab)

View File

@ -2237,7 +2237,6 @@ void Ctr_ListCtrsFound (MYSQL_RES **mysql_res,unsigned NumCtrs)
{ {
extern const char *Txt_center; extern const char *Txt_center;
extern const char *Txt_centers; extern const char *Txt_centers;
MYSQL_ROW row;
unsigned NumCtr; unsigned NumCtr;
struct Ctr_Center Ctr; struct Ctr_Center Ctr;
@ -2262,10 +2261,7 @@ void Ctr_ListCtrsFound (MYSQL_RES **mysql_res,unsigned NumCtrs)
NumCtr++) NumCtr++)
{ {
/* Get next center */ /* Get next center */
row = mysql_fetch_row (*mysql_res); Ctr.CtrCod = DB_GetNextCode (*mysql_res);
/* Get center code (row[0]) */
Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get data of center */ /* Get data of center */
Ctr_GetDataOfCenterByCod (&Ctr); Ctr_GetDataOfCenterByCod (&Ctr);

View File

@ -600,13 +600,14 @@ TODO: Salvador Romero Cort
TODO: FIX BUG, URGENT! En las fechas como parámetro Dat_WriteParamsIniEndDates(), por ejemplo al cambiar el color de la gráfica de accesos por día y hora, no se respeta la zona horaria. TODO: FIX BUG, URGENT! En las fechas como parámetro Dat_WriteParamsIniEndDates(), por ejemplo al cambiar el color de la gráfica de accesos por día y hora, no se respeta la zona horaria.
*/ */
#define Log_PLATFORM_VERSION "SWAD 20.56.1 (2021-04-04)" #define Log_PLATFORM_VERSION "SWAD 20.57 (2021-04-05)"
#define CSS_FILE "swad20.45.css" #define CSS_FILE "swad20.45.css"
#define JS_FILE "swad20.6.2.js" #define JS_FILE "swad20.6.2.js"
/* /*
TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename CENTRE to CENTER in help wiki.
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
Version 20.57: Apr 05, 2021 Optimizations in database selects. (309041 lines)
Version 20.56.1: Apr 04, 2021 Optimizations in database selects. (309252 lines) Version 20.56.1: Apr 04, 2021 Optimizations in database selects. (309252 lines)
Version 20.56: Apr 04, 2021 Optimizations in database selects. (309296 lines) Version 20.56: Apr 04, 2021 Optimizations in database selects. (309296 lines)
Version 20.55: Apr 04, 2021 Optimizations in database selects. (309500 lines) Version 20.55: Apr 04, 2021 Optimizations in database selects. (309500 lines)

View File

@ -2090,7 +2090,6 @@ void Cty_ListCtysFound (MYSQL_RES **mysql_res,unsigned NumCtys)
{ {
extern const char *Txt_country; extern const char *Txt_country;
extern const char *Txt_countries; extern const char *Txt_countries;
MYSQL_ROW row;
unsigned NumCty; unsigned NumCty;
struct Cty_Countr Cty; struct Cty_Countr Cty;
@ -2115,10 +2114,7 @@ void Cty_ListCtysFound (MYSQL_RES **mysql_res,unsigned NumCtys)
NumCty++) NumCty++)
{ {
/* Get next country */ /* Get next country */
row = mysql_fetch_row (*mysql_res); Cty.CtyCod = DB_GetNextCode (*mysql_res);
/* Get country code (row[0]) */
Cty.CtyCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get data of country */ /* Get data of country */
Cty_GetDataOfCountryByCod (&Cty); Cty_GetDataOfCountryByCod (&Cty);

View File

@ -2136,7 +2136,6 @@ void Deg_ListDegsFound (MYSQL_RES **mysql_res,unsigned NumDegs)
{ {
extern const char *Txt_degree; extern const char *Txt_degree;
extern const char *Txt_degrees; extern const char *Txt_degrees;
MYSQL_ROW row;
unsigned NumDeg; unsigned NumDeg;
struct Deg_Degree Deg; struct Deg_Degree Deg;
@ -2161,10 +2160,7 @@ void Deg_ListDegsFound (MYSQL_RES **mysql_res,unsigned NumDegs)
NumDeg++) NumDeg++)
{ {
/* Get next degree */ /* Get next degree */
row = mysql_fetch_row (*mysql_res); Deg.DegCod = DB_GetNextCode (*mysql_res);
/* Get degree code (row[0]) */
Deg.DegCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get data of degree */ /* Get data of degree */
Deg_GetDataOfDegreeByCod (&Deg); Deg_GetDataOfDegreeByCod (&Deg);

View File

@ -1375,7 +1375,7 @@ int Ind_GetNumIndicatorsCrsFromDB (long CrsCod)
/***** Get number of indicators of a course from database *****/ /***** Get number of indicators of a course from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get number of indicators", if (DB_QuerySELECT (&mysql_res,"can not get number of indicators",
"SELECT NumIndicators" "SELECT NumIndicators" // row[0]
" FROM crs_courses" " FROM crs_courses"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
CrsCod)) CrsCod))
@ -1492,10 +1492,10 @@ static unsigned long Ind_GetNumFilesInDocumZonesOfCrsFromDB (long CrsCod)
/***** Get number of files in document zones of a course from database *****/ /***** Get number of files in document zones of a course from database *****/
DB_QuerySELECT (&mysql_res,"can not get the number of files", DB_QuerySELECT (&mysql_res,"can not get the number of files",
"SELECT" "SELECT"
" (SELECT COALESCE(SUM(NumFiles),0)" " (SELECT COALESCE(SUM(NumFiles),0)" // row[0]
" FROM brw_sizes" " FROM brw_sizes"
" WHERE FileBrowser=%u AND Cod=%ld) +" " WHERE FileBrowser=%u AND Cod=%ld) +"
" (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)" " (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)" // row[0]
" FROM grp_types," " FROM grp_types,"
"grp_groups," "grp_groups,"
"brw_sizes" "brw_sizes"
@ -1535,10 +1535,10 @@ static unsigned long Ind_GetNumFilesInShareZonesOfCrsFromDB (long CrsCod)
/***** Get number of files in document zones of a course from database *****/ /***** Get number of files in document zones of a course from database *****/
DB_QuerySELECT (&mysql_res,"can not get the number of files", DB_QuerySELECT (&mysql_res,"can not get the number of files",
"SELECT" "SELECT"
" (SELECT COALESCE(SUM(NumFiles),0)" " (SELECT COALESCE(SUM(NumFiles),0)" // row[0]
" FROM brw_sizes" " FROM brw_sizes"
" WHERE FileBrowser=%u AND Cod=%ld) +" " WHERE FileBrowser=%u AND Cod=%ld) +"
" (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)" " (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)" // row[0]
" FROM grp_types," " FROM grp_types,"
"grp_groups," "grp_groups,"
"brw_sizes" "brw_sizes"
@ -1577,7 +1577,7 @@ static unsigned long Ind_GetNumFilesInAssigZonesOfCrsFromDB (long CrsCod)
/***** Get number of files in document zones of a course from database *****/ /***** Get number of files in document zones of a course from database *****/
DB_QuerySELECT (&mysql_res,"can not get the number of files", DB_QuerySELECT (&mysql_res,"can not get the number of files",
"SELECT COALESCE(SUM(NumFiles),0)" "SELECT COALESCE(SUM(NumFiles),0)" // row[0]
" FROM brw_sizes" " FROM brw_sizes"
" WHERE FileBrowser=%u" " WHERE FileBrowser=%u"
" AND Cod=%ld", " AND Cod=%ld",
@ -1610,7 +1610,7 @@ static unsigned long Ind_GetNumFilesInWorksZonesOfCrsFromDB (long CrsCod)
/***** Get number of files in document zones of a course from database *****/ /***** Get number of files in document zones of a course from database *****/
DB_QuerySELECT (&mysql_res,"can not get the number of files", DB_QuerySELECT (&mysql_res,"can not get the number of files",
"SELECT COALESCE(SUM(NumFiles),0)" "SELECT COALESCE(SUM(NumFiles),0)" // row[0]
" FROM brw_sizes" " FROM brw_sizes"
" WHERE FileBrowser=%u" " WHERE FileBrowser=%u"
" AND Cod=%ld", " AND Cod=%ld",

View File

@ -537,7 +537,7 @@ bool Inf_GetIfIMustReadAnyCrsInfoInThisCrs (void)
/***** Get info types where students must read info *****/ /***** Get info types where students must read info *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get if you must read" NumRows = DB_QuerySELECT (&mysql_res,"can not get if you must read"
" any course info", " any course info",
"SELECT InfoType" "SELECT InfoType" // row[0]
" FROM crs_info_src" " FROM crs_info_src"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" AND MustBeRead='Y'" " AND MustBeRead='Y'"
@ -1467,7 +1467,7 @@ Inf_InfoSrc_t Inf_GetInfoSrcFromDB (long CrsCod,Inf_InfoType_t InfoType)
/***** Get info source for a specific type of info from database *****/ /***** Get info source for a specific type of info from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get info source", if (DB_QuerySELECT (&mysql_res,"can not get info source",
"SELECT InfoSrc" "SELECT InfoSrc" // row[0]
" FROM crs_info_src" " FROM crs_info_src"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" AND InfoType='%s'", " AND InfoType='%s'",
@ -1508,8 +1508,8 @@ void Inf_GetAndCheckInfoSrcFromDB (struct Syl_Syllabus *Syllabus,
/***** Get info source for a specific type of info from database *****/ /***** Get info source for a specific type of info from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get info source", NumRows = DB_QuerySELECT (&mysql_res,"can not get info source",
"SELECT InfoSrc," "SELECT InfoSrc," // row[0]
"MustBeRead" "MustBeRead" // row[1]
" FROM crs_info_src" " FROM crs_info_src"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" AND InfoType='%s'", " AND InfoType='%s'",
@ -1668,8 +1668,8 @@ void Inf_GetInfoTxtFromDB (long CrsCod,Inf_InfoType_t InfoType,
/***** Get info source for a specific type of course information /***** Get info source for a specific type of course information
(bibliography, FAQ, links or evaluation) from database *****/ (bibliography, FAQ, links or evaluation) from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get info text", NumRows = DB_QuerySELECT (&mysql_res,"can not get info text",
"SELECT InfoTxtHTML," "SELECT InfoTxtHTML," // row[0]
"InfoTxtMD" "InfoTxtMD" // row[1]
" FROM crs_info_txt" " FROM crs_info_txt"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" AND InfoType='%s'", " AND InfoType='%s'",

View File

@ -133,8 +133,8 @@ void Ins_SeeInsWithPendingCtrs (void)
case Rol_INS_ADM: case Rol_INS_ADM:
NumInss = (unsigned) NumInss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get institutions with pending centers", DB_QuerySELECT (&mysql_res,"can not get institutions with pending centers",
"SELECT ctr_centers.InsCod," "SELECT ctr_centers.InsCod," // row[0]
"COUNT(*)" "COUNT(*)" // row[1]
" FROM ctr_centers," " FROM ctr_centers,"
"ins_admin," "ins_admin,"
"ins_instits" "ins_instits"
@ -150,8 +150,8 @@ void Ins_SeeInsWithPendingCtrs (void)
case Rol_SYS_ADM: case Rol_SYS_ADM:
NumInss = (unsigned) NumInss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get institutions with pending centers", DB_QuerySELECT (&mysql_res,"can not get institutions with pending centers",
"SELECT ctr_centers.InsCod," "SELECT ctr_centers.InsCod," // row[0]
"COUNT(*)" "COUNT(*)" // row[1]
" FROM ctr_centers," " FROM ctr_centers,"
"ins_instits" "ins_instits"
" WHERE (ctr_centers.Status & %u)<>0" " WHERE (ctr_centers.Status & %u)<>0"
@ -899,9 +899,8 @@ void Ins_GetShortNameOfInstitution (struct Ins_Instit *Ins)
/***** 3. Slow: get short name of institution from database *****/ /***** 3. Slow: get short name of institution from database *****/
Gbl.Cache.InstitutionShrtName.InsCod = Ins->InsCod; Gbl.Cache.InstitutionShrtName.InsCod = Ins->InsCod;
if (DB_QuerySELECT (&mysql_res,"can not get the short name" if (DB_QuerySELECT (&mysql_res,"can not get the short name of an institution",
" of an institution", "SELECT ShortName" // row[0]
"SELECT ShortName"
" FROM ins_instits" " FROM ins_instits"
" WHERE InsCod=%ld", " WHERE InsCod=%ld",
Ins->InsCod) == 1) Ins->InsCod) == 1)
@ -1041,8 +1040,8 @@ void Ins_WriteSelectorOfInstitution (void)
/***** Get institutions of selected country from database *****/ /***** Get institutions of selected country from database *****/
NumInss = NumInss =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get institutions", (unsigned) DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT DISTINCT InsCod," "SELECT DISTINCT InsCod," // row[0]
"ShortName" "ShortName" // row[1]
" FROM ins_instits" " FROM ins_instits"
" WHERE CtyCod=%ld" " WHERE CtyCod=%ld"
" ORDER BY ShortName", " ORDER BY ShortName",
@ -2139,7 +2138,6 @@ void Ins_ListInssFound (MYSQL_RES **mysql_res,unsigned NumInss)
{ {
extern const char *Txt_institution; extern const char *Txt_institution;
extern const char *Txt_institutions; extern const char *Txt_institutions;
MYSQL_ROW row;
unsigned NumIns; unsigned NumIns;
struct Ins_Instit Ins; struct Ins_Instit Ins;
@ -2164,10 +2162,7 @@ void Ins_ListInssFound (MYSQL_RES **mysql_res,unsigned NumInss)
NumIns++) NumIns++)
{ {
/* Get next institution */ /* Get next institution */
row = mysql_fetch_row (*mysql_res); Ins.InsCod = DB_GetNextCode (*mysql_res);
/* Get institution code (row[0]) */
Ins.InsCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get data of institution */ /* Get data of institution */
Ins_GetDataOfInstitutionByCod (&Ins); Ins_GetDataOfInstitutionByCod (&Ins);
@ -2247,7 +2242,7 @@ bool Ins_GetIfMapIsAvailable (long InsCod)
/***** Get if any center in current institution has a coordinate set /***** Get if any center in current institution has a coordinate set
(coordinates 0, 0 means not set ==> don't show map) *****/ (coordinates 0, 0 means not set ==> don't show map) *****/
if (DB_QuerySELECT (&mysql_res,"can not get if map is available", if (DB_QuerySELECT (&mysql_res,"can not get if map is available",
"SELECT EXISTS" "SELECT EXISTS" // row[0]
"(SELECT *" "(SELECT *"
" FROM ctr_centers" " FROM ctr_centers"
" WHERE InsCod=%ld" " WHERE InsCod=%ld"

View File

@ -278,7 +278,6 @@ static void InsCfg_GetCoordAndZoom (struct Coordinates *Coord,unsigned *Zoom)
static void InsCfg_Map (void) static void InsCfg_Map (void)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row;
struct Coordinates InsAvgCoord; struct Coordinates InsAvgCoord;
unsigned Zoom; unsigned Zoom;
unsigned NumCtrs; unsigned NumCtrs;
@ -321,10 +320,7 @@ static void InsCfg_Map (void)
NumCtr++) NumCtr++)
{ {
/* Get next center */ /* Get next center */
row = mysql_fetch_row (mysql_res); Ctr.CtrCod = DB_GetNextCode (mysql_res);
/* Get center code (row[0]) */
Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get data of center */ /* Get data of center */
Ctr_GetDataOfCenterByCod (&Ctr); Ctr_GetDataOfCenterByCod (&Ctr);

View File

@ -1087,8 +1087,8 @@ bool Mai_GetEmailFromUsrCod (struct UsrData *UsrDat)
/***** Get current (last updated) user's nickname from database *****/ /***** Get current (last updated) user's nickname from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get email address", NumRows = DB_QuerySELECT (&mysql_res,"can not get email address",
"SELECT E_mail," "SELECT E_mail," // row[0]
"Confirmed" "Confirmed" // row[1]
" FROM usr_emails" " FROM usr_emails"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC" " ORDER BY CreatTime DESC"
@ -1123,43 +1123,22 @@ bool Mai_GetEmailFromUsrCod (struct UsrData *UsrDat)
long Mai_GetUsrCodFromEmail (const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]) long Mai_GetUsrCodFromEmail (const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1])
{ {
MYSQL_RES *mysql_res; /***** Trivial check 1: email should be not null ******/
MYSQL_ROW row; if (!Email)
unsigned NumUsrs; return -1L;
long UsrCod = -1L;
if (Email) /***** Trivial check 2: email should be not empty ******/
if (Email[0]) if (!Email[0])
{ return -1L;
/***** Get user's code from database *****/
/* Check if user code from table usr_emails is also in table usr_data */
NumUsrs = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get user's code",
"SELECT usr_emails.UsrCod"
" FROM usr_emails,"
"usr_data"
" WHERE usr_emails.E_mail='%s'"
" AND usr_emails.UsrCod=usr_data.UsrCod",
Email);
if (NumUsrs == 0)
/* User not found for this email ==> set user's code to void */
UsrCod = -1L;
else if (NumUsrs == 1) // One user found
{
/* Get row */
row = mysql_fetch_row (mysql_res);
/* Get user's code */ /***** Get user's code from database *****/
UsrCod = Str_ConvertStrCodToLongCod (row[0]); return DB_QuerySELECTCode ("can not get user's code",
} "SELECT usr_emails.UsrCod"
else // NumRows > 1 ==> impossible, an email can not be reapeated " FROM usr_emails,"
Lay_ShowErrorAndExit ("Internal error: email is repeated in database."); "usr_data"
" WHERE usr_emails.E_mail='%s'"
/***** Free structure that stores the query result *****/ " AND usr_emails.UsrCod=usr_data.UsrCod",
DB_FreeMySQLResult (&mysql_res); Email);
}
return UsrCod;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1829,7 +1808,7 @@ void Mai_ConfirmEmail (void)
/***** Check user's code and email /***** Check user's code and email
and get if email is already confirmed *****/ and get if email is already confirmed *****/
if (DB_QuerySELECT (&mysql_res,"can not check if email is confirmed", if (DB_QuerySELECT (&mysql_res,"can not check if email is confirmed",
"SELECT Confirmed" "SELECT Confirmed" // row[0]
" FROM usr_emails" " FROM usr_emails"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" AND E_mail='%s'", " AND E_mail='%s'",

View File

@ -181,14 +181,10 @@ void Map_GetCoordAndZoom (struct Coordinates *Coord,unsigned *Zoom,
/* Get row */ /* Get row */
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
/* Get latitude (row[0]) */ /* Get latitude (row[0]), longitude (row[1]) and maximum distance (row[2]) */
Coord->Latitude = Map_GetLatitudeFromStr (row[0]); Coord->Latitude = Map_GetLatitudeFromStr (row[0]);
/* Get longitude (row[1]) */
Coord->Longitude = Map_GetLongitudeFromStr (row[1]); Coord->Longitude = Map_GetLongitudeFromStr (row[1]);
MaxDistance = Str_GetDoubleFromStr (row[2]);
/* Get maximum distance (row[2]) */
MaxDistance = Str_GetDoubleFromStr (row[2]);
} }
else else
Coord->Latitude = Coord->Latitude =

View File

@ -770,8 +770,8 @@ static void Mch_GetAndWriteNamesOfGrpsAssociatedToMatch (const struct Mch_Match
/***** Get groups associated to a match from database *****/ /***** Get groups associated to a match from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of a match", NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of a match",
"SELECT grp_types.GrpTypName," "SELECT grp_types.GrpTypName," // row[0]
"grp_groups.GrpName" "grp_groups.GrpName" // row[1]
" FROM mch_groups," " FROM mch_groups,"
"grp_groups," "grp_groups,"
"grp_types" "grp_types"
@ -2074,7 +2074,7 @@ static void Mch_GetElapsedTimeInQuestion (const struct Mch_Match *Match,
/***** Query database *****/ /***** Query database *****/
NumRows = (unsigned) NumRows = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get elapsed time", DB_QuerySELECT (&mysql_res,"can not get elapsed time",
"SELECT ElapsedTime" "SELECT ElapsedTime" // row[0]
" FROM mch_times" " FROM mch_times"
" WHERE MchCod=%ld" " WHERE MchCod=%ld"
" AND QstInd=%u", " AND QstInd=%u",
@ -2101,7 +2101,7 @@ static void Mch_GetElapsedTimeInMatch (const struct Mch_Match *Match,
/***** Query database *****/ /***** Query database *****/
NumRows = (unsigned) NumRows = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get elapsed time", DB_QuerySELECT (&mysql_res,"can not get elapsed time",
"SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(ElapsedTime)))" "SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(ElapsedTime)))" // row[0]
" FROM mch_times" " FROM mch_times"
" WHERE MchCod=%ld", " WHERE MchCod=%ld",
Match->MchCod); Match->MchCod);
@ -3505,7 +3505,7 @@ static void Mch_ShowMatchScore (const struct Mch_Match *Match)
/***** Get maximum number of users *****/ /***** Get maximum number of users *****/
if (DB_QuerySELECT (&mysql_res,"can not get max users", if (DB_QuerySELECT (&mysql_res,"can not get max users",
"SELECT MAX(NumUsrs)" // row[1] "SELECT MAX(NumUsrs)" // row[0]
" FROM (SELECT COUNT(*) AS NumUsrs" " FROM (SELECT COUNT(*) AS NumUsrs"
" FROM mch_results" " FROM mch_results"
" WHERE MchCod=%ld" " WHERE MchCod=%ld"
@ -4115,16 +4115,17 @@ void Mch_GetQstAnsFromDB (long MchCod,long UsrCod,unsigned QstInd,
UsrAnswer->AnsInd = -1; // < 0 ==> no answer selected UsrAnswer->AnsInd = -1; // < 0 ==> no answer selected
/***** Get student's answer *****/ /***** Get student's answer *****/
NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get user's answer to a match question", NumRows = (unsigned)
"SELECT NumOpt," // row[0] DB_QuerySELECT (&mysql_res,"can not get user's answer to a match question",
"AnsInd" // row[1] "SELECT NumOpt," // row[0]
" FROM mch_answers" "AnsInd" // row[1]
" WHERE MchCod=%ld" " FROM mch_answers"
" AND UsrCod=%ld" " WHERE MchCod=%ld"
" AND QstInd=%u", " AND UsrCod=%ld"
MchCod, " AND QstInd=%u",
UsrCod, MchCod,
QstInd); UsrCod,
QstInd);
if (NumRows) // Answer found... if (NumRows) // Answer found...
{ {
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);

View File

@ -393,7 +393,6 @@ void MchRes_ShowAllMchResultsInGam (void)
static void MchRes_ListAllMchResultsInGam (struct Gam_Games *Games,long GamCod) static void MchRes_ListAllMchResultsInGam (struct Gam_Games *Games,long GamCod)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumUsrs; unsigned long NumUsrs;
unsigned long NumUsr; unsigned long NumUsr;
@ -402,7 +401,7 @@ static void MchRes_ListAllMchResultsInGam (struct Gam_Games *Games,long GamCod)
/***** Get all users who have answered any match question in this game *****/ /***** Get all users who have answered any match question in this game *****/
NumUsrs = DB_QuerySELECT (&mysql_res,"can not get users in game", NumUsrs = DB_QuerySELECT (&mysql_res,"can not get users in game",
"SELECT users.UsrCod" // row[0] "SELECT users.UsrCod"
" FROM (SELECT DISTINCT mch_results.UsrCod AS UsrCod" " FROM (SELECT DISTINCT mch_results.UsrCod AS UsrCod"
" FROM mch_results," " FROM mch_results,"
"mch_matches," "mch_matches,"
@ -418,26 +417,20 @@ static void MchRes_ListAllMchResultsInGam (struct Gam_Games *Games,long GamCod)
"usr_data.FirstName", "usr_data.FirstName",
GamCod, GamCod,
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
if (NumUsrs)
{
/***** List matches results for each user *****/
for (NumUsr = 0;
NumUsr < NumUsrs;
NumUsr++)
{
row = mysql_fetch_row (mysql_res);
/* Get match code (row[0]) */ /***** List matches results for each user *****/
if ((Gbl.Usrs.Other.UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0])) > 0) for (NumUsr = 0;
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,Usr_DONT_GET_PREFS)) NumUsr < NumUsrs;
if (Usr_CheckIfICanViewTstExaMchResult (&Gbl.Usrs.Other.UsrDat)) NumUsr++)
{ /* Get match code */
/***** Show matches results *****/ if ((Gbl.Usrs.Other.UsrDat.UsrCod = DB_GetNextCode (mysql_res)) > 0)
Gbl.Usrs.Other.UsrDat.Accepted = Usr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat); if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,Usr_DONT_GET_PREFS))
MchRes_ShowMchResults (Games,Usr_OTHER,-1L,GamCod,NULL); if (Usr_CheckIfICanViewTstExaMchResult (&Gbl.Usrs.Other.UsrDat))
} {
} /***** Show matches results *****/
} Gbl.Usrs.Other.UsrDat.Accepted = Usr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
MchRes_ShowMchResults (Games,Usr_OTHER,-1L,GamCod,NULL);
}
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res); DB_FreeMySQLResult (&mysql_res);
@ -489,7 +482,6 @@ void MchRes_ShowAllMchResultsInMch (void)
static void MchRes_ListAllMchResultsInMch (struct Gam_Games *Games,long MchCod) static void MchRes_ListAllMchResultsInMch (struct Gam_Games *Games,long MchCod)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumUsrs; unsigned long NumUsrs;
unsigned long NumUsr; unsigned long NumUsr;
@ -499,7 +491,7 @@ static void MchRes_ListAllMchResultsInMch (struct Gam_Games *Games,long MchCod)
/***** Get all users who have answered any match question in this game *****/ /***** Get all users who have answered any match question in this game *****/
NumUsrs = DB_QuerySELECT (&mysql_res,"can not get users in match", NumUsrs = DB_QuerySELECT (&mysql_res,"can not get users in match",
"SELECT users.UsrCod" "SELECT users.UsrCod"
" FROM (SELECT mch_results.UsrCod AS UsrCod" // row[0] " FROM (SELECT mch_results.UsrCod AS UsrCod"
" FROM mch_results," " FROM mch_results,"
"mch_matches," "mch_matches,"
"gam_games" "gam_games"
@ -514,26 +506,20 @@ static void MchRes_ListAllMchResultsInMch (struct Gam_Games *Games,long MchCod)
"usr_data.FirstName", "usr_data.FirstName",
MchCod, MchCod,
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
if (NumUsrs)
{
/***** List matches results for each user *****/
for (NumUsr = 0;
NumUsr < NumUsrs;
NumUsr++)
{
row = mysql_fetch_row (mysql_res);
/* Get match code (row[0]) */ /***** List matches results for each user *****/
if ((Gbl.Usrs.Other.UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0])) > 0) for (NumUsr = 0;
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,Usr_DONT_GET_PREFS)) NumUsr < NumUsrs;
if (Usr_CheckIfICanViewTstExaMchResult (&Gbl.Usrs.Other.UsrDat)) NumUsr++)
{ /* Get match code (row[0]) */
/***** Show matches results *****/ if ((Gbl.Usrs.Other.UsrDat.UsrCod = DB_GetNextCode (mysql_res)) > 0)
Gbl.Usrs.Other.UsrDat.Accepted = Usr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat); if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,Usr_DONT_GET_PREFS))
MchRes_ShowMchResults (Games,Usr_OTHER,MchCod,-1L,NULL); if (Usr_CheckIfICanViewTstExaMchResult (&Gbl.Usrs.Other.UsrDat))
} {
} /***** Show matches results *****/
} Gbl.Usrs.Other.UsrDat.Accepted = Usr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
MchRes_ShowMchResults (Games,Usr_OTHER,MchCod,-1L,NULL);
}
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res); DB_FreeMySQLResult (&mysql_res);
@ -770,7 +756,6 @@ static void MchRes_ShowMchResults (struct Gam_Games *Games,
char *GamSubQuery; char *GamSubQuery;
char *HidGamSubQuery; char *HidGamSubQuery;
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row;
struct UsrData *UsrDat; struct UsrData *UsrDat;
struct MchRes_ICanView ICanView; struct MchRes_ICanView ICanView;
unsigned NumResults; unsigned NumResults;
@ -852,25 +837,25 @@ static void MchRes_ShowMchResults (struct Gam_Games *Games,
} }
/***** Make database query *****/ /***** Make database query *****/
NumResults = NumResults = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get matches results", DB_QuerySELECT (&mysql_res,"can not get matches results",
"SELECT mch_results.MchCod" // row[0] "SELECT mch_results.MchCod"
" FROM mch_results," " FROM mch_results,"
"mch_matches," "mch_matches,"
"gam_games" "gam_games"
" WHERE mch_results.UsrCod=%ld" " WHERE mch_results.UsrCod=%ld"
"%s" // Match subquery "%s" // Match subquery
" AND mch_results.MchCod=mch_matches.MchCod" " AND mch_results.MchCod=mch_matches.MchCod"
"%s" // Games subquery "%s" // Games subquery
" AND mch_matches.GamCod=gam_games.GamCod" " AND mch_matches.GamCod=gam_games.GamCod"
"%s" // Hidden games subquery "%s" // Hidden games subquery
" AND gam_games.CrsCod=%ld" // Extra check " AND gam_games.CrsCod=%ld" // Extra check
" ORDER BY mch_matches.Title", " ORDER BY mch_matches.Title",
UsrDat->UsrCod, UsrDat->UsrCod,
MchSubQuery, MchSubQuery,
GamSubQuery, GamSubQuery,
HidGamSubQuery, HidGamSubQuery,
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
free (HidGamSubQuery); free (HidGamSubQuery);
free (GamSubQuery); free (GamSubQuery);
free (MchSubQuery); free (MchSubQuery);
@ -886,11 +871,9 @@ static void MchRes_ShowMchResults (struct Gam_Games *Games,
NumResult < NumResults; NumResult < NumResults;
NumResult++) NumResult++)
{ {
row = mysql_fetch_row (mysql_res); /* Get match code */
/* Get match code (row[0]) */
MchPrn_ResetPrint (&Print); MchPrn_ResetPrint (&Print);
if ((Print.MchCod = Str_ConvertStrCodToLongCod (row[0])) < 0) if ((Print.MchCod = DB_GetNextCode (mysql_res)) < 0)
Lay_ShowErrorAndExit ("Wrong code of match."); Lay_ShowErrorAndExit ("Wrong code of match.");
/* Get match result data */ /* Get match result data */

View File

@ -1439,7 +1439,6 @@ static unsigned long Msg_DelSomeRecOrSntMsgsUsr (const struct Msg_Messages *Mess
const char *FilterFromToSubquery) const char *FilterFromToSubquery)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long MsgNum; unsigned long MsgNum;
unsigned long NumMsgs; unsigned long NumMsgs;
long MsgCod; long MsgCod;
@ -1455,9 +1454,10 @@ static unsigned long Msg_DelSomeRecOrSntMsgsUsr (const struct Msg_Messages *Mess
MsgNum < NumMsgs; MsgNum < NumMsgs;
MsgNum++) MsgNum++)
{ {
row = mysql_fetch_row (mysql_res); MsgCod = DB_GetNextCode (mysql_res);
if (sscanf (row[0],"%ld",&MsgCod) != 1) if (MsgCod <= 0)
Lay_ShowErrorAndExit ("Wrong code of message."); Lay_ShowErrorAndExit ("Wrong code of message.");
switch (Messages->TypeOfMessages) switch (Messages->TypeOfMessages)
{ {
case Msg_RECEIVED: case Msg_RECEIVED:
@ -2861,8 +2861,8 @@ static void Msg_GetDistinctCoursesInMyMessages (struct Msg_Messages *Messages)
case Msg_RECEIVED: case Msg_RECEIVED:
NumRows = NumRows =
DB_QuerySELECT (&mysql_res,"can not get distinct courses in your messages", DB_QuerySELECT (&mysql_res,"can not get distinct courses in your messages",
"SELECT DISTINCT crs_courses.CrsCod," "SELECT DISTINCT crs_courses.CrsCod," // row[0]
"crs_courses.ShortName" "crs_courses.ShortName" // row[1]
" FROM msg_rcv," " FROM msg_rcv,"
"msg_snt," "msg_snt,"
"crs_courses" "crs_courses"
@ -2875,8 +2875,8 @@ static void Msg_GetDistinctCoursesInMyMessages (struct Msg_Messages *Messages)
case Msg_SENT: case Msg_SENT:
NumRows = NumRows =
DB_QuerySELECT (&mysql_res,"can not get distinct courses in your messages", DB_QuerySELECT (&mysql_res,"can not get distinct courses in your messages",
"SELECT DISTINCT crs_courses.CrsCod," "SELECT DISTINCT crs_courses.CrsCod," // row[0]
"crs_courses.ShortName" "crs_courses.ShortName" // row[1]
" FROM msg_snt," " FROM msg_snt,"
"crs_courses" "crs_courses"
" WHERE msg_snt.UsrCod=%ld" " WHERE msg_snt.UsrCod=%ld"
@ -3097,7 +3097,7 @@ static void Msg_GetMsgSubject (long MsgCod,char Subject[Cns_MAX_BYTES_SUBJECT +
/***** Get subject of message from database *****/ /***** Get subject of message from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get the subject of a message", if (DB_QuerySELECT (&mysql_res,"can not get the subject of a message",
"SELECT Subject" "SELECT Subject" // row[0]
" FROM msg_content" " FROM msg_content"
" WHERE MsgCod=%ld", " WHERE MsgCod=%ld",
MsgCod) == 1) // Result should have a unique row MsgCod) == 1) // Result should have a unique row
@ -3163,7 +3163,7 @@ static void Msg_GetStatusOfSentMsg (long MsgCod,bool *Expanded)
/***** Get if sent message has been replied/expanded from database *****/ /***** Get if sent message has been replied/expanded from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get if a sent message" NumRows = DB_QuerySELECT (&mysql_res,"can not get if a sent message"
" has been replied/expanded", " has been replied/expanded",
"SELECT Expanded" "SELECT Expanded" // row[0]
" FROM msg_snt" " FROM msg_snt"
" WHERE MsgCod=%ld" " WHERE MsgCod=%ld"
" AND UsrCod=%ld", " AND UsrCod=%ld",
@ -3197,9 +3197,9 @@ static void Msg_GetStatusOfReceivedMsg (long MsgCod,bool *Open,bool *Replied,boo
/***** Get if received message has been replied/expanded from database *****/ /***** Get if received message has been replied/expanded from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get if a received message" NumRows = DB_QuerySELECT (&mysql_res,"can not get if a received message"
" has been replied/expanded", " has been replied/expanded",
"SELECT Open," "SELECT Open," // row[0]
"Replied," "Replied," // row[1]
"Expanded" "Expanded" // row[2]
" FROM msg_rcv" " FROM msg_rcv"
" WHERE MsgCod=%ld" " WHERE MsgCod=%ld"
" AND UsrCod=%ld", " AND UsrCod=%ld",
@ -3427,8 +3427,8 @@ void Msg_GetNotifMessage (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
/***** Get subject of message from database *****/ /***** Get subject of message from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get subject and content" if (DB_QuerySELECT (&mysql_res,"can not get subject and content"
" of a message", " of a message",
"SELECT Subject," "SELECT Subject," // row[0]
"Content" "Content" // row[1]
" FROM msg_content" " FROM msg_content"
" WHERE MsgCod=%ld", " WHERE MsgCod=%ld",
MsgCod) == 1) // Result should have a unique row MsgCod) == 1) // Result should have a unique row
@ -3780,23 +3780,23 @@ static void Msg_WriteMsgTo (struct Msg_Messages *Messages,long MsgCod)
/***** Get recipients of a message from database *****/ /***** Get recipients of a message from database *****/
NumRecipientsKnown = NumRecipientsKnown =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get recipients of a message", (unsigned) DB_QuerySELECT (&mysql_res,"can not get recipients of a message",
"(SELECT msg_rcv.UsrCod," "(SELECT msg_rcv.UsrCod," // row[0]
"'N'," "'N'," // row[1]
"msg_rcv.Open," "msg_rcv.Open," // row[2]
"usr_data.Surname1 AS S1," "usr_data.Surname1 AS S1," // row[3]
"usr_data.Surname2 AS S2," "usr_data.Surname2 AS S2," // row[4]
"usr_data.FirstName AS FN" "usr_data.FirstName AS FN" // row[5]
" FROM msg_rcv," " FROM msg_rcv,"
"usr_data" "usr_data"
" WHERE msg_rcv.MsgCod=%ld" " WHERE msg_rcv.MsgCod=%ld"
" AND msg_rcv.UsrCod=usr_data.UsrCod)" " AND msg_rcv.UsrCod=usr_data.UsrCod)"
" UNION " " UNION "
"(SELECT msg_rcv_deleted.UsrCod," "(SELECT msg_rcv_deleted.UsrCod," // row[0]
"'Y'," "'Y'," // row[1]
"msg_rcv_deleted.Open," "msg_rcv_deleted.Open," // row[2]
"usr_data.Surname1 AS S1," "usr_data.Surname1 AS S1," // row[3]
"usr_data.Surname2 AS S2," "usr_data.Surname2 AS S2," // row[4]
"usr_data.FirstName AS FN" "usr_data.FirstName AS FN" // row[5]
" FROM msg_rcv_deleted," " FROM msg_rcv_deleted,"
"usr_data" "usr_data"
" WHERE msg_rcv_deleted.MsgCod=%ld" " WHERE msg_rcv_deleted.MsgCod=%ld"
@ -4149,8 +4149,8 @@ void Msg_ListBannedUsrs (void)
extern const char *Txt_Banned_users; extern const char *Txt_Banned_users;
extern const char *Txt_Sender_banned_click_to_unban_him; extern const char *Txt_Sender_banned_click_to_unban_him;
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; unsigned NumUsr;
unsigned NumUsr,NumUsrs; unsigned NumUsrs;
struct UsrData UsrDat; struct UsrData UsrDat;
/***** Get my banned users *****/ /***** Get my banned users *****/
@ -4182,10 +4182,8 @@ void Msg_ListBannedUsrs (void)
NumUsr <= NumUsrs; NumUsr <= NumUsrs;
NumUsr++) NumUsr++)
{ {
row = mysql_fetch_row (mysql_res); /* Get user's code */
UsrDat.UsrCod = DB_GetNextCode (mysql_res);
/* Get user's code (row[0]) */
UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get user's data from database */ /* Get user's data from database */
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS)) if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS))

View File

@ -225,7 +225,7 @@ void Net_ShowWebsAndSocialNets (const struct UsrData *UsrDat)
{ {
/***** Check if exists the web / social network for this user *****/ /***** Check if exists the web / social network for this user *****/
if (DB_QuerySELECT (&mysql_res,"can not get user's web / social network", if (DB_QuerySELECT (&mysql_res,"can not get user's web / social network",
"SELECT URL" "SELECT URL" // row[0]
" FROM usr_webs" " FROM usr_webs"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" AND Web='%s'", " AND Web='%s'",
@ -304,7 +304,7 @@ void Net_ShowFormMyWebsAndSocialNets (void)
{ {
/***** Get user's web / social network from database *****/ /***** Get user's web / social network from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get user's web / social network", if (DB_QuerySELECT (&mysql_res,"can not get user's web / social network",
"SELECT URL" "SELECT URL" // row[0]
" FROM usr_webs" " FROM usr_webs"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" AND Web='%s'", " AND Web='%s'",

View File

@ -121,7 +121,7 @@ bool Nck_GetNicknameFromUsrCod (long UsrCod,
/***** Get current (last updated) user's nickname from database *****/ /***** Get current (last updated) user's nickname from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get nickname", if (DB_QuerySELECT (&mysql_res,"can not get nickname",
"SELECT Nickname" "SELECT Nickname" // row[0]
" FROM usr_nicknames" " FROM usr_nicknames"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC" " ORDER BY CreatTime DESC"
@ -154,39 +154,27 @@ bool Nck_GetNicknameFromUsrCod (long UsrCod,
long Nck_GetUsrCodFromNickname (const char *Nickname) long Nck_GetUsrCodFromNickname (const char *Nickname)
{ {
char NickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1]; char NickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long UsrCod = -1L;
if (Nickname) /***** Trivial check 1: nickname should be not null *****/
if (Nickname[0]) if (!Nickname)
{ return -1L;
/***** Make a copy without possible starting arrobas *****/
Str_Copy (NickWithoutArr,Nickname,sizeof (NickWithoutArr) - 1);
Str_RemoveLeadingArrobas (NickWithoutArr);
/***** Get user's code from database *****/ /***** Trivial check 2: nickname should be not empty *****/
/* Check if user code from table usr_nicknames is also in table usr_data */ if (!Nickname[0])
if (DB_QuerySELECT (&mysql_res,"can not get user's code", return -1L;
"SELECT usr_nicknames.UsrCod"
" FROM usr_nicknames,"
"usr_data"
" WHERE usr_nicknames.Nickname='%s'"
" AND usr_nicknames.UsrCod=usr_data.UsrCod",
NickWithoutArr))
{
/* Get row */
row = mysql_fetch_row (mysql_res);
/* Get user's code */ /***** Make a copy without possible starting arrobas *****/
UsrCod = Str_ConvertStrCodToLongCod (row[0]); Str_Copy (NickWithoutArr,Nickname,sizeof (NickWithoutArr) - 1);
} Str_RemoveLeadingArrobas (NickWithoutArr);
/***** Free structure that stores the query result *****/ /***** Get user's code from database *****/
DB_FreeMySQLResult (&mysql_res); return DB_QuerySELECTCode ("can not get user's code",
} "SELECT usr_nicknames.UsrCod"
" FROM usr_nicknames,"
return UsrCod; "usr_data"
" WHERE usr_nicknames.Nickname='%s'"
" AND usr_nicknames.UsrCod=usr_data.UsrCod",
NickWithoutArr);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -239,13 +227,13 @@ static void Nck_ShowFormChangeUsrNickname (bool ItsMe,
HTM_SECTION_Begin (Nck_NICKNAME_SECTION_ID); HTM_SECTION_Begin (Nck_NICKNAME_SECTION_ID);
/***** Get my nicknames *****/ /***** Get my nicknames *****/
NumNicks = NumNicks = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get nicknames of a user", DB_QuerySELECT (&mysql_res,"can not get nicknames of a user",
"SELECT Nickname" "SELECT Nickname" // row[0]
" FROM usr_nicknames" " FROM usr_nicknames"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC", " ORDER BY CreatTime DESC",
UsrDat->UsrCod); UsrDat->UsrCod);
/***** Begin box *****/ /***** Begin box *****/
snprintf (StrRecordWidth,sizeof (StrRecordWidth),"%upx",Rec_RECORD_WIDTH); snprintf (StrRecordWidth,sizeof (StrRecordWidth),"%upx",Rec_RECORD_WIDTH);

View File

@ -393,11 +393,11 @@ void Not_ShowNotices (Not_Listing_t TypeNoticesListing,long HighlightNotCod)
{ {
case Not_LIST_BRIEF_NOTICES: case Not_LIST_BRIEF_NOTICES:
NumNotices = DB_QuerySELECT (&mysql_res,"can not get notices from database", NumNotices = DB_QuerySELECT (&mysql_res,"can not get notices from database",
"SELECT NotCod," "SELECT NotCod," // row[0]
"UNIX_TIMESTAMP(CreatTime) AS F," "UNIX_TIMESTAMP(CreatTime) AS F," // row[1]
"UsrCod," "UsrCod," // row[2]
"Content," "Content," // row[3]
"Status" "Status" // row[4]
" FROM not_notices" " FROM not_notices"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" AND Status=%u" " AND Status=%u"
@ -407,11 +407,11 @@ void Not_ShowNotices (Not_Listing_t TypeNoticesListing,long HighlightNotCod)
break; break;
case Not_LIST_FULL_NOTICES: case Not_LIST_FULL_NOTICES:
NumNotices = DB_QuerySELECT (&mysql_res,"can not get notices from database", NumNotices = DB_QuerySELECT (&mysql_res,"can not get notices from database",
"SELECT NotCod," "SELECT NotCod," // row[0]
"UNIX_TIMESTAMP(CreatTime) AS F," "UNIX_TIMESTAMP(CreatTime) AS F," // row[1]
"UsrCod," "UsrCod," // row[2]
"Content," "Content," // row[3]
"Status" "Status" // row[4]
" FROM not_notices" " FROM not_notices"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" ORDER BY CreatTime DESC", " ORDER BY CreatTime DESC",

View File

@ -1192,7 +1192,6 @@ void Ntf_MarkNotifFilesInGroupAsRemoved (long GrpCod)
unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod) unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRow; unsigned long NumRow;
unsigned long NumRows = 0; // Initialized to avoid warning unsigned long NumRows = 0; // Initialized to avoid warning
struct UsrData UsrDat; struct UsrData UsrDat;
@ -1229,7 +1228,7 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
break; break;
case Brw_ADMI_TCH_CRS: // Notify all teachers in course except me case Brw_ADMI_TCH_CRS: // Notify all teachers in course except me
NumRows = DB_QuerySELECT (&mysql_res,"can not get users" NumRows = DB_QuerySELECT (&mysql_res,"can not get users"
" to be notified", " to be notified",
"SELECT UsrCod" // row[0] "SELECT UsrCod" // row[0]
" FROM crs_users" " FROM crs_users"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
@ -1243,7 +1242,7 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
case Brw_ADMI_SHR_GRP: case Brw_ADMI_SHR_GRP:
case Brw_ADMI_MRK_GRP: // Notify all users in group except me case Brw_ADMI_MRK_GRP: // Notify all users in group except me
NumRows = DB_QuerySELECT (&mysql_res,"can not get users" NumRows = DB_QuerySELECT (&mysql_res,"can not get users"
" to be notified", " to be notified",
"SELECT UsrCod" // row[0] "SELECT UsrCod" // row[0]
" FROM grp_users" " FROM grp_users"
" WHERE GrpCod=%ld" " WHERE GrpCod=%ld"
@ -1253,7 +1252,7 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
break; break;
case Brw_ADMI_TCH_GRP: // Notify all teachers in group except me case Brw_ADMI_TCH_GRP: // Notify all teachers in group except me
NumRows = DB_QuerySELECT (&mysql_res,"can not get users" NumRows = DB_QuerySELECT (&mysql_res,"can not get users"
" to be notified", " to be notified",
"SELECT grp_users.UsrCod" // row[0] "SELECT grp_users.UsrCod" // row[0]
" FROM grp_users," " FROM grp_users,"
"grp_groups," "grp_groups,"
@ -1500,10 +1499,7 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
NumRow++) NumRow++)
{ {
/* Get next user */ /* Get next user */
row = mysql_fetch_row (mysql_res); UsrDat.UsrCod = DB_GetNextCode (mysql_res);
/* Get user code */
UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0]);
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS)) // Get user's data from the database if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS)) // Get user's data from the database
if ((UsrDat.NtfEvents.CreateNotif & NotifyEventMask)) // Create notification if ((UsrDat.NtfEvents.CreateNotif & NotifyEventMask)) // Create notification
@ -1573,7 +1569,6 @@ static void Ntf_UpdateMyLastAccessToNotifications (void)
void Ntf_SendPendingNotifByEMailToAllUsrs (void) void Ntf_SendPendingNotifByEMailToAllUsrs (void)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows; unsigned long NumRows;
unsigned long NumRow; unsigned long NumRow;
struct UsrData UsrDat; struct UsrData UsrDat;
@ -1608,10 +1603,7 @@ void Ntf_SendPendingNotifByEMailToAllUsrs (void)
NumRow++) NumRow++)
{ {
/* Get next user */ /* Get next user */
row = mysql_fetch_row (mysql_res); UsrDat.UsrCod = DB_GetNextCode (mysql_res);
/* Get user code */
UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get user's data */ /* Get user's data */
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS)) // Get user's data from the database if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS)) // Get user's data from the database
@ -1680,13 +1672,13 @@ static void Ntf_SendPendingNotifByEMailToOneUsr (struct UsrData *ToUsrDat,unsign
/***** Get pending notifications of this user from database ******/ /***** Get pending notifications of this user from database ******/
NumRows = DB_QuerySELECT (&mysql_res,"can not get pending notifications" NumRows = DB_QuerySELECT (&mysql_res,"can not get pending notifications"
" of a user", " of a user",
"SELECT NotifyEvent," "SELECT NotifyEvent," // row[0]
"FromUsrCod," "FromUsrCod," // row[1]
"InsCod," "InsCod," // row[2]
"CtrCod," "CtrCod," // row[3]
"DegCod," "DegCod," // row[4]
"CrsCod," "CrsCod," // row[5]
"Cod" "Cod" // row[6]
" FROM ntf_notifications" " FROM ntf_notifications"
" WHERE ToUsrCod=%ld" " WHERE ToUsrCod=%ld"
" AND (Status & %u)<>0" " AND (Status & %u)<>0"

View File

@ -129,8 +129,8 @@ static void Pho_ShowOrPrintClassPhotoDegrees (struct Pho_DegPhotos *DegPhotos,
Pho_AvgPhotoSeeOrPrint_t SeeOrPrint); Pho_AvgPhotoSeeOrPrint_t SeeOrPrint);
static void Pho_ShowOrPrintListDegrees (struct Pho_DegPhotos *DegPhotos, static void Pho_ShowOrPrintListDegrees (struct Pho_DegPhotos *DegPhotos,
Pho_AvgPhotoSeeOrPrint_t SeeOrPrint); Pho_AvgPhotoSeeOrPrint_t SeeOrPrint);
static unsigned long Pho_BuildQueryOfDegrees (Pho_HowOrderDegrees_t HowOrderDegrees, static unsigned long Pho_QueryDegrees (Pho_HowOrderDegrees_t HowOrderDegrees,
MYSQL_RES **mysql_res); MYSQL_RES **mysql_res);
static void Pho_GetNumStdsInDegree (long DegCod,Usr_Sex_t Sex,int *NumStds,int *NumStdsWithPhoto); static void Pho_GetNumStdsInDegree (long DegCod,Usr_Sex_t Sex,int *NumStds,int *NumStdsWithPhoto);
static void Pho_UpdateDegStats (long DegCod,Usr_Sex_t Sex,unsigned NumStds,unsigned NumStdsWithPhoto,long TimeToComputeAvgPhoto); static void Pho_UpdateDegStats (long DegCod,Usr_Sex_t Sex,unsigned NumStds,unsigned NumStdsWithPhoto,long TimeToComputeAvgPhoto);
static void Pho_ShowDegreeStat (int NumStds,int NumStdsWithPhoto); static void Pho_ShowDegreeStat (int NumStds,int NumStdsWithPhoto);
@ -932,7 +932,7 @@ unsigned Pho_UpdateMyClicksWithoutPhoto (void)
/***** Get number of clicks without photo from database *****/ /***** Get number of clicks without photo from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get number of clicks" NumRows = DB_QuerySELECT (&mysql_res,"can not get number of clicks"
" without photo", " without photo",
"SELECT NumClicks" "SELECT NumClicks" // row[0]
" FROM pho_clicks_without_photo" " FROM pho_clicks_without_photo"
" WHERE UsrCod=%ld", " WHERE UsrCod=%ld",
Gbl.Usrs.Me.UsrDat.UsrCod); Gbl.Usrs.Me.UsrDat.UsrCod);
@ -1417,79 +1417,43 @@ void Pho_CalcPhotoDegree (void)
static long Pho_GetDegWithAvgPhotoLeastRecentlyUpdated (void) static long Pho_GetDegWithAvgPhotoLeastRecentlyUpdated (void)
{ {
MYSQL_RES *mysql_res; long DegCod;
MYSQL_ROW row;
unsigned long NumRows = 0;
long DegCod = -1L;
/***** Delete all the degrees in sta_degrees table not present in degrees table *****/ /***** Delete all the degrees in sta_degrees table not present in degrees table *****/
Pho_RemoveObsoleteStatDegrees (); Pho_RemoveObsoleteStatDegrees ();
/***** 1. If a degree is not in table of computed degrees, /***** 1. If a degree is not in table of computed degrees,
choose it as least recently updated *****/ choose it as least recently updated *****/
/* Get one degree with students not yet computed */ DegCod = DB_QuerySELECTCode ("can not get degrees",
NumRows = "SELECT DISTINCT deg_degrees.DegCod"
DB_QuerySELECT (&mysql_res,"can not get degrees", " FROM deg_degrees,"
"SELECT DISTINCT deg_degrees.DegCod" // row[0] "crs_courses,"
" FROM deg_degrees," "crs_users"
"crs_courses," " WHERE deg_degrees.DegCod=crs_courses.DegCod"
"crs_users" " AND crs_courses.CrsCod=crs_users.CrsCod"
" WHERE deg_degrees.DegCod=crs_courses.DegCod" " AND crs_users.Role=%u"
" AND crs_courses.CrsCod=crs_users.CrsCod" " AND deg_degrees.DegCod NOT IN"
" AND crs_users.Role=%u" " (SELECT DISTINCT DegCod"
" AND deg_degrees.DegCod NOT IN" " FROM sta_degrees)"
" (SELECT DISTINCT DegCod" " LIMIT 1",
" FROM sta_degrees)" (unsigned) Rol_STD);
" LIMIT 1",
(unsigned) Rol_STD);
/* If number of rows is 1, then get the degree code */
if (NumRows == 1)
{
/* Get row */
row = mysql_fetch_row (mysql_res);
/* Get degree code (row[0]) */
if ((DegCod = Str_ConvertStrCodToLongCod (row[0])) < 0)
Lay_ShowErrorAndExit ("Wrong code of degree.");
}
else // NumRows == 0
{
/* Free structure that stores the query result */
DB_FreeMySQLResult (&mysql_res);
if (DegCod <= 0)
/***** 2. If all the degrees are in table, /***** 2. If all the degrees are in table,
choose the least recently updated that has students *****/ choose the least recently updated that has students *****/
/* Get degrees from database */ DegCod = DB_QuerySELECTCode ("can not get degrees",
NumRows = "SELECT sta_degrees.DegCod"
DB_QuerySELECT (&mysql_res,"can not get degrees", " FROM sta_degrees,"
"SELECT sta_degrees.DegCod" // row[0] "crs_courses,"
" FROM sta_degrees," "crs_users"
"crs_courses," " WHERE sta_degrees.TimeAvgPhoto<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)"
"crs_users" " AND sta_degrees.DegCod=crs_courses.DegCod"
" WHERE sta_degrees.TimeAvgPhoto<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)" " AND crs_courses.CrsCod=crs_users.CrsCod"
" AND sta_degrees.DegCod=crs_courses.DegCod" " AND crs_users.Role=%u"
" AND crs_courses.CrsCod=crs_users.CrsCod" " ORDER BY sta_degrees.TimeAvgPhoto"
" AND crs_users.Role=%u" " LIMIT 1",
" ORDER BY sta_degrees.TimeAvgPhoto" Cfg_MIN_TIME_TO_RECOMPUTE_AVG_PHOTO,
" LIMIT 1", (unsigned) Rol_STD);
Cfg_MIN_TIME_TO_RECOMPUTE_AVG_PHOTO,
(unsigned) Rol_STD);
/* If number of rows is 1, then get the degree code */
if (NumRows == 1)
{
/* Get row */
row = mysql_fetch_row (mysql_res);
/* Get degree code (row[0]) */
if ((DegCod = Str_ConvertStrCodToLongCod (row[0])) < 0)
Lay_ShowErrorAndExit ("Wrong code of degree.");
}
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
return DegCod; return DegCod;
} }
@ -1521,7 +1485,7 @@ static long Pho_GetTimeAvgPhotoWasComputed (long DegCod)
/***** Get last time an average photo was computed from database *****/ /***** Get last time an average photo was computed from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get last time" NumRows = DB_QuerySELECT (&mysql_res,"can not get last time"
" an average photo was computed", " an average photo was computed",
"SELECT MIN(UNIX_TIMESTAMP(TimeAvgPhoto))" "SELECT MIN(UNIX_TIMESTAMP(TimeAvgPhoto))" // row[0]
" FROM sta_degrees" " FROM sta_degrees"
" WHERE DegCod=%ld", " WHERE DegCod=%ld",
DegCod); DegCod);
@ -2149,7 +2113,6 @@ static void Pho_ShowOrPrintClassPhotoDegrees (struct Pho_DegPhotos *DegPhotos,
Pho_AvgPhotoSeeOrPrint_t SeeOrPrint) Pho_AvgPhotoSeeOrPrint_t SeeOrPrint)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumDeg; unsigned long NumDeg;
unsigned long NumDegs; unsigned long NumDegs;
struct Deg_Degree Deg; struct Deg_Degree Deg;
@ -2159,7 +2122,7 @@ static void Pho_ShowOrPrintClassPhotoDegrees (struct Pho_DegPhotos *DegPhotos,
bool TRIsOpen = false; bool TRIsOpen = false;
/***** Get degrees from database *****/ /***** Get degrees from database *****/
NumDegs = Pho_BuildQueryOfDegrees (DegPhotos->HowOrderDegrees,&mysql_res); NumDegs = Pho_QueryDegrees (DegPhotos->HowOrderDegrees,&mysql_res);
if (NumDegs) // Degrees with students found if (NumDegs) // Degrees with students found
{ {
@ -2174,10 +2137,7 @@ static void Pho_ShowOrPrintClassPhotoDegrees (struct Pho_DegPhotos *DegPhotos,
NumDeg++) NumDeg++)
{ {
/***** Get next degree *****/ /***** Get next degree *****/
row = mysql_fetch_row (mysql_res); if ((Deg.DegCod = DB_GetNextCode (mysql_res)) < 0)
/* Get degree code (row[0]) */
if ((Deg.DegCod = Str_ConvertStrCodToLongCod (row[0])) < 0)
Lay_ShowErrorAndExit ("Wrong code of degree."); Lay_ShowErrorAndExit ("Wrong code of degree.");
/* Get data of degree */ /* Get data of degree */
@ -2243,7 +2203,7 @@ static void Pho_ShowOrPrintListDegrees (struct Pho_DegPhotos *DegPhotos,
Usr_Sex_t Sex; Usr_Sex_t Sex;
/***** Get degrees from database *****/ /***** Get degrees from database *****/
NumDegs = Pho_BuildQueryOfDegrees (DegPhotos->HowOrderDegrees,&mysql_res); NumDegs = Pho_QueryDegrees (DegPhotos->HowOrderDegrees,&mysql_res);
if (NumDegs) // Degrees with students found if (NumDegs) // Degrees with students found
{ {
@ -2333,8 +2293,8 @@ static void Pho_ShowOrPrintListDegrees (struct Pho_DegPhotos *DegPhotos,
/****** Build a query to get the degrees ordered by different criteria *******/ /****** Build a query to get the degrees ordered by different criteria *******/
/*****************************************************************************/ /*****************************************************************************/
static unsigned long Pho_BuildQueryOfDegrees (Pho_HowOrderDegrees_t HowOrderDegrees, static unsigned long Pho_QueryDegrees (Pho_HowOrderDegrees_t HowOrderDegrees,
MYSQL_RES **mysql_res) MYSQL_RES **mysql_res)
{ {
unsigned long NumDegs = 0; // Initialized to avoid warning unsigned long NumDegs = 0; // Initialized to avoid warning
@ -2401,8 +2361,8 @@ static void Pho_GetNumStdsInDegree (long DegCod,Usr_Sex_t Sex,int *NumStds,int *
/***** Get the number of students in a degree from database *****/ /***** Get the number of students in a degree from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get the number of students" NumRows = DB_QuerySELECT (&mysql_res,"can not get the number of students"
" in a degree", " in a degree",
"SELECT NumStds," "SELECT NumStds," // row[0]
"NumStdsWithPhoto" "NumStdsWithPhoto" // row[1]
" FROM sta_degrees" " FROM sta_degrees"
" WHERE DegCod=%ld" " WHERE DegCod=%ld"
" AND Sex='%s'", " AND Sex='%s'",

View File

@ -365,10 +365,10 @@ void Plc_GetListPlaces (struct Plc_Places *Places)
/***** Get places from database *****/ /***** Get places from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get places", NumRows = DB_QuerySELECT (&mysql_res,"can not get places",
"(SELECT plc_places.PlcCod," "(SELECT plc_places.PlcCod," // row[0]
"plc_places.ShortName," "plc_places.ShortName," // row[1]
"plc_places.FullName," "plc_places.FullName," // row[2]
"COUNT(*) AS NumCtrs" "COUNT(*) AS NumCtrs" // row[3]
" FROM plc_places," " FROM plc_places,"
"ctr_centers" "ctr_centers"
" WHERE plc_places.InsCod=%ld" " WHERE plc_places.InsCod=%ld"

View File

@ -822,17 +822,18 @@ void Prf_GetUsrFigures (long UsrCod,struct UsrFigures *UsrFigures)
unsigned NumRows; unsigned NumRows;
/***** Get user's figures from database *****/ /***** Get user's figures from database *****/
NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get user's figures", NumRows = (unsigned)
"SELECT UNIX_TIMESTAMP(FirstClickTime)," // row[0] DB_QuerySELECT (&mysql_res,"can not get user's figures",
"DATEDIFF(NOW(),FirstClickTime)+1," // row[1] "SELECT UNIX_TIMESTAMP(FirstClickTime)," // row[0]
"NumClicks," // row[2] "DATEDIFF(NOW(),FirstClickTime)+1," // row[1]
"NumSocPub," // row[3] "NumClicks," // row[2]
"NumFileViews," // row[4] "NumSocPub," // row[3]
"NumForPst," // row[5] "NumFileViews," // row[4]
"NumMsgSnt" // row[6] "NumForPst," // row[5]
" FROM usr_figures" "NumMsgSnt" // row[6]
" WHERE UsrCod=%ld", " FROM usr_figures"
UsrCod); " WHERE UsrCod=%ld",
UsrCod);
if (NumRows) if (NumRows)
{ {
/***** Get user's figures *****/ /***** Get user's figures *****/
@ -1057,11 +1058,9 @@ static void Prf_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod)
/***** Get first click from log table *****/ /***** Get first click from log table *****/
if (DB_QuerySELECT (&mysql_res,"can not get user's first click", if (DB_QuerySELECT (&mysql_res,"can not get user's first click",
"SELECT UNIX_TIMESTAMP(" "SELECT UNIX_TIMESTAMP((SELECT MIN(ClickTime)"
"(SELECT MIN(ClickTime)" " FROM log"
" FROM log" " WHERE UsrCod=%ld))",
" WHERE UsrCod=%ld)"
")",
UsrCod)) UsrCod))
{ {
/* Get first click */ /* Get first click */

View File

@ -1165,7 +1165,7 @@ static void Prg_GetItemTxtFromDB (long ItmCod,char Txt[Cns_MAX_BYTES_TEXT + 1])
/***** Get text of program item from database *****/ /***** Get text of program item from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get program item text", NumRows = DB_QuerySELECT (&mysql_res,"can not get program item text",
"SELECT Txt" "SELECT Txt" // row[0]
" FROM prg_items" " FROM prg_items"
" WHERE ItmCod=%ld" " WHERE ItmCod=%ld"
" AND CrsCod=%ld", // Extra check " AND CrsCod=%ld", // Extra check

View File

@ -2318,7 +2318,7 @@ unsigned Prj_GetMyRolesInProject (long PrjCod)
Gbl.Cache.MyRolesInProject.PrjCod = PrjCod; Gbl.Cache.MyRolesInProject.PrjCod = PrjCod;
Gbl.Cache.MyRolesInProject.RolesInProject = 0; Gbl.Cache.MyRolesInProject.RolesInProject = 0;
NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get my roles in project", NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get my roles in project",
"SELECT RoleInProject" "SELECT RoleInProject" // row[0]
" FROM prj_users" " FROM prj_users"
" WHERE PrjCod=%ld" " WHERE PrjCod=%ld"
" AND UsrCod=%ld", " AND UsrCod=%ld",
@ -2847,7 +2847,6 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
"prj_projects.Title", "prj_projects.Title",
}; };
MYSQL_RES *mysql_res = NULL; // Initialized to avoid freeing when not assigned MYSQL_RES *mysql_res = NULL; // Initialized to avoid freeing when not assigned
MYSQL_ROW row;
unsigned NumUsrsInList; unsigned NumUsrsInList;
long *LstSelectedUsrCods; long *LstSelectedUsrCods;
char *SubQueryUsrs; char *SubQueryUsrs;
@ -3090,8 +3089,7 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
NumPrj++) NumPrj++)
{ {
/* Get next project code */ /* Get next project code */
row = mysql_fetch_row (mysql_res); if ((PrjCod = DB_GetNextCode (mysql_res)) < 0)
if ((PrjCod = Str_ConvertStrCodToLongCod (row[0])) < 0)
Lay_WrongProjectExit (); Lay_WrongProjectExit ();
/* Filter projects depending on faultiness */ /* Filter projects depending on faultiness */
@ -3126,31 +3124,16 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
long Prj_GetCourseOfProject (long PrjCod) long Prj_GetCourseOfProject (long PrjCod)
{ {
MYSQL_RES *mysql_res; /***** Trivial check: project code should be > 0 *****/
MYSQL_ROW row; if (PrjCod <= 0)
long CrsCod = -1L; return -1L;
if (PrjCod > 0) /***** Get course code from database *****/
{ return DB_QuerySELECTCode ("can not get project course",
/***** Get course code from database *****/ "SELECT CrsCod" // row[0]
if (DB_QuerySELECT (&mysql_res,"can not get project course", " FROM prj_projects"
"SELECT CrsCod" // row[0] " WHERE PrjCod=%ld",
" FROM prj_projects" PrjCod); // Project found...
" WHERE PrjCod=%ld",
PrjCod)) // Project found...
{
/* Get row */
row = mysql_fetch_row (mysql_res);
/* Get code of the course (row[0]) */
CrsCod = Str_ConvertStrCodToLongCod (row[0]);
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
return CrsCod;
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -202,10 +202,10 @@ void Rec_GetListRecordFieldsInCurrentCrs (void)
/***** Get fields of records in a course from database *****/ /***** Get fields of records in a course from database *****/
Gbl.Crs.Records.LstFields.Num = (unsigned) Gbl.Crs.Records.LstFields.Num = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get fields of records in a course", DB_QuerySELECT (&mysql_res,"can not get fields of records in a course",
"SELECT FieldCod," "SELECT FieldCod," // row[0]
"FieldName," "FieldName," // row[1]
"NumLines," "NumLines," // row[2]
"Visibility" "Visibility" // row[3]
" FROM crs_record_fields" " FROM crs_record_fields"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" ORDER BY FieldName", " ORDER BY FieldName",
@ -1856,7 +1856,7 @@ unsigned long Rec_GetFieldFromCrsRecord (long UsrCod,long FieldCod,MYSQL_RES **m
/***** Get the text of a field of a record from database *****/ /***** Get the text of a field of a record from database *****/
return DB_QuerySELECT (mysql_res,"can not get the text" return DB_QuerySELECT (mysql_res,"can not get the text"
" of a field of a record", " of a field of a record",
"SELECT Txt" "SELECT Txt" // row[0]
" FROM crs_records" " FROM crs_records"
" WHERE FieldCod=%ld" " WHERE FieldCod=%ld"
" AND UsrCod=%ld", " AND UsrCod=%ld",

View File

@ -1101,8 +1101,8 @@ static void Rep_GetAndWriteMyHistoricCrss (Rol_Role_t Role,
/***** Get historic courses of a user from log *****/ /***** Get historic courses of a user from log *****/
NumCrss = NumCrss =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get courses of a user", (unsigned) DB_QuerySELECT (&mysql_res,"can not get courses of a user",
"SELECT CrsCod," "SELECT CrsCod," // row[0]
"COUNT(*) AS N" "COUNT(*) AS N" // row[1]
" FROM log" " FROM log"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" AND Role=%u" " AND Role=%u"
@ -1242,8 +1242,9 @@ static void Rep_ShowMyHitsPerYear (bool AnyCourse,long CrsCod,Rol_Role_t Role,
sprintf (SubQueryRol," AND Role=%u",(unsigned) Role); sprintf (SubQueryRol," AND Role=%u",(unsigned) Role);
NumRows = DB_QuerySELECT (&mysql_res,"can not get clicks", NumRows = DB_QuerySELECT (&mysql_res,"can not get clicks",
"SELECT SQL_NO_CACHE YEAR(CONVERT_TZ(ClickTime,@@session.time_zone,'UTC')) AS Year," "SELECT SQL_NO_CACHE YEAR(CONVERT_TZ(ClickTime,@@session.time_zone,'UTC')) AS Year," // row[0]
"COUNT(*) FROM log" "COUNT(*)" // row[1]
" FROM log"
" WHERE ClickTime>=FROM_UNIXTIME(%ld)" " WHERE ClickTime>=FROM_UNIXTIME(%ld)"
" AND UsrCod=%ld" " AND UsrCod=%ld"
"%s" "%s"

View File

@ -622,7 +622,7 @@ Rol_Role_t Rol_GetRequestedRole (long UsrCod)
/***** Get requested role from database *****/ /***** Get requested role from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get requested role", if (DB_QuerySELECT (&mysql_res,"can not get requested role",
"SELECT Role" "SELECT Role" // row[0]
" FROM crs_requests" " FROM crs_requests"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" AND UsrCod=%ld", " AND UsrCod=%ld",

View File

@ -466,7 +466,7 @@ static unsigned Sch_SearchCountriesInDB (const char *RangeQuery)
/***** Query database and list institutions found *****/ /***** Query database and list institutions found *****/
NumCtys = (unsigned) NumCtys = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get countries", DB_QuerySELECT (&mysql_res,"can not get countries",
"SELECT CtyCod" // row[0] "SELECT CtyCod"
" FROM cty_countrs" " FROM cty_countrs"
" WHERE %s" " WHERE %s"
"%s" "%s"
@ -506,7 +506,7 @@ static unsigned Sch_SearchInstitutionsInDB (const char *RangeQuery)
/***** Query database and list institutions found *****/ /***** Query database and list institutions found *****/
NumInss = (unsigned) NumInss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get institutions", DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ins_instits.InsCod" // row[0] "SELECT ins_instits.InsCod"
" FROM ins_instits," " FROM ins_instits,"
"cty_countrs" "cty_countrs"
" WHERE %s" " WHERE %s"
@ -546,7 +546,7 @@ static unsigned Sch_SearchCentersInDB (const char *RangeQuery)
/***** Query database and list centers found *****/ /***** Query database and list centers found *****/
NumCtrs = (unsigned) NumCtrs = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get centers", DB_QuerySELECT (&mysql_res,"can not get centers",
"SELECT ctr_centers.CtrCod" // row[0] "SELECT ctr_centers.CtrCod"
" FROM ctr_centers," " FROM ctr_centers,"
"ins_instits," "ins_instits,"
"cty_countrs" "cty_countrs"
@ -585,7 +585,7 @@ static unsigned Sch_SearchDegreesInDB (const char *RangeQuery)
/***** Query database and list degrees found *****/ /***** Query database and list degrees found *****/
NumDegs = (unsigned) NumDegs = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get degrees", DB_QuerySELECT (&mysql_res,"can not get degrees",
"SELECT deg_degrees.DegCod" // row[0] "SELECT deg_degrees.DegCod"
" FROM deg_degrees," " FROM deg_degrees,"
"ctr_centers," "ctr_centers,"
"ins_instits," "ins_instits,"

View File

@ -437,7 +437,7 @@ void Ses_GetParamFromDB (const char *ParamName,char *ParamValue,size_t MaxBytes)
{ {
/***** Get a session parameter from database *****/ /***** Get a session parameter from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get a session parameter", NumRows = DB_QuerySELECT (&mysql_res,"can not get a session parameter",
"SELECT ParamValue" "SELECT ParamValue" // row[0]
" FROM ses_params" " FROM ses_params"
" WHERE SessionId='%s'" " WHERE SessionId='%s'"
" AND ParamName='%s'", " AND ParamName='%s'",
@ -488,7 +488,7 @@ bool Ses_GetPublicDirFromCache (const char *FullPathMediaPriv,
{ {
/***** Get temporary directory from cache *****/ /***** Get temporary directory from cache *****/
if (DB_QuerySELECT (&mysql_res,"can not get check if file is cached", if (DB_QuerySELECT (&mysql_res,"can not get check if file is cached",
"SELECT TmpPubDir" "SELECT TmpPubDir" // row[0]
" FROM brw_caches" " FROM brw_caches"
" WHERE SessionId='%s'" " WHERE SessionId='%s'"
" AND PrivPath='%s'", " AND PrivPath='%s'",

View File

@ -1789,7 +1789,7 @@ static void Sta_WriteLogComments (long LogCod)
/***** Get log comments from database *****/ /***** Get log comments from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get log comments", if (DB_QuerySELECT (&mysql_res,"can not get log comments",
"SELECT Comments" "SELECT Comments" // row[0]
" FROM log_comments" " FROM log_comments"
" WHERE LogCod=%ld", " WHERE LogCod=%ld",
LogCod)) LogCod))

View File

@ -937,7 +937,6 @@ static void Svy_GetListSurveys (struct Svy_Surveys *Surveys)
[Dat_END_TIME ] = "EndTime DESC,StartTime DESC,Title DESC", [Dat_END_TIME ] = "EndTime DESC,StartTime DESC,Title DESC",
}; };
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows; unsigned long NumRows;
unsigned NumSvy; unsigned NumSvy;
unsigned ScopesAllowed = 0; unsigned ScopesAllowed = 0;
@ -1067,12 +1066,9 @@ static void Svy_GetListSurveys (struct Svy_Surveys *Surveys)
for (NumSvy = 0; for (NumSvy = 0;
NumSvy < Surveys->Num; NumSvy < Surveys->Num;
NumSvy++) NumSvy++)
{
/* Get next survey code */ /* Get next survey code */
row = mysql_fetch_row (mysql_res); if ((Surveys->LstSvyCods[NumSvy] = DB_GetNextCode (mysql_res)) < 0)
if ((Surveys->LstSvyCods[NumSvy] = Str_ConvertStrCodToLongCod (row[0])) < 0)
Lay_ShowErrorAndExit ("Error: wrong survey code."); Lay_ShowErrorAndExit ("Error: wrong survey code.");
}
} }
else else
Surveys->Num = 0; Surveys->Num = 0;
@ -1494,7 +1490,7 @@ static void Svy_GetSurveyTxtFromDB (long SvyCod,char Txt[Cns_MAX_BYTES_TEXT + 1]
/***** Get text of survey from database *****/ /***** Get text of survey from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get survey text", NumRows = DB_QuerySELECT (&mysql_res,"can not get survey text",
"SELECT Txt" "SELECT Txt" // row[0]
" FROM svy_surveys" " FROM svy_surveys"
" WHERE SvyCod=%ld", " WHERE SvyCod=%ld",
SvyCod); SvyCod);
@ -2510,8 +2506,8 @@ static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Svy_Survey *Svy)
/***** Get groups associated to a survey from database *****/ /***** Get groups associated to a survey from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of a survey", NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of a survey",
"SELECT grp_types.GrpTypName," "SELECT grp_types.GrpTypName," // row[0]
"grp_groups.GrpName" "grp_groups.GrpName" // row[1]
" FROM svy_groups," " FROM svy_groups,"
"grp_groups," "grp_groups,"
"grp_types" "grp_types"
@ -2984,9 +2980,9 @@ static unsigned Svy_GetAnswersQst (long QstCod,MYSQL_RES **mysql_res)
/***** Get answers of a question from database *****/ /***** Get answers of a question from database *****/
NumRows = DB_QuerySELECT (mysql_res,"can not get answers of a question", NumRows = DB_QuerySELECT (mysql_res,"can not get answers of a question",
"SELECT AnsInd," "SELECT AnsInd," // row[0]
"NumUsrs," "NumUsrs," // row[1]
"Answer" "Answer" // row[2]
" FROM svy_answers" " FROM svy_answers"
" WHERE QstCod=%ld" " WHERE QstCod=%ld"
" ORDER BY AnsInd", " ORDER BY AnsInd",
@ -3223,7 +3219,7 @@ static unsigned Svy_GetQstIndFromQstCod (long QstCod)
/***** Get number of surveys with a field value from database *****/ /***** Get number of surveys with a field value from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get question index", NumRows = DB_QuerySELECT (&mysql_res,"can not get question index",
"SELECT QstInd" "SELECT QstInd" // row[0]
" FROM svy_questions" " FROM svy_questions"
" WHERE QstCod=%ld", " WHERE QstCod=%ld",
QstCod); QstCod);
@ -3256,7 +3252,7 @@ static unsigned Svy_GetNextQuestionIndexInSvy (long SvyCod)
/***** Get number of surveys with a field value from database *****/ /***** Get number of surveys with a field value from database *****/
DB_QuerySELECT (&mysql_res,"can not get last question index", DB_QuerySELECT (&mysql_res,"can not get last question index",
"SELECT MAX(QstInd)" "SELECT MAX(QstInd)" // row[0]
" FROM svy_questions" " FROM svy_questions"
" WHERE SvyCod=%ld", " WHERE SvyCod=%ld",
SvyCod); SvyCod);
@ -3809,7 +3805,6 @@ void Svy_ReceiveSurveyAnswers (void)
static void Svy_ReceiveAndStoreUserAnswersToASurvey (long SvyCod) static void Svy_ReceiveAndStoreUserAnswersToASurvey (long SvyCod)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumQst; unsigned NumQst;
unsigned NumQsts; unsigned NumQsts;
long QstCod; long QstCod;
@ -3835,11 +3830,8 @@ static void Svy_ReceiveAndStoreUserAnswersToASurvey (long SvyCod)
NumQst < NumQsts; NumQst < NumQsts;
NumQst++) NumQst++)
{ {
/* Get next answer */ /* Get next question */
row = mysql_fetch_row (mysql_res); if ((QstCod = DB_GetNextCode (mysql_res)) <= 0)
/* Get question code (row[0]) */
if ((QstCod = Str_ConvertStrCodToLongCod (row[0])) <= 0)
Lay_ShowErrorAndExit ("Error: wrong question code."); Lay_ShowErrorAndExit ("Error: wrong question code.");
/* Get possible parameter with the user's answer */ /* Get possible parameter with the user's answer */
@ -4032,16 +4024,16 @@ unsigned Svy_GetNumCrsSurveys (Hie_Lvl_Level_t Scope,unsigned *NumNotif)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
DB_QuerySELECT (&mysql_res,"can not get number of surveys", DB_QuerySELECT (&mysql_res,"can not get number of surveys",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(NumNotif)" "SUM(NumNotif)" // row[1]
" FROM svy_surveys" " FROM svy_surveys"
" WHERE Scope='%s'", " WHERE Scope='%s'",
Sco_GetDBStrFromScope (Hie_Lvl_CRS)); Sco_GetDBStrFromScope (Hie_Lvl_CRS));
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of surveys", DB_QuerySELECT (&mysql_res,"can not get number of surveys",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(svy_surveys.NumNotif)" "SUM(svy_surveys.NumNotif)" // row[1]
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
@ -4058,8 +4050,8 @@ unsigned Svy_GetNumCrsSurveys (Hie_Lvl_Level_t Scope,unsigned *NumNotif)
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of surveys", DB_QuerySELECT (&mysql_res,"can not get number of surveys",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(svy_surveys.NumNotif)" "SUM(svy_surveys.NumNotif)" // row[1]
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
@ -4074,8 +4066,8 @@ unsigned Svy_GetNumCrsSurveys (Hie_Lvl_Level_t Scope,unsigned *NumNotif)
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of surveys", DB_QuerySELECT (&mysql_res,"can not get number of surveys",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(svy_surveys.NumNotif)" "SUM(svy_surveys.NumNotif)" // row[1]
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"svy_surveys" "svy_surveys"
@ -4088,8 +4080,8 @@ unsigned Svy_GetNumCrsSurveys (Hie_Lvl_Level_t Scope,unsigned *NumNotif)
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of surveys", DB_QuerySELECT (&mysql_res,"can not get number of surveys",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(svy_surveys.NumNotif)" "SUM(svy_surveys.NumNotif)" // row[1]
" FROM crs_courses," " FROM crs_courses,"
"svy_surveys" "svy_surveys"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
@ -4100,8 +4092,8 @@ unsigned Svy_GetNumCrsSurveys (Hie_Lvl_Level_t Scope,unsigned *NumNotif)
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
DB_QuerySELECT (&mysql_res,"can not get number of surveys", DB_QuerySELECT (&mysql_res,"can not get number of surveys",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(NumNotif)" "SUM(NumNotif)" // row[1]
" FROM svy_surveys" " FROM svy_surveys"
" WHERE svy_surveys.Scope='%s'" " WHERE svy_surveys.Scope='%s'"
" AND CrsCod=%ld", " AND CrsCod=%ld",
@ -4149,7 +4141,7 @@ double Svy_GetNumQstsPerCrsSurvey (Hie_Lvl_Level_t Scope)
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
DB_QuerySELECT (&mysql_res,"can not get number of questions" DB_QuerySELECT (&mysql_res,"can not get number of questions"
" per survey", " per survey",
"SELECT AVG(NumQsts)" "SELECT AVG(NumQsts)" // row[0]
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM svy_surveys," " FROM svy_surveys,"
"svy_questions" "svy_questions"
@ -4161,7 +4153,7 @@ double Svy_GetNumQstsPerCrsSurvey (Hie_Lvl_Level_t Scope)
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of questions" DB_QuerySELECT (&mysql_res,"can not get number of questions"
" per survey", " per survey",
"SELECT AVG(NumQsts)" "SELECT AVG(NumQsts)" // row[0]
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
@ -4183,7 +4175,7 @@ double Svy_GetNumQstsPerCrsSurvey (Hie_Lvl_Level_t Scope)
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of questions" DB_QuerySELECT (&mysql_res,"can not get number of questions"
" per survey", " per survey",
"SELECT AVG(NumQsts)" "SELECT AVG(NumQsts)" // row[0]
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
@ -4203,7 +4195,7 @@ double Svy_GetNumQstsPerCrsSurvey (Hie_Lvl_Level_t Scope)
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of questions" DB_QuerySELECT (&mysql_res,"can not get number of questions"
" per survey", " per survey",
"SELECT AVG(NumQsts)" "SELECT AVG(NumQsts)" // row[0]
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
@ -4221,7 +4213,7 @@ double Svy_GetNumQstsPerCrsSurvey (Hie_Lvl_Level_t Scope)
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of questions" DB_QuerySELECT (&mysql_res,"can not get number of questions"
" per survey", " per survey",
"SELECT AVG(NumQsts)" "SELECT AVG(NumQsts)" // row[0]
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM crs_courses," " FROM crs_courses,"
"svy_surveys," "svy_surveys,"
@ -4237,7 +4229,7 @@ double Svy_GetNumQstsPerCrsSurvey (Hie_Lvl_Level_t Scope)
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
DB_QuerySELECT (&mysql_res,"can not get number of questions" DB_QuerySELECT (&mysql_res,"can not get number of questions"
" per survey", " per survey",
"SELECT AVG(NumQsts)" "SELECT AVG(NumQsts)" // row[0]
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM svy_surveys," " FROM svy_surveys,"
"svy_questions" "svy_questions"

View File

@ -224,7 +224,6 @@ static void SysCfg_GetCoordAndZoom (struct Coordinates *Coord,unsigned *Zoom)
static void SysCfg_Map (void) static void SysCfg_Map (void)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row;
struct Coordinates CtyAvgCoord; struct Coordinates CtyAvgCoord;
unsigned Zoom; unsigned Zoom;
unsigned NumCtrs; unsigned NumCtrs;
@ -266,10 +265,7 @@ static void SysCfg_Map (void)
NumCtr++) NumCtr++)
{ {
/* Get next center */ /* Get next center */
row = mysql_fetch_row (mysql_res); Ctr.CtrCod = DB_GetNextCode (mysql_res);
/* Get center code (row[0]) */
Ctr.CtrCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get data of center */ /* Get data of center */
Ctr_GetDataOfCenterByCod (&Ctr); Ctr_GetDataOfCenterByCod (&Ctr);

View File

@ -362,32 +362,19 @@ void Tag_RenameTag (void)
static long Tag_GetTagCodFromTagTxt (const char *TagTxt) static long Tag_GetTagCodFromTagTxt (const char *TagTxt)
{ {
MYSQL_RES *mysql_res; long TagCod;
MYSQL_ROW row;
unsigned long NumRows;
long TagCod = -1L; // -1 means that the tag does not exist in database
/***** Get tag code from database *****/ /***** Get tag code from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get tag", TagCod = DB_QuerySELECTCode ("can not get tag",
"SELECT TagCod" "SELECT TagCod"
" FROM tst_tags" " FROM tst_tags"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" AND TagTxt='%s'", " AND TagTxt='%s'",
Gbl.Hierarchy.Crs.CrsCod,TagTxt); Gbl.Hierarchy.Crs.CrsCod,
if (NumRows == 1) TagTxt);
{ if (TagCod <= 0)
/***** Get tag code *****/
row = mysql_fetch_row (mysql_res);
if ((TagCod = Str_ConvertStrCodToLongCod (row[0])) < 0)
Ale_CreateAlert (Ale_ERROR,NULL,
"Wrong code of tag.");
}
else if (NumRows > 1)
Ale_CreateAlert (Ale_ERROR,NULL, Ale_CreateAlert (Ale_ERROR,NULL,
"Duplicated tag."); "Wrong tag.");
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
/***** Abort on error *****/ /***** Abort on error *****/
if (Ale_GetTypeOfLastAlert () == Ale_ERROR) if (Ale_GetTypeOfLastAlert () == Ale_ERROR)

View File

@ -4008,48 +4008,27 @@ bool Tst_GetQstDataFromDB (struct Tst_Question *Question)
static long Tst_GetMedCodFromDB (long CrsCod,long QstCod,int NumOpt) static long Tst_GetMedCodFromDB (long CrsCod,long QstCod,int NumOpt)
{ {
MYSQL_RES *mysql_res; /***** Trivial check: question code should be > 0 *****/
MYSQL_ROW row; if (QstCod <= 0)
unsigned long NumRows; return -1L;
long MedCod = -1L;
if (QstCod > 0) // Existing question /***** Query depending on NumOpt *****/
{ if (NumOpt < 0)
/***** Query depending on NumOpt *****/ // Get media associated to stem
if (NumOpt < 0) return DB_QuerySELECTCode ("can not get media",
// Get media associated to stem "SELECT MedCod"
NumRows = DB_QuerySELECT (&mysql_res,"can not get media", " FROM tst_questions"
"SELECT MedCod" // row[0] " WHERE QstCod=%ld"
" FROM tst_questions" " AND CrsCod=%ld",
" WHERE QstCod=%ld" QstCod,CrsCod);
" AND CrsCod=%ld", else
QstCod,CrsCod); // Get media associated to answer
else return DB_QuerySELECTCode ("can not get media",
// Get media associated to answer "SELECT MedCod"
NumRows = DB_QuerySELECT (&mysql_res,"can not get media", " FROM tst_answers"
"SELECT MedCod" // row[0] " WHERE QstCod=%ld"
" FROM tst_answers" " AND AnsInd=%u",
" WHERE QstCod=%ld" QstCod,(unsigned) NumOpt);
" AND AnsInd=%u",
QstCod,(unsigned) NumOpt);
if (NumRows)
{
if (NumRows == 1)
{
/***** Get media code (row[0]) *****/
row = mysql_fetch_row (mysql_res);
MedCod = Str_ConvertStrCodToLongCod (row[0]);
}
else // NumRows > 1
Lay_ShowErrorAndExit ("Duplicated media in database.");
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
return MedCod;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -4555,15 +4534,14 @@ bool Tst_CheckIfQuestionExistsInDB (struct Tst_Question *Question)
NumQst++) NumQst++)
{ {
/* Get question code */ /* Get question code */
row = mysql_fetch_row (mysql_res_qst); if ((Question->QstCod = DB_GetNextCode (mysql_res_qst)) < 0)
if ((Question->QstCod = Str_ConvertStrCodToLongCod (row[0])) < 0)
Lay_ShowErrorAndExit ("Wrong code of question."); Lay_ShowErrorAndExit ("Wrong code of question.");
/* Get answers from this question */ /* Get answers from this question */
NumOptsExistingQstInDB = NumOptsExistingQstInDB =
(unsigned) DB_QuerySELECT (&mysql_res_ans,"can not get the answer" (unsigned) DB_QuerySELECT (&mysql_res_ans,"can not get the answer"
" of a question", " of a question",
"SELECT Answer" "SELECT Answer" // row[0]
" FROM tst_answers" " FROM tst_answers"
" WHERE QstCod=%ld" " WHERE QstCod=%ld"
" ORDER BY AnsInd", " ORDER BY AnsInd",
@ -5222,7 +5200,7 @@ static void Tst_RemoveMediaFromStemOfQst (long CrsCod,long QstCod)
/***** Get media code associated to stem of test question from database *****/ /***** Get media code associated to stem of test question from database *****/
NumMedia = NumMedia =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get media", (unsigned) DB_QuerySELECT (&mysql_res,"can not get media",
"SELECT MedCod" // row[0] "SELECT MedCod"
" FROM tst_questions" " FROM tst_questions"
" WHERE QstCod=%ld" " WHERE QstCod=%ld"
" AND CrsCod=%ld", // Extra check " AND CrsCod=%ld", // Extra check
@ -5361,15 +5339,15 @@ static unsigned Tst_GetNumTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t A
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(NumHits)," "SUM(NumHits)," // row[1]
"SUM(Score)" "SUM(Score)" // row[2]
" FROM tst_questions"); " FROM tst_questions");
else else
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(NumHits)," "SUM(NumHits)," // row[1]
"SUM(Score)" "SUM(Score)" // row[2]
" FROM tst_questions" " FROM tst_questions"
" WHERE AnsType='%s'", " WHERE AnsType='%s'",
Tst_StrAnswerTypesDB[AnsType]); Tst_StrAnswerTypesDB[AnsType]);
@ -5377,9 +5355,9 @@ static unsigned Tst_GetNumTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t A
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(NumHits)," "SUM(NumHits)," // row[1]
"SUM(Score)" "SUM(Score)" // row[2]
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
@ -5393,9 +5371,9 @@ static unsigned Tst_GetNumTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t A
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(NumHits)," "SUM(NumHits)," // row[1]
"SUM(Score)" "SUM(Score)" // row[2]
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
@ -5413,9 +5391,9 @@ static unsigned Tst_GetNumTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t A
case Hie_Lvl_INS: case Hie_Lvl_INS:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(NumHits)," "SUM(NumHits)," // row[1]
"SUM(Score)" "SUM(Score)" // row[2]
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
@ -5427,9 +5405,9 @@ static unsigned Tst_GetNumTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t A
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(NumHits)," "SUM(NumHits)," // row[1]
"SUM(Score)" "SUM(Score)" // row[2]
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
@ -5445,9 +5423,9 @@ static unsigned Tst_GetNumTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t A
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(NumHits)," "SUM(NumHits)," // row[1]
"SUM(Score)" "SUM(Score)" // row[2]
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"tst_questions" "tst_questions"
@ -5457,9 +5435,9 @@ static unsigned Tst_GetNumTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t A
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(NumHits)," "SUM(NumHits)," // row[1]
"SUM(Score)" "SUM(Score)" // row[2]
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"tst_questions" "tst_questions"
@ -5473,9 +5451,9 @@ static unsigned Tst_GetNumTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t A
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(NumHits)," "SUM(NumHits)," // row[1]
"SUM(Score)" "SUM(Score)" // row[2]
" FROM crs_courses," " FROM crs_courses,"
"tst_questions" "tst_questions"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
@ -5483,9 +5461,9 @@ static unsigned Tst_GetNumTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t A
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(NumHits)," "SUM(NumHits)," // row[1]
"SUM(Score)" "SUM(Score)" // row[2]
" FROM crs_courses," " FROM crs_courses,"
"tst_questions" "tst_questions"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
@ -5497,17 +5475,17 @@ static unsigned Tst_GetNumTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t A
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(NumHits)," "SUM(NumHits)," // row[1]
"SUM(Score)" "SUM(Score)" // row[2]
" FROM tst_questions" " FROM tst_questions"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(NumHits)," "SUM(NumHits)," // row[1]
"SUM(Score)" "SUM(Score)" // row[2]
" FROM tst_questions" " FROM tst_questions"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" AND AnsType='%s'", " AND AnsType='%s'",

View File

@ -138,28 +138,14 @@ unsigned Tml_DB_GetDataOfNoteByCod (long NotCod,MYSQL_RES **mysql_res)
long Tml_DB_GetPubCodOfOriginalNote (long NotCod) long Tml_DB_GetPubCodOfOriginalNote (long NotCod)
{ {
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long OriginalPubCod = -1L; // Default value
/***** Get code of publication of the original note *****/ /***** Get code of publication of the original note *****/
if (DB_QuerySELECT (&mysql_res,"can not get code of publication", return DB_QuerySELECTCode ("can not get code of publication",
"SELECT PubCod" "SELECT PubCod"
" FROM tml_pubs" " FROM tml_pubs"
" WHERE NotCod=%ld" " WHERE NotCod=%ld"
" AND PubType=%u", " AND PubType=%u",
NotCod, NotCod,
(unsigned) Tml_Pub_ORIGINAL_NOTE) == 1) (unsigned) Tml_Pub_ORIGINAL_NOTE);
{ // Result should have a unique row
/* Get code of publication (row[0]) */
row = mysql_fetch_row (mysql_res);
OriginalPubCod = Str_ConvertStrCodToLongCod (row[0]);
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
return OriginalPubCod;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -702,26 +688,13 @@ void Tml_DB_RemoveAllCommsMadeBy (long UsrCod)
static long Tml_DB_GetMedCod (const char *Table,const char *Field,long Cod) static long Tml_DB_GetMedCod (const char *Table,const char *Field,long Cod)
{ {
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long MedCod = -1L; // Default value
/***** Get code of media associated to comment *****/ /***** Get code of media associated to comment *****/
if (DB_QuerySELECT (&mysql_res,"can not get media code", return DB_QuerySELECTCode ("can not get media code",
"SELECT MedCod" // row[0] "SELECT MedCod" // row[0]
" FROM %s" " FROM %s"
" WHERE %s=%ld", " WHERE %s=%ld",
Table,Field,Cod) == 1) // Result should have a unique row Table,
{ Field,Cod);
/* Get media code */
row = mysql_fetch_row (mysql_res);
MedCod = Str_ConvertStrCodToLongCod (row[0]);
}
/* Free structure that stores the query result */
DB_FreeMySQLResult (&mysql_res);
return MedCod;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -862,26 +835,12 @@ unsigned Tml_DB_GetDataOfPubByCod (long PubCod,MYSQL_RES **mysql_res)
long Tml_DB_GetNotCodFromPubCod (long PubCod) long Tml_DB_GetNotCodFromPubCod (long PubCod)
{ {
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long NotCod = -1L; // Default value
/***** Get code of note from database *****/ /***** Get code of note from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get code of note", return DB_QuerySELECTCode ("can not get code of note",
"SELECT NotCod" "SELECT NotCod"
" FROM tml_pubs" " FROM tml_pubs"
" WHERE PubCod=%ld", " WHERE PubCod=%ld",
PubCod) == 1) // Result should have a unique row PubCod);
{
/* Get code of note */
row = mysql_fetch_row (mysql_res);
NotCod = Str_ConvertStrCodToLongCod (row[0]);
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
return NotCod;
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -1252,7 +1252,6 @@ static void Tml_Not_RemoveNote (void)
static void Tml_Not_RemoveNoteMediaAndDBEntries (struct Tml_Not_Note *Not) static void Tml_Not_RemoveNoteMediaAndDBEntries (struct Tml_Not_Note *Not)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row;
long PubCod; long PubCod;
unsigned long NumComms; unsigned long NumComms;
unsigned long NumComm; unsigned long NumComm;
@ -1268,8 +1267,7 @@ static void Tml_Not_RemoveNoteMediaAndDBEntries (struct Tml_Not_Note *Not)
NumComm++) NumComm++)
{ {
/* Get code of comment **/ /* Get code of comment **/
row = mysql_fetch_row (mysql_res); PubCod = DB_GetNextCode (mysql_res);
PubCod = Str_ConvertStrCodToLongCod (row[0]);
/* Remove media associated to comment /* Remove media associated to comment
and delete comment from database */ and delete comment from database */

View File

@ -149,9 +149,9 @@ static void Tml_Usr_GetAndShowSharersOrFavers (Tml_Usr_FavSha_t FavSha,
if (NumUsrs) if (NumUsrs)
NumFirstUsrs = NumFirstUsrs =
Tml_Usr_GetListFaversOrSharers (FavSha,Cod,UsrCod, Tml_Usr_GetListFaversOrSharers (FavSha,Cod,UsrCod,
HowManyUsrs == Tml_Usr_SHOW_FEW_USRS ? Tml_Usr_DEF_USRS_SHOWN : HowManyUsrs == Tml_Usr_SHOW_FEW_USRS ? Tml_Usr_DEF_USRS_SHOWN :
Tml_Usr_MAX_USRS_SHOWN, Tml_Usr_MAX_USRS_SHOWN,
&mysql_res); &mysql_res);
else else
NumFirstUsrs = 0; NumFirstUsrs = 0;
@ -167,8 +167,8 @@ static void Tml_Usr_GetAndShowSharersOrFavers (Tml_Usr_FavSha_t FavSha,
if (NumFirstUsrs < NumUsrs) // Not all are shown if (NumFirstUsrs < NumUsrs) // Not all are shown
/* Clickable ellipsis to show all users */ /* Clickable ellipsis to show all users */
Tml_Frm_PutFormToSeeAllFaversSharers (Action[FavSha], Tml_Frm_PutFormToSeeAllFaversSharers (Action[FavSha],
ParamFormat[FavSha],Cod, ParamFormat[FavSha],Cod,
HowManyUsrs); HowManyUsrs);
HTM_DIV_End (); HTM_DIV_End ();
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/
@ -190,7 +190,6 @@ static void Tml_Usr_ShowNumSharersOrFavers (unsigned NumUsrs)
static void Tml_Usr_ListSharersOrFavers (MYSQL_RES **mysql_res, static void Tml_Usr_ListSharersOrFavers (MYSQL_RES **mysql_res,
unsigned NumUsrs,unsigned NumFirstUsrs) unsigned NumUsrs,unsigned NumFirstUsrs)
{ {
MYSQL_ROW row;
unsigned NumUsr; unsigned NumUsr;
struct UsrData UsrDat; struct UsrData UsrDat;
@ -211,8 +210,7 @@ static void Tml_Usr_ListSharersOrFavers (MYSQL_RES **mysql_res,
NumUsr++) NumUsr++)
{ {
/***** Get user's code *****/ /***** Get user's code *****/
row = mysql_fetch_row (*mysql_res); UsrDat.UsrCod = DB_GetNextCode (*mysql_res);
UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0]);
/***** Get user's data and show user's photo *****/ /***** Get user's data and show user's photo *****/
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS)) if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS))

View File

@ -715,76 +715,86 @@ static void Tmt_FillTimeTableFromDB (struct Tmt_Timetable *Timetable,
switch (Gbl.Crs.Grps.WhichGrps) switch (Gbl.Crs.Grps.WhichGrps)
{ {
case Grp_MY_GROUPS: case Grp_MY_GROUPS:
NumRows = DB_QuerySELECT (&mysql_res,"can not get timetable", NumRows =
"SELECT tmt_courses.Weekday," DB_QuerySELECT (&mysql_res,"can not get timetable",
"TIME_TO_SEC(tmt_courses.StartTime) AS S," "SELECT tmt_courses.Weekday," // row[0]
"TIME_TO_SEC(tmt_courses.Duration) AS D," "TIME_TO_SEC(tmt_courses.StartTime) AS S," // row[1]
"tmt_courses.Info," "TIME_TO_SEC(tmt_courses.Duration) AS D," // row[2]
"tmt_courses.ClassType," "tmt_courses.Info," // row[3]
"tmt_courses.GrpCod," "tmt_courses.ClassType," // row[4]
"tmt_courses.CrsCod" "tmt_courses.GrpCod," // row[5]
" FROM tmt_courses," "tmt_courses.CrsCod" // row[6]
"crs_users" " FROM tmt_courses,"
" WHERE crs_users.UsrCod=%ld" "crs_users"
" AND tmt_courses.GrpCod=-1" " WHERE crs_users.UsrCod=%ld"
" AND tmt_courses.CrsCod=crs_users.CrsCod" " AND tmt_courses.GrpCod=-1"
" UNION DISTINCT " " AND tmt_courses.CrsCod=crs_users.CrsCod"
"SELECT tmt_courses.Weekday," " UNION DISTINCT "
"TIME_TO_SEC(tmt_courses.StartTime) AS S," "SELECT tmt_courses.Weekday," // row[0]
"TIME_TO_SEC(tmt_courses.Duration) AS D," "TIME_TO_SEC(tmt_courses.StartTime) AS S," // row[1]
"tmt_courses.Info," "TIME_TO_SEC(tmt_courses.Duration) AS D," // row[2]
"tmt_courses.ClassType," "tmt_courses.Info," // row[3]
"tmt_courses.GrpCod," "tmt_courses.ClassType," // row[4]
"tmt_courses.CrsCod" "tmt_courses.GrpCod," // row[5]
" FROM grp_users," "tmt_courses.CrsCod" // row[6]
"tmt_courses" " FROM grp_users,"
" WHERE grp_users.UsrCod=%ld" "tmt_courses"
" AND grp_users.GrpCod=tmt_courses.GrpCod" " WHERE grp_users.UsrCod=%ld"
" UNION " " AND grp_users.GrpCod=tmt_courses.GrpCod"
"SELECT Weekday," " UNION "
"TIME_TO_SEC(StartTime) AS S," "SELECT Weekday," // row[0]
"TIME_TO_SEC(Duration) AS D," "TIME_TO_SEC(StartTime) AS S," // row[1]
"Info," "TIME_TO_SEC(Duration) AS D," // row[2]
"'tutoring' AS ClassType," "Info," // row[3]
"-1 AS GrpCod," "'tutoring' AS ClassType," // row[4]
"-1 AS CrsCod" "-1 AS GrpCod," // row[5]
" FROM tmt_tutoring" "-1 AS CrsCod" // row[6]
" WHERE UsrCod=%ld" " FROM tmt_tutoring"
" ORDER BY Weekday,S,ClassType," " WHERE UsrCod=%ld"
"GrpCod,Info,D DESC,CrsCod", " ORDER BY Weekday,"
UsrCod,UsrCod,UsrCod); "S,"
"ClassType,"
"GrpCod,"
"Info,"
"D DESC,"
"CrsCod",
UsrCod,
UsrCod,
UsrCod);
break; break;
case Grp_ALL_GROUPS: case Grp_ALL_GROUPS:
NumRows = DB_QuerySELECT (&mysql_res,"can not get timetable", NumRows =
"SELECT tmt_courses.Weekday," // row[0] DB_QuerySELECT (&mysql_res,"can not get timetable",
"TIME_TO_SEC(tmt_courses.StartTime) AS S," // row[1] "SELECT tmt_courses.Weekday," // row[0]
"TIME_TO_SEC(tmt_courses.Duration) AS D," // row[2] "TIME_TO_SEC(tmt_courses.StartTime) AS S," // row[1]
"tmt_courses.Info," // row[3] "TIME_TO_SEC(tmt_courses.Duration) AS D," // row[2]
"tmt_courses.ClassType," // row[4] "tmt_courses.Info," // row[3]
"tmt_courses.GrpCod," // row[5] "tmt_courses.ClassType," // row[4]
"tmt_courses.CrsCod" // row[6] "tmt_courses.GrpCod," // row[5]
" FROM tmt_courses," "tmt_courses.CrsCod" // row[6]
"crs_users" " FROM tmt_courses,"
" WHERE crs_users.UsrCod=%ld" "crs_users"
" AND tmt_courses.CrsCod=crs_users.CrsCod" " WHERE crs_users.UsrCod=%ld"
" UNION " " AND tmt_courses.CrsCod=crs_users.CrsCod"
"SELECT Weekday," // row[0] " UNION "
"TIME_TO_SEC(StartTime) AS S," "SELECT Weekday," // row[0]
"TIME_TO_SEC(Duration) AS D," "TIME_TO_SEC(StartTime) AS S," // row[1]
"Info," "TIME_TO_SEC(Duration) AS D," // row[2]
"'tutoring' AS ClassType," "Info," // row[3]
"-1 AS GrpCod," "'tutoring' AS ClassType," // row[4]
"-1 AS CrsCod" "-1 AS GrpCod," // row[5]
" FROM tmt_tutoring" "-1 AS CrsCod" // row[6]
" WHERE UsrCod=%ld" " FROM tmt_tutoring"
" ORDER BY Weekday," " WHERE UsrCod=%ld"
"S," " ORDER BY Weekday,"
"ClassType," "S,"
"GrpCod," "ClassType,"
"Info," "GrpCod,"
"D DESC," "Info,"
"CrsCod", "D DESC,"
UsrCod,UsrCod); "CrsCod",
UsrCod,
UsrCod);
break; break;
} }
break; break;
@ -792,70 +802,73 @@ static void Tmt_FillTimeTableFromDB (struct Tmt_Timetable *Timetable,
if (Gbl.Crs.Grps.WhichGrps == Grp_ALL_GROUPS || if (Gbl.Crs.Grps.WhichGrps == Grp_ALL_GROUPS ||
Gbl.Action.Act == ActEdiCrsTT || Gbl.Action.Act == ActEdiCrsTT ||
Gbl.Action.Act == ActChgCrsTT) // If we are editing, all groups are shown Gbl.Action.Act == ActChgCrsTT) // If we are editing, all groups are shown
NumRows = DB_QuerySELECT (&mysql_res,"can not get timetable", NumRows =
"SELECT Weekday," // row[0] DB_QuerySELECT (&mysql_res,"can not get timetable",
"TIME_TO_SEC(StartTime) AS S," // row[1] "SELECT Weekday," // row[0]
"TIME_TO_SEC(Duration) AS D," // row[2] "TIME_TO_SEC(StartTime) AS S," // row[1]
"Info," // row[3] "TIME_TO_SEC(Duration) AS D," // row[2]
"ClassType," // row[4] "Info," // row[3]
"GrpCod" // row[5] "ClassType," // row[4]
" FROM tmt_courses" "GrpCod" // row[5]
" WHERE CrsCod=%ld" " FROM tmt_courses"
" ORDER BY Weekday," " WHERE CrsCod=%ld"
"S," " ORDER BY Weekday,"
"ClassType," "S,"
"GrpCod," "ClassType,"
"Info," "GrpCod,"
"D DESC", "Info,"
Gbl.Hierarchy.Crs.CrsCod); "D DESC",
Gbl.Hierarchy.Crs.CrsCod);
else else
NumRows = DB_QuerySELECT (&mysql_res,"can not get timetable", NumRows =
"SELECT tmt_courses.Weekday," // row[0] DB_QuerySELECT (&mysql_res,"can not get timetable",
"TIME_TO_SEC(tmt_courses.StartTime) AS S," // row[1] "SELECT tmt_courses.Weekday," // row[0]
"TIME_TO_SEC(tmt_courses.Duration) AS D," // row[2] "TIME_TO_SEC(tmt_courses.StartTime) AS S," // row[1]
"tmt_courses.Info," // row[3] "TIME_TO_SEC(tmt_courses.Duration) AS D," // row[2]
"tmt_courses.ClassType," // row[4] "tmt_courses.Info," // row[3]
"tmt_courses.GrpCod" // row[5] "tmt_courses.ClassType," // row[4]
" FROM tmt_courses," "tmt_courses.GrpCod" // row[5]
"crs_users" " FROM tmt_courses,"
" WHERE tmt_courses.CrsCod=%ld" "crs_users"
" AND tmt_courses.GrpCod=-1" " WHERE tmt_courses.CrsCod=%ld"
" AND crs_users.UsrCod=%ld" " AND tmt_courses.GrpCod=-1"
" AND tmt_courses.CrsCod=crs_users.CrsCod" " AND crs_users.UsrCod=%ld"
" UNION DISTINCT " " AND tmt_courses.CrsCod=crs_users.CrsCod"
"SELECT tmt_courses.Weekday," // row[0] " UNION DISTINCT "
"TIME_TO_SEC(tmt_courses.StartTime) AS S," // row[1] "SELECT tmt_courses.Weekday," // row[0]
"TIME_TO_SEC(tmt_courses.Duration) AS D," // row[2] "TIME_TO_SEC(tmt_courses.StartTime) AS S," // row[1]
"tmt_courses.Info," // row[3] "TIME_TO_SEC(tmt_courses.Duration) AS D," // row[2]
"tmt_courses.ClassType," // row[4] "tmt_courses.Info," // row[3]
"tmt_courses.GrpCod" // row[5] "tmt_courses.ClassType," // row[4]
" FROM tmt_courses," "tmt_courses.GrpCod" // row[5]
"grp_users" " FROM tmt_courses,"
" WHERE tmt_courses.CrsCod=%ld" "grp_users"
" AND grp_users.UsrCod=%ld" " WHERE tmt_courses.CrsCod=%ld"
" AND tmt_courses.GrpCod=grp_users.GrpCod" " AND grp_users.UsrCod=%ld"
" ORDER BY Weekday," " AND tmt_courses.GrpCod=grp_users.GrpCod"
"S," " ORDER BY Weekday,"
"ClassType," "S,"
"GrpCod," "ClassType,"
"Info," "GrpCod,"
"D DESC", "Info,"
Gbl.Hierarchy.Crs.CrsCod,UsrCod, "D DESC",
Gbl.Hierarchy.Crs.CrsCod,UsrCod); Gbl.Hierarchy.Crs.CrsCod,UsrCod,
Gbl.Hierarchy.Crs.CrsCod,UsrCod);
break; break;
case Tmt_TUTORING_TIMETABLE: case Tmt_TUTORING_TIMETABLE:
NumRows = DB_QuerySELECT (&mysql_res,"can not get timetable", NumRows =
"SELECT Weekday," // row[0] DB_QuerySELECT (&mysql_res,"can not get timetable",
"TIME_TO_SEC(StartTime) AS S," // row[1] "SELECT Weekday," // row[0]
"TIME_TO_SEC(Duration) AS D," // row[2] "TIME_TO_SEC(StartTime) AS S," // row[1]
"Info" // row[3] "TIME_TO_SEC(Duration) AS D," // row[2]
" FROM tmt_tutoring" "Info" // row[3]
" WHERE UsrCod=%ld" " FROM tmt_tutoring"
" ORDER BY Weekday," " WHERE UsrCod=%ld"
"S," " ORDER BY Weekday,"
"Info," "S,"
"D DESC", "Info,"
UsrCod); "D DESC",
UsrCod);
break; break;
} }

View File

@ -1766,9 +1766,9 @@ void Usr_GetMyCourses (void)
NumCrss = NumCrss =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get which courses" (unsigned) DB_QuerySELECT (&mysql_res,"can not get which courses"
" you belong to", " you belong to",
"SELECT CrsCod," "SELECT CrsCod," // row[0]
"Role," "Role," // row[1]
"DegCod" "DegCod" // row[2]
" FROM my_courses_tmp"); " FROM my_courses_tmp");
for (NumCrs = 0; for (NumCrs = 0;
NumCrs < NumCrss; NumCrs < NumCrss;
@ -2269,8 +2269,8 @@ unsigned long Usr_GetInssFromUsr (long UsrCod,long CtyCod,MYSQL_RES **mysql_res)
if (CtyCod > 0) if (CtyCod > 0)
return DB_QuerySELECT (mysql_res,"can not get the institutions" return DB_QuerySELECT (mysql_res,"can not get the institutions"
" a user belongs to", " a user belongs to",
"SELECT ins_instits.InsCod," "SELECT ins_instits.InsCod," // row[0]
"MAX(crs_users.Role)" "MAX(crs_users.Role)" // row[1]
" FROM crs_users," " FROM crs_users,"
"crs_courses," "crs_courses,"
"deg_degrees," "deg_degrees,"
@ -2288,8 +2288,8 @@ unsigned long Usr_GetInssFromUsr (long UsrCod,long CtyCod,MYSQL_RES **mysql_res)
else else
return DB_QuerySELECT (mysql_res,"can not get the ins_instits" return DB_QuerySELECT (mysql_res,"can not get the ins_instits"
" a user belongs to", " a user belongs to",
"SELECT ins_instits.InsCod," "SELECT ins_instits.InsCod," // row[0]
"MAX(crs_users.Role)" "MAX(crs_users.Role)" // row[1]
" FROM crs_users," " FROM crs_users,"
"crs_courses," "crs_courses,"
"deg_degrees," "deg_degrees,"
@ -2316,8 +2316,8 @@ unsigned long Usr_GetCtrsFromUsr (long UsrCod,long InsCod,MYSQL_RES **mysql_res)
if (InsCod > 0) if (InsCod > 0)
return DB_QuerySELECT (mysql_res,"can not check the centers" return DB_QuerySELECT (mysql_res,"can not check the centers"
" a user belongs to", " a user belongs to",
"SELECT ctr_centers.CtrCod," "SELECT ctr_centers.CtrCod," // row[0]
"MAX(crs_users.Role)" "MAX(crs_users.Role)" // row[1]
" FROM crs_users," " FROM crs_users,"
"crs_courses," "crs_courses,"
"deg_degrees," "deg_degrees,"
@ -2333,8 +2333,8 @@ unsigned long Usr_GetCtrsFromUsr (long UsrCod,long InsCod,MYSQL_RES **mysql_res)
else else
return DB_QuerySELECT (mysql_res,"can not check the centers" return DB_QuerySELECT (mysql_res,"can not check the centers"
" a user belongs to", " a user belongs to",
"SELECT deg_degrees.CtrCod," "SELECT deg_degrees.CtrCod," // row[0]
"MAX(crs_users.Role)" "MAX(crs_users.Role)" // row[1]
" FROM crs_users," " FROM crs_users,"
"crs_courses," "crs_courses,"
"deg_degrees," "deg_degrees,"
@ -2359,8 +2359,8 @@ unsigned long Usr_GetDegsFromUsr (long UsrCod,long CtrCod,MYSQL_RES **mysql_res)
if (CtrCod > 0) if (CtrCod > 0)
return DB_QuerySELECT (mysql_res,"can not check the degrees" return DB_QuerySELECT (mysql_res,"can not check the degrees"
" a user belongs to", " a user belongs to",
"SELECT deg_degrees.DegCod," "SELECT deg_degrees.DegCod," // row[0]
"MAX(crs_users.Role)" "MAX(crs_users.Role)" // row[1]
" FROM crs_users," " FROM crs_users,"
"crs_courses," "crs_courses,"
"deg_degrees" "deg_degrees"
@ -2374,8 +2374,8 @@ unsigned long Usr_GetDegsFromUsr (long UsrCod,long CtrCod,MYSQL_RES **mysql_res)
else else
return DB_QuerySELECT (mysql_res,"can not check the degrees" return DB_QuerySELECT (mysql_res,"can not check the degrees"
" a user belongs to", " a user belongs to",
"SELECT deg_degrees.DegCod," "SELECT deg_degrees.DegCod," // row[0]
"MAX(crs_users.Role)" "MAX(crs_users.Role)" // row[1]
" FROM crs_users," " FROM crs_users,"
"crs_courses," "crs_courses,"
"deg_degrees" "deg_degrees"
@ -2398,9 +2398,9 @@ unsigned long Usr_GetCrssFromUsr (long UsrCod,long DegCod,MYSQL_RES **mysql_res)
if (DegCod > 0) // Courses in a degree if (DegCod > 0) // Courses in a degree
return DB_QuerySELECT (mysql_res,"can not get the courses" return DB_QuerySELECT (mysql_res,"can not get the courses"
" a user belongs to", " a user belongs to",
"SELECT crs_users.CrsCod," "SELECT crs_users.CrsCod," // row[0]
"crs_users.Role," "crs_users.Role," // row[1]
"crs_courses.DegCod" "crs_courses.DegCod" // row[2]
" FROM crs_users," " FROM crs_users,"
"crs_courses" "crs_courses"
" WHERE crs_users.UsrCod=%ld" " WHERE crs_users.UsrCod=%ld"
@ -2411,9 +2411,9 @@ unsigned long Usr_GetCrssFromUsr (long UsrCod,long DegCod,MYSQL_RES **mysql_res)
else // All the courses else // All the courses
return DB_QuerySELECT (mysql_res,"can not get the courses" return DB_QuerySELECT (mysql_res,"can not get the courses"
" a user belongs to", " a user belongs to",
"SELECT crs_users.CrsCod," "SELECT crs_users.CrsCod," // row[0]
"crs_users.Role," "crs_users.Role," // row[1]
"crs_courses.DegCod" "crs_courses.DegCod" // row[2]
" FROM crs_users," " FROM crs_users,"
"crs_courses," "crs_courses,"
"deg_degrees" "deg_degrees"
@ -4080,31 +4080,16 @@ static void Usr_WriteUsrData (const char *BgColor,
long Usr_GetRamdomStdFromCrs (long CrsCod) long Usr_GetRamdomStdFromCrs (long CrsCod)
{ {
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long UsrCod = -1L; // -1 means user not found
/***** Get a random student from current course from database *****/ /***** Get a random student from current course from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get a random student" return DB_QuerySELECTCode ("can not get a random student from a course",
" from the current course", "SELECT UsrCod"
"SELECT UsrCod" " FROM crs_users"
" FROM crs_users" " WHERE CrsCod=%ld"
" WHERE CrsCod=%ld" " AND Role=%u"
" AND Role=%u" " ORDER BY RAND()"
" ORDER BY RAND()" " LIMIT 1",
" LIMIT 1", CrsCod,
CrsCod, (unsigned) Rol_STD);
(unsigned) Rol_STD))
{
/***** Get user code *****/
row = mysql_fetch_row (mysql_res);
UsrCod = Str_ConvertStrCodToLongCod (row[0]);
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
return UsrCod;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -4114,31 +4099,18 @@ long Usr_GetRamdomStdFromCrs (long CrsCod)
long Usr_GetRamdomStdFromGrp (long GrpCod) long Usr_GetRamdomStdFromGrp (long GrpCod)
{ {
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long UsrCod = -1L; // -1 means user not found
/***** Get a random student from a group from database *****/ /***** Get a random student from a group from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get a random student from a group", return DB_QuerySELECTCode ("can not get a random student from a group",
"SELECT grp_users.UsrCod" // row[0] "SELECT grp_users.UsrCod"
" FROM grp_users," " FROM grp_users,"
"crs_users" "crs_users"
" WHERE grp_users.GrpCod=%ld" " WHERE grp_users.GrpCod=%ld"
" AND grp_users.UsrCod=crs_users.UsrCod" " AND grp_users.UsrCod=crs_users.UsrCod"
" AND crs_users.Role=%u" " AND crs_users.Role=%u"
" ORDER BY RAND()" " ORDER BY RAND()"
" LIMIT 1", " LIMIT 1",
GrpCod,(unsigned) Rol_STD)) GrpCod,
{ (unsigned) Rol_STD);
/***** Get user code *****/
row = mysql_fetch_row (mysql_res);
UsrCod = Str_ConvertStrCodToLongCod (row[0]);
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
return UsrCod;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -7790,7 +7762,7 @@ static void Usr_GetMyUsrListTypeFromDB (void)
/***** Get type of listing of users from database *****/ /***** Get type of listing of users from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get type of listing of users", NumRows = DB_QuerySELECT (&mysql_res,"can not get type of listing of users",
"SELECT UsrListType" "SELECT UsrListType" // row[0]
" FROM crs_user_settings" " FROM crs_user_settings"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" AND CrsCod=%ld", " AND CrsCod=%ld",
@ -7899,7 +7871,7 @@ static void Usr_GetMyColsClassPhotoFromDB (void)
/***** Get number of columns in class photo from database *****/ /***** Get number of columns in class photo from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get number of columns" NumRows = DB_QuerySELECT (&mysql_res,"can not get number of columns"
" in class photo", " in class photo",
"SELECT ColsClassPhoto" "SELECT ColsClassPhoto" // row[0]
" FROM crs_user_settings" " FROM crs_user_settings"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" AND CrsCod=%ld", " AND CrsCod=%ld",
@ -8008,7 +7980,7 @@ void Usr_GetMyPrefAboutListWithPhotosFromDB (void)
/***** Get if listing of users must show photos from database *****/ /***** Get if listing of users must show photos from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not check if listing of users" NumRows = DB_QuerySELECT (&mysql_res,"can not check if listing of users"
" must show photos", " must show photos",
"SELECT ListWithPhotos" "SELECT ListWithPhotos" // row[0]
" FROM crs_user_settings" " FROM crs_user_settings"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" AND CrsCod=%ld", " AND CrsCod=%ld",
@ -9746,13 +9718,13 @@ static double Usr_GetNumCrssPerUsr (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
if (Role == Rol_UNK) // Any user if (Role == Rol_UNK) // Any user
DB_QuerySELECT (&mysql_res,"can not get number of courses per user", DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
"SELECT AVG(NumCrss)" "SELECT AVG(NumCrss)" // row[0]
" FROM (SELECT COUNT(CrsCod) AS NumCrss" " FROM (SELECT COUNT(CrsCod) AS NumCrss"
" FROM crs_users" " FROM crs_users"
" GROUP BY UsrCod) AS NumCrssTable"); " GROUP BY UsrCod) AS NumCrssTable");
else else
DB_QuerySELECT (&mysql_res,"can not get number of courses per user", DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
"SELECT AVG(NumCrss)" "SELECT AVG(NumCrss)" // row[0]
" FROM (SELECT COUNT(CrsCod) AS NumCrss" " FROM (SELECT COUNT(CrsCod) AS NumCrss"
" FROM crs_users" " FROM crs_users"
" WHERE Role=%u" " WHERE Role=%u"
@ -9762,7 +9734,7 @@ static double Usr_GetNumCrssPerUsr (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
if (Role == Rol_UNK) // Any user if (Role == Rol_UNK) // Any user
DB_QuerySELECT (&mysql_res,"can not get number of courses per user", DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
"SELECT AVG(NumCrss)" "SELECT AVG(NumCrss)" // row[0]
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss" " FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
@ -9778,7 +9750,7 @@ static double Usr_GetNumCrssPerUsr (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
Cod); Cod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of courses per user", DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
"SELECT AVG(NumCrss)" "SELECT AVG(NumCrss)" // row[0]
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss" " FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
@ -9798,7 +9770,7 @@ static double Usr_GetNumCrssPerUsr (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
case Hie_Lvl_INS: case Hie_Lvl_INS:
if (Role == Rol_UNK) // Any user if (Role == Rol_UNK) // Any user
DB_QuerySELECT (&mysql_res,"can not get number of courses per user", DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
"SELECT AVG(NumCrss)" "SELECT AVG(NumCrss)" // row[0]
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss" " FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
@ -9812,7 +9784,7 @@ static double Usr_GetNumCrssPerUsr (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
Cod); Cod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of courses per user", DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
"SELECT AVG(NumCrss)" "SELECT AVG(NumCrss)" // row[0]
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss" " FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
@ -9830,7 +9802,7 @@ static double Usr_GetNumCrssPerUsr (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
if (Role == Rol_UNK) // Any user if (Role == Rol_UNK) // Any user
DB_QuerySELECT (&mysql_res,"can not get number of courses per user", DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
"SELECT AVG(NumCrss)" "SELECT AVG(NumCrss)" // row[0]
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss" " FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
@ -9842,7 +9814,7 @@ static double Usr_GetNumCrssPerUsr (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
Cod); Cod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of courses per user", DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
"SELECT AVG(NumCrss)" "SELECT AVG(NumCrss)" // row[0]
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss" " FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
@ -9858,7 +9830,7 @@ static double Usr_GetNumCrssPerUsr (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
if (Role == Rol_UNK) // Any user if (Role == Rol_UNK) // Any user
DB_QuerySELECT (&mysql_res,"can not get number of courses per user", DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
"SELECT AVG(NumCrss)" "SELECT AVG(NumCrss)" // row[0]
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss" " FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
" FROM crs_courses," " FROM crs_courses,"
"crs_users" "crs_users"
@ -9868,7 +9840,7 @@ static double Usr_GetNumCrssPerUsr (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
Cod); Cod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of courses per user", DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
"SELECT AVG(NumCrss)" "SELECT AVG(NumCrss)" // row[0]
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss" " FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
" FROM crs_courses," " FROM crs_courses,"
"crs_users" "crs_users"
@ -9936,13 +9908,13 @@ static double Usr_GetNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
if (Role == Rol_UNK) // Any user if (Role == Rol_UNK) // Any user
DB_QuerySELECT (&mysql_res,"can not get number of users per course", DB_QuerySELECT (&mysql_res,"can not get number of users per course",
"SELECT AVG(NumUsrs)" "SELECT AVG(NumUsrs)" // row[0]
" FROM (SELECT COUNT(UsrCod) AS NumUsrs" " FROM (SELECT COUNT(UsrCod) AS NumUsrs"
" FROM crs_users" " FROM crs_users"
" GROUP BY CrsCod) AS NumUsrsTable"); " GROUP BY CrsCod) AS NumUsrsTable");
else else
DB_QuerySELECT (&mysql_res,"can not get number of users per course", DB_QuerySELECT (&mysql_res,"can not get number of users per course",
"SELECT AVG(NumUsrs)" "SELECT AVG(NumUsrs)" // row[0]
" FROM (SELECT COUNT(UsrCod) AS NumUsrs" " FROM (SELECT COUNT(UsrCod) AS NumUsrs"
" FROM crs_users" " FROM crs_users"
" WHERE Role=%u GROUP BY CrsCod) AS NumUsrsTable", " WHERE Role=%u GROUP BY CrsCod) AS NumUsrsTable",
@ -9951,7 +9923,7 @@ static double Usr_GetNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
if (Role == Rol_UNK) // Any user if (Role == Rol_UNK) // Any user
DB_QuerySELECT (&mysql_res,"can not get number of users per course", DB_QuerySELECT (&mysql_res,"can not get number of users per course",
"SELECT AVG(NumUsrs)" "SELECT AVG(NumUsrs)" // row[0]
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs" " FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
@ -9967,7 +9939,7 @@ static double Usr_GetNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
Cod); Cod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of users per course", DB_QuerySELECT (&mysql_res,"can not get number of users per course",
"SELECT AVG(NumUsrs)" "SELECT AVG(NumUsrs)" // row[0]
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs" " FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
@ -9987,7 +9959,7 @@ static double Usr_GetNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
case Hie_Lvl_INS: case Hie_Lvl_INS:
if (Role == Rol_UNK) // Any user if (Role == Rol_UNK) // Any user
DB_QuerySELECT (&mysql_res,"can not get number of users per course", DB_QuerySELECT (&mysql_res,"can not get number of users per course",
"SELECT AVG(NumUsrs)" "SELECT AVG(NumUsrs)" // row[0]
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs" " FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
@ -10001,7 +9973,7 @@ static double Usr_GetNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
Cod); Cod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of users per course", DB_QuerySELECT (&mysql_res,"can not get number of users per course",
"SELECT AVG(NumUsrs)" "SELECT AVG(NumUsrs)" // row[0]
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs" " FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
@ -10019,7 +9991,7 @@ static double Usr_GetNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
if (Role == Rol_UNK) // Any user if (Role == Rol_UNK) // Any user
DB_QuerySELECT (&mysql_res,"can not get number of users per course", DB_QuerySELECT (&mysql_res,"can not get number of users per course",
"SELECT AVG(NumUsrs)" "SELECT AVG(NumUsrs)" // row[0]
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs" " FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
@ -10031,7 +10003,7 @@ static double Usr_GetNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
Cod); Cod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of users per course", DB_QuerySELECT (&mysql_res,"can not get number of users per course",
"SELECT AVG(NumUsrs)" "SELECT AVG(NumUsrs)" // row[0]
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs" " FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
@ -10047,7 +10019,7 @@ static double Usr_GetNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
if (Role == Rol_UNK) // Any user if (Role == Rol_UNK) // Any user
DB_QuerySELECT (&mysql_res,"can not get number of users per course", DB_QuerySELECT (&mysql_res,"can not get number of users per course",
"SELECT AVG(NumUsrs)" "SELECT AVG(NumUsrs)" // row[0]
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs" " FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
" FROM crs_courses," " FROM crs_courses,"
"crs_users" "crs_users"
@ -10057,7 +10029,7 @@ static double Usr_GetNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
Cod); Cod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of users per course", DB_QuerySELECT (&mysql_res,"can not get number of users per course",
"SELECT AVG(NumUsrs)" "SELECT AVG(NumUsrs)" // row[0]
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs" " FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
" FROM crs_courses," " FROM crs_courses,"
"crs_users" "crs_users"