Version 20.59: Apr 06, 2021 Optimizations in database selects.

This commit is contained in:
acanas 2021-04-06 23:56:23 +02:00
parent 364b133b28
commit 0f34fec7bd
13 changed files with 158 additions and 268 deletions

View File

@ -3671,34 +3671,19 @@ int swad__sendMessage (struct soap *soap,
if (messageCode) if (messageCode)
{ {
/***** Check if the original message was really received by me *****/ /***** Check if the original message was really received by me *****/
if (!DB_QuerySELECT (&mysql_res,"can not check original message", if (DB_QuerySELECTUnsigned ("can not check original message",
"SELECT SUM(N)" // row[0] "SELECT SUM(N)" // row[0]
" FROM (SELECT COUNT(*) AS N" " FROM (SELECT COUNT(*) AS N"
" FROM msg_rcv" " FROM msg_rcv"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" AND MsgCod=%ld" " AND MsgCod=%ld"
" UNION" " UNION"
" SELECT COUNT(*) AS N" " SELECT COUNT(*) AS N"
" FROM msg_rcv_deleted" " FROM msg_rcv_deleted"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" AND MsgCod=%ld) AS T", " AND MsgCod=%ld) AS T",
Gbl.Usrs.Me.UsrDat.UsrCod,(long) messageCode, Gbl.Usrs.Me.UsrDat.UsrCod,(long) messageCode,
Gbl.Usrs.Me.UsrDat.UsrCod,(long) messageCode)) Gbl.Usrs.Me.UsrDat.UsrCod,(long) messageCode) == 0)
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)
return soap_sender_fault (soap, return soap_sender_fault (soap,
"Can not send reply message", "Can not send reply message",
"Original message does not exist"); "Original message does not exist");

View File

@ -1996,8 +1996,8 @@ unsigned Asg_GetNumAssignments (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 assignments", DB_QuerySELECT (&mysql_res,"can not get number of assignments",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(asg_assignments.NumNotif)" "SUM(asg_assignments.NumNotif)" // row[1]
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"asg_assignments" "asg_assignments"
@ -2008,8 +2008,8 @@ unsigned Asg_GetNumAssignments (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 assignments", DB_QuerySELECT (&mysql_res,"can not get number of assignments",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(asg_assignments.NumNotif)" "SUM(asg_assignments.NumNotif)" // row[1]
" FROM crs_courses," " FROM crs_courses,"
"asg_assignments" "asg_assignments"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
@ -2018,8 +2018,8 @@ unsigned Asg_GetNumAssignments (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 assignments", DB_QuerySELECT (&mysql_res,"can not get number of assignments",
"SELECT COUNT(*)," "SELECT COUNT(*)," // row[0]
"SUM(NumNotif)" "SUM(NumNotif)" // row[1]
" FROM asg_assignments" " FROM asg_assignments"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);

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.58 (2021-04-06)" #define Log_PLATFORM_VERSION "SWAD 20.59 (2021-04-06)"
#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.59: Apr 06, 2021 Optimizations in database selects. (308903 lines)
Version 20.58: Apr 06, 2021 Optimizations in database selects. (308989 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.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)

View File

@ -3836,6 +3836,7 @@ long DB_QuerySELECTCode (const char *MsgError,
return Cod; return Cod;
} }
/*****************************************************************************/ /*****************************************************************************/
/**** Make a SELECT query for a unique row with one double from database *****/ /**** 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; va_list ap;
int NumBytesPrinted; int NumBytesPrinted;
char *Query; char *Query;
double DoubleNum; double DoubleNum = 0.0;
/***** Create query string *****/ /***** Create query string *****/
va_start (ap,fmt); va_start (ap,fmt);
@ -3861,10 +3862,9 @@ double DB_QuerySELECTDouble (const char *MsgError,
if (DB_QuerySELECTusingQueryStr (Query,&mysql_res,MsgError)) // Row found if (DB_QuerySELECTusingQueryStr (Query,&mysql_res,MsgError)) // Row found
{ {
row = mysql_fetch_row (mysql_res); 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 *****/ /***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res); DB_FreeMySQLResult (&mysql_res);
@ -3872,6 +3872,41 @@ double DB_QuerySELECTDouble (const char *MsgError,
return DoubleNum; 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 ************/ /*********** Make a SELECT query from database using query string ************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -45,6 +45,8 @@ long DB_QuerySELECTCode (const char *MsgError,
const char *fmt,...); const char *fmt,...);
double DB_QuerySELECTDouble (const char *MsgError, double DB_QuerySELECTDouble (const char *MsgError,
const char *fmt,...); const char *fmt,...);
unsigned DB_QuerySELECTUnsigned (const char *MsgError,
const char *fmt,...);
long DB_GetNextCode (MYSQL_RES *mysql_res); long DB_GetNextCode (MYSQL_RES *mysql_res);
unsigned long DB_GetNumRowsTable (const char *Table); unsigned long DB_GetNumRowsTable (const char *Table);
unsigned long DB_QueryCOUNT (const char *MsgError,const char *fmt,...); unsigned long DB_QueryCOUNT (const char *MsgError,const char *fmt,...);

View File

@ -1498,33 +1498,12 @@ static void ExaPrn_GetNumQstsNotBlank (struct ExaPrn_Print *Print)
static void ExaPrn_ComputeTotalScoreOfPrint (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 *****/ /***** Compute total score of exam print *****/
if (DB_QuerySELECT (&mysql_res,"can not get score of exam print", Print->Score.All = DB_QuerySELECTDouble ("can not get score of exam print",
"SELECT SUM(Score)" // row[0] "SELECT SUM(Score)"
" FROM exa_print_questions" " FROM exa_print_questions"
" WHERE PrnCod=%ld", " WHERE PrnCod=%ld",
Print->PrnCod)) 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);
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -640,27 +640,12 @@ unsigned ExaSet_GetNumSetsExam (long ExaCod)
unsigned ExaSet_GetNumQstsExam (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 *****/ /***** 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", return DB_QuerySELECTUnsigned ("can not get number of questions in an exam print",
"SELECT SUM(NumQstsToPrint)" // row[0] "SELECT SUM(NumQstsToPrint)"
" FROM exa_sets" " FROM exa_sets"
" WHERE ExaCod=%ld", " WHERE ExaCod=%ld",
ExaCod)) 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;
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -10760,36 +10760,14 @@ void Brw_UpdateMyFileViews (long FilCod)
/******************** Get number of file views from a user *******************/ /******************** 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 *****/ /***** Get number of filw views *****/
if (DB_QuerySELECT (&mysql_res,"can not get number of file views", return DB_QuerySELECTUnsigned ("can not get number of file views",
"SELECT SUM(NumViews)" // row[0] "SELECT SUM(NumViews)"
" FROM brw_views" " FROM brw_views"
" WHERE UsrCod=%ld", " WHERE UsrCod=%ld",
UsrCod)) 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;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -10846,33 +10824,14 @@ static void Brw_GetFileViewsFromLoggedUsrs (struct FileMetadata *FileMetadata)
*/ */
static void Brw_GetFileViewsFromNonLoggedUsrs (struct FileMetadata *FileMetadata) static void Brw_GetFileViewsFromNonLoggedUsrs (struct FileMetadata *FileMetadata)
{ {
MYSQL_RES *mysql_res;
MYSQL_ROW row;
/***** Get number of public views *****/ /***** Get number of public views *****/
if (DB_QuerySELECT (&mysql_res,"can not get number of public views" FileMetadata->NumPublicViews =
" of a file", DB_QuerySELECTUnsigned ("can not get number of public views of a file",
"SELECT SUM(NumViews)" // row[0] "SELECT SUM(NumViews)"
" FROM brw_views" " FROM brw_views"
" WHERE FilCod=%ld" " WHERE FilCod=%ld"
" AND UsrCod<=0", " AND UsrCod<=0",
FileMetadata->FilCod)) 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);
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -228,7 +228,7 @@ void Brw_GetFileMetadataByCod (struct FileMetadata *FileMetadata);
bool Brw_GetFileTypeSizeAndDate (struct FileMetadata *FileMetadata); bool Brw_GetFileTypeSizeAndDate (struct FileMetadata *FileMetadata);
void Brw_GetAndUpdateFileViews (struct FileMetadata *FileMetadata); void Brw_GetAndUpdateFileViews (struct FileMetadata *FileMetadata);
void Brw_UpdateMyFileViews (long FilCod); void Brw_UpdateMyFileViews (long FilCod);
unsigned long Brw_GetNumFileViewsUsr (long UsrCod); unsigned Brw_GetNumFileViewsUsr (long UsrCod);
unsigned Brw_GetNumFilesUsr (long UsrCod); unsigned Brw_GetNumFilesUsr (long UsrCod);
unsigned Brw_GetNumPublicFilesUsr (long UsrCod); unsigned Brw_GetNumPublicFilesUsr (long UsrCod);

View File

@ -85,10 +85,10 @@ static void Ind_ShowTableOfCoursesWithIndicators (const struct Ind_Indicators *I
unsigned NumCrss,MYSQL_RES *mysql_res); unsigned NumCrss,MYSQL_RES *mysql_res);
static unsigned Ind_GetAndUpdateNumIndicatorsCrs (long CrsCod); static unsigned Ind_GetAndUpdateNumIndicatorsCrs (long CrsCod);
static void Ind_StoreIndicatorsCrsIntoDB (long CrsCod,unsigned NumIndicators); static void Ind_StoreIndicatorsCrsIntoDB (long CrsCod,unsigned NumIndicators);
static unsigned long Ind_GetNumFilesInDocumZonesOfCrsFromDB (long CrsCod); static unsigned Ind_GetNumFilesInDocumZonesOfCrsFromDB (long CrsCod);
static unsigned long Ind_GetNumFilesInShareZonesOfCrsFromDB (long CrsCod); static unsigned Ind_GetNumFilesInShareZonesOfCrsFromDB (long CrsCod);
static unsigned long Ind_GetNumFilesInAssigZonesOfCrsFromDB (long CrsCod); static unsigned Ind_GetNumFilesInAssigZonesOfCrsFromDB (long CrsCod);
static unsigned long Ind_GetNumFilesInWorksZonesOfCrsFromDB (long CrsCod); static unsigned Ind_GetNumFilesInWorksZonesOfCrsFromDB (long CrsCod);
/*****************************************************************************/ /*****************************************************************************/
/******************* Request showing statistics of courses *******************/ /******************* Request showing statistics of courses *******************/
@ -1233,14 +1233,14 @@ static void Ind_ShowTableOfCoursesWithIndicators (const struct Ind_Indicators *I
(IndicatorsCrs.NumFilesAssignments != 0) ? "DAT_SMALL_GREEN" : (IndicatorsCrs.NumFilesAssignments != 0) ? "DAT_SMALL_GREEN" :
"DAT_SMALL_RED", "DAT_SMALL_RED",
Gbl.RowEvenOdd); Gbl.RowEvenOdd);
HTM_UnsignedLong (IndicatorsCrs.NumFilesAssignments); HTM_Unsigned (IndicatorsCrs.NumFilesAssignments);
HTM_TD_End (); HTM_TD_End ();
HTM_TD_Begin ("class=\"%s RM COLOR%u\"", HTM_TD_Begin ("class=\"%s RM COLOR%u\"",
(IndicatorsCrs.NumFilesWorks != 0) ? "DAT_SMALL_GREEN" : (IndicatorsCrs.NumFilesWorks != 0) ? "DAT_SMALL_GREEN" :
"DAT_SMALL_RED", "DAT_SMALL_RED",
Gbl.RowEvenOdd); Gbl.RowEvenOdd);
HTM_UnsignedLong (IndicatorsCrs.NumFilesWorks); HTM_Unsigned (IndicatorsCrs.NumFilesWorks);
HTM_TD_End (); HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT_SMALL_GREEN CM COLOR%u\"", 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" : (IndicatorsCrs.NumFilesInDocumentZones != 0) ? "DAT_SMALL_GREEN" :
"DAT_SMALL_RED", "DAT_SMALL_RED",
Gbl.RowEvenOdd); Gbl.RowEvenOdd);
HTM_UnsignedLong (IndicatorsCrs.NumFilesInDocumentZones); HTM_Unsigned (IndicatorsCrs.NumFilesInDocumentZones);
HTM_TD_End (); HTM_TD_End ();
HTM_TD_Begin ("class=\"%s RM COLOR%u\"", HTM_TD_Begin ("class=\"%s RM COLOR%u\"",
(IndicatorsCrs.NumFilesInSharedZones != 0) ? "DAT_SMALL_GREEN" : (IndicatorsCrs.NumFilesInSharedZones != 0) ? "DAT_SMALL_GREEN" :
"DAT_SMALL_RED", "DAT_SMALL_RED",
Gbl.RowEvenOdd); Gbl.RowEvenOdd);
HTM_UnsignedLong (IndicatorsCrs.NumFilesInSharedZones); HTM_Unsigned (IndicatorsCrs.NumFilesInSharedZones);
HTM_TD_End (); HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT_SMALL_GREEN CM COLOR%u\"", HTM_TD_Begin ("class=\"DAT_SMALL_GREEN CM COLOR%u\"",
@ -1435,7 +1435,7 @@ void Ind_ComputeAndStoreIndicatorsCrs (long CrsCod,int NumIndicatorsFromDB,
IndicatorsCrs->NumIndicators++; IndicatorsCrs->NumIndicators++;
/***** Indicator #2: information about assignments *****/ /***** Indicator #2: information about assignments *****/
IndicatorsCrs->NumAssignments = Asg_GetNumAssignmentsInCrs (CrsCod); IndicatorsCrs->NumAssignments = Asg_GetNumAssignmentsInCrs (CrsCod);
IndicatorsCrs->NumFilesAssignments = Ind_GetNumFilesInAssigZonesOfCrsFromDB (CrsCod); IndicatorsCrs->NumFilesAssignments = Ind_GetNumFilesInAssigZonesOfCrsFromDB (CrsCod);
IndicatorsCrs->NumFilesWorks = Ind_GetNumFilesInWorksZonesOfCrsFromDB (CrsCod); IndicatorsCrs->NumFilesWorks = Ind_GetNumFilesInWorksZonesOfCrsFromDB (CrsCod);
IndicatorsCrs->ThereAreAssignments = (IndicatorsCrs->NumAssignments != 0) || 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 ***********/ /*********** 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]; 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 *****/ /***** Get number of files in document zones of a course from database *****/
DB_QuerySELECT (&mysql_res,"can not get the number of files", return DB_QuerySELECTUnsigned ("can not get the number of files",
"SELECT" "SELECT"
" (SELECT COALESCE(SUM(NumFiles),0)" // row[0] " (SELECT COALESCE(SUM(NumFiles),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)" // row[0] " (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)"
" FROM grp_types," " FROM grp_types,"
"grp_groups," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE grp_types.CrsCod=%ld" " WHERE grp_types.CrsCod=%ld"
" AND grp_types.GrpTypCod=grp_groups.GrpTypCod" " AND grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND brw_sizes.FileBrowser=%u" " AND brw_sizes.FileBrowser=%u"
" AND brw_sizes.Cod=grp_groups.GrpCod)", " AND brw_sizes.Cod=grp_groups.GrpCod)",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_DOC_CRS], (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_DOC_CRS],
CrsCod, CrsCod,
CrsCod, CrsCod,
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_DOC_GRP]); (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;
} }
/*****************************************************************************/ /*****************************************************************************/
/*********** Get the number of files in shared zones of a course ***********/ /*********** 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]; 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 *****/ /***** Get number of files in document zones of a course from database *****/
DB_QuerySELECT (&mysql_res,"can not get the number of files", return DB_QuerySELECTUnsigned ("can not get the number of files",
"SELECT" "SELECT"
" (SELECT COALESCE(SUM(NumFiles),0)" // row[0] " (SELECT COALESCE(SUM(NumFiles),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)" // row[0] " (SELECT COALESCE(SUM(brw_sizes.NumFiles),0)"
" FROM grp_types," " FROM grp_types,"
"grp_groups," "grp_groups,"
"brw_sizes" "brw_sizes"
" WHERE grp_types.CrsCod=%ld" " WHERE grp_types.CrsCod=%ld"
" AND grp_types.GrpTypCod=grp_groups.GrpTypCod" " AND grp_types.GrpTypCod=grp_groups.GrpTypCod"
" AND brw_sizes.FileBrowser=%u" " AND brw_sizes.FileBrowser=%u"
" AND brw_sizes.Cod=grp_groups.GrpCod)", " AND brw_sizes.Cod=grp_groups.GrpCod)",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_SHR_CRS], (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_SHR_CRS],
CrsCod, CrsCod,
CrsCod, CrsCod,
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_SHR_GRP]); (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;
} }
/*****************************************************************************/ /*****************************************************************************/
/********* Get the number of files in assignment zones of a course ***********/ /********* 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]; 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 *****/ /***** Get number of files in document zones of a course from database *****/
DB_QuerySELECT (&mysql_res,"can not get the number of files", return DB_QuerySELECTUnsigned ("can not get the number of files",
"SELECT COALESCE(SUM(NumFiles),0)" // row[0] "SELECT COALESCE(SUM(NumFiles),0)"
" FROM brw_sizes" " FROM brw_sizes"
" WHERE FileBrowser=%u" " WHERE FileBrowser=%u"
" AND Cod=%ld", " AND Cod=%ld",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_ASG_USR], (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_ASG_USR],
CrsCod); 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;
} }
/*****************************************************************************/ /*****************************************************************************/
/************* Get the number of files in works zones of a course ************/ /************* 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]; 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 *****/ /***** Get number of files in document zones of a course from database *****/
DB_QuerySELECT (&mysql_res,"can not get the number of files", return DB_QuerySELECTUnsigned ("can not get the number of files",
"SELECT COALESCE(SUM(NumFiles),0)" // row[0] "SELECT COALESCE(SUM(NumFiles),0)"
" FROM brw_sizes" " FROM brw_sizes"
" WHERE FileBrowser=%u" " WHERE FileBrowser=%u"
" AND Cod=%ld", " AND Cod=%ld",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_WRK_USR], (unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_WRK_USR],
CrsCod); 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;
} }

View File

@ -36,16 +36,16 @@
struct Ind_IndicatorsCrs struct Ind_IndicatorsCrs
{ {
unsigned long NumFilesInDocumentZones; unsigned NumFilesInDocumentZones;
unsigned long NumFilesInSharedZones; unsigned NumFilesInSharedZones;
bool ThereIsSyllabus; bool ThereIsSyllabus;
Inf_InfoSrc_t TeachingGuideSrc; Inf_InfoSrc_t TeachingGuideSrc;
Inf_InfoSrc_t SyllabusLecSrc; Inf_InfoSrc_t SyllabusLecSrc;
Inf_InfoSrc_t SyllabusPraSrc; Inf_InfoSrc_t SyllabusPraSrc;
bool ThereAreAssignments; bool ThereAreAssignments;
unsigned NumAssignments; unsigned NumAssignments;
unsigned long NumFilesAssignments; unsigned NumFilesAssignments;
unsigned long NumFilesWorks; unsigned NumFilesWorks;
bool ThereIsOnlineTutoring; bool ThereIsOnlineTutoring;
unsigned NumThreads; unsigned NumThreads;
unsigned NumPosts; unsigned NumPosts;

View File

@ -2130,7 +2130,10 @@ static void Mch_GetElapsedTime (unsigned NumRows,MYSQL_RES *mysql_res,
if (row[0]) if (row[0])
/* Get the elapsed time (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; ElapsedTimeGotFromDB = true;
} }

View File

@ -1163,12 +1163,13 @@ static void Prf_GetNumFileViewsAndStoreAsUsrFigure (long UsrCod)
Prf_ResetUsrFigures (&UsrFigures); Prf_ResetUsrFigures (&UsrFigures);
/***** Get number of file views from database *****/ /***** 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 *****/ /***** Update number of file views in user's figures *****/
if (Prf_CheckIfUsrFiguresExists (UsrCod)) if (Prf_CheckIfUsrFiguresExists (UsrCod))
DB_QueryUPDATE ("can not update user's figures", DB_QueryUPDATE ("can not update user's figures",
"UPDATE usr_figures SET NumFileViews=%ld" "UPDATE usr_figures"
" SET NumFileViews=%ld"
" WHERE UsrCod=%ld", " WHERE UsrCod=%ld",
UsrFigures.NumFileViews,UsrCod); UsrFigures.NumFileViews,UsrCod);
else // User entry does not exist else // User entry does not exist