mirror of https://github.com/acanas/swad-core.git
Version 20.59: Apr 06, 2021 Optimizations in database selects.
This commit is contained in:
parent
364b133b28
commit
0f34fec7bd
41
swad_API.c
41
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");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 ************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -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,...);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
182
swad_indicator.c
182
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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue