From 0f34fec7bd14ff195a88ca96db471b9f6340f0ba Mon Sep 17 00:00:00 2001 From: acanas Date: Tue, 6 Apr 2021 23:56:23 +0200 Subject: [PATCH] Version 20.59: Apr 06, 2021 Optimizations in database selects. --- swad_API.c | 41 ++++------ swad_assignment.c | 12 +-- swad_changelog.h | 3 +- swad_database.c | 43 ++++++++++- swad_database.h | 2 + swad_exam_print.c | 31 ++------ swad_exam_set.c | 25 ++---- swad_file_browser.c | 67 ++++------------ swad_file_browser.h | 2 +- swad_indicator.c | 182 +++++++++++++++----------------------------- swad_indicator.h | 8 +- swad_match.c | 5 +- swad_profile.c | 5 +- 13 files changed, 158 insertions(+), 268 deletions(-) diff --git a/swad_API.c b/swad_API.c index aa90ac47..52c746e4 100644 --- a/swad_API.c +++ b/swad_API.c @@ -3671,34 +3671,19 @@ int swad__sendMessage (struct soap *soap, if (messageCode) { /***** Check if the original message was really received by me *****/ - if (!DB_QuerySELECT (&mysql_res,"can not check original message", - "SELECT SUM(N)" // row[0] - " FROM (SELECT COUNT(*) AS N" - " FROM msg_rcv" - " WHERE UsrCod=%ld" - " AND MsgCod=%ld" - " UNION" - " SELECT COUNT(*) AS N" - " FROM msg_rcv_deleted" - " WHERE UsrCod=%ld" - " AND MsgCod=%ld) AS T", - Gbl.Usrs.Me.UsrDat.UsrCod,(long) messageCode, - Gbl.Usrs.Me.UsrDat.UsrCod,(long) messageCode)) - return soap_sender_fault (soap, - "Can not check original message", - "Error reading from database"); - - /***** Get number of rows *****/ - row = mysql_fetch_row (mysql_res); - if (sscanf (row[0],"%u",&NumRows) != 1) - return soap_sender_fault (soap, - "Can not check original message", - "Error reading from database"); - - /***** Free structure that stores the query result *****/ - DB_FreeMySQLResult (&mysql_res); - - if (!NumRows) + if (DB_QuerySELECTUnsigned ("can not check original message", + "SELECT SUM(N)" // row[0] + " FROM (SELECT COUNT(*) AS N" + " FROM msg_rcv" + " WHERE UsrCod=%ld" + " AND MsgCod=%ld" + " UNION" + " SELECT COUNT(*) AS N" + " FROM msg_rcv_deleted" + " WHERE UsrCod=%ld" + " AND MsgCod=%ld) AS T", + Gbl.Usrs.Me.UsrDat.UsrCod,(long) messageCode, + Gbl.Usrs.Me.UsrDat.UsrCod,(long) messageCode) == 0) return soap_sender_fault (soap, "Can not send reply message", "Original message does not exist"); diff --git a/swad_assignment.c b/swad_assignment.c index 86e72495..857de52d 100644 --- a/swad_assignment.c +++ b/swad_assignment.c @@ -1996,8 +1996,8 @@ unsigned Asg_GetNumAssignments (Hie_Lvl_Level_t Scope,unsigned *NumNotif) break; case Hie_Lvl_CTR: DB_QuerySELECT (&mysql_res,"can not get number of assignments", - "SELECT COUNT(*)," - "SUM(asg_assignments.NumNotif)" + "SELECT COUNT(*)," // row[0] + "SUM(asg_assignments.NumNotif)" // row[1] " FROM deg_degrees," "crs_courses," "asg_assignments" @@ -2008,8 +2008,8 @@ unsigned Asg_GetNumAssignments (Hie_Lvl_Level_t Scope,unsigned *NumNotif) break; case Hie_Lvl_DEG: DB_QuerySELECT (&mysql_res,"can not get number of assignments", - "SELECT COUNT(*)," - "SUM(asg_assignments.NumNotif)" + "SELECT COUNT(*)," // row[0] + "SUM(asg_assignments.NumNotif)" // row[1] " FROM crs_courses," "asg_assignments" " WHERE crs_courses.DegCod=%ld" @@ -2018,8 +2018,8 @@ unsigned Asg_GetNumAssignments (Hie_Lvl_Level_t Scope,unsigned *NumNotif) break; case Hie_Lvl_CRS: DB_QuerySELECT (&mysql_res,"can not get number of assignments", - "SELECT COUNT(*)," - "SUM(NumNotif)" + "SELECT COUNT(*)," // row[0] + "SUM(NumNotif)" // row[1] " FROM asg_assignments" " WHERE CrsCod=%ld", Gbl.Hierarchy.Crs.CrsCod); diff --git a/swad_changelog.h b/swad_changelog.h index b6f6cc98..e22859ab 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -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. */ -#define Log_PLATFORM_VERSION "SWAD 20.58 (2021-04-06)" +#define Log_PLATFORM_VERSION "SWAD 20.59 (2021-04-06)" #define CSS_FILE "swad20.45.css" #define JS_FILE "swad20.6.2.js" /* TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams + Version 20.59: Apr 06, 2021 Optimizations in database selects. (308903 lines) Version 20.58: Apr 06, 2021 Optimizations in database selects. (308989 lines) 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) diff --git a/swad_database.c b/swad_database.c index 4ca00aa7..2034e965 100644 --- a/swad_database.c +++ b/swad_database.c @@ -3836,6 +3836,7 @@ long DB_QuerySELECTCode (const char *MsgError, return Cod; } + /*****************************************************************************/ /**** Make a SELECT query for a unique row with one double from database *****/ /*****************************************************************************/ @@ -3848,7 +3849,7 @@ double DB_QuerySELECTDouble (const char *MsgError, va_list ap; int NumBytesPrinted; char *Query; - double DoubleNum; + double DoubleNum = 0.0; /***** Create query string *****/ va_start (ap,fmt); @@ -3861,10 +3862,9 @@ double DB_QuerySELECTDouble (const char *MsgError, if (DB_QuerySELECTusingQueryStr (Query,&mysql_res,MsgError)) // Row found { row = mysql_fetch_row (mysql_res); - DoubleNum = Str_GetDoubleFromStr (row[0]); + if (row[0]) + DoubleNum = Str_GetDoubleFromStr (row[0]); } - else - DoubleNum = 0.0; /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); @@ -3872,6 +3872,41 @@ double DB_QuerySELECTDouble (const char *MsgError, return DoubleNum; } +/*****************************************************************************/ +/*** Make a SELECT query for a unique row with one unsigned from database ****/ +/*****************************************************************************/ + +unsigned DB_QuerySELECTUnsigned (const char *MsgError, + const char *fmt,...) + { + MYSQL_RES *mysql_res; + MYSQL_ROW row; + va_list ap; + int NumBytesPrinted; + char *Query; + unsigned UnsignedNum = 0; + + /***** Create query string *****/ + va_start (ap,fmt); + NumBytesPrinted = vasprintf (&Query,fmt,ap); + va_end (ap); + if (NumBytesPrinted < 0) // -1 if no memory or any other error + Lay_NotEnoughMemoryExit (); + + /***** Do SELECT query *****/ + if (DB_QuerySELECTusingQueryStr (Query,&mysql_res,MsgError)) // Row found + { + row = mysql_fetch_row (mysql_res); + if (row[0]) + UnsignedNum = Str_ConvertStrToUnsigned (row[0]); + } + + /***** Free structure that stores the query result *****/ + DB_FreeMySQLResult (&mysql_res); + + return UnsignedNum; + } + /*****************************************************************************/ /*********** Make a SELECT query from database using query string ************/ /*****************************************************************************/ diff --git a/swad_database.h b/swad_database.h index d76b2e50..b34eb33e 100644 --- a/swad_database.h +++ b/swad_database.h @@ -45,6 +45,8 @@ long DB_QuerySELECTCode (const char *MsgError, const char *fmt,...); double DB_QuerySELECTDouble (const char *MsgError, const char *fmt,...); +unsigned DB_QuerySELECTUnsigned (const char *MsgError, + const char *fmt,...); long DB_GetNextCode (MYSQL_RES *mysql_res); unsigned long DB_GetNumRowsTable (const char *Table); unsigned long DB_QueryCOUNT (const char *MsgError,const char *fmt,...); diff --git a/swad_exam_print.c b/swad_exam_print.c index f746b03f..507c7dcd 100644 --- a/swad_exam_print.c +++ b/swad_exam_print.c @@ -1498,33 +1498,12 @@ static void ExaPrn_GetNumQstsNotBlank (struct ExaPrn_Print *Print) static void ExaPrn_ComputeTotalScoreOfPrint (struct ExaPrn_Print *Print) { - MYSQL_RES *mysql_res; - MYSQL_ROW row; - - /***** Default score *****/ - Print->Score.All = 0.0; - /***** Compute total score of exam print *****/ - if (DB_QuerySELECT (&mysql_res,"can not get score of exam print", - "SELECT SUM(Score)" // row[0] - " FROM exa_print_questions" - " WHERE PrnCod=%ld", - Print->PrnCod)) - { - /***** Get sum of individual scores (row[0]) *****/ - row = mysql_fetch_row (mysql_res); - if (row[0]) - { - /* Get score (row[0]) */ - Str_SetDecimalPointToUS (); // To get the decimal point as a dot - if (sscanf (row[0],"%lf",&Print->Score.All) != 1) - Print->Score.All = 0.0; - Str_SetDecimalPointToLocal (); // Return to local system - } - } - - /***** Free structure that stores the query result *****/ - DB_FreeMySQLResult (&mysql_res); + Print->Score.All = DB_QuerySELECTDouble ("can not get score of exam print", + "SELECT SUM(Score)" + " FROM exa_print_questions" + " WHERE PrnCod=%ld", + Print->PrnCod); } /*****************************************************************************/ diff --git a/swad_exam_set.c b/swad_exam_set.c index 0c6bf20f..f0a7e13c 100644 --- a/swad_exam_set.c +++ b/swad_exam_set.c @@ -640,27 +640,12 @@ unsigned ExaSet_GetNumSetsExam (long ExaCod) unsigned ExaSet_GetNumQstsExam (long ExaCod) { - MYSQL_RES *mysql_res; - MYSQL_ROW row; - unsigned NumQsts = 0; - /***** Get total number of questions to appear in exam print *****/ - if (!DB_QuerySELECT (&mysql_res,"can not get number of questions in an exam print", - "SELECT SUM(NumQstsToPrint)" // row[0] - " FROM exa_sets" - " WHERE ExaCod=%ld", - ExaCod)) - Lay_ShowErrorAndExit ("Error: wrong question index."); - - /***** Get number of questions (row[0]) *****/ - row = mysql_fetch_row (mysql_res); - if (row[0]) - NumQsts = Str_ConvertStrToUnsigned (row[0]); - - /***** Free structure that stores the query result *****/ - DB_FreeMySQLResult (&mysql_res); - - return NumQsts; + return DB_QuerySELECTUnsigned ("can not get number of questions in an exam print", + "SELECT SUM(NumQstsToPrint)" + " FROM exa_sets" + " WHERE ExaCod=%ld", + ExaCod); } /*****************************************************************************/ diff --git a/swad_file_browser.c b/swad_file_browser.c index 76deca36..8be251ea 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -10760,36 +10760,14 @@ void Brw_UpdateMyFileViews (long FilCod) /******************** Get number of file views from a user *******************/ /*****************************************************************************/ -unsigned long Brw_GetNumFileViewsUsr (long UsrCod) +unsigned Brw_GetNumFileViewsUsr (long UsrCod) { - MYSQL_RES *mysql_res; - MYSQL_ROW row; - unsigned long FileViews; - /***** Get number of filw views *****/ - if (DB_QuerySELECT (&mysql_res,"can not get number of file views", - "SELECT SUM(NumViews)" // row[0] - " FROM brw_views" - " WHERE UsrCod=%ld", - UsrCod)) - { - /* Get number of file views */ - row = mysql_fetch_row (mysql_res); - if (row[0]) - { - if (sscanf (row[0],"%lu",&FileViews) != 1) - FileViews = 0; - } - else - FileViews = 0; - } - else - FileViews = 0; - - /***** Free structure that stores the query result *****/ - DB_FreeMySQLResult (&mysql_res); - - return FileViews; + return DB_QuerySELECTUnsigned ("can not get number of file views", + "SELECT SUM(NumViews)" + " FROM brw_views" + " WHERE UsrCod=%ld", + UsrCod); } /*****************************************************************************/ @@ -10846,33 +10824,14 @@ static void Brw_GetFileViewsFromLoggedUsrs (struct FileMetadata *FileMetadata) */ static void Brw_GetFileViewsFromNonLoggedUsrs (struct FileMetadata *FileMetadata) { - MYSQL_RES *mysql_res; - MYSQL_ROW row; - /***** Get number of public views *****/ - if (DB_QuerySELECT (&mysql_res,"can not get number of public views" - " of a file", - "SELECT SUM(NumViews)" // row[0] - " FROM brw_views" - " WHERE FilCod=%ld" - " AND UsrCod<=0", - FileMetadata->FilCod)) - { - /* Get number of public views */ - row = mysql_fetch_row (mysql_res); - if (row[0]) - { - if (sscanf (row[0],"%u",&(FileMetadata->NumPublicViews)) != 1) - FileMetadata->NumPublicViews = 0; - } - else - FileMetadata->NumPublicViews = 0; - } - else - FileMetadata->NumPublicViews = 0; - - /***** Free structure that stores the query result *****/ - DB_FreeMySQLResult (&mysql_res); + FileMetadata->NumPublicViews = + DB_QuerySELECTUnsigned ("can not get number of public views of a file", + "SELECT SUM(NumViews)" + " FROM brw_views" + " WHERE FilCod=%ld" + " AND UsrCod<=0", + FileMetadata->FilCod); } /*****************************************************************************/ diff --git a/swad_file_browser.h b/swad_file_browser.h index b447d970..69b40c05 100644 --- a/swad_file_browser.h +++ b/swad_file_browser.h @@ -228,7 +228,7 @@ void Brw_GetFileMetadataByCod (struct FileMetadata *FileMetadata); bool Brw_GetFileTypeSizeAndDate (struct FileMetadata *FileMetadata); void Brw_GetAndUpdateFileViews (struct FileMetadata *FileMetadata); void Brw_UpdateMyFileViews (long FilCod); -unsigned long Brw_GetNumFileViewsUsr (long UsrCod); +unsigned Brw_GetNumFileViewsUsr (long UsrCod); unsigned Brw_GetNumFilesUsr (long UsrCod); unsigned Brw_GetNumPublicFilesUsr (long UsrCod); diff --git a/swad_indicator.c b/swad_indicator.c index d09dffdc..946262ed 100644 --- a/swad_indicator.c +++ b/swad_indicator.c @@ -85,10 +85,10 @@ static void Ind_ShowTableOfCoursesWithIndicators (const struct Ind_Indicators *I unsigned NumCrss,MYSQL_RES *mysql_res); static unsigned Ind_GetAndUpdateNumIndicatorsCrs (long CrsCod); static void Ind_StoreIndicatorsCrsIntoDB (long CrsCod,unsigned NumIndicators); -static unsigned long Ind_GetNumFilesInDocumZonesOfCrsFromDB (long CrsCod); -static unsigned long Ind_GetNumFilesInShareZonesOfCrsFromDB (long CrsCod); -static unsigned long Ind_GetNumFilesInAssigZonesOfCrsFromDB (long CrsCod); -static unsigned long Ind_GetNumFilesInWorksZonesOfCrsFromDB (long CrsCod); +static unsigned Ind_GetNumFilesInDocumZonesOfCrsFromDB (long CrsCod); +static unsigned Ind_GetNumFilesInShareZonesOfCrsFromDB (long CrsCod); +static unsigned Ind_GetNumFilesInAssigZonesOfCrsFromDB (long CrsCod); +static unsigned Ind_GetNumFilesInWorksZonesOfCrsFromDB (long CrsCod); /*****************************************************************************/ /******************* Request showing statistics of courses *******************/ @@ -1233,14 +1233,14 @@ static void Ind_ShowTableOfCoursesWithIndicators (const struct Ind_Indicators *I (IndicatorsCrs.NumFilesAssignments != 0) ? "DAT_SMALL_GREEN" : "DAT_SMALL_RED", Gbl.RowEvenOdd); - HTM_UnsignedLong (IndicatorsCrs.NumFilesAssignments); + HTM_Unsigned (IndicatorsCrs.NumFilesAssignments); HTM_TD_End (); HTM_TD_Begin ("class=\"%s RM COLOR%u\"", (IndicatorsCrs.NumFilesWorks != 0) ? "DAT_SMALL_GREEN" : "DAT_SMALL_RED", Gbl.RowEvenOdd); - HTM_UnsignedLong (IndicatorsCrs.NumFilesWorks); + HTM_Unsigned (IndicatorsCrs.NumFilesWorks); HTM_TD_End (); HTM_TD_Begin ("class=\"DAT_SMALL_GREEN CM COLOR%u\"", @@ -1292,14 +1292,14 @@ static void Ind_ShowTableOfCoursesWithIndicators (const struct Ind_Indicators *I (IndicatorsCrs.NumFilesInDocumentZones != 0) ? "DAT_SMALL_GREEN" : "DAT_SMALL_RED", Gbl.RowEvenOdd); - HTM_UnsignedLong (IndicatorsCrs.NumFilesInDocumentZones); + HTM_Unsigned (IndicatorsCrs.NumFilesInDocumentZones); HTM_TD_End (); HTM_TD_Begin ("class=\"%s RM COLOR%u\"", (IndicatorsCrs.NumFilesInSharedZones != 0) ? "DAT_SMALL_GREEN" : "DAT_SMALL_RED", Gbl.RowEvenOdd); - HTM_UnsignedLong (IndicatorsCrs.NumFilesInSharedZones); + HTM_Unsigned (IndicatorsCrs.NumFilesInSharedZones); HTM_TD_End (); HTM_TD_Begin ("class=\"DAT_SMALL_GREEN CM COLOR%u\"", @@ -1435,7 +1435,7 @@ void Ind_ComputeAndStoreIndicatorsCrs (long CrsCod,int NumIndicatorsFromDB, IndicatorsCrs->NumIndicators++; /***** Indicator #2: information about assignments *****/ - IndicatorsCrs->NumAssignments = Asg_GetNumAssignmentsInCrs (CrsCod); + IndicatorsCrs->NumAssignments = Asg_GetNumAssignmentsInCrs (CrsCod); IndicatorsCrs->NumFilesAssignments = Ind_GetNumFilesInAssigZonesOfCrsFromDB (CrsCod); IndicatorsCrs->NumFilesWorks = Ind_GetNumFilesInWorksZonesOfCrsFromDB (CrsCod); IndicatorsCrs->ThereAreAssignments = (IndicatorsCrs->NumAssignments != 0) || @@ -1482,150 +1482,90 @@ void Ind_ComputeAndStoreIndicatorsCrs (long CrsCod,int NumIndicatorsFromDB, /*********** Get the number of files in document zones of a course ***********/ /*****************************************************************************/ -static unsigned long Ind_GetNumFilesInDocumZonesOfCrsFromDB (long CrsCod) +static unsigned Ind_GetNumFilesInDocumZonesOfCrsFromDB (long CrsCod) { extern const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER]; - MYSQL_RES *mysql_res; - MYSQL_ROW row; - unsigned long NumFiles; /***** Get number of files in document zones of a course from database *****/ - DB_QuerySELECT (&mysql_res,"can not get the number of files", - "SELECT" - " (SELECT COALESCE(SUM(NumFiles),0)" // row[0] - " FROM brw_sizes" - " WHERE FileBrowser=%u AND Cod=%ld) +" - " (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)" // row[0] - " FROM grp_types," - "grp_groups," - "brw_sizes" - " WHERE grp_types.CrsCod=%ld" - " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" - " AND brw_sizes.FileBrowser=%u" - " AND brw_sizes.Cod=grp_groups.GrpCod)", - (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_DOC_CRS], - CrsCod, - CrsCod, - (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_DOC_GRP]); - - /***** Get row *****/ - row = mysql_fetch_row (mysql_res); - - /***** Get number of files (row[0]) *****/ - if (sscanf (row[0],"%lu",&NumFiles) != 1) - Lay_ShowErrorAndExit ("Error when getting the number of files."); - - /***** Free structure that stores the query result *****/ - DB_FreeMySQLResult (&mysql_res); - - return NumFiles; + return DB_QuerySELECTUnsigned ("can not get the number of files", + "SELECT" + " (SELECT COALESCE(SUM(NumFiles),0)" + " FROM brw_sizes" + " WHERE FileBrowser=%u AND Cod=%ld) +" + " (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)" + " FROM grp_types," + "grp_groups," + "brw_sizes" + " WHERE grp_types.CrsCod=%ld" + " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" + " AND brw_sizes.FileBrowser=%u" + " AND brw_sizes.Cod=grp_groups.GrpCod)", + (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_DOC_CRS], + CrsCod, + CrsCod, + (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_DOC_GRP]); } /*****************************************************************************/ /*********** Get the number of files in shared zones of a course ***********/ /*****************************************************************************/ -static unsigned long Ind_GetNumFilesInShareZonesOfCrsFromDB (long CrsCod) +static unsigned Ind_GetNumFilesInShareZonesOfCrsFromDB (long CrsCod) { extern const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER]; - MYSQL_RES *mysql_res; - MYSQL_ROW row; - unsigned long NumFiles; /***** Get number of files in document zones of a course from database *****/ - DB_QuerySELECT (&mysql_res,"can not get the number of files", - "SELECT" - " (SELECT COALESCE(SUM(NumFiles),0)" // row[0] - " FROM brw_sizes" - " WHERE FileBrowser=%u AND Cod=%ld) +" - " (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)" // row[0] - " FROM grp_types," - "grp_groups," - "brw_sizes" - " WHERE grp_types.CrsCod=%ld" - " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" - " AND brw_sizes.FileBrowser=%u" - " AND brw_sizes.Cod=grp_groups.GrpCod)", - (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_SHR_CRS], - CrsCod, - CrsCod, - (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_SHR_GRP]); - - /***** Get row *****/ - row = mysql_fetch_row (mysql_res); - - /***** Get number of files (row[0]) *****/ - if (sscanf (row[0],"%lu",&NumFiles) != 1) - Lay_ShowErrorAndExit ("Error when getting the number of files."); - - /***** Free structure that stores the query result *****/ - DB_FreeMySQLResult (&mysql_res); - - return NumFiles; + return DB_QuerySELECTUnsigned ("can not get the number of files", + "SELECT" + " (SELECT COALESCE(SUM(NumFiles),0)" + " FROM brw_sizes" + " WHERE FileBrowser=%u AND Cod=%ld) +" + " (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)" + " FROM grp_types," + "grp_groups," + "brw_sizes" + " WHERE grp_types.CrsCod=%ld" + " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" + " AND brw_sizes.FileBrowser=%u" + " AND brw_sizes.Cod=grp_groups.GrpCod)", + (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_SHR_CRS], + CrsCod, + CrsCod, + (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_SHR_GRP]); } /*****************************************************************************/ /********* Get the number of files in assignment zones of a course ***********/ /*****************************************************************************/ -static unsigned long Ind_GetNumFilesInAssigZonesOfCrsFromDB (long CrsCod) +static unsigned Ind_GetNumFilesInAssigZonesOfCrsFromDB (long CrsCod) { extern const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER]; - MYSQL_RES *mysql_res; - MYSQL_ROW row; - unsigned long NumFiles; /***** Get number of files in document zones of a course from database *****/ - DB_QuerySELECT (&mysql_res,"can not get the number of files", - "SELECT COALESCE(SUM(NumFiles),0)" // row[0] - " FROM brw_sizes" - " WHERE FileBrowser=%u" - " AND Cod=%ld", - (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_ASG_USR], - CrsCod); - - /***** Get row *****/ - row = mysql_fetch_row (mysql_res); - - /***** Get number of files (row[0]) *****/ - if (sscanf (row[0],"%lu",&NumFiles) != 1) - Lay_ShowErrorAndExit ("Error when getting the number of files."); - - /***** Free structure that stores the query result *****/ - DB_FreeMySQLResult (&mysql_res); - - return NumFiles; + return DB_QuerySELECTUnsigned ("can not get the number of files", + "SELECT COALESCE(SUM(NumFiles),0)" + " FROM brw_sizes" + " WHERE FileBrowser=%u" + " AND Cod=%ld", + (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_ASG_USR], + CrsCod); } /*****************************************************************************/ /************* Get the number of files in works zones of a course ************/ /*****************************************************************************/ -static unsigned long Ind_GetNumFilesInWorksZonesOfCrsFromDB (long CrsCod) +static unsigned Ind_GetNumFilesInWorksZonesOfCrsFromDB (long CrsCod) { extern const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER]; - MYSQL_RES *mysql_res; - MYSQL_ROW row; - unsigned long NumFiles; /***** Get number of files in document zones of a course from database *****/ - DB_QuerySELECT (&mysql_res,"can not get the number of files", - "SELECT COALESCE(SUM(NumFiles),0)" // row[0] - " FROM brw_sizes" - " WHERE FileBrowser=%u" - " AND Cod=%ld", - (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_WRK_USR], - CrsCod); - - /***** Get row *****/ - row = mysql_fetch_row (mysql_res); - - /***** Get number of files (row[0]) *****/ - if (sscanf (row[0],"%lu",&NumFiles) != 1) - Lay_ShowErrorAndExit ("Error when getting the number of files."); - - /***** Free structure that stores the query result *****/ - DB_FreeMySQLResult (&mysql_res); - - return NumFiles; + return DB_QuerySELECTUnsigned ("can not get the number of files", + "SELECT COALESCE(SUM(NumFiles),0)" + " FROM brw_sizes" + " WHERE FileBrowser=%u" + " AND Cod=%ld", + (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_WRK_USR], + CrsCod); } diff --git a/swad_indicator.h b/swad_indicator.h index 5c0a9b1c..97edfecd 100644 --- a/swad_indicator.h +++ b/swad_indicator.h @@ -36,16 +36,16 @@ struct Ind_IndicatorsCrs { - unsigned long NumFilesInDocumentZones; - unsigned long NumFilesInSharedZones; + unsigned NumFilesInDocumentZones; + unsigned NumFilesInSharedZones; bool ThereIsSyllabus; Inf_InfoSrc_t TeachingGuideSrc; Inf_InfoSrc_t SyllabusLecSrc; Inf_InfoSrc_t SyllabusPraSrc; bool ThereAreAssignments; unsigned NumAssignments; - unsigned long NumFilesAssignments; - unsigned long NumFilesWorks; + unsigned NumFilesAssignments; + unsigned NumFilesWorks; bool ThereIsOnlineTutoring; unsigned NumThreads; unsigned NumPosts; diff --git a/swad_match.c b/swad_match.c index e08f13c0..e485f161 100644 --- a/swad_match.c +++ b/swad_match.c @@ -2130,7 +2130,10 @@ static void Mch_GetElapsedTime (unsigned NumRows,MYSQL_RES *mysql_res, if (row[0]) /* Get the elapsed time (row[0]) */ - if (sscanf (row[0],"%u:%02u:%02u",&Time->Hour,&Time->Minute,&Time->Second) == 3) + if (sscanf (row[0],"%u:%02u:%02u", + &Time->Hour, + &Time->Minute, + &Time->Second) == 3) ElapsedTimeGotFromDB = true; } diff --git a/swad_profile.c b/swad_profile.c index 7f163984..636fff98 100644 --- a/swad_profile.c +++ b/swad_profile.c @@ -1163,12 +1163,13 @@ static void Prf_GetNumFileViewsAndStoreAsUsrFigure (long UsrCod) Prf_ResetUsrFigures (&UsrFigures); /***** Get number of file views from database *****/ - UsrFigures.NumFileViews = Brw_GetNumFileViewsUsr (UsrCod); + UsrFigures.NumFileViews = (long) Brw_GetNumFileViewsUsr (UsrCod); /***** Update number of file views in user's figures *****/ if (Prf_CheckIfUsrFiguresExists (UsrCod)) DB_QueryUPDATE ("can not update user's figures", - "UPDATE usr_figures SET NumFileViews=%ld" + "UPDATE usr_figures" + " SET NumFileViews=%ld" " WHERE UsrCod=%ld", UsrFigures.NumFileViews,UsrCod); else // User entry does not exist