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)
{
/***** 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");

View File

@ -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);

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.
*/
#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)

View File

@ -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 ************/
/*****************************************************************************/

View File

@ -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,...);

View File

@ -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);
}
/*****************************************************************************/

View File

@ -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);
}
/*****************************************************************************/

View File

@ -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);
}
/*****************************************************************************/

View File

@ -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);

View File

@ -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);
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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