%s: ",
@@ -2601,7 +2597,6 @@ static void Svy_ShowFormEditOneQst (long SvyCod,struct SurveyQuestion *SvyQst,
extern const char *Txt_SURVEY_STR_ANSWER_TYPES[Svy_NUM_ANS_TYPES];
extern const char *Txt_Save;
extern const char *Txt_Create_question;
- char Query[256];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumAns;
@@ -2614,10 +2609,10 @@ static void Svy_ShowFormEditOneQst (long SvyCod,struct SurveyQuestion *SvyQst,
{
/***** Get the type of answer and the stem from the database *****/
/* Get the question from database */
- sprintf (Query,"SELECT QstInd,AnsType,Stem FROM svy_questions"
+ DB_BuildQuery ("SELECT QstInd,AnsType,Stem FROM svy_questions"
" WHERE QstCod=%ld AND SvyCod=%ld",
- SvyQst->QstCod,SvyCod);
- DB_QuerySELECT (Query,&mysql_res,"can not get a question");
+ SvyQst->QstCod,SvyCod);
+ DB_QuerySELECT_new (&mysql_res,"can not get a question");
row = mysql_fetch_row (mysql_res);
@@ -2858,14 +2853,13 @@ static bool Svy_CheckIfAnswerExists (long QstCod,unsigned AnsInd)
static unsigned Svy_GetAnswersQst (long QstCod,MYSQL_RES **mysql_res)
{
- char Query[256];
unsigned long NumRows;
/***** Get answers of a question from database *****/
- sprintf (Query,"SELECT AnsInd,NumUsrs,Answer FROM svy_answers"
+ DB_BuildQuery ("SELECT AnsInd,NumUsrs,Answer FROM svy_answers"
" WHERE QstCod=%ld ORDER BY AnsInd",
- QstCod);
- NumRows = DB_QuerySELECT (Query,mysql_res,"can not get answers of a question");
+ QstCod);
+ NumRows = DB_QuerySELECT_new (mysql_res,"can not get answers of a question");
/***** Count number of rows of result *****/
if (NumRows == 0)
@@ -3095,16 +3089,14 @@ void Svy_ReceiveQst (void)
static unsigned Svy_GetQstIndFromQstCod (long QstCod)
{
- char Query[128];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
unsigned QstInd = 0;
/***** Get number of surveys with a field value from database *****/
- sprintf (Query,"SELECT QstInd FROM svy_questions WHERE QstCod=%ld",
- QstCod);
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get question index");
+ DB_BuildQuery ("SELECT QstInd FROM svy_questions WHERE QstCod=%ld",QstCod);
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not get question index");
/***** Get number of users *****/
if (NumRows)
@@ -3128,15 +3120,14 @@ static unsigned Svy_GetQstIndFromQstCod (long QstCod)
static unsigned Svy_GetNextQuestionIndexInSvy (long SvyCod)
{
- char Query[128];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned QstInd = 0;
/***** Get number of surveys with a field value from database *****/
- sprintf (Query,"SELECT MAX(QstInd) FROM svy_questions WHERE SvyCod=%ld",
- SvyCod);
- DB_QuerySELECT (Query,&mysql_res,"can not get last question index");
+ DB_BuildQuery ("SELECT MAX(QstInd) FROM svy_questions WHERE SvyCod=%ld",
+ SvyCod);
+ DB_QuerySELECT_new (&mysql_res,"can not get last question index");
/***** Get number of users *****/
row = mysql_fetch_row (mysql_res);
@@ -3168,7 +3159,6 @@ static void Svy_ListSvyQuestions (struct Survey *Svy,
extern const char *Txt_SURVEY_STR_ANSWER_TYPES[Svy_NUM_ANS_TYPES];
extern const char *Txt_This_survey_has_no_questions;
extern const char *Txt_Done;
- char Query[256];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumQsts;
@@ -3179,11 +3169,11 @@ static void Svy_ListSvyQuestions (struct Survey *Svy,
bool PutFormAnswerSurvey = Svy->Status.ICanAnswer && !Editing;
/***** Get data of questions from database *****/
- sprintf (Query,"SELECT QstCod,QstInd,AnsType,Stem"
+ DB_BuildQuery ("SELECT QstCod,QstInd,AnsType,Stem"
" FROM svy_questions"
" WHERE SvyCod=%ld ORDER BY QstInd",
- Svy->SvyCod);
- NumQsts = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get data of a question");
+ Svy->SvyCod);
+ NumQsts = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get data of a question");
/***** Start box *****/
Gbl.Svys.SvyCodToEdit = Svy->SvyCod;
@@ -3661,7 +3651,6 @@ void Svy_ReceiveSurveyAnswers (void)
static void Svy_ReceiveAndStoreUserAnswersToASurvey (long SvyCod)
{
- char Query[256];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumQst;
@@ -3674,13 +3663,11 @@ static void Svy_ReceiveAndStoreUserAnswersToASurvey (long SvyCod)
unsigned AnsInd;
/***** Get questions of this survey from database *****/
- sprintf (Query,"SELECT QstCod FROM svy_questions"
+ DB_BuildQuery ("SELECT QstCod FROM svy_questions"
" WHERE SvyCod=%ld ORDER BY QstCod",
- SvyCod);
- DB_QuerySELECT (Query,&mysql_res,"can not get questions of a survey");
-
- if ((NumQsts = (unsigned) DB_QuerySELECT (Query,&mysql_res,
- "can not get surveys")))
+ SvyCod);
+ if ((NumQsts = (unsigned) DB_QuerySELECT_new (&mysql_res,
+ "can not get questions of a survey")))
{
// This survey has questions
/***** Get questions *****/
@@ -3783,7 +3770,6 @@ static unsigned Svy_GetNumUsrsWhoHaveAnsweredSvy (long SvyCod)
unsigned Svy_GetNumCoursesWithCrsSurveys (Sco_Scope_t Scope)
{
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
- char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumCourses;
@@ -3792,13 +3778,13 @@ unsigned Svy_GetNumCoursesWithCrsSurveys (Sco_Scope_t Scope)
switch (Scope)
{
case Sco_SCOPE_SYS:
- sprintf (Query,"SELECT COUNT(DISTINCT Cod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT Cod)"
" FROM surveys"
" WHERE Scope='%s'",
- Sco_ScopeDB[Sco_SCOPE_CRS]);
+ Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_CTY:
- sprintf (Query,"SELECT COUNT(DISTINCT surveys.Cod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT surveys.Cod)"
" FROM institutions,centres,degrees,courses,surveys"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
@@ -3806,51 +3792,51 @@ unsigned Svy_GetNumCoursesWithCrsSurveys (Sco_Scope_t Scope)
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=surveys.Cod"
" AND surveys.Scope='%s'",
- Gbl.CurrentIns.Ins.InsCod,
- Sco_ScopeDB[Sco_SCOPE_CRS]);
+ Gbl.CurrentIns.Ins.InsCod,
+ Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_INS:
- sprintf (Query,"SELECT COUNT(DISTINCT surveys.Cod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT surveys.Cod)"
" FROM centres,degrees,courses,surveys"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=surveys.Cod"
" AND surveys.Scope='%s'",
- Gbl.CurrentIns.Ins.InsCod,
- Sco_ScopeDB[Sco_SCOPE_CRS]);
+ Gbl.CurrentIns.Ins.InsCod,
+ Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_CTR:
- sprintf (Query,"SELECT COUNT(DISTINCT surveys.Cod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT surveys.Cod)"
" FROM degrees,courses,surveys"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=surveys.Cod"
" AND surveys.Scope='%s'",
- Gbl.CurrentCtr.Ctr.CtrCod,
- Sco_ScopeDB[Sco_SCOPE_CRS]);
+ Gbl.CurrentCtr.Ctr.CtrCod,
+ Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_DEG:
- sprintf (Query,"SELECT COUNT(DISTINCT surveys.Cod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT surveys.Cod)"
" FROM courses,surveys"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=surveys.Cod"
" AND surveys.Scope='%s'",
- Gbl.CurrentDeg.Deg.DegCod,
- Sco_ScopeDB[Sco_SCOPE_CRS]);
+ Gbl.CurrentDeg.Deg.DegCod,
+ Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_CRS:
- sprintf (Query,"SELECT COUNT(DISTINCT Cod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT Cod)"
" FROM surveys"
" WHERE Scope='%s' AND Cod=%ld",
- Sco_ScopeDB[Sco_SCOPE_CRS],
- Gbl.CurrentCrs.Crs.CrsCod);
+ Sco_ScopeDB[Sco_SCOPE_CRS],
+ Gbl.CurrentCrs.Crs.CrsCod);
break;
default:
Lay_WrongScopeExit ();
break;
}
- DB_QuerySELECT (Query,&mysql_res,"can not get number of courses with surveys");
+ DB_QuerySELECT_new (&mysql_res,"can not get number of courses with surveys");
/***** Get number of surveys *****/
row = mysql_fetch_row (mysql_res);
@@ -3872,7 +3858,6 @@ unsigned Svy_GetNumCoursesWithCrsSurveys (Sco_Scope_t Scope)
unsigned Svy_GetNumCrsSurveys (Sco_Scope_t Scope,unsigned *NumNotif)
{
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
- char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumSurveys;
@@ -3881,13 +3866,13 @@ unsigned Svy_GetNumCrsSurveys (Sco_Scope_t Scope,unsigned *NumNotif)
switch (Scope)
{
case Sco_SCOPE_SYS:
- sprintf (Query,"SELECT COUNT(*),SUM(NumNotif)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(NumNotif)"
" FROM surveys"
" WHERE Scope='%s'",
- Sco_ScopeDB[Sco_SCOPE_CRS]);
+ Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_CTY:
- sprintf (Query,"SELECT COUNT(*),SUM(surveys.NumNotif)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(surveys.NumNotif)"
" FROM institutions,centres,degrees,courses,surveys"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
@@ -3895,52 +3880,52 @@ unsigned Svy_GetNumCrsSurveys (Sco_Scope_t Scope,unsigned *NumNotif)
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=surveys.Cod"
" AND surveys.Scope='%s'",
- Gbl.CurrentCty.Cty.CtyCod,
- Sco_ScopeDB[Sco_SCOPE_CRS]);
+ Gbl.CurrentCty.Cty.CtyCod,
+ Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_INS:
- sprintf (Query,"SELECT COUNT(*),SUM(surveys.NumNotif)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(surveys.NumNotif)"
" FROM centres,degrees,courses,surveys"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=surveys.Cod"
" AND surveys.Scope='%s'",
- Gbl.CurrentIns.Ins.InsCod,
- Sco_ScopeDB[Sco_SCOPE_CRS]);
+ Gbl.CurrentIns.Ins.InsCod,
+ Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_CTR:
- sprintf (Query,"SELECT COUNT(*),SUM(surveys.NumNotif)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(surveys.NumNotif)"
" FROM degrees,courses,surveys"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=surveys.Cod"
" AND surveys.Scope='%s'",
- Gbl.CurrentCtr.Ctr.CtrCod,
- Sco_ScopeDB[Sco_SCOPE_CRS]);
+ Gbl.CurrentCtr.Ctr.CtrCod,
+ Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_DEG:
- sprintf (Query,"SELECT COUNT(*),SUM(surveys.NumNotif)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(surveys.NumNotif)"
" FROM courses,surveys"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=surveys.Cod"
" AND surveys.Scope='%s'",
- Gbl.CurrentDeg.Deg.DegCod,
- Sco_ScopeDB[Sco_SCOPE_CRS]);
+ Gbl.CurrentDeg.Deg.DegCod,
+ Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_CRS:
- sprintf (Query,"SELECT COUNT(*),SUM(NumNotif)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(NumNotif)"
" FROM surveys"
" WHERE surveys.Scope='%s'"
" AND CrsCod=%ld",
- Sco_ScopeDB[Sco_SCOPE_CRS],
- Gbl.CurrentCrs.Crs.CrsCod);
+ Sco_ScopeDB[Sco_SCOPE_CRS],
+ Gbl.CurrentCrs.Crs.CrsCod);
break;
default:
Lay_WrongScopeExit ();
break;
}
- DB_QuerySELECT (Query,&mysql_res,"can not get number of surveys");
+ DB_QuerySELECT_new (&mysql_res,"can not get number of surveys");
/***** Get number of surveys *****/
row = mysql_fetch_row (mysql_res);
@@ -3969,7 +3954,6 @@ unsigned Svy_GetNumCrsSurveys (Sco_Scope_t Scope,unsigned *NumNotif)
float Svy_GetNumQstsPerCrsSurvey (Sco_Scope_t Scope)
{
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
- char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
float NumQstsPerSurvey;
@@ -3978,16 +3962,16 @@ float Svy_GetNumQstsPerCrsSurvey (Sco_Scope_t Scope)
switch (Scope)
{
case Sco_SCOPE_SYS:
- sprintf (Query,"SELECT AVG(NumQsts) FROM"
+ DB_BuildQuery ("SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM surveys,svy_questions"
" WHERE surveys.Scope='%s'"
" AND surveys.SvyCod=svy_questions.SvyCod"
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
- Sco_ScopeDB[Sco_SCOPE_CRS]);
+ Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_CTY:
- sprintf (Query,"SELECT AVG(NumQsts) FROM"
+ DB_BuildQuery ("SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM institutions,centres,degrees,courses,surveys,svy_questions"
" WHERE institutions.CtyCod=%ld"
@@ -3998,11 +3982,11 @@ float Svy_GetNumQstsPerCrsSurvey (Sco_Scope_t Scope)
" AND surveys.Scope='%s'"
" AND surveys.SvyCod=svy_questions.SvyCod"
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
- Gbl.CurrentCty.Cty.CtyCod,
- Sco_ScopeDB[Sco_SCOPE_CRS]);
+ Gbl.CurrentCty.Cty.CtyCod,
+ Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_INS:
- sprintf (Query,"SELECT AVG(NumQsts) FROM"
+ DB_BuildQuery ("SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM centres,degrees,courses,surveys,svy_questions"
" WHERE centres.InsCod=%ld"
@@ -4012,11 +3996,11 @@ float Svy_GetNumQstsPerCrsSurvey (Sco_Scope_t Scope)
" AND surveys.Scope='%s'"
" AND surveys.SvyCod=svy_questions.SvyCod"
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
- Gbl.CurrentIns.Ins.InsCod,
- Sco_ScopeDB[Sco_SCOPE_CRS]);
+ Gbl.CurrentIns.Ins.InsCod,
+ Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_CTR:
- sprintf (Query,"SELECT AVG(NumQsts) FROM"
+ DB_BuildQuery ("SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM degrees,courses,surveys,svy_questions"
" WHERE degrees.CtrCod=%ld"
@@ -4025,11 +4009,11 @@ float Svy_GetNumQstsPerCrsSurvey (Sco_Scope_t Scope)
" AND surveys.Scope='%s'"
" AND surveys.SvyCod=svy_questions.SvyCod"
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
- Gbl.CurrentCtr.Ctr.CtrCod,
- Sco_ScopeDB[Sco_SCOPE_CRS]);
+ Gbl.CurrentCtr.Ctr.CtrCod,
+ Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_DEG:
- sprintf (Query,"SELECT AVG(NumQsts) FROM"
+ DB_BuildQuery ("SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM courses,surveys,svy_questions"
" WHERE courses.DegCod=%ld"
@@ -4037,23 +4021,23 @@ float Svy_GetNumQstsPerCrsSurvey (Sco_Scope_t Scope)
" AND surveys.Scope='%s'"
" AND surveys.SvyCod=svy_questions.SvyCod"
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
- Gbl.CurrentDeg.Deg.DegCod,
- Sco_ScopeDB[Sco_SCOPE_CRS]);
+ Gbl.CurrentDeg.Deg.DegCod,
+ Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
case Sco_SCOPE_CRS:
- sprintf (Query,"SELECT AVG(NumQsts) FROM"
+ DB_BuildQuery ("SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM surveys,svy_questions"
" WHERE surveys.Scope='%s' AND surveys.Cod=%ld"
" AND surveys.SvyCod=svy_questions.SvyCod"
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
- Sco_ScopeDB[Sco_SCOPE_CRS],Gbl.CurrentCrs.Crs.CrsCod);
+ Sco_ScopeDB[Sco_SCOPE_CRS],Gbl.CurrentCrs.Crs.CrsCod);
break;
default:
Lay_WrongScopeExit ();
break;
}
- DB_QuerySELECT (Query,&mysql_res,"can not get number of questions per survey");
+ DB_QuerySELECT_new (&mysql_res,"can not get number of questions per survey");
/***** Get number of courses *****/
row = mysql_fetch_row (mysql_res);
diff --git a/swad_test.c b/swad_test.c
index 3357e78b7..68d3bd533 100644
--- a/swad_test.c
+++ b/swad_test.c
@@ -668,7 +668,6 @@ static bool Tst_CheckIfNextTstAllowed (void)
extern const char *Txt_Test;
extern const char *Txt_You_can_not_take_a_new_test_until;
extern const char *Txt_Today;
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long NumSecondsFromNowToNextAccTst = -1L; // Access allowed when this number <= 0
@@ -680,14 +679,14 @@ static bool Tst_CheckIfNextTstAllowed (void)
return true;
/***** Get date of next allowed access to test from database *****/
- sprintf (Query,"SELECT UNIX_TIMESTAMP(LastAccTst+INTERVAL (NumQstsLastTst*%lu) SECOND)-UNIX_TIMESTAMP(),"
+ DB_BuildQuery ("SELECT UNIX_TIMESTAMP(LastAccTst+INTERVAL (NumQstsLastTst*%lu) SECOND)-UNIX_TIMESTAMP(),"
"UNIX_TIMESTAMP(LastAccTst+INTERVAL (NumQstsLastTst*%lu) SECOND)"
" FROM crs_usr"
" WHERE CrsCod=%ld AND UsrCod=%ld",
- Gbl.Test.Config.MinTimeNxtTstPerQst,
- Gbl.Test.Config.MinTimeNxtTstPerQst,
- Gbl.CurrentCrs.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod);
- if (DB_QuerySELECT (Query,&mysql_res,"can not get last access to test") == 1)
+ Gbl.Test.Config.MinTimeNxtTstPerQst,
+ Gbl.Test.Config.MinTimeNxtTstPerQst,
+ Gbl.CurrentCrs.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod);
+ if (DB_QuerySELECT_new (&mysql_res,"can not get last access to test") == 1)
{
/* Get seconds from now to next access to test */
row = mysql_fetch_row (mysql_res);
@@ -749,7 +748,6 @@ static void Tst_SetTstStatus (unsigned NumTst,Tst_Status_t TstStatus)
static Tst_Status_t Tst_GetTstStatus (unsigned NumTst)
{
- char Query[256 + Cns_BYTES_SESSION_ID];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@@ -757,10 +755,10 @@ static Tst_Status_t Tst_GetTstStatus (unsigned NumTst)
Tst_Status_t TstStatus = Tst_STATUS_ERROR;
/***** Get status of test from database *****/
- sprintf (Query,"SELECT Status FROM tst_status"
+ DB_BuildQuery ("SELECT Status FROM tst_status"
" WHERE SessionId='%s' AND CrsCod=%ld AND NumTst=%u",
- Gbl.Session.Id,Gbl.CurrentCrs.Crs.CrsCod,NumTst);
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get status of test");
+ Gbl.Session.Id,Gbl.CurrentCrs.Crs.CrsCod,NumTst);
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not get status of test");
if (NumRows == 1)
{
@@ -784,7 +782,6 @@ static Tst_Status_t Tst_GetTstStatus (unsigned NumTst)
static unsigned Tst_GetNumAccessesTst (void)
{
- char Query[256];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@@ -793,10 +790,10 @@ static unsigned Tst_GetNumAccessesTst (void)
if (Gbl.Usrs.Me.IBelongToCurrentCrs)
{
/***** Get number of hits to test from database *****/
- sprintf (Query,"SELECT NumAccTst FROM crs_usr"
+ DB_BuildQuery ("SELECT NumAccTst FROM crs_usr"
" WHERE CrsCod=%ld AND UsrCod=%ld",
- Gbl.CurrentCrs.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod);
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get number of hits to test");
+ Gbl.CurrentCrs.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod);
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not get number of hits to test");
if (NumRows == 0)
NumAccessesTst = 0;
@@ -861,14 +858,13 @@ static void Tst_ShowTestQuestionsWhenSeeing (MYSQL_RES *mysql_res)
static void Tst_ShowTstTagsPresentInATestResult (long TstCod)
{
extern const char *Txt_no_tags;
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
unsigned long NumRow;
/***** Get all tags of questions in this test *****/
- sprintf (Query,"SELECT tst_tags.TagTxt FROM"
+ DB_BuildQuery ("SELECT tst_tags.TagTxt FROM"
" (SELECT DISTINCT(tst_question_tags.TagCod)"
" FROM tst_question_tags,tst_exam_questions"
" WHERE tst_exam_questions.TstCod=%ld"
@@ -876,8 +872,8 @@ static void Tst_ShowTstTagsPresentInATestResult (long TstCod)
" AS TagsCods,tst_tags"
" WHERE TagsCods.TagCod=tst_tags.TagCod"
" ORDER BY tst_tags.TagTxt",
- TstCod);
- if ((NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get tags present in a test result")))
+ TstCod);
+ if ((NumRows = DB_QuerySELECT_new (&mysql_res,"can not get tags present in a test result")))
{
/***** Write the tags *****/
fprintf (Gbl.F.Out,"
");
@@ -1679,13 +1675,11 @@ static bool Tst_CheckIfCurrentCrsHasTestTags (void)
static unsigned long Tst_GetAllTagsFromCurrentCrs (MYSQL_RES **mysql_res)
{
- char Query[256];
-
/***** Get available tags from database *****/
- sprintf (Query,"SELECT TagCod,TagTxt,TagHidden FROM tst_tags"
+ DB_BuildQuery ("SELECT TagCod,TagTxt,TagHidden FROM tst_tags"
" WHERE CrsCod=%ld ORDER BY TagTxt",
- Gbl.CurrentCrs.Crs.CrsCod);
- return DB_QuerySELECT (Query,mysql_res,"can not get available tags");
+ Gbl.CurrentCrs.Crs.CrsCod);
+ return DB_QuerySELECT_new (mysql_res,"can not get available tags");
}
/*****************************************************************************/
@@ -1695,13 +1689,11 @@ static unsigned long Tst_GetAllTagsFromCurrentCrs (MYSQL_RES **mysql_res)
static unsigned long Tst_GetEnabledTagsFromThisCrs (MYSQL_RES **mysql_res)
{
- char Query[256];
-
/***** Get available not hidden tags from database *****/
- sprintf (Query,"SELECT TagCod,TagTxt FROM tst_tags"
+ DB_BuildQuery ("SELECT TagCod,TagTxt FROM tst_tags"
" WHERE CrsCod=%ld AND TagHidden='N' ORDER BY TagTxt",
- Gbl.CurrentCrs.Crs.CrsCod);
- return DB_QuerySELECT (Query,mysql_res,"can not get available enabled tags");
+ Gbl.CurrentCrs.Crs.CrsCod);
+ return DB_QuerySELECT_new (mysql_res,"can not get available enabled tags");
}
/*****************************************************************************/
@@ -2070,16 +2062,15 @@ static void Tst_PutInputFieldNumQst (const char *Field,const char *Label,
static void Tst_GetConfigTstFromDB (void)
{
- char Query[256];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
/***** Get configuration of test for current course from database *****/
- sprintf (Query,"SELECT Pluggable,Min,Def,Max,MinTimeNxtTstPerQst,Feedback"
+ DB_BuildQuery ("SELECT Pluggable,Min,Def,Max,MinTimeNxtTstPerQst,Feedback"
" FROM tst_config WHERE CrsCod=%ld",
- Gbl.CurrentCrs.Crs.CrsCod);
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get configuration of test");
+ Gbl.CurrentCrs.Crs.CrsCod);
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not get configuration of test");
Gbl.Test.Config.Feedback = Tst_FEEDBACK_DEFAULT;
Gbl.Test.Config.MinTimeNxtTstPerQst = 0UL;
@@ -2169,16 +2160,15 @@ void Tst_GetConfigFromRow (MYSQL_ROW row)
bool Tst_CheckIfCourseHaveTestsAndPluggableIsUnknown (void)
{
- char Query[128];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
Tst_Pluggable_t Pluggable;
/***** Get pluggability of tests for current course from database *****/
- sprintf (Query,"SELECT Pluggable FROM tst_config WHERE CrsCod=%ld",
- Gbl.CurrentCrs.Crs.CrsCod);
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get configuration of test");
+ DB_BuildQuery ("SELECT Pluggable FROM tst_config WHERE CrsCod=%ld",
+ Gbl.CurrentCrs.Crs.CrsCod);
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not get configuration of test");
if (NumRows == 0)
Gbl.Test.Config.Pluggable = Tst_PLUGGABLE_UNKNOWN;
@@ -2480,7 +2470,6 @@ static unsigned long Tst_GetQuestions (MYSQL_RES **mysql_res)
{
extern const char *Txt_No_questions_found_matching_your_search_criteria;
unsigned long NumRows;
- char Query[Tst_MAX_BYTES_QUERY_TEST + 1];
long LengthQuery;
unsigned NumItemInList;
const char *Ptr;
@@ -2490,6 +2479,10 @@ static unsigned long Tst_GetQuestions (MYSQL_RES **mysql_res)
Tst_AnswerType_t AnsType;
char CrsCodStr[1 + 10 + 1];
+ /***** Allocate space for query *****/
+ if ((Gbl.DB.QueryPtr = (char *) malloc (Tst_MAX_BYTES_QUERY_TEST + 1)) == NULL)
+ Lay_NotEnoughMemoryExit ();
+
/***** Select questions *****/
/* Start query */
/*
@@ -2506,56 +2499,57 @@ static unsigned long Tst_GetQuestions (MYSQL_RES **mysql_res)
row[10] NumHitsNotBlank
row[11] Score
*/
- sprintf (Query,"SELECT tst_questions.QstCod,"
- "UNIX_TIMESTAMP(tst_questions.EditTime) AS F,"
- "tst_questions.AnsType,tst_questions.Shuffle,"
- "tst_questions.Stem,tst_questions.Feedback,"
- "tst_questions.ImageName,"
- "tst_questions.ImageTitle,"
- "tst_questions.ImageURL,"
- "tst_questions.NumHits,tst_questions.NumHitsNotBlank,"
- "tst_questions.Score"
- " FROM tst_questions");
+ snprintf (Gbl.DB.QueryPtr,Tst_MAX_BYTES_QUERY_TEST + 1,
+ "SELECT tst_questions.QstCod,"
+ "UNIX_TIMESTAMP(tst_questions.EditTime) AS F,"
+ "tst_questions.AnsType,tst_questions.Shuffle,"
+ "tst_questions.Stem,tst_questions.Feedback,"
+ "tst_questions.ImageName,"
+ "tst_questions.ImageTitle,"
+ "tst_questions.ImageURL,"
+ "tst_questions.NumHits,tst_questions.NumHitsNotBlank,"
+ "tst_questions.Score"
+ " FROM tst_questions");
if (!Gbl.Test.Tags.All)
- Str_Concat (Query,",tst_question_tags,tst_tags",
+ Str_Concat (Gbl.DB.QueryPtr,",tst_question_tags,tst_tags",
Tst_MAX_BYTES_QUERY_TEST);
- Str_Concat (Query," WHERE tst_questions.CrsCod='",
+ Str_Concat (Gbl.DB.QueryPtr," WHERE tst_questions.CrsCod='",
Tst_MAX_BYTES_QUERY_TEST);
snprintf (CrsCodStr,sizeof (CrsCodStr),
"%ld",
Gbl.CurrentCrs.Crs.CrsCod);
- Str_Concat (Query,CrsCodStr,
+ Str_Concat (Gbl.DB.QueryPtr,CrsCodStr,
Tst_MAX_BYTES_QUERY_TEST);
- Str_Concat (Query,"' AND tst_questions.EditTime>=FROM_UNIXTIME('",
+ Str_Concat (Gbl.DB.QueryPtr,"' AND tst_questions.EditTime>=FROM_UNIXTIME('",
Tst_MAX_BYTES_QUERY_TEST);
snprintf (LongStr,sizeof (LongStr),
"%ld",
(long) Gbl.DateRange.TimeUTC[0]);
- Str_Concat (Query,LongStr,
+ Str_Concat (Gbl.DB.QueryPtr,LongStr,
Tst_MAX_BYTES_QUERY_TEST);
- Str_Concat (Query,"') AND tst_questions.EditTime<=FROM_UNIXTIME('",
+ Str_Concat (Gbl.DB.QueryPtr,"') AND tst_questions.EditTime<=FROM_UNIXTIME('",
Tst_MAX_BYTES_QUERY_TEST);
snprintf (LongStr,sizeof (LongStr),
"%ld",
(long) Gbl.DateRange.TimeUTC[1]);
- Str_Concat (Query,LongStr,
+ Str_Concat (Gbl.DB.QueryPtr,LongStr,
Tst_MAX_BYTES_QUERY_TEST);
- Str_Concat (Query,"')",
+ Str_Concat (Gbl.DB.QueryPtr,"')",
Tst_MAX_BYTES_QUERY_TEST);
/* Add the tags selected */
if (!Gbl.Test.Tags.All)
{
- Str_Concat (Query," AND tst_questions.QstCod=tst_question_tags.QstCod"
+ Str_Concat (Gbl.DB.QueryPtr," AND tst_questions.QstCod=tst_question_tags.QstCod"
" AND tst_question_tags.TagCod=tst_tags.TagCod"
" AND tst_tags.CrsCod='",
Tst_MAX_BYTES_QUERY_TEST);
- Str_Concat (Query,CrsCodStr,
+ Str_Concat (Gbl.DB.QueryPtr,CrsCodStr,
Tst_MAX_BYTES_QUERY_TEST);
- Str_Concat (Query,"'",
+ Str_Concat (Gbl.DB.QueryPtr,"'",
Tst_MAX_BYTES_QUERY_TEST);
- LengthQuery = strlen (Query);
+ LengthQuery = strlen (Gbl.DB.QueryPtr);
NumItemInList = 0;
Ptr = Gbl.Test.Tags.List;
while (*Ptr)
@@ -2564,24 +2558,24 @@ static unsigned long Tst_GetQuestions (MYSQL_RES **mysql_res)
LengthQuery = LengthQuery + 35 + strlen (TagText) + 1;
if (LengthQuery > Tst_MAX_BYTES_QUERY_TEST - 256)
Lay_ShowErrorAndExit ("Query size exceed.");
- Str_Concat (Query,
+ Str_Concat (Gbl.DB.QueryPtr,
NumItemInList ? " OR tst_tags.TagTxt='" :
" AND (tst_tags.TagTxt='",
Tst_MAX_BYTES_QUERY_TEST);
- Str_Concat (Query,TagText,
+ Str_Concat (Gbl.DB.QueryPtr,TagText,
Tst_MAX_BYTES_QUERY_TEST);
- Str_Concat (Query,"'",
+ Str_Concat (Gbl.DB.QueryPtr,"'",
Tst_MAX_BYTES_QUERY_TEST);
NumItemInList++;
}
- Str_Concat (Query,")",
+ Str_Concat (Gbl.DB.QueryPtr,")",
Tst_MAX_BYTES_QUERY_TEST);
}
/* Add the types of answer selected */
if (!Gbl.Test.AllAnsTypes)
{
- LengthQuery = strlen (Query);
+ LengthQuery = strlen (Gbl.DB.QueryPtr);
NumItemInList = 0;
Ptr = Gbl.Test.ListAnsTypes;
while (*Ptr)
@@ -2591,56 +2585,56 @@ static unsigned long Tst_GetQuestions (MYSQL_RES **mysql_res)
LengthQuery = LengthQuery + 35 + strlen (Tst_StrAnswerTypesDB[AnsType]) + 1;
if (LengthQuery > Tst_MAX_BYTES_QUERY_TEST - 256)
Lay_ShowErrorAndExit ("Query size exceed.");
- Str_Concat (Query,
+ Str_Concat (Gbl.DB.QueryPtr,
NumItemInList ? " OR tst_questions.AnsType='" :
" AND (tst_questions.AnsType='",
Tst_MAX_BYTES_QUERY_TEST);
- Str_Concat (Query,Tst_StrAnswerTypesDB[AnsType],
+ Str_Concat (Gbl.DB.QueryPtr,Tst_StrAnswerTypesDB[AnsType],
Tst_MAX_BYTES_QUERY_TEST);
- Str_Concat (Query,"'",
+ Str_Concat (Gbl.DB.QueryPtr,"'",
Tst_MAX_BYTES_QUERY_TEST);
NumItemInList++;
}
- Str_Concat (Query,")",
+ Str_Concat (Gbl.DB.QueryPtr,")",
Tst_MAX_BYTES_QUERY_TEST);
}
/* End the query */
- Str_Concat (Query," GROUP BY tst_questions.QstCod",
+ Str_Concat (Gbl.DB.QueryPtr," GROUP BY tst_questions.QstCod",
Tst_MAX_BYTES_QUERY_TEST);
switch (Gbl.Test.SelectedOrder)
{
case Tst_ORDER_STEM:
- Str_Concat (Query," ORDER BY tst_questions.Stem",
+ Str_Concat (Gbl.DB.QueryPtr," ORDER BY tst_questions.Stem",
Tst_MAX_BYTES_QUERY_TEST);
break;
case Tst_ORDER_NUM_HITS:
- Str_Concat (Query," ORDER BY tst_questions.NumHits DESC,"
- "tst_questions.Stem",
+ Str_Concat (Gbl.DB.QueryPtr," ORDER BY tst_questions.NumHits DESC,"
+ "tst_questions.Stem",
Tst_MAX_BYTES_QUERY_TEST);
break;
case Tst_ORDER_AVERAGE_SCORE:
- Str_Concat (Query," ORDER BY tst_questions.Score/tst_questions.NumHits DESC,"
- "tst_questions.NumHits DESC,"
- "tst_questions.Stem",
+ Str_Concat (Gbl.DB.QueryPtr," ORDER BY tst_questions.Score/tst_questions.NumHits DESC,"
+ "tst_questions.NumHits DESC,"
+ "tst_questions.Stem",
Tst_MAX_BYTES_QUERY_TEST);
break;
case Tst_ORDER_NUM_HITS_NOT_BLANK:
- Str_Concat (Query," ORDER BY tst_questions.NumHitsNotBlank DESC,"
- "tst_questions.Stem",
+ Str_Concat (Gbl.DB.QueryPtr," ORDER BY tst_questions.NumHitsNotBlank DESC,"
+ "tst_questions.Stem",
Tst_MAX_BYTES_QUERY_TEST);
break;
case Tst_ORDER_AVERAGE_SCORE_NOT_BLANK:
- Str_Concat (Query," ORDER BY tst_questions.Score/tst_questions.NumHitsNotBlank DESC,"
- "tst_questions.NumHitsNotBlank DESC,"
- "tst_questions.Stem",
+ Str_Concat (Gbl.DB.QueryPtr," ORDER BY tst_questions.Score/tst_questions.NumHitsNotBlank DESC,"
+ "tst_questions.NumHitsNotBlank DESC,"
+ "tst_questions.Stem",
Tst_MAX_BYTES_QUERY_TEST);
break;
}
/* Make the query */
- NumRows = DB_QuerySELECT (Query,mysql_res,"can not get questions");
+ NumRows = DB_QuerySELECT_new (mysql_res,"can not get questions");
if (NumRows == 0)
Ale_ShowAlert (Ale_INFO,Txt_No_questions_found_matching_your_search_criteria);
@@ -2654,7 +2648,6 @@ static unsigned long Tst_GetQuestions (MYSQL_RES **mysql_res)
static unsigned long Tst_GetQuestionsForTest (MYSQL_RES **mysql_res)
{
- char Query[Tst_MAX_BYTES_QUERY_TEST + 1];
long LengthQuery;
unsigned NumItemInList;
const char *Ptr;
@@ -2663,6 +2656,10 @@ static unsigned long Tst_GetQuestionsForTest (MYSQL_RES **mysql_res)
Tst_AnswerType_t AnsType;
char StrNumQsts[10 + 1];
+ /***** Allocate space for query *****/
+ if ((Gbl.DB.QueryPtr = (char *) malloc (Tst_MAX_BYTES_QUERY_TEST + 1)) == NULL)
+ Lay_NotEnoughMemoryExit ();
+
/***** Select questions without hidden tags *****/
/*
row[ 0] QstCod
@@ -2682,33 +2679,34 @@ static unsigned long Tst_GetQuestionsForTest (MYSQL_RES **mysql_res)
// Reject questions with any tag hidden
// Select only questions with tags
// DISTINCTROW is necessary to not repeat questions
- sprintf (Query,"SELECT DISTINCTROW tst_questions.QstCod,"
- "UNIX_TIMESTAMP(tst_questions.EditTime),"
- "tst_questions.AnsType,tst_questions.Shuffle,"
- "tst_questions.Stem,tst_questions.Feedback,"
- "tst_questions.ImageName,"
- "tst_questions.ImageTitle,"
- "tst_questions.ImageURL,"
- "tst_questions.NumHits,tst_questions.NumHitsNotBlank,"
- "tst_questions.Score"
- " FROM tst_questions,tst_question_tags,tst_tags"
- " WHERE tst_questions.CrsCod=%ld"
- " AND tst_questions.QstCod NOT IN"
- " (SELECT tst_question_tags.QstCod"
- " FROM tst_tags,tst_question_tags"
- " WHERE tst_tags.CrsCod=%ld AND tst_tags.TagHidden='Y'"
- " AND tst_tags.TagCod=tst_question_tags.TagCod)"
- " AND tst_questions.QstCod=tst_question_tags.QstCod"
- " AND tst_question_tags.TagCod=tst_tags.TagCod"
- " AND tst_tags.CrsCod=%ld",
- Gbl.CurrentCrs.Crs.CrsCod,
- Gbl.CurrentCrs.Crs.CrsCod,
- Gbl.CurrentCrs.Crs.CrsCod);
+ snprintf (Gbl.DB.QueryPtr,Tst_MAX_BYTES_QUERY_TEST + 1,
+ "SELECT DISTINCTROW tst_questions.QstCod,"
+ "UNIX_TIMESTAMP(tst_questions.EditTime),"
+ "tst_questions.AnsType,tst_questions.Shuffle,"
+ "tst_questions.Stem,tst_questions.Feedback,"
+ "tst_questions.ImageName,"
+ "tst_questions.ImageTitle,"
+ "tst_questions.ImageURL,"
+ "tst_questions.NumHits,tst_questions.NumHitsNotBlank,"
+ "tst_questions.Score"
+ " FROM tst_questions,tst_question_tags,tst_tags"
+ " WHERE tst_questions.CrsCod=%ld"
+ " AND tst_questions.QstCod NOT IN"
+ " (SELECT tst_question_tags.QstCod"
+ " FROM tst_tags,tst_question_tags"
+ " WHERE tst_tags.CrsCod=%ld AND tst_tags.TagHidden='Y'"
+ " AND tst_tags.TagCod=tst_question_tags.TagCod)"
+ " AND tst_questions.QstCod=tst_question_tags.QstCod"
+ " AND tst_question_tags.TagCod=tst_tags.TagCod"
+ " AND tst_tags.CrsCod=%ld",
+ Gbl.CurrentCrs.Crs.CrsCod,
+ Gbl.CurrentCrs.Crs.CrsCod,
+ Gbl.CurrentCrs.Crs.CrsCod);
if (!Gbl.Test.Tags.All) // User has not selected all the tags
{
/* Add selected tags */
- LengthQuery = strlen (Query);
+ LengthQuery = strlen (Gbl.DB.QueryPtr);
NumItemInList = 0;
Ptr = Gbl.Test.Tags.List;
while (*Ptr)
@@ -2717,24 +2715,24 @@ static unsigned long Tst_GetQuestionsForTest (MYSQL_RES **mysql_res)
LengthQuery = LengthQuery + 35 + strlen (TagText) + 1;
if (LengthQuery > Tst_MAX_BYTES_QUERY_TEST - 128)
Lay_ShowErrorAndExit ("Query size exceed.");
- Str_Concat (Query,
+ Str_Concat (Gbl.DB.QueryPtr,
NumItemInList ? " OR tst_tags.TagTxt='" :
" AND (tst_tags.TagTxt='",
Tst_MAX_BYTES_QUERY_TEST);
- Str_Concat (Query,TagText,
+ Str_Concat (Gbl.DB.QueryPtr,TagText,
Tst_MAX_BYTES_QUERY_TEST);
- Str_Concat (Query,"'",
+ Str_Concat (Gbl.DB.QueryPtr,"'",
Tst_MAX_BYTES_QUERY_TEST);
NumItemInList++;
}
- Str_Concat (Query,")",
+ Str_Concat (Gbl.DB.QueryPtr,")",
Tst_MAX_BYTES_QUERY_TEST);
}
/* Add answer types selected */
if (!Gbl.Test.AllAnsTypes)
{
- LengthQuery = strlen (Query);
+ LengthQuery = strlen (Gbl.DB.QueryPtr);
NumItemInList = 0;
Ptr = Gbl.Test.ListAnsTypes;
while (*Ptr)
@@ -2744,34 +2742,34 @@ static unsigned long Tst_GetQuestionsForTest (MYSQL_RES **mysql_res)
LengthQuery = LengthQuery + 35 + strlen (Tst_StrAnswerTypesDB[AnsType]) + 1;
if (LengthQuery > Tst_MAX_BYTES_QUERY_TEST - 128)
Lay_ShowErrorAndExit ("Query size exceed.");
- Str_Concat (Query,
+ Str_Concat (Gbl.DB.QueryPtr,
NumItemInList ? " OR tst_questions.AnsType='" :
" AND (tst_questions.AnsType='",
Tst_MAX_BYTES_QUERY_TEST);
- Str_Concat (Query,Tst_StrAnswerTypesDB[AnsType],
+ Str_Concat (Gbl.DB.QueryPtr,Tst_StrAnswerTypesDB[AnsType],
Tst_MAX_BYTES_QUERY_TEST);
- Str_Concat (Query,"'",
+ Str_Concat (Gbl.DB.QueryPtr,"'",
Tst_MAX_BYTES_QUERY_TEST);
NumItemInList++;
}
- Str_Concat (Query,")",
+ Str_Concat (Gbl.DB.QueryPtr,")",
Tst_MAX_BYTES_QUERY_TEST);
}
/* End query */
- Str_Concat (Query," ORDER BY RAND(NOW()) LIMIT ",
+ Str_Concat (Gbl.DB.QueryPtr," ORDER BY RAND(NOW()) LIMIT ",
Tst_MAX_BYTES_QUERY_TEST);
snprintf (StrNumQsts,sizeof (StrNumQsts),
"%u",
Gbl.Test.NumQsts);
- Str_Concat (Query,StrNumQsts,
+ Str_Concat (Gbl.DB.QueryPtr,StrNumQsts,
Tst_MAX_BYTES_QUERY_TEST);
/*
if (Gbl.Usrs.Me.Roles.LoggedRole == Rol_SYS_ADM)
Lay_ShowAlert (Lay_INFO,Query);
*/
/* Make the query */
- return DB_QuerySELECT (Query,mysql_res,"can not get questions");
+ return DB_QuerySELECT_new (mysql_res,"can not get questions");
}
/*****************************************************************************/
@@ -2800,8 +2798,6 @@ static void Tst_ListOneQstToEdit (void)
bool Tst_GetOneQuestionByCod (long QstCod,MYSQL_RES **mysql_res)
{
- char Query[512];
-
/***** Get data of a question from database *****/
/*
row[ 0] QstCod
@@ -2817,14 +2813,14 @@ bool Tst_GetOneQuestionByCod (long QstCod,MYSQL_RES **mysql_res)
row[10] NumHitsNotBlank
row[11] Score
*/
- sprintf (Query,"SELECT QstCod,UNIX_TIMESTAMP(EditTime),"
+ DB_BuildQuery ("SELECT QstCod,UNIX_TIMESTAMP(EditTime),"
"AnsType,Shuffle,Stem,Feedback,"
"ImageName,ImageTitle,ImageURL,"
"NumHits,NumHitsNotBlank,Score"
" FROM tst_questions"
" WHERE QstCod=%ld",
- QstCod);
- return (DB_QuerySELECT (Query,mysql_res,"can not get data of a question") == 1);
+ QstCod);
+ return (DB_QuerySELECT_new (mysql_res,"can not get data of a question") == 1);
}
/*****************************************************************************/
@@ -3310,17 +3306,16 @@ void Tst_WriteParamEditQst (void)
unsigned Tst_GetAnswersQst (long QstCod,MYSQL_RES **mysql_res,bool Shuffle)
{
- char Query[512];
unsigned long NumRows;
/***** Get answers of a question from database *****/
- sprintf (Query,"SELECT AnsInd,Answer,Feedback,"
+ DB_BuildQuery ("SELECT AnsInd,Answer,Feedback,"
"ImageName,ImageTitle,ImageURL,Correct"
" FROM tst_answers WHERE QstCod=%ld ORDER BY %s",
- QstCod,
- Shuffle ? "RAND(NOW())" :
- "AnsInd");
- if (!(NumRows = DB_QuerySELECT (Query,mysql_res,"can not get answers of a question")))
+ QstCod,
+ Shuffle ? "RAND(NOW())" :
+ "AnsInd");
+ if (!(NumRows = DB_QuerySELECT_new (mysql_res,"can not get answers of a question")))
Ale_ShowAlert (Ale_ERROR,"Error when getting answers of a question.");
return (unsigned) NumRows;
@@ -4665,16 +4660,14 @@ void Tst_CheckIfNumberOfAnswersIsOne (void)
unsigned long Tst_GetTagsQst (long QstCod,MYSQL_RES **mysql_res)
{
- char Query[512];
-
/***** Get the tags of a question from database *****/
- sprintf (Query,"SELECT tst_tags.TagTxt FROM tst_question_tags,tst_tags"
+ DB_BuildQuery ("SELECT tst_tags.TagTxt FROM tst_question_tags,tst_tags"
" WHERE tst_question_tags.QstCod=%ld"
" AND tst_question_tags.TagCod=tst_tags.TagCod"
" AND tst_tags.CrsCod=%ld"
" ORDER BY tst_question_tags.TagInd",
- QstCod,Gbl.CurrentCrs.Crs.CrsCod);
- return DB_QuerySELECT (Query,mysql_res,"can not get the tags of a question");
+ QstCod,Gbl.CurrentCrs.Crs.CrsCod);
+ return DB_QuerySELECT_new (mysql_res,"can not get the tags of a question");
}
/*****************************************************************************/
@@ -5536,7 +5529,6 @@ static void Tst_FreeImagesOfQuestion (void)
static void Tst_GetQstDataFromDB (char Stem[Cns_MAX_BYTES_TEXT + 1],
char Feedback[Cns_MAX_BYTES_TEXT + 1])
{
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@@ -5545,12 +5537,12 @@ static void Tst_GetQstDataFromDB (char Stem[Cns_MAX_BYTES_TEXT + 1],
/***** Get the type of answer and the stem from the database *****/
/* Get the question from database */
- sprintf (Query,"SELECT AnsType,Shuffle,Stem,Feedback,"
+ DB_BuildQuery ("SELECT AnsType,Shuffle,Stem,Feedback,"
"ImageName,ImageTitle,ImageURL"
" FROM tst_questions"
" WHERE QstCod=%ld AND CrsCod=%ld",
- Gbl.Test.QstCod,Gbl.CurrentCrs.Crs.CrsCod);
- DB_QuerySELECT (Query,&mysql_res,"can not get a question");
+ Gbl.Test.QstCod,Gbl.CurrentCrs.Crs.CrsCod);
+ DB_QuerySELECT_new (&mysql_res,"can not get a question");
row = mysql_fetch_row (mysql_res);
/*
@@ -5671,23 +5663,22 @@ static void Tst_GetQstDataFromDB (char Stem[Cns_MAX_BYTES_TEXT + 1],
static void Tst_GetImageFromDB (int NumOpt,struct Image *Image)
{
- char Query[256];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
/***** Build query depending on NumOpt *****/
if (NumOpt < 0)
// Get image associated to stem
- sprintf (Query,"SELECT ImageName,ImageTitle,ImageURL FROM tst_questions"
+ DB_BuildQuery ("SELECT ImageName,ImageTitle,ImageURL FROM tst_questions"
" WHERE QstCod=%ld AND CrsCod=%ld",
- Gbl.Test.QstCod,Gbl.CurrentCrs.Crs.CrsCod); // Get image associated to answer
+ Gbl.Test.QstCod,Gbl.CurrentCrs.Crs.CrsCod); // Get image associated to answer
else
- sprintf (Query,"SELECT ImageName,ImageTitle,ImageURL FROM tst_answers"
+ DB_BuildQuery ("SELECT ImageName,ImageTitle,ImageURL FROM tst_answers"
" WHERE QstCod=%ld AND AnsInd=%u",
- Gbl.Test.QstCod,(unsigned) NumOpt);
+ Gbl.Test.QstCod,(unsigned) NumOpt);
/***** Query database *****/
- DB_QuerySELECT (Query,&mysql_res,"can not get image name");
+ DB_QuerySELECT_new (&mysql_res,"can not get image name");
row = mysql_fetch_row (mysql_res);
/***** Get the image name, title and URL (row[0], row[1], row[2]) *****/
@@ -6246,17 +6237,16 @@ double Tst_GetFloatAnsFromStr (char *Str)
static long Tst_GetTagCodFromTagTxt (const char *TagTxt)
{
- char Query[256 + Tst_MAX_BYTES_TAG];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
long TagCod = -1L; // -1 means that the tag does not exist in database
/***** Get tag code from database *****/
- sprintf (Query,"SELECT TagCod FROM tst_tags"
+ DB_BuildQuery ("SELECT TagCod FROM tst_tags"
" WHERE CrsCod=%ld AND TagTxt='%s'",
- Gbl.CurrentCrs.Crs.CrsCod,TagTxt);
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get tag");
+ Gbl.CurrentCrs.Crs.CrsCod,TagTxt);
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not get tag");
Gbl.Alert.Type = Ale_NONE;
if (NumRows == 1)
@@ -6761,15 +6751,14 @@ static void Tst_RemoveUnusedTagsFromCurrentCrs (void)
static void Tst_RemoveImgFileFromStemOfQst (long CrsCod,long QstCod)
{
- char Query[256];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
/***** Get names of images associated to stems of test questions from database *****/
- sprintf (Query,"SELECT ImageName FROM tst_questions"
+ DB_BuildQuery ("SELECT ImageName FROM tst_questions"
" WHERE QstCod=%ld AND CrsCod=%ld",
- QstCod,CrsCod);
- if (DB_QuerySELECT (Query,&mysql_res,"can not get image"))
+ QstCod,CrsCod);
+ if (DB_QuerySELECT_new (&mysql_res,"can not get image"))
{
/***** Get image name (row[0]) *****/
row = mysql_fetch_row (mysql_res);
@@ -6789,16 +6778,15 @@ static void Tst_RemoveImgFileFromStemOfQst (long CrsCod,long QstCod)
static void Tst_RemoveAllImgFilesFromStemOfAllQstsInCrs (long CrsCod)
{
- char Query[128];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumImages;
unsigned NumImg;
/***** Get names of images associated to stems of test questions from database *****/
- sprintf (Query,"SELECT ImageName FROM tst_questions WHERE CrsCod=%ld",
- CrsCod);
- NumImages = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get images");
+ DB_BuildQuery ("SELECT ImageName FROM tst_questions WHERE CrsCod=%ld",
+ CrsCod);
+ NumImages = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get images");
/***** Go over result removing image files *****/
for (NumImg = 0;
@@ -6822,20 +6810,19 @@ static void Tst_RemoveAllImgFilesFromStemOfAllQstsInCrs (long CrsCod)
static void Tst_RemoveImgFileFromAnsOfQst (long CrsCod,long QstCod,unsigned AnsInd)
{
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
/***** Get names of images associated to answers of test questions from database *****/
- sprintf (Query,"SELECT tst_answers.ImageName"
+ DB_BuildQuery ("SELECT tst_answers.ImageName"
" FROM tst_questions,tst_answers"
" WHERE tst_questions.CrsCod=%ld" // Extra check
" AND tst_questions.QstCod=%ld" // Extra check
" AND tst_questions.QstCod=tst_answers.QstCod"
" AND tst_answers.QstCod=%ld"
" AND tst_answers.AnsInd=%u",
- CrsCod,QstCod,QstCod,AnsInd);
- if (DB_QuerySELECT (Query,&mysql_res,"can not get images"))
+ CrsCod,QstCod,QstCod,AnsInd);
+ if (DB_QuerySELECT_new (&mysql_res,"can not get images"))
{
/***** Get image name (row[0]) *****/
row = mysql_fetch_row (mysql_res);
@@ -6854,21 +6841,20 @@ static void Tst_RemoveImgFileFromAnsOfQst (long CrsCod,long QstCod,unsigned AnsI
static void Tst_RemoveAllImgFilesFromAnsOfQst (long CrsCod,long QstCod)
{
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumImages;
unsigned NumImg;
/***** Get names of images associated to answers of test questions from database *****/
- sprintf (Query,"SELECT tst_answers.ImageName"
+ DB_BuildQuery ("SELECT tst_answers.ImageName"
" FROM tst_questions,tst_answers"
" WHERE tst_questions.CrsCod=%ld" // Extra check
" AND tst_questions.QstCod=%ld" // Extra check
" AND tst_questions.QstCod=tst_answers.QstCod"
" AND tst_answers.QstCod=%ld",
- CrsCod,QstCod,QstCod);
- NumImages = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get images");
+ CrsCod,QstCod,QstCod);
+ NumImages = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get images");
/***** Go over result removing image files *****/
for (NumImg = 0;
@@ -6893,19 +6879,18 @@ static void Tst_RemoveAllImgFilesFromAnsOfQst (long CrsCod,long QstCod)
static void Tst_RemoveAllImgFilesFromAnsOfAllQstsInCrs (long CrsCod)
{
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumImages;
unsigned NumImg;
/***** Get names of images associated to answers of test questions from database *****/
- sprintf (Query,"SELECT tst_answers.ImageName"
+ DB_BuildQuery ("SELECT tst_answers.ImageName"
" FROM tst_questions,tst_answers"
" WHERE tst_questions.CrsCod=%ld"
" AND tst_questions.QstCod=tst_answers.QstCod",
- CrsCod);
- NumImages = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get images");
+ CrsCod);
+ NumImages = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get images");
/***** Go over result removing image files *****/
for (NumImg = 0;
@@ -6960,7 +6945,6 @@ void Tst_GetTestStats (Tst_AnswerType_t AnsType,struct Tst_Stats *Stats)
static unsigned Tst_GetNumTstQuestions (Sco_Scope_t Scope,Tst_AnswerType_t AnsType,struct Tst_Stats *Stats)
{
- char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@@ -6969,26 +6953,26 @@ static unsigned Tst_GetNumTstQuestions (Sco_Scope_t Scope,Tst_AnswerType_t AnsTy
{
case Sco_SCOPE_SYS:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(*),SUM(NumHits),SUM(Score)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(NumHits),SUM(Score)"
" FROM tst_questions");
else
- sprintf (Query,"SELECT COUNT(*),SUM(NumHits),SUM(Score)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(NumHits),SUM(Score)"
" FROM tst_questions"
" WHERE AnsType='%s'",
- Tst_StrAnswerTypesDB[AnsType]);
+ Tst_StrAnswerTypesDB[AnsType]);
break;
case Sco_SCOPE_CTY:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(*),SUM(NumHits),SUM(Score)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(NumHits),SUM(Score)"
" FROM institutions,centres,degrees,courses,tst_questions"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod",
- Gbl.CurrentCty.Cty.CtyCod);
+ Gbl.CurrentCty.Cty.CtyCod);
else
- sprintf (Query,"SELECT COUNT(*),SUM(NumHits),SUM(Score)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(NumHits),SUM(Score)"
" FROM institutions,centres,degrees,courses,tst_questions"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
@@ -6996,81 +6980,81 @@ static unsigned Tst_GetNumTstQuestions (Sco_Scope_t Scope,Tst_AnswerType_t AnsTy
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'",
- Gbl.CurrentCty.Cty.CtyCod,
- Tst_StrAnswerTypesDB[AnsType]);
+ Gbl.CurrentCty.Cty.CtyCod,
+ Tst_StrAnswerTypesDB[AnsType]);
break;
case Sco_SCOPE_INS:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(*),SUM(NumHits),SUM(Score)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(NumHits),SUM(Score)"
" FROM centres,degrees,courses,tst_questions"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod",
- Gbl.CurrentIns.Ins.InsCod);
+ Gbl.CurrentIns.Ins.InsCod);
else
- sprintf (Query,"SELECT COUNT(*),SUM(NumHits),SUM(Score)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(NumHits),SUM(Score)"
" FROM centres,degrees,courses,tst_questions"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'",
- Gbl.CurrentIns.Ins.InsCod,
- Tst_StrAnswerTypesDB[AnsType]);
+ Gbl.CurrentIns.Ins.InsCod,
+ Tst_StrAnswerTypesDB[AnsType]);
break;
case Sco_SCOPE_CTR:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(*),SUM(NumHits),SUM(Score)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(NumHits),SUM(Score)"
" FROM degrees,courses,tst_questions"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod",
- Gbl.CurrentCtr.Ctr.CtrCod);
+ Gbl.CurrentCtr.Ctr.CtrCod);
else
- sprintf (Query,"SELECT COUNT(*),SUM(NumHits),SUM(Score)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(NumHits),SUM(Score)"
" FROM degrees,courses,tst_questions"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'",
- Gbl.CurrentCtr.Ctr.CtrCod,
- Tst_StrAnswerTypesDB[AnsType]);
+ Gbl.CurrentCtr.Ctr.CtrCod,
+ Tst_StrAnswerTypesDB[AnsType]);
break;
case Sco_SCOPE_DEG:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(*),SUM(NumHits),SUM(Score)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(NumHits),SUM(Score)"
" FROM courses,tst_questions"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=tst_questions.CrsCod",
- Gbl.CurrentDeg.Deg.DegCod);
+ Gbl.CurrentDeg.Deg.DegCod);
else
- sprintf (Query,"SELECT COUNT(*),SUM(NumHits),SUM(Score)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(NumHits),SUM(Score)"
" FROM courses,tst_questions"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'",
- Gbl.CurrentDeg.Deg.DegCod,
- Tst_StrAnswerTypesDB[AnsType]);
+ Gbl.CurrentDeg.Deg.DegCod,
+ Tst_StrAnswerTypesDB[AnsType]);
break;
case Sco_SCOPE_CRS:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(*),SUM(NumHits),SUM(Score)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(NumHits),SUM(Score)"
" FROM tst_questions"
" WHERE CrsCod=%ld",
- Gbl.CurrentCrs.Crs.CrsCod);
+ Gbl.CurrentCrs.Crs.CrsCod);
else
- sprintf (Query,"SELECT COUNT(*),SUM(NumHits),SUM(Score)"
+ DB_BuildQuery ("SELECT COUNT(*),SUM(NumHits),SUM(Score)"
" FROM tst_questions"
" WHERE CrsCod=%ld AND AnsType='%s'",
- Gbl.CurrentCrs.Crs.CrsCod,
- Tst_StrAnswerTypesDB[AnsType]);
+ Gbl.CurrentCrs.Crs.CrsCod,
+ Tst_StrAnswerTypesDB[AnsType]);
break;
default:
Lay_WrongScopeExit ();
break;
}
- DB_QuerySELECT (Query,&mysql_res,"can not get number of test questions");
+ DB_QuerySELECT_new (&mysql_res,"can not get number of test questions");
/***** Get number of questions *****/
row = mysql_fetch_row (mysql_res);
@@ -7107,7 +7091,6 @@ static unsigned Tst_GetNumTstQuestions (Sco_Scope_t Scope,Tst_AnswerType_t AnsTy
static unsigned Tst_GetNumCoursesWithTstQuestions (Sco_Scope_t Scope,Tst_AnswerType_t AnsType)
{
- char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumCourses;
@@ -7117,26 +7100,26 @@ static unsigned Tst_GetNumCoursesWithTstQuestions (Sco_Scope_t Scope,Tst_AnswerT
{
case Sco_SCOPE_SYS:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(DISTINCT CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT CrsCod)"
" FROM tst_questions");
else
- sprintf (Query,"SELECT COUNT(DISTINCT CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT CrsCod)"
" FROM tst_questions"
" WHERE AnsType='%s'",
- Tst_StrAnswerTypesDB[AnsType]);
+ Tst_StrAnswerTypesDB[AnsType]);
break;
case Sco_SCOPE_CTY:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM institutions,centres,degrees,courses,tst_questions"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod",
- Gbl.CurrentCty.Cty.CtyCod);
+ Gbl.CurrentCty.Cty.CtyCod);
else
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM institutions,centres,degrees,courses,tst_questions"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
@@ -7144,82 +7127,82 @@ static unsigned Tst_GetNumCoursesWithTstQuestions (Sco_Scope_t Scope,Tst_AnswerT
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'",
- Gbl.CurrentCty.Cty.CtyCod,
- Tst_StrAnswerTypesDB[AnsType]);
+ Gbl.CurrentCty.Cty.CtyCod,
+ Tst_StrAnswerTypesDB[AnsType]);
break;
case Sco_SCOPE_INS:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM centres,degrees,courses,tst_questions"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod",
- Gbl.CurrentIns.Ins.InsCod);
+ Gbl.CurrentIns.Ins.InsCod);
else
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM centres,degrees,courses,tst_questions"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'",
- Gbl.CurrentIns.Ins.InsCod,
- Tst_StrAnswerTypesDB[AnsType]);
+ Gbl.CurrentIns.Ins.InsCod,
+ Tst_StrAnswerTypesDB[AnsType]);
break;
case Sco_SCOPE_CTR:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM degrees,courses,tst_questions"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod",
- Gbl.CurrentCtr.Ctr.CtrCod);
+ Gbl.CurrentCtr.Ctr.CtrCod);
else
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM degrees,courses,tst_questions"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'",
- Gbl.CurrentCtr.Ctr.CtrCod,
- Tst_StrAnswerTypesDB[AnsType]);
+ Gbl.CurrentCtr.Ctr.CtrCod,
+ Tst_StrAnswerTypesDB[AnsType]);
break;
case Sco_SCOPE_DEG:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNTDISTINCT (tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNTDISTINCT (tst_questions.CrsCod)"
" FROM courses,tst_questions"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=tst_questions.CrsCod",
- Gbl.CurrentDeg.Deg.DegCod);
+ Gbl.CurrentDeg.Deg.DegCod);
else
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM courses,tst_questions"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'",
- Gbl.CurrentDeg.Deg.DegCod,
- Tst_StrAnswerTypesDB[AnsType]);
+ Gbl.CurrentDeg.Deg.DegCod,
+ Tst_StrAnswerTypesDB[AnsType]);
break;
case Sco_SCOPE_CRS:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(DISTINCT CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT CrsCod)"
" FROM tst_questions"
" WHERE CrsCod=%ld",
- Gbl.CurrentCrs.Crs.CrsCod);
+ Gbl.CurrentCrs.Crs.CrsCod);
else
- sprintf (Query,"SELECT COUNT(DISTINCT CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT CrsCod)"
" FROM tst_questions"
" WHERE CrsCod=%ld"
" AND AnsType='%s'",
- Gbl.CurrentCrs.Crs.CrsCod,
- Tst_StrAnswerTypesDB[AnsType]);
+ Gbl.CurrentCrs.Crs.CrsCod,
+ Tst_StrAnswerTypesDB[AnsType]);
break;
default:
Lay_WrongScopeExit ();
break;
}
- DB_QuerySELECT (Query,&mysql_res,"can not get number of courses with test questions");
+ DB_QuerySELECT_new (&mysql_res,"can not get number of courses with test questions");
/***** Get number of courses *****/
row = mysql_fetch_row (mysql_res);
@@ -7240,7 +7223,6 @@ static unsigned Tst_GetNumCoursesWithTstQuestions (Sco_Scope_t Scope,Tst_AnswerT
static unsigned Tst_GetNumCoursesWithPluggableTstQuestions (Sco_Scope_t Scope,Tst_AnswerType_t AnsType)
{
- char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumCourses;
@@ -7250,23 +7232,23 @@ static unsigned Tst_GetNumCoursesWithPluggableTstQuestions (Sco_Scope_t Scope,Ts
{
case Sco_SCOPE_SYS:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM tst_questions,tst_config"
" WHERE tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'",
- Tst_PluggableDB[Tst_PLUGGABLE_YES]);
+ Tst_PluggableDB[Tst_PLUGGABLE_YES]);
else
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM tst_questions,tst_config"
" WHERE tst_questions.AnsType='%s'"
" AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'",
- Tst_StrAnswerTypesDB[AnsType],
- Tst_PluggableDB[Tst_PLUGGABLE_YES]);
+ Tst_StrAnswerTypesDB[AnsType],
+ Tst_PluggableDB[Tst_PLUGGABLE_YES]);
break;
case Sco_SCOPE_CTY:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM institutions,centres,degrees,courses,tst_questions,tst_config"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
@@ -7275,10 +7257,10 @@ static unsigned Tst_GetNumCoursesWithPluggableTstQuestions (Sco_Scope_t Scope,Ts
" AND courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'",
- Gbl.CurrentCty.Cty.CtyCod,
- Tst_PluggableDB[Tst_PLUGGABLE_YES]);
+ Gbl.CurrentCty.Cty.CtyCod,
+ Tst_PluggableDB[Tst_PLUGGABLE_YES]);
else
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM institutions,centres,degrees,courses,tst_questions,tst_config"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
@@ -7288,13 +7270,13 @@ static unsigned Tst_GetNumCoursesWithPluggableTstQuestions (Sco_Scope_t Scope,Ts
" AND tst_questions.AnsType='%s'"
" AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'",
- Gbl.CurrentCty.Cty.CtyCod,
- Tst_StrAnswerTypesDB[AnsType],
- Tst_PluggableDB[Tst_PLUGGABLE_YES]);
+ Gbl.CurrentCty.Cty.CtyCod,
+ Tst_StrAnswerTypesDB[AnsType],
+ Tst_PluggableDB[Tst_PLUGGABLE_YES]);
break;
case Sco_SCOPE_INS:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM centres,degrees,courses,tst_questions,tst_config"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
@@ -7302,10 +7284,10 @@ static unsigned Tst_GetNumCoursesWithPluggableTstQuestions (Sco_Scope_t Scope,Ts
" AND courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'",
- Gbl.CurrentIns.Ins.InsCod,
- Tst_PluggableDB[Tst_PLUGGABLE_YES]);
+ Gbl.CurrentIns.Ins.InsCod,
+ Tst_PluggableDB[Tst_PLUGGABLE_YES]);
else
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM centres,degrees,courses,tst_questions,tst_config"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
@@ -7314,23 +7296,23 @@ static unsigned Tst_GetNumCoursesWithPluggableTstQuestions (Sco_Scope_t Scope,Ts
" AND tst_questions.AnsType='%s'"
" AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'",
- Gbl.CurrentIns.Ins.InsCod,
- Tst_StrAnswerTypesDB[AnsType],
- Tst_PluggableDB[Tst_PLUGGABLE_YES]);
+ Gbl.CurrentIns.Ins.InsCod,
+ Tst_StrAnswerTypesDB[AnsType],
+ Tst_PluggableDB[Tst_PLUGGABLE_YES]);
break;
case Sco_SCOPE_CTR:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM degrees,courses,tst_questions,tst_config"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'",
- Gbl.CurrentCtr.Ctr.CtrCod,
- Tst_PluggableDB[Tst_PLUGGABLE_YES]);
+ Gbl.CurrentCtr.Ctr.CtrCod,
+ Tst_PluggableDB[Tst_PLUGGABLE_YES]);
else
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM degrees,courses,tst_questions,tst_config"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
@@ -7338,57 +7320,57 @@ static unsigned Tst_GetNumCoursesWithPluggableTstQuestions (Sco_Scope_t Scope,Ts
" AND tst_questions.AnsType='%s'"
" AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'",
- Gbl.CurrentCtr.Ctr.CtrCod,
- Tst_StrAnswerTypesDB[AnsType],
- Tst_PluggableDB[Tst_PLUGGABLE_YES]);
+ Gbl.CurrentCtr.Ctr.CtrCod,
+ Tst_StrAnswerTypesDB[AnsType],
+ Tst_PluggableDB[Tst_PLUGGABLE_YES]);
break;
case Sco_SCOPE_DEG:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM courses,tst_questions,tst_config"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'",
- Gbl.CurrentDeg.Deg.DegCod,
- Tst_PluggableDB[Tst_PLUGGABLE_YES]);
+ Gbl.CurrentDeg.Deg.DegCod,
+ Tst_PluggableDB[Tst_PLUGGABLE_YES]);
else
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM courses,tst_questions,tst_config"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'"
" AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'",
- Gbl.CurrentDeg.Deg.DegCod,
- Tst_StrAnswerTypesDB[AnsType],
- Tst_PluggableDB[Tst_PLUGGABLE_YES]);
+ Gbl.CurrentDeg.Deg.DegCod,
+ Tst_StrAnswerTypesDB[AnsType],
+ Tst_PluggableDB[Tst_PLUGGABLE_YES]);
break;
case Sco_SCOPE_CRS:
if (AnsType == Tst_ANS_ALL)
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM tst_questions,tst_config"
" WHERE tst_questions.CrsCod=%ld"
" AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'",
- Gbl.CurrentCrs.Crs.CrsCod,
- Tst_PluggableDB[Tst_PLUGGABLE_YES]);
+ Gbl.CurrentCrs.Crs.CrsCod,
+ Tst_PluggableDB[Tst_PLUGGABLE_YES]);
else
- sprintf (Query,"SELECT COUNT(DISTINCT tst_questions.CrsCod)"
+ DB_BuildQuery ("SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM tst_questions,tst_config"
" WHERE tst_questions.CrsCod=%ld"
" AND tst_questions.AnsType='%s'"
" AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'",
- Gbl.CurrentCrs.Crs.CrsCod,
- Tst_StrAnswerTypesDB[AnsType],
- Tst_PluggableDB[Tst_PLUGGABLE_YES]);
+ Gbl.CurrentCrs.Crs.CrsCod,
+ Tst_StrAnswerTypesDB[AnsType],
+ Tst_PluggableDB[Tst_PLUGGABLE_YES]);
break;
default:
Lay_WrongScopeExit ();
break;
}
- DB_QuerySELECT (Query,&mysql_res,"can not get number of courses with pluggable test questions");
+ DB_QuerySELECT_new (&mysql_res,"can not get number of courses with pluggable test questions");
/***** Get number of courses *****/
row = mysql_fetch_row (mysql_res);
@@ -7702,7 +7684,6 @@ static void Tst_ShowTestResults (struct UsrData *UsrDat)
{
extern const char *Txt_Today;
extern const char *Txt_View_test;
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumExams;
@@ -7723,7 +7704,7 @@ static void Tst_ShowTestResults (struct UsrData *UsrDat)
char *ClassDat;
/***** Make database query *****/
- sprintf (Query,"SELECT TstCod,AllowTeachers,"
+ DB_BuildQuery ("SELECT TstCod,AllowTeachers,"
"UNIX_TIMESTAMP(TstTime),"
"NumQsts,NumQstsNotBlank,Score"
" FROM tst_exams"
@@ -7731,11 +7712,11 @@ static void Tst_ShowTestResults (struct UsrData *UsrDat)
" AND TstTime>=FROM_UNIXTIME(%ld)"
" AND TstTime<=FROM_UNIXTIME(%ld)"
" ORDER BY TstCod",
- Gbl.CurrentCrs.Crs.CrsCod,
- UsrDat->UsrCod,
- (long) Gbl.DateRange.TimeUTC[0],
- (long) Gbl.DateRange.TimeUTC[1]);
- NumExams = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get test exams of a user");
+ Gbl.CurrentCrs.Crs.CrsCod,
+ UsrDat->UsrCod,
+ (long) Gbl.DateRange.TimeUTC[0],
+ (long) Gbl.DateRange.TimeUTC[1]);
+ NumExams = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get test exams of a user");
/***** Show user's data *****/
fprintf (Gbl.F.Out,"");
@@ -8383,19 +8364,18 @@ static void Tst_ShowTestResult (time_t TstTimeUTC)
static void Tst_GetTestResultDataByTstCod (long TstCod,time_t *TstTimeUTC,
unsigned *NumQsts,unsigned *NumQstsNotBlank,double *Score)
{
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
/***** Make database query *****/
- sprintf (Query,"SELECT UsrCod,AllowTeachers,"
+ DB_BuildQuery ("SELECT UsrCod,AllowTeachers,"
"UNIX_TIMESTAMP(TstTime),"
"NumQsts,NumQstsNotBlank,Score"
" FROM tst_exams"
" WHERE TstCod=%ld AND CrsCod=%ld",
- TstCod,
- Gbl.CurrentCrs.Crs.CrsCod);
- if (DB_QuerySELECT (Query,&mysql_res,"can not get data of a test result of a user") == 1)
+ TstCod,
+ Gbl.CurrentCrs.Crs.CrsCod);
+ if (DB_QuerySELECT_new (&mysql_res,"can not get data of a test result of a user") == 1)
{
row = mysql_fetch_row (mysql_res);
@@ -8462,16 +8442,16 @@ static void Tst_StoreOneTestResultQstInDB (long TstCod,long QstCod,unsigned NumQ
static void Tst_GetTestResultQuestionsFromDB (long TstCod)
{
- char Query[256];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumQst;
/***** Get questions of a test result from database *****/
- sprintf (Query,"SELECT QstCod,Indexes,Answers FROM tst_exam_questions"
+ DB_BuildQuery ("SELECT QstCod,Indexes,Answers FROM tst_exam_questions"
" WHERE TstCod=%ld ORDER BY QstInd",
- TstCod);
- Gbl.Test.NumQsts = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get questions of a test result");
+ TstCod);
+ Gbl.Test.NumQsts = (unsigned) DB_QuerySELECT_new (&mysql_res,
+ "can not get questions of a test result");
/***** Get questions codes *****/
for (NumQst = 0;
diff --git a/swad_timetable.c b/swad_timetable.c
index ee46f19c6..bdebb827e 100644
--- a/swad_timetable.c
+++ b/swad_timetable.c
@@ -655,7 +655,6 @@ static void TT_WriteTutTimeTableIntoDB (long UsrCod)
static void TT_FillTimeTableFromDB (long UsrCod)
{
extern const char *Txt_Incomplete_timetable_for_lack_of_space;
- char Query[4096];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRow;
@@ -683,7 +682,7 @@ static void TT_FillTimeTableFromDB (long UsrCod)
switch (Gbl.CurrentCrs.Grps.WhichGrps)
{
case Grp_ONLY_MY_GROUPS:
- sprintf (Query,"SELECT "
+ DB_BuildQuery ("SELECT "
"timetable_crs.Weekday,"
"TIME_TO_SEC(timetable_crs.StartTime) AS S,"
"TIME_TO_SEC(timetable_crs.Duration) AS D,"
@@ -723,10 +722,10 @@ static void TT_FillTimeTableFromDB (long UsrCod)
" WHERE UsrCod=%ld"
" ORDER BY Weekday,S,ClassType,"
"GroupName,GrpCod,Place,D DESC,CrsCod",
- UsrCod,UsrCod,UsrCod);
+ UsrCod,UsrCod,UsrCod);
break;
case Grp_ALL_GROUPS:
- sprintf (Query,"SELECT "
+ DB_BuildQuery ("SELECT "
"timetable_crs.Weekday,"
"TIME_TO_SEC(timetable_crs.StartTime) AS S,"
"TIME_TO_SEC(timetable_crs.Duration) AS D,"
@@ -752,7 +751,7 @@ static void TT_FillTimeTableFromDB (long UsrCod)
" WHERE UsrCod=%ld"
" ORDER BY Weekday,S,ClassType,"
"GroupName,GrpCod,Place,D DESC,CrsCod",
- UsrCod,UsrCod);
+ UsrCod,UsrCod);
break;
}
break;
@@ -760,7 +759,7 @@ static void TT_FillTimeTableFromDB (long UsrCod)
if (Gbl.CurrentCrs.Grps.WhichGrps == Grp_ALL_GROUPS ||
Gbl.Action.Act == ActEdiCrsTT ||
Gbl.Action.Act == ActChgCrsTT) // If we are editing, all groups are shown
- sprintf (Query,"SELECT "
+ DB_BuildQuery ("SELECT "
"Weekday,"
"TIME_TO_SEC(StartTime) AS S,"
"TIME_TO_SEC(Duration) AS D,"
@@ -772,9 +771,9 @@ static void TT_FillTimeTableFromDB (long UsrCod)
" WHERE CrsCod=%ld"
" ORDER BY Weekday,S,ClassType,"
"GroupName,GrpCod,Place,D DESC",
- Gbl.CurrentCrs.Crs.CrsCod);
+ Gbl.CurrentCrs.Crs.CrsCod);
else
- sprintf (Query,"SELECT "
+ DB_BuildQuery ("SELECT "
"timetable_crs.Weekday,"
"TIME_TO_SEC(timetable_crs.StartTime) AS S,"
"TIME_TO_SEC(timetable_crs.Duration) AS D,"
@@ -800,11 +799,11 @@ static void TT_FillTimeTableFromDB (long UsrCod)
" AND timetable_crs.GrpCod=crs_grp_usr.GrpCod"
" ORDER BY Weekday,S,ClassType,"
"GroupName,GrpCod,Place,D DESC",
- Gbl.CurrentCrs.Crs.CrsCod,UsrCod,
- Gbl.CurrentCrs.Crs.CrsCod,UsrCod);
+ Gbl.CurrentCrs.Crs.CrsCod,UsrCod,
+ Gbl.CurrentCrs.Crs.CrsCod,UsrCod);
break;
case TT_TUTORING_TIMETABLE:
- sprintf (Query,"SELECT "
+ DB_BuildQuery ("SELECT "
"Weekday,"
"TIME_TO_SEC(StartTime) AS S,"
"TIME_TO_SEC(Duration) AS D,"
@@ -815,7 +814,7 @@ static void TT_FillTimeTableFromDB (long UsrCod)
UsrCod);
break;
}
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get timetable");
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not get timetable");
/***** If viewing (not editing) ==>
calculate range of hours and resolution *****/
diff --git a/swad_user.c b/swad_user.c
index c03112a43..0c2a37394 100644
--- a/swad_user.c
+++ b/swad_user.c
@@ -181,12 +181,11 @@ static void Usr_WriteUsrData (const char *BgColor,
const char *Data,const char *Link,
bool NonBreak,bool Accepted);
-static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,
- char Query[Usr_MAX_BYTES_QUERY_GET_LIST_USRS + 1]);
+static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role);
static void Usr_GetAdmsLst (Sco_Scope_t Scope);
static void Usr_GetGstsLst (Sco_Scope_t Scope);
-static void Usr_GetListUsrsFromQuery (const char *Query,Rol_Role_t Role,Sco_Scope_t Scope);
+static void Usr_GetListUsrsFromQuery (Rol_Role_t Role,Sco_Scope_t Scope);
static void Usr_AllocateUsrsList (Rol_Role_t Role);
static void Usr_PutButtonToConfirmIWantToSeeBigList (unsigned NumUsrs,const char *OnSubmit);
@@ -426,7 +425,6 @@ bool Usr_ItsMe (long UsrCod)
void Usr_GetUsrCodFromEncryptedUsrCod (struct UsrData *UsrDat)
{
- char Query[128 + Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@@ -434,9 +432,9 @@ void Usr_GetUsrCodFromEncryptedUsrCod (struct UsrData *UsrDat)
if (UsrDat->EncryptedUsrCod[0])
{
/***** Get user's code from database *****/
- sprintf (Query,"SELECT UsrCod FROM usr_data WHERE EncryptedUsrCod='%s'",
- UsrDat->EncryptedUsrCod);
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get user's code");
+ DB_BuildQuery ("SELECT UsrCod FROM usr_data WHERE EncryptedUsrCod='%s'",
+ UsrDat->EncryptedUsrCod);
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not get user's code");
if (NumRows != 1)
Lay_ShowErrorAndExit ("Error when getting user's code.");
@@ -459,7 +457,6 @@ void Usr_GetUsrCodFromEncryptedUsrCod (struct UsrData *UsrDat)
void Usr_GetEncryptedUsrCodFromUsrCod (struct UsrData *UsrDat) // TODO: Remove this funcion, it's not used
{
- char Query[128];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@@ -467,9 +464,9 @@ void Usr_GetEncryptedUsrCodFromUsrCod (struct UsrData *UsrDat) // TODO: Remove t
if (UsrDat->UsrCod > 0)
{
/***** Get encrypted user's code from database *****/
- sprintf (Query,"SELECT EncryptedUsrCod FROM usr_data WHERE UsrCod=%ld",
- UsrDat->UsrCod);
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get encrypted user's code");
+ DB_BuildQuery ("SELECT EncryptedUsrCod FROM usr_data WHERE UsrCod=%ld",
+ UsrDat->UsrCod);
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not get encrypted user's code");
if (NumRows != 1)
Lay_ShowErrorAndExit ("Error when getting encrypted user's code.");
@@ -496,7 +493,6 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
extern const char *The_ThemeId[The_NUM_THEMES];
extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS];
- char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@@ -505,7 +501,7 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
Txt_Language_t Lan;
/***** Get user's data from database *****/
- sprintf (Query,"SELECT EncryptedUsrCod,Password,Surname1,Surname2,FirstName,Sex,"
+ DB_BuildQuery ("SELECT EncryptedUsrCod,Password,Surname1,Surname2,FirstName,Sex,"
"Theme,IconSet,Language,FirstDayOfWeek,DateFormat,"
"Photo,PhotoVisibility,ProfileVisibility,"
"CtyCod,InsCtyCod,InsCod,DptCod,CtrCod,Office,OfficePhone,"
@@ -513,8 +509,8 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
"DATE_FORMAT(Birthday,'%%Y%%m%%d'),Comments,"
"Menu,SideCols,NotifNtfEvents,EmailNtfEvents"
" FROM usr_data WHERE UsrCod=%ld",
- UsrDat->UsrCod);
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get user's data");
+ UsrDat->UsrCod);
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not get user's data");
/***** Check number of rows in result *****/
if (NumRows != 1)
@@ -678,17 +674,16 @@ static void Usr_GetUsrCommentsFromString (char *Str,struct UsrData *UsrDat)
static void Usr_GetMyLastData (void)
{
- char Query[256];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
unsigned UnsignedNum;
/***** Get user's data from database *****/
- sprintf (Query,"SELECT WhatToSearch,LastCrs,LastTab,UNIX_TIMESTAMP(LastAccNotif)"
+ DB_BuildQuery ("SELECT WhatToSearch,LastCrs,LastTab,UNIX_TIMESTAMP(LastAccNotif)"
" FROM usr_last WHERE UsrCod=%ld",
- Gbl.Usrs.Me.UsrDat.UsrCod);
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get user's last data");
+ Gbl.Usrs.Me.UsrDat.UsrCod);
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not get user's last data");
/***** Check number of rows in result *****/
if (NumRows == 0)
@@ -1630,7 +1625,6 @@ void Usr_GetMyDegrees (void)
void Usr_GetMyCourses (void)
{
- char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumCrs;
@@ -1648,7 +1642,7 @@ void Usr_GetMyCourses (void)
Usr_RemoveTemporaryTableMyCourses ();
/***** Create temporary table with my courses *****/
- sprintf (Query,"CREATE TEMPORARY TABLE IF NOT EXISTS my_courses_tmp "
+ DB_BuildQuery ("CREATE TEMPORARY TABLE IF NOT EXISTS my_courses_tmp "
"(CrsCod INT NOT NULL,"
"Role TINYINT NOT NULL,"
"DegCod INT NOT NULL,"
@@ -1660,12 +1654,11 @@ void Usr_GetMyCourses (void)
" AND courses.DegCod=degrees.DegCod"
" ORDER BY degrees.ShortName,courses.ShortName",
Gbl.Usrs.Me.UsrDat.UsrCod);
- if (mysql_query (&Gbl.mysql,Query))
- DB_ExitOnMySQLError ("can not create temporary table");
+ DB_Query_new ("can not create temporary table");
/***** Get my courses from database *****/
- sprintf (Query,"SELECT CrsCod,Role,DegCod FROM my_courses_tmp");
- NumCrss = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get the courses you belong to");
+ DB_BuildQuery ("SELECT CrsCod,Role,DegCod FROM my_courses_tmp");
+ NumCrss = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get the courses you belong to");
/***** Get my courses from database *****/
for (NumCrs = 0;
@@ -2119,10 +2112,9 @@ bool Usr_CheckIfIBelongToCrs (long CrsCod)
unsigned Usr_GetCtysFromUsr (long UsrCod,MYSQL_RES **mysql_res)
{
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
- char Query[1024];
/***** Get the institutions a user belongs to from database *****/
- sprintf (Query,"SELECT countries.CtyCod,MAX(crs_usr.Role)"
+ DB_BuildQuery ("SELECT countries.CtyCod,MAX(crs_usr.Role)"
" FROM crs_usr,courses,degrees,centres,institutions,countries"
" WHERE crs_usr.UsrCod=%ld"
" AND crs_usr.CrsCod=courses.CrsCod"
@@ -2132,8 +2124,8 @@ unsigned Usr_GetCtysFromUsr (long UsrCod,MYSQL_RES **mysql_res)
" AND institutions.CtyCod=countries.CtyCod"
" GROUP BY countries.CtyCod"
" ORDER BY countries.Name_%s",
- UsrCod,Txt_STR_LANG_ID[Gbl.Prefs.Language]);
- return (unsigned) DB_QuerySELECT (Query,mysql_res,"can not get the countries a user belongs to");
+ UsrCod,Txt_STR_LANG_ID[Gbl.Prefs.Language]);
+ return (unsigned) DB_QuerySELECT_new (mysql_res,"can not get the countries a user belongs to");
}
/*****************************************************************************/
@@ -2143,11 +2135,9 @@ unsigned Usr_GetCtysFromUsr (long UsrCod,MYSQL_RES **mysql_res)
unsigned long Usr_GetInssFromUsr (long UsrCod,long CtyCod,MYSQL_RES **mysql_res)
{
- char Query[1024];
-
/***** Get the institutions a user belongs to from database *****/
if (CtyCod > 0)
- sprintf (Query,"SELECT institutions.InsCod,MAX(crs_usr.Role)"
+ DB_BuildQuery ("SELECT institutions.InsCod,MAX(crs_usr.Role)"
" FROM crs_usr,courses,degrees,centres,institutions"
" WHERE crs_usr.UsrCod=%ld"
" AND crs_usr.CrsCod=courses.CrsCod"
@@ -2157,9 +2147,9 @@ unsigned long Usr_GetInssFromUsr (long UsrCod,long CtyCod,MYSQL_RES **mysql_res)
" AND institutions.CtyCod=%ld"
" GROUP BY institutions.InsCod"
" ORDER BY institutions.ShortName",
- UsrCod,CtyCod);
+ UsrCod,CtyCod);
else
- sprintf (Query,"SELECT institutions.InsCod,MAX(crs_usr.Role)"
+ DB_BuildQuery ("SELECT institutions.InsCod,MAX(crs_usr.Role)"
" FROM crs_usr,courses,degrees,centres,institutions"
" WHERE crs_usr.UsrCod=%ld"
" AND crs_usr.CrsCod=courses.CrsCod"
@@ -2168,8 +2158,8 @@ unsigned long Usr_GetInssFromUsr (long UsrCod,long CtyCod,MYSQL_RES **mysql_res)
" AND centres.InsCod=institutions.InsCod"
" GROUP BY institutions.InsCod"
" ORDER BY institutions.ShortName",
- UsrCod);
- return DB_QuerySELECT (Query,mysql_res,"can not get the institutions a user belongs to");
+ UsrCod);
+ return DB_QuerySELECT_new (mysql_res,"can not get the institutions a user belongs to");
}
/*****************************************************************************/
@@ -2179,11 +2169,9 @@ unsigned long Usr_GetInssFromUsr (long UsrCod,long CtyCod,MYSQL_RES **mysql_res)
unsigned long Usr_GetCtrsFromUsr (long UsrCod,long InsCod,MYSQL_RES **mysql_res)
{
- char Query[1024];
-
/***** Get from database the centres a user belongs to *****/
if (InsCod > 0)
- sprintf (Query,"SELECT centres.CtrCod,MAX(crs_usr.Role)"
+ DB_BuildQuery ("SELECT centres.CtrCod,MAX(crs_usr.Role)"
" FROM crs_usr,courses,degrees,centres"
" WHERE crs_usr.UsrCod=%ld"
" AND crs_usr.CrsCod=courses.CrsCod"
@@ -2191,17 +2179,17 @@ unsigned long Usr_GetCtrsFromUsr (long UsrCod,long InsCod,MYSQL_RES **mysql_res)
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod=%ld"
" GROUP BY centres.CtrCod ORDER BY centres.ShortName",
- UsrCod,InsCod);
+ UsrCod,InsCod);
else
- sprintf (Query,"SELECT degrees.CtrCod,MAX(crs_usr.Role)"
+ DB_BuildQuery ("SELECT degrees.CtrCod,MAX(crs_usr.Role)"
" FROM crs_usr,courses,degrees,centres"
" WHERE crs_usr.UsrCod=%ld"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod=centres.CtrCod"
" GROUP BY centres.CtrCod ORDER BY centres.ShortName",
- UsrCod);
- return DB_QuerySELECT (Query,mysql_res,"can not check the centres a user belongs to");
+ UsrCod);
+ return DB_QuerySELECT_new (mysql_res,"can not check the centres a user belongs to");
}
/*****************************************************************************/
@@ -2211,28 +2199,26 @@ unsigned long Usr_GetCtrsFromUsr (long UsrCod,long InsCod,MYSQL_RES **mysql_res)
unsigned long Usr_GetDegsFromUsr (long UsrCod,long CtrCod,MYSQL_RES **mysql_res)
{
- char Query[1024];
-
/***** Get from database the degrees a user belongs to *****/
if (CtrCod > 0)
- sprintf (Query,"SELECT degrees.DegCod,MAX(crs_usr.Role)"
+ DB_BuildQuery ("SELECT degrees.DegCod,MAX(crs_usr.Role)"
" FROM crs_usr,courses,degrees"
" WHERE crs_usr.UsrCod=%ld"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod=%ld"
" GROUP BY degrees.DegCod ORDER BY degrees.ShortName",
- UsrCod,CtrCod);
+ UsrCod,CtrCod);
else
- sprintf (Query,"SELECT degrees.DegCod,MAX(crs_usr.Role)"
+ DB_BuildQuery ("SELECT degrees.DegCod,MAX(crs_usr.Role)"
" FROM crs_usr,courses,degrees"
" WHERE crs_usr.UsrCod=%ld"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod"
" GROUP BY degrees.DegCod ORDER BY degrees.ShortName",
- UsrCod);
- return DB_QuerySELECT (Query,mysql_res,"can not check the degrees"
- " a user belongs to");
+ UsrCod);
+ return DB_QuerySELECT_new (mysql_res,"can not check the degrees"
+ " a user belongs to");
}
/*****************************************************************************/
@@ -2242,26 +2228,24 @@ unsigned long Usr_GetDegsFromUsr (long UsrCod,long CtrCod,MYSQL_RES **mysql_res)
unsigned long Usr_GetCrssFromUsr (long UsrCod,long DegCod,MYSQL_RES **mysql_res)
{
- char Query[1024];
-
/***** Get from database the courses a user belongs to *****/
if (DegCod > 0) // Courses in a degree
- sprintf (Query,"SELECT crs_usr.CrsCod,crs_usr.Role,courses.DegCod"
+ DB_BuildQuery ("SELECT crs_usr.CrsCod,crs_usr.Role,courses.DegCod"
" FROM crs_usr,courses"
" WHERE crs_usr.UsrCod=%ld"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=%ld"
" ORDER BY courses.ShortName",
- UsrCod,DegCod);
+ UsrCod,DegCod);
else // All the courses
- sprintf (Query,"SELECT crs_usr.CrsCod,crs_usr.Role,courses.DegCod"
+ DB_BuildQuery ("SELECT crs_usr.CrsCod,crs_usr.Role,courses.DegCod"
" FROM crs_usr,courses,degrees"
" WHERE crs_usr.UsrCod=%ld"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod"
" ORDER BY degrees.ShortName,courses.ShortName",
- UsrCod);
- return DB_QuerySELECT (Query,mysql_res,"can not get the courses a user belongs to");
+ UsrCod);
+ return DB_QuerySELECT_new (mysql_res,"can not get the courses a user belongs to");
}
/*****************************************************************************/
@@ -4024,17 +4008,16 @@ unsigned Usr_GetNumUsrsInCrssOfCty (Rol_Role_t Role,long CtyCod)
long Usr_GetRamdomStdFromCrs (long CrsCod)
{
- char Query[256];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long UsrCod = -1L; // -1 means user not found
/***** Get a random student from current course from database *****/
- sprintf (Query,"SELECT UsrCod FROM crs_usr"
+ DB_BuildQuery ("SELECT UsrCod FROM crs_usr"
" WHERE CrsCod=%ld AND Role=%u"
" ORDER BY RAND(NOW()) LIMIT 1",
- CrsCod,(unsigned) Rol_STD);
- if (DB_QuerySELECT (Query,&mysql_res,"can not get a random student from the current course"))
+ CrsCod,(unsigned) Rol_STD);
+ if (DB_QuerySELECT_new (&mysql_res,"can not get a random student from the current course"))
{
/***** Get user code *****/
row = mysql_fetch_row (mysql_res);
@@ -4054,18 +4037,17 @@ long Usr_GetRamdomStdFromCrs (long CrsCod)
long Usr_GetRamdomStdFromGrp (long GrpCod)
{
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long UsrCod = -1L; // -1 means user not found
/***** Get a random student from a group from database *****/
- sprintf (Query,"SELECT crs_grp_usr.UsrCod FROM crs_grp_usr,crs_usr"
+ DB_BuildQuery ("SELECT crs_grp_usr.UsrCod FROM crs_grp_usr,crs_usr"
" WHERE crs_grp_usr.GrpCod=%ld"
" AND crs_grp_usr.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u ORDER BY RAND(NOW()) LIMIT 1",
- GrpCod,(unsigned) Rol_STD);
- if (DB_QuerySELECT (Query,&mysql_res,"can not get a random student from a group"))
+ GrpCod,(unsigned) Rol_STD);
+ if (DB_QuerySELECT_new (&mysql_res,"can not get a random student from a group"))
{
/***** Get user code *****/
row = mysql_fetch_row (mysql_res);
@@ -4148,8 +4130,7 @@ unsigned Usr_GetNumberOfTeachersInCentre (long CtrCod)
/******* Build query to get list with data of users in current course ********/
/*****************************************************************************/
-static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,
- char Query[Usr_MAX_BYTES_QUERY_GET_LIST_USRS + 1])
+static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role)
{
unsigned NumPositiveCods = 0;
unsigned NumNegativeCods = 0;
@@ -4192,28 +4173,34 @@ static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,
if (!Gbl.Usrs.ClassPhoto.AllGroups &&
!Gbl.CurrentCrs.Grps.LstGrpsSel.NumGrps)
{
- Query[0] = '\0';
+ Gbl.DB.QueryPtr = NULL;
return;
}
+ /***** Allocate space for query *****/
+ if ((Gbl.DB.QueryPtr = (char *) malloc (Usr_MAX_BYTES_QUERY_GET_LIST_USRS + 1)) == NULL)
+ Lay_NotEnoughMemoryExit ();
+
/***** Create query for users in the course *****/
if (Gbl.Action.Act == ActReqMsgUsr) // Selecting users to write a message
- sprintf (Query,"SELECT %s FROM crs_usr,usr_data"
- " WHERE crs_usr.CrsCod=%ld"
- " AND crs_usr.Role=%u"
- " AND crs_usr.UsrCod NOT IN"
- " (SELECT ToUsrCod FROM msg_banned WHERE FromUsrCod=%ld)"
- " AND crs_usr.UsrCod=usr_data.UsrCod", // Do not get banned users
- QueryFields,
- Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Role,
- Gbl.Usrs.Me.UsrDat.UsrCod);
+ snprintf (Gbl.DB.QueryPtr,Usr_MAX_BYTES_QUERY_GET_LIST_USRS + 1,
+ "SELECT %s FROM crs_usr,usr_data"
+ " WHERE crs_usr.CrsCod=%ld"
+ " AND crs_usr.Role=%u"
+ " AND crs_usr.UsrCod NOT IN"
+ " (SELECT ToUsrCod FROM msg_banned WHERE FromUsrCod=%ld)"
+ " AND crs_usr.UsrCod=usr_data.UsrCod", // Do not get banned users
+ QueryFields,
+ Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Role,
+ Gbl.Usrs.Me.UsrDat.UsrCod);
else
- sprintf (Query,"SELECT %s FROM crs_usr,usr_data"
- " WHERE crs_usr.CrsCod=%ld"
- " AND crs_usr.Role=%u"
- " AND crs_usr.UsrCod=usr_data.UsrCod",
- QueryFields,
- Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Role);
+ snprintf (Gbl.DB.QueryPtr,Usr_MAX_BYTES_QUERY_GET_LIST_USRS + 1,
+ "SELECT %s FROM crs_usr,usr_data"
+ " WHERE crs_usr.CrsCod=%ld"
+ " AND crs_usr.Role=%u"
+ " AND crs_usr.UsrCod=usr_data.UsrCod",
+ QueryFields,
+ Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Role);
/***** Select users in selected groups *****/
if (!Gbl.Usrs.ClassPhoto.AllGroups)
@@ -4253,8 +4240,8 @@ static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,
/* If there are positive codes, add the students who belong to groups with those codes */
if (NumPositiveCods)
{
- Str_Concat (Query," AND (crs_usr.UsrCod IN"
- " (SELECT DISTINCT UsrCod FROM crs_grp_usr WHERE",
+ Str_Concat (Gbl.DB.QueryPtr," AND (crs_usr.UsrCod IN"
+ " (SELECT DISTINCT UsrCod FROM crs_grp_usr WHERE",
Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
NumPositiveCods = 0;
for (NumGrpSel = 0;
@@ -4262,19 +4249,19 @@ static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,
NumGrpSel++)
if ((GrpCod = Gbl.CurrentCrs.Grps.LstGrpsSel.GrpCods[NumGrpSel]) > 0)
{
- Str_Concat (Query,NumPositiveCods ? " OR GrpCod='" :
- " GrpCod='",
+ Str_Concat (Gbl.DB.QueryPtr,NumPositiveCods ? " OR GrpCod='" :
+ " GrpCod='",
Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
snprintf (LongStr,sizeof (LongStr),
"%ld",
GrpCod);
- Str_Concat (Query,LongStr,
+ Str_Concat (Gbl.DB.QueryPtr,LongStr,
Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
- Str_Concat (Query,"'",
+ Str_Concat (Gbl.DB.QueryPtr,"'",
Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
NumPositiveCods++;
}
- Str_Concat (Query,")",
+ Str_Concat (Gbl.DB.QueryPtr,")",
Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
}
}
@@ -4286,29 +4273,29 @@ static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,
if (AddStdsWithoutGroupOf[NumGrpTyp])
{
if (NumPositiveCods || NumNegativeCods)
- Str_Concat (Query," OR ",
+ Str_Concat (Gbl.DB.QueryPtr," OR ",
Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
else
- Str_Concat (Query," AND (",
+ Str_Concat (Gbl.DB.QueryPtr," AND (",
Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
/* Select all the students of the course who don't belong to any group of type GrpTypCod */
- Str_Concat (Query,"crs_usr.UsrCod NOT IN"
- " (SELECT DISTINCT crs_grp_usr.UsrCod"
- " FROM crs_grp,crs_grp_usr"
- " WHERE crs_grp.GrpTypCod='",
+ Str_Concat (Gbl.DB.QueryPtr,"crs_usr.UsrCod NOT IN"
+ " (SELECT DISTINCT crs_grp_usr.UsrCod"
+ " FROM crs_grp,crs_grp_usr"
+ " WHERE crs_grp.GrpTypCod='",
Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
snprintf (LongStr,sizeof (LongStr),
"%ld",
Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].GrpTypCod);
- Str_Concat (Query,LongStr,
+ Str_Concat (Gbl.DB.QueryPtr,LongStr,
Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
- Str_Concat (Query,"' AND crs_grp.GrpCod=crs_grp_usr.GrpCod)",
+ Str_Concat (Gbl.DB.QueryPtr,"' AND crs_grp.GrpCod=crs_grp_usr.GrpCod)",
Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
NumNegativeCods++;
}
if (NumPositiveCods ||
NumNegativeCods)
- Str_Concat (Query,")",
+ Str_Concat (Gbl.DB.QueryPtr,")",
Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
/***** Free memory used by the list of booleans AddStdsWithoutGroupOf *****/
@@ -4319,11 +4306,11 @@ static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,
}
/***** The last part of the query is for ordering the list *****/
- Str_Concat (Query," ORDER BY "
- "usr_data.Surname1,"
- "usr_data.Surname2,"
- "usr_data.FirstName,"
- "usr_data.UsrCod",
+ Str_Concat (Gbl.DB.QueryPtr," ORDER BY "
+ "usr_data.Surname1,"
+ "usr_data.Surname2,"
+ "usr_data.FirstName,"
+ "usr_data.UsrCod",
Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
}
@@ -4337,7 +4324,6 @@ static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,
void Usr_GetListUsrs (Sco_Scope_t Scope,Rol_Role_t Role)
{
- char Query[Usr_MAX_BYTES_QUERY_GET_LIST_USRS + 1]; // Big query when the course has lot of groups
const char *QueryFields =
"DISTINCT usr_data.UsrCod,"
"usr_data.EncryptedUsrCod,"
@@ -4371,7 +4357,7 @@ void Usr_GetListUsrs (Sco_Scope_t Scope,Rol_Role_t Role)
{
case Sco_SCOPE_SYS:
/* Get users in courses from the whole platform */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM usr_data,crs_usr"
" WHERE usr_data.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u"
@@ -4380,12 +4366,12 @@ void Usr_GetListUsrs (Sco_Scope_t Scope,Rol_Role_t Role)
"usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod",
- QueryFields,
- (unsigned) Role);
+ QueryFields,
+ (unsigned) Role);
break;
case Sco_SCOPE_CTY:
/* Get users in courses from the current country */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM usr_data,crs_usr,courses,degrees,centres,institutions"
" WHERE usr_data.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u"
@@ -4399,13 +4385,13 @@ void Usr_GetListUsrs (Sco_Scope_t Scope,Rol_Role_t Role)
"usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod",
- QueryFields,
- (unsigned) Role,
- Gbl.CurrentCty.Cty.CtyCod);
+ QueryFields,
+ (unsigned) Role,
+ Gbl.CurrentCty.Cty.CtyCod);
break;
case Sco_SCOPE_INS:
/* Get users in courses from the current institution */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM usr_data,crs_usr,courses,degrees,centres"
" WHERE usr_data.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u"
@@ -4418,13 +4404,13 @@ void Usr_GetListUsrs (Sco_Scope_t Scope,Rol_Role_t Role)
"usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod",
- QueryFields,
- (unsigned) Role,
- Gbl.CurrentIns.Ins.InsCod);
+ QueryFields,
+ (unsigned) Role,
+ Gbl.CurrentIns.Ins.InsCod);
break;
case Sco_SCOPE_CTR:
/* Get users in courses from the current centre */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM usr_data,crs_usr,courses,degrees"
" WHERE usr_data.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u"
@@ -4436,13 +4422,13 @@ void Usr_GetListUsrs (Sco_Scope_t Scope,Rol_Role_t Role)
"usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod",
- QueryFields,
- (unsigned) Role,
- Gbl.CurrentCtr.Ctr.CtrCod);
+ QueryFields,
+ (unsigned) Role,
+ Gbl.CurrentCtr.Ctr.CtrCod);
break;
case Sco_SCOPE_DEG:
/* Get users in courses from the current degree */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM usr_data,crs_usr,courses"
" WHERE usr_data.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u"
@@ -4453,13 +4439,13 @@ void Usr_GetListUsrs (Sco_Scope_t Scope,Rol_Role_t Role)
"usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod",
- QueryFields,
- (unsigned) Role,
- Gbl.CurrentDeg.Deg.DegCod);
+ QueryFields,
+ (unsigned) Role,
+ Gbl.CurrentDeg.Deg.DegCod);
break;
case Sco_SCOPE_CRS:
/* Get users from the current course */
- Usr_BuildQueryToGetUsrsLstCrs (Role,Query);
+ Usr_BuildQueryToGetUsrsLstCrs (Role);
break;
default:
Lay_WrongScopeExit ();
@@ -4470,7 +4456,7 @@ void Usr_GetListUsrs (Sco_Scope_t Scope,Rol_Role_t Role)
Lay_ShowAlert (Lay_INFO,Query);
*/
/***** Get list of users from database given a query *****/
- Usr_GetListUsrsFromQuery (Query,Role,Scope);
+ Usr_GetListUsrsFromQuery (Role,Scope);
}
/*****************************************************************************/
@@ -4480,7 +4466,6 @@ void Usr_GetListUsrs (Sco_Scope_t Scope,Rol_Role_t Role)
void Usr_SearchListUsrs (Rol_Role_t Role)
{
char SubQueryRole[64];
- char Query[Usr_MAX_BYTES_QUERY_GET_LIST_USRS + 1];
const char *QueryFields =
"DISTINCT usr_data.UsrCod,"
"usr_data.EncryptedUsrCod,"
@@ -4526,14 +4511,14 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
{
case Sco_SCOPE_SYS:
/* Search users from the whole platform */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM candidate_users,usr_data"
" WHERE %s",
- QueryFields,OrderQuery);
+ QueryFields,OrderQuery);
break;
case Sco_SCOPE_CTY:
/* Search users in courses from the current country */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM candidate_users,crs_usr,courses,degrees,centres,institutions,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.CrsCod=courses.CrsCod"
@@ -4542,13 +4527,13 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
" AND centres.InsCod=institutions.InsCod"
" AND institutions.CtyCod=%ld"
" AND %s",
- QueryFields,
- Gbl.CurrentCty.Cty.CtyCod,
- OrderQuery);
+ QueryFields,
+ Gbl.CurrentCty.Cty.CtyCod,
+ OrderQuery);
break;
case Sco_SCOPE_INS:
/* Search users in courses from the current institution */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM candidate_users,crs_usr,courses,degrees,centres,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.CrsCod=courses.CrsCod"
@@ -4556,45 +4541,45 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod=%ld"
" AND %s",
- QueryFields,
- Gbl.CurrentIns.Ins.InsCod,
- OrderQuery);
+ QueryFields,
+ Gbl.CurrentIns.Ins.InsCod,
+ OrderQuery);
break;
case Sco_SCOPE_CTR:
/* Search users in courses from the current centre */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM candidate_users,crs_usr,courses,degrees,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod=%ld"
" AND %s",
- QueryFields,
- Gbl.CurrentCtr.Ctr.CtrCod,
- OrderQuery);
+ QueryFields,
+ Gbl.CurrentCtr.Ctr.CtrCod,
+ OrderQuery);
break;
case Sco_SCOPE_DEG:
/* Search users in courses from the current degree */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM candidate_users,crs_usr,courses,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=%ld"
" AND %s",
- QueryFields,
- Gbl.CurrentDeg.Deg.DegCod,
- OrderQuery);
+ QueryFields,
+ Gbl.CurrentDeg.Deg.DegCod,
+ OrderQuery);
break;
case Sco_SCOPE_CRS:
/* Search users in courses from the current course */
- sprintf (Query,"SELECT %s,crs_usr.Role,crs_usr.Accepted"
+ DB_BuildQuery ("SELECT %s,crs_usr.Role,crs_usr.Accepted"
" FROM candidate_users,crs_usr,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
" AND crs_usr.CrsCod=%ld"
" AND %s",
- QueryFields,
- Gbl.CurrentCrs.Crs.CrsCod,
- OrderQuery);
+ QueryFields,
+ Gbl.CurrentCrs.Crs.CrsCod,
+ OrderQuery);
break;
default:
Lay_WrongScopeExit ();
@@ -4603,12 +4588,12 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
break;
case Rol_GST: // Guests (scope is not used)
/* Search users with no courses */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM candidate_users,usr_data"
" WHERE candidate_users.UsrCod NOT IN (SELECT UsrCod FROM crs_usr)"
" AND %s",
- QueryFields,
- OrderQuery);
+ QueryFields,
+ OrderQuery);
break;
case Rol_STD: // Student
case Rol_NET: // Non-editing teacher
@@ -4637,18 +4622,18 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
{
case Sco_SCOPE_SYS:
/* Search users in courses from the whole platform */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM candidate_users,crs_usr,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
"%s"
" AND %s",
- QueryFields,
- SubQueryRole,
- OrderQuery);
+ QueryFields,
+ SubQueryRole,
+ OrderQuery);
break;
case Sco_SCOPE_CTY:
/* Search users in courses from the current country */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM candidate_users,crs_usr,courses,degrees,centres,institutions,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
"%s"
@@ -4658,14 +4643,14 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
" AND centres.InsCod=institutions.InsCod"
" AND institutions.CtyCod=%ld"
" AND %s",
- QueryFields,
- SubQueryRole,
- Gbl.CurrentCty.Cty.CtyCod,
- OrderQuery);
+ QueryFields,
+ SubQueryRole,
+ Gbl.CurrentCty.Cty.CtyCod,
+ OrderQuery);
break;
case Sco_SCOPE_INS:
/* Search users in courses from the current institution */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM candidate_users,crs_usr,courses,degrees,centres,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
"%s"
@@ -4674,14 +4659,14 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod=%ld"
" AND %s",
- QueryFields,
- SubQueryRole,
- Gbl.CurrentIns.Ins.InsCod,
- OrderQuery);
+ QueryFields,
+ SubQueryRole,
+ Gbl.CurrentIns.Ins.InsCod,
+ OrderQuery);
break;
case Sco_SCOPE_CTR:
/* Search users in courses from the current centre */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM candidate_users,crs_usr,courses,degrees,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
"%s"
@@ -4689,37 +4674,37 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
" AND courses.DegCod=degrees.DegCod"
" AND degrees.CtrCod=%ld"
" AND %s",
- QueryFields,
- SubQueryRole,
- Gbl.CurrentCtr.Ctr.CtrCod,
- OrderQuery);
+ QueryFields,
+ SubQueryRole,
+ Gbl.CurrentCtr.Ctr.CtrCod,
+ OrderQuery);
break;
case Sco_SCOPE_DEG:
/* Search users in courses from the current degree */
- sprintf (Query,"SELECT %s"
+ DB_BuildQuery ("SELECT %s"
" FROM candidate_users,crs_usr,courses,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
"%s"
" AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.DegCod=%ld"
" AND %s",
- QueryFields,
- SubQueryRole,
- Gbl.CurrentDeg.Deg.DegCod,
- OrderQuery);
+ QueryFields,
+ SubQueryRole,
+ Gbl.CurrentDeg.Deg.DegCod,
+ OrderQuery);
break;
case Sco_SCOPE_CRS:
/* Search users in courses from the current course */
- sprintf (Query,"SELECT %s,crs_usr.Role,crs_usr.Accepted"
+ DB_BuildQuery ("SELECT %s,crs_usr.Role,crs_usr.Accepted"
" FROM candidate_users,crs_usr,usr_data"
" WHERE candidate_users.UsrCod=crs_usr.UsrCod"
"%s"
" AND crs_usr.CrsCod=%ld"
" AND %s",
- QueryFields,
- SubQueryRole,
- Gbl.CurrentCrs.Crs.CrsCod,
- OrderQuery);
+ QueryFields,
+ SubQueryRole,
+ Gbl.CurrentCrs.Crs.CrsCod,
+ OrderQuery);
break;
default:
Lay_WrongScopeExit ();
@@ -4735,7 +4720,7 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
// Lay_ShowAlert (Lay_INFO,Query);
/***** Get list of users from database given a query *****/
- Usr_GetListUsrsFromQuery (Query,Role,Gbl.Scope.Current);
+ Usr_GetListUsrsFromQuery (Role,Gbl.Scope.Current);
}
/*****************************************************************************/
@@ -4780,7 +4765,6 @@ void Usr_DropTmpTableWithCandidateUsrs (void)
static void Usr_GetAdmsLst (Sco_Scope_t Scope)
{
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
- char Query[2048];
const char *QueryFields =
"UsrCod,"
"EncryptedUsrCod,"
@@ -4815,15 +4799,15 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
switch (Scope)
{
case Sco_SCOPE_SYS: // All admins
- sprintf (Query,"SELECT %s FROM usr_data"
+ DB_BuildQuery ("SELECT %s FROM usr_data"
" WHERE UsrCod IN "
"(SELECT DISTINCT UsrCod FROM admin)"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
- QueryFields);
+ QueryFields);
break;
case Sco_SCOPE_CTY: // System admins
// and admins of the institutions, centres and degrees in the current country
- sprintf (Query,"SELECT %s FROM usr_data"
+ DB_BuildQuery ("SELECT %s FROM usr_data"
" WHERE UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='%s')"
@@ -4846,16 +4830,16 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
" AND centres.InsCod=institutions.InsCod"
" AND institutions.CtyCod=%ld)"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
- QueryFields,
- Sco_ScopeDB[Sco_SCOPE_SYS],
- Sco_ScopeDB[Sco_SCOPE_INS],Gbl.CurrentCty.Cty.CtyCod,
- Sco_ScopeDB[Sco_SCOPE_CTR],Gbl.CurrentCty.Cty.CtyCod,
- Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentCty.Cty.CtyCod);
+ QueryFields,
+ Sco_ScopeDB[Sco_SCOPE_SYS],
+ Sco_ScopeDB[Sco_SCOPE_INS],Gbl.CurrentCty.Cty.CtyCod,
+ Sco_ScopeDB[Sco_SCOPE_CTR],Gbl.CurrentCty.Cty.CtyCod,
+ Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentCty.Cty.CtyCod);
break;
case Sco_SCOPE_INS: // System admins,
// admins of the current institution,
// and admins of the centres and degrees in the current institution
- sprintf (Query,"SELECT %s FROM usr_data"
+ DB_BuildQuery ("SELECT %s FROM usr_data"
" WHERE UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='%s')"
@@ -4874,17 +4858,17 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod=%ld)"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
- QueryFields,
- Sco_ScopeDB[Sco_SCOPE_SYS],
- Sco_ScopeDB[Sco_SCOPE_INS],Gbl.CurrentIns.Ins.InsCod,
- Sco_ScopeDB[Sco_SCOPE_CTR],Gbl.CurrentIns.Ins.InsCod,
- Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentIns.Ins.InsCod);
+ QueryFields,
+ Sco_ScopeDB[Sco_SCOPE_SYS],
+ Sco_ScopeDB[Sco_SCOPE_INS],Gbl.CurrentIns.Ins.InsCod,
+ Sco_ScopeDB[Sco_SCOPE_CTR],Gbl.CurrentIns.Ins.InsCod,
+ Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentIns.Ins.InsCod);
break;
case Sco_SCOPE_CTR: // System admins,
// admins of the current institution,
// admins and the current centre,
// and admins of the degrees in the current centre
- sprintf (Query,"SELECT %s FROM usr_data"
+ DB_BuildQuery ("SELECT %s FROM usr_data"
" WHERE UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='%s')"
@@ -4900,15 +4884,15 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
" AND admin.Cod=degrees.DegCod"
" AND degrees.CtrCod=%ld)"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
- QueryFields,
- Sco_ScopeDB[Sco_SCOPE_SYS],
- Sco_ScopeDB[Sco_SCOPE_INS],Gbl.CurrentIns.Ins.InsCod,
- Sco_ScopeDB[Sco_SCOPE_CTR],Gbl.CurrentCtr.Ctr.CtrCod,
- Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentCtr.Ctr.CtrCod);
+ QueryFields,
+ Sco_ScopeDB[Sco_SCOPE_SYS],
+ Sco_ScopeDB[Sco_SCOPE_INS],Gbl.CurrentIns.Ins.InsCod,
+ Sco_ScopeDB[Sco_SCOPE_CTR],Gbl.CurrentCtr.Ctr.CtrCod,
+ Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentCtr.Ctr.CtrCod);
break;
case Sco_SCOPE_DEG: // System admins
// and admins of the current institution, centre or degree
- sprintf (Query,"SELECT %s FROM usr_data"
+ DB_BuildQuery ("SELECT %s FROM usr_data"
" WHERE UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='%s')"
@@ -4922,11 +4906,11 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
"(SELECT UsrCod FROM admin"
" WHERE Scope='%s' AND Cod=%ld)"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
- QueryFields,
- Sco_ScopeDB[Sco_SCOPE_SYS],
- Sco_ScopeDB[Sco_SCOPE_INS],Gbl.CurrentIns.Ins.InsCod,
- Sco_ScopeDB[Sco_SCOPE_CTR],Gbl.CurrentCtr.Ctr.CtrCod,
- Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentDeg.Deg.DegCod);
+ QueryFields,
+ Sco_ScopeDB[Sco_SCOPE_SYS],
+ Sco_ScopeDB[Sco_SCOPE_INS],Gbl.CurrentIns.Ins.InsCod,
+ Sco_ScopeDB[Sco_SCOPE_CTR],Gbl.CurrentCtr.Ctr.CtrCod,
+ Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentDeg.Deg.DegCod);
break;
default: // not aplicable
Lay_WrongScopeExit ();
@@ -4934,7 +4918,7 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
}
/***** Get list of administrators from database *****/
- Usr_GetListUsrsFromQuery (Query,Rol_DEG_ADM,Scope);
+ Usr_GetListUsrsFromQuery (Rol_DEG_ADM,Scope);
}
/*****************************************************************************/
@@ -4943,7 +4927,6 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
static void Usr_GetGstsLst (Sco_Scope_t Scope)
{
- char Query[512];
const char *QueryFields =
"UsrCod,"
"EncryptedUsrCod,"
@@ -4974,42 +4957,42 @@ static void Usr_GetGstsLst (Sco_Scope_t Scope)
switch (Scope)
{
case Sco_SCOPE_SYS:
- sprintf (Query,"SELECT %s FROM usr_data"
+ DB_BuildQuery ("SELECT %s FROM usr_data"
" WHERE UsrCod NOT IN (SELECT UsrCod FROM crs_usr)"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
- QueryFields);
+ QueryFields);
break;
case Sco_SCOPE_CTY:
- sprintf (Query,"SELECT %s FROM usr_data"
+ DB_BuildQuery ("SELECT %s FROM usr_data"
" WHERE (CtyCod=%ld OR InsCtyCod=%ld)"
" AND UsrCod NOT IN (SELECT UsrCod FROM crs_usr)"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
- QueryFields,
- Gbl.CurrentCty.Cty.CtyCod,
- Gbl.CurrentCty.Cty.CtyCod);
+ QueryFields,
+ Gbl.CurrentCty.Cty.CtyCod,
+ Gbl.CurrentCty.Cty.CtyCod);
break;
case Sco_SCOPE_INS:
- sprintf (Query,"SELECT %s FROM usr_data"
+ DB_BuildQuery ("SELECT %s FROM usr_data"
" WHERE InsCod=%ld"
" AND UsrCod NOT IN (SELECT UsrCod FROM crs_usr)"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
- QueryFields,
- Gbl.CurrentIns.Ins.InsCod);
+ QueryFields,
+ Gbl.CurrentIns.Ins.InsCod);
break;
case Sco_SCOPE_CTR:
- sprintf (Query,"SELECT %s FROM usr_data"
+ DB_BuildQuery ("SELECT %s FROM usr_data"
" WHERE CtrCod=%ld"
" AND UsrCod NOT IN (SELECT UsrCod FROM crs_usr)"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
- QueryFields,
- Gbl.CurrentCtr.Ctr.CtrCod);
+ QueryFields,
+ Gbl.CurrentCtr.Ctr.CtrCod);
break;
default: // not aplicable
return;
}
/***** Get list of students from database *****/
- Usr_GetListUsrsFromQuery (Query,Rol_GST,Scope);
+ Usr_GetListUsrsFromQuery (Rol_GST,Scope);
}
/*****************************************************************************/
@@ -5018,7 +5001,6 @@ static void Usr_GetGstsLst (Sco_Scope_t Scope)
void Usr_GetUnorderedStdsCodesInDeg (long DegCod)
{
- char Query[1024];
const char *QueryFields =
"DISTINCT usr_data.UsrCod,"
"usr_data.EncryptedUsrCod,"
@@ -5050,16 +5032,16 @@ void Usr_GetUnorderedStdsCodesInDeg (long DegCod)
if (Usr_GetNumUsrsInCrssOfDeg (Rol_STD,DegCod))
{
/***** Get the students in a degree from database *****/
- sprintf (Query,"SELECT %s FROM courses,crs_usr,usr_data"
+ DB_BuildQuery ("SELECT %s FROM courses,crs_usr,usr_data"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=usr_data.UsrCod",
- QueryFields,
- DegCod,(unsigned) Rol_STD);
+ QueryFields,
+ DegCod,(unsigned) Rol_STD);
/***** Get list of students from database *****/
- Usr_GetListUsrsFromQuery (Query,Rol_STD,Sco_SCOPE_DEG);
+ Usr_GetListUsrsFromQuery (Rol_STD,Sco_SCOPE_DEG);
}
}
@@ -5067,7 +5049,7 @@ void Usr_GetUnorderedStdsCodesInDeg (long DegCod)
/********************** Get list of users from database **********************/
/*****************************************************************************/
-static void Usr_GetListUsrsFromQuery (const char *Query,Rol_Role_t Role,Sco_Scope_t Scope)
+static void Usr_GetListUsrsFromQuery (Rol_Role_t Role,Sco_Scope_t Scope)
{
extern const char *Txt_The_list_of_X_users_is_too_large_to_be_displayed;
MYSQL_RES *mysql_res;
@@ -5076,14 +5058,20 @@ static void Usr_GetListUsrsFromQuery (const char *Query,Rol_Role_t Role,Sco_Scop
struct UsrInList *UsrInList;
bool Abort = false;
- if (!Query[0])
+ if (Gbl.DB.QueryPtr == NULL)
+ {
+ Gbl.Usrs.LstUsrs[Role].NumUsrs = 0;
+ return;
+ }
+
+ if (!Gbl.DB.QueryPtr[0])
{
Gbl.Usrs.LstUsrs[Role].NumUsrs = 0;
return;
}
/***** Query database *****/
- if ((Gbl.Usrs.LstUsrs[Role].NumUsrs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get list of users")))
+ if ((Gbl.Usrs.LstUsrs[Role].NumUsrs = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get list of users")))
{
if (Gbl.Usrs.LstUsrs[Role].NumUsrs > Cfg_MAX_USRS_IN_LIST)
{
@@ -7082,17 +7070,16 @@ static void Usr_GetUsrListTypeFromForm (void)
static void Usr_GetMyUsrListTypeFromDB (void)
{
- char Query[256];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
Usr_ShowUsrsType_t ListType;
/***** Get type of listing of users from database *****/
- sprintf (Query,"SELECT UsrListType FROM crs_usr"
+ DB_BuildQuery ("SELECT UsrListType FROM crs_usr"
" WHERE CrsCod=%ld AND UsrCod=%ld",
- Gbl.CurrentCrs.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod);
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get type of listing of users");
+ Gbl.CurrentCrs.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod);
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not get type of listing of users");
if (NumRows == 1) // Should be one only row
{
@@ -7178,7 +7165,6 @@ static void Usr_GetParamColsClassPhotoFromForm (void)
static void Usr_GetMyColsClassPhotoFromDB (void)
{
- char Query[256];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@@ -7189,10 +7175,10 @@ static void Usr_GetMyColsClassPhotoFromDB (void)
if (Gbl.Usrs.Me.Logged && Gbl.CurrentCrs.Crs.CrsCod > 0)
{
/***** Get number of columns in class photo from database *****/
- sprintf (Query,"SELECT ColsClassPhoto FROM crs_usr"
+ DB_BuildQuery ("SELECT ColsClassPhoto FROM crs_usr"
" WHERE CrsCod=%ld AND UsrCod=%ld",
- Gbl.CurrentCrs.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod);
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get number of columns in class photo");
+ Gbl.CurrentCrs.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod);
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not get number of columns in class photo");
if (NumRows == 1) // Should be one only row
{
@@ -7281,7 +7267,6 @@ static bool Usr_GetParamListWithPhotosFromForm (void)
void Usr_GetMyPrefAboutListWithPhotosFromDB (void)
{
- char Query[256];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@@ -7292,10 +7277,10 @@ void Usr_GetMyPrefAboutListWithPhotosFromDB (void)
if (Gbl.Usrs.Me.Logged && Gbl.CurrentCrs.Crs.CrsCod)
{
/***** Get if listing of users must show photos from database *****/
- sprintf (Query,"SELECT ListWithPhotos FROM crs_usr"
+ DB_BuildQuery ("SELECT ListWithPhotos FROM crs_usr"
" WHERE CrsCod=%ld AND UsrCod=%ld",
- Gbl.CurrentCrs.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod);
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not check if listing of users must show photos");
+ Gbl.CurrentCrs.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod);
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not check if listing of users must show photos");
if (NumRows == 1) // Should be one only row
{
@@ -8585,7 +8570,6 @@ unsigned Usr_GetNumUsrsNotBelongingToAnyCrs (void)
float Usr_GetNumCrssPerUsr (Rol_Role_t Role)
{
- char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
float NumCrssPerUsr;
@@ -8595,20 +8579,20 @@ float Usr_GetNumCrssPerUsr (Rol_Role_t Role)
{
case Sco_SCOPE_SYS:
if (Role == Rol_UNK) // Any user
- sprintf (Query,"SELECT AVG(NumCrss) FROM "
+ DB_BuildQuery ("SELECT AVG(NumCrss) FROM "
"(SELECT COUNT(CrsCod) AS NumCrss"
" FROM crs_usr"
" GROUP BY UsrCod) AS NumCrssTable");
else
- sprintf (Query,"SELECT AVG(NumCrss) FROM "
+ DB_BuildQuery ("SELECT AVG(NumCrss) FROM "
"(SELECT COUNT(CrsCod) AS NumCrss"
" FROM crs_usr"
" WHERE Role=%u GROUP BY UsrCod) AS NumCrssTable",
- (unsigned) Role);
+ (unsigned) Role);
break;
case Sco_SCOPE_CTY:
if (Role == Rol_UNK) // Any user
- sprintf (Query,"SELECT AVG(NumCrss) FROM "
+ DB_BuildQuery ("SELECT AVG(NumCrss) FROM "
"(SELECT COUNT(crs_usr.CrsCod) AS NumCrss"
" FROM institutions,centres,degrees,courses,crs_usr"
" WHERE institutions.CtyCod=%ld"
@@ -8617,9 +8601,9 @@ float Usr_GetNumCrssPerUsr (Rol_Role_t Role)
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" GROUP BY crs_usr.UsrCod) AS NumCrssTable",
- Gbl.CurrentCty.Cty.CtyCod);
+ Gbl.CurrentCty.Cty.CtyCod);
else
- sprintf (Query,"SELECT AVG(NumCrss) FROM "
+ DB_BuildQuery ("SELECT AVG(NumCrss) FROM "
"(SELECT COUNT(crs_usr.CrsCod) AS NumCrss"
" FROM institutions,centres,degrees,courses,crs_usr"
" WHERE institutions.CtyCod=%ld"
@@ -8629,12 +8613,12 @@ float Usr_GetNumCrssPerUsr (Rol_Role_t Role)
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" GROUP BY crs_usr.UsrCod) AS NumCrssTable",
- Gbl.CurrentCty.Cty.CtyCod,
- (unsigned) Role);
+ Gbl.CurrentCty.Cty.CtyCod,
+ (unsigned) Role);
break;
case Sco_SCOPE_INS:
if (Role == Rol_UNK) // Any user
- sprintf (Query,"SELECT AVG(NumCrss) FROM "
+ DB_BuildQuery ("SELECT AVG(NumCrss) FROM "
"(SELECT COUNT(crs_usr.CrsCod) AS NumCrss"
" FROM centres,degrees,courses,crs_usr"
" WHERE centres.InsCod=%ld"
@@ -8642,9 +8626,9 @@ float Usr_GetNumCrssPerUsr (Rol_Role_t Role)
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" GROUP BY crs_usr.UsrCod) AS NumCrssTable",
- Gbl.CurrentIns.Ins.InsCod);
+ Gbl.CurrentIns.Ins.InsCod);
else
- sprintf (Query,"SELECT AVG(NumCrss) FROM "
+ DB_BuildQuery ("SELECT AVG(NumCrss) FROM "
"(SELECT COUNT(crs_usr.CrsCod) AS NumCrss"
" FROM centres,degrees,courses,crs_usr"
" WHERE centres.InsCod=%ld"
@@ -8653,21 +8637,21 @@ float Usr_GetNumCrssPerUsr (Rol_Role_t Role)
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" GROUP BY crs_usr.UsrCod) AS NumCrssTable",
- Gbl.CurrentIns.Ins.InsCod,
- (unsigned) Role);
+ Gbl.CurrentIns.Ins.InsCod,
+ (unsigned) Role);
break;
case Sco_SCOPE_CTR:
if (Role == Rol_UNK) // Any user
- sprintf (Query,"SELECT AVG(NumCrss) FROM "
+ DB_BuildQuery ("SELECT AVG(NumCrss) FROM "
"(SELECT COUNT(crs_usr.CrsCod) AS NumCrss"
" FROM degrees,courses,crs_usr"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" GROUP BY crs_usr.UsrCod) AS NumCrssTable",
- Gbl.CurrentCtr.Ctr.CtrCod);
+ Gbl.CurrentCtr.Ctr.CtrCod);
else
- sprintf (Query,"SELECT AVG(NumCrss) FROM "
+ DB_BuildQuery ("SELECT AVG(NumCrss) FROM "
"(SELECT COUNT(crs_usr.CrsCod) AS NumCrss"
" FROM degrees,courses,crs_usr"
" WHERE degrees.CtrCod=%ld"
@@ -8675,28 +8659,28 @@ float Usr_GetNumCrssPerUsr (Rol_Role_t Role)
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" GROUP BY crs_usr.UsrCod) AS NumCrssTable",
- Gbl.CurrentCtr.Ctr.CtrCod,
- (unsigned) Role);
+ Gbl.CurrentCtr.Ctr.CtrCod,
+ (unsigned) Role);
break;
case Sco_SCOPE_DEG:
if (Role == Rol_UNK) // Any user
- sprintf (Query,"SELECT AVG(NumCrss) FROM "
+ DB_BuildQuery ("SELECT AVG(NumCrss) FROM "
"(SELECT COUNT(crs_usr.CrsCod) AS NumCrss"
" FROM courses,crs_usr"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" GROUP BY crs_usr.UsrCod) AS NumCrssTable",
- Gbl.CurrentDeg.Deg.DegCod);
+ Gbl.CurrentDeg.Deg.DegCod);
else
- sprintf (Query,"SELECT AVG(NumCrss) FROM "
+ DB_BuildQuery ("SELECT AVG(NumCrss) FROM "
"(SELECT COUNT(crs_usr.CrsCod) AS NumCrss"
" FROM courses,crs_usr"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" GROUP BY crs_usr.UsrCod) AS NumCrssTable",
- Gbl.CurrentDeg.Deg.DegCod,
- (unsigned) Role);
+ Gbl.CurrentDeg.Deg.DegCod,
+ (unsigned) Role);
break;
case Sco_SCOPE_CRS:
return 1.0;
@@ -8704,7 +8688,7 @@ float Usr_GetNumCrssPerUsr (Rol_Role_t Role)
Lay_WrongScopeExit ();
break;
}
- DB_QuerySELECT (Query,&mysql_res,"can not get number of courses per user");
+ DB_QuerySELECT_new (&mysql_res,"can not get number of courses per user");
/***** Get number of courses *****/
row = mysql_fetch_row (mysql_res);
@@ -8722,7 +8706,6 @@ float Usr_GetNumCrssPerUsr (Rol_Role_t Role)
float Usr_GetNumUsrsPerCrs (Rol_Role_t Role)
{
- char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
float NumUsrsPerCrs;
@@ -8732,20 +8715,20 @@ float Usr_GetNumUsrsPerCrs (Rol_Role_t Role)
{
case Sco_SCOPE_SYS:
if (Role == Rol_UNK) // Any user
- sprintf (Query,"SELECT AVG(NumUsrs) FROM "
+ DB_BuildQuery ("SELECT AVG(NumUsrs) FROM "
"(SELECT COUNT(UsrCod) AS NumUsrs"
" FROM crs_usr"
" GROUP BY CrsCod) AS NumUsrsTable");
else
- sprintf (Query,"SELECT AVG(NumUsrs) FROM "
+ DB_BuildQuery ("SELECT AVG(NumUsrs) FROM "
"(SELECT COUNT(UsrCod) AS NumUsrs"
" FROM crs_usr"
" WHERE Role=%u GROUP BY CrsCod) AS NumUsrsTable",
- (unsigned) Role);
+ (unsigned) Role);
break;
case Sco_SCOPE_CTY:
if (Role == Rol_UNK) // Any user
- sprintf (Query,"SELECT AVG(NumUsrs) FROM "
+ DB_BuildQuery ("SELECT AVG(NumUsrs) FROM "
"(SELECT COUNT(crs_usr.UsrCod) AS NumUsrs"
" FROM institutions,centres,degrees,courses,crs_usr"
" WHERE institutions.CtyCod=%ld"
@@ -8754,9 +8737,9 @@ float Usr_GetNumUsrsPerCrs (Rol_Role_t Role)
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" GROUP BY crs_usr.CrsCod) AS NumUsrsTable",
- Gbl.CurrentCty.Cty.CtyCod);
+ Gbl.CurrentCty.Cty.CtyCod);
else
- sprintf (Query,"SELECT AVG(NumUsrs) FROM "
+ DB_BuildQuery ("SELECT AVG(NumUsrs) FROM "
"(SELECT COUNT(crs_usr.UsrCod) AS NumUsrs"
" FROM institutions,centres,degrees,courses,crs_usr"
" WHERE institutions.CtyCod=%ld"
@@ -8766,12 +8749,12 @@ float Usr_GetNumUsrsPerCrs (Rol_Role_t Role)
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" GROUP BY crs_usr.CrsCod) AS NumUsrsTable",
- Gbl.CurrentCty.Cty.CtyCod,
- (unsigned) Role);
+ Gbl.CurrentCty.Cty.CtyCod,
+ (unsigned) Role);
break;
case Sco_SCOPE_INS:
if (Role == Rol_UNK) // Any user
- sprintf (Query,"SELECT AVG(NumUsrs) FROM "
+ DB_BuildQuery ("SELECT AVG(NumUsrs) FROM "
"(SELECT COUNT(crs_usr.UsrCod) AS NumUsrs"
" FROM centres,degrees,courses,crs_usr"
" WHERE centres.InsCod=%ld"
@@ -8779,9 +8762,9 @@ float Usr_GetNumUsrsPerCrs (Rol_Role_t Role)
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" GROUP BY crs_usr.CrsCod) AS NumUsrsTable",
- Gbl.CurrentIns.Ins.InsCod);
+ Gbl.CurrentIns.Ins.InsCod);
else
- sprintf (Query,"SELECT AVG(NumUsrs) FROM "
+ DB_BuildQuery ("SELECT AVG(NumUsrs) FROM "
"(SELECT COUNT(crs_usr.UsrCod) AS NumUsrs"
" FROM centres,degrees,courses,crs_usr"
" WHERE centres.InsCod=%ld"
@@ -8790,21 +8773,21 @@ float Usr_GetNumUsrsPerCrs (Rol_Role_t Role)
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" GROUP BY crs_usr.CrsCod) AS NumUsrsTable",
- Gbl.CurrentIns.Ins.InsCod,
- (unsigned) Role);
+ Gbl.CurrentIns.Ins.InsCod,
+ (unsigned) Role);
break;
case Sco_SCOPE_CTR:
if (Role == Rol_UNK) // Any user
- sprintf (Query,"SELECT AVG(NumUsrs) FROM "
+ DB_BuildQuery ("SELECT AVG(NumUsrs) FROM "
"(SELECT COUNT(crs_usr.UsrCod) AS NumUsrs"
" FROM degrees,courses,crs_usr"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" GROUP BY crs_usr.CrsCod) AS NumUsrsTable",
- Gbl.CurrentCtr.Ctr.CtrCod);
+ Gbl.CurrentCtr.Ctr.CtrCod);
else
- sprintf (Query,"SELECT AVG(NumUsrs) FROM "
+ DB_BuildQuery ("SELECT AVG(NumUsrs) FROM "
"(SELECT COUNT(crs_usr.UsrCod) AS NumUsrs"
" FROM degrees,courses,crs_usr"
" WHERE degrees.CtrCod=%ld"
@@ -8812,28 +8795,28 @@ float Usr_GetNumUsrsPerCrs (Rol_Role_t Role)
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" GROUP BY crs_usr.CrsCod) AS NumUsrsTable",
- Gbl.CurrentCtr.Ctr.CtrCod,
- (unsigned) Role);
+ Gbl.CurrentCtr.Ctr.CtrCod,
+ (unsigned) Role);
break;
case Sco_SCOPE_DEG:
if (Role == Rol_UNK) // Any user
- sprintf (Query,"SELECT AVG(NumUsrs) FROM "
+ DB_BuildQuery ("SELECT AVG(NumUsrs) FROM "
"(SELECT COUNT(crs_usr.UsrCod) AS NumUsrs"
" FROM courses,crs_usr"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" GROUP BY crs_usr.CrsCod) AS NumUsrsTable",
- Gbl.CurrentDeg.Deg.DegCod);
+ Gbl.CurrentDeg.Deg.DegCod);
else
- sprintf (Query,"SELECT AVG(NumUsrs) FROM "
+ DB_BuildQuery ("SELECT AVG(NumUsrs) FROM "
"(SELECT COUNT(crs_usr.UsrCod) AS NumUsrs"
" FROM courses,crs_usr"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" GROUP BY crs_usr.CrsCod) AS NumUsrsTable",
- Gbl.CurrentDeg.Deg.DegCod,
- (unsigned) Role);
+ Gbl.CurrentDeg.Deg.DegCod,
+ (unsigned) Role);
break;
case Sco_SCOPE_CRS:
switch (Role)
@@ -8855,7 +8838,7 @@ float Usr_GetNumUsrsPerCrs (Rol_Role_t Role)
Lay_WrongScopeExit ();
break;
}
- DB_QuerySELECT (Query,&mysql_res,"can not get number of users per course");
+ DB_QuerySELECT_new (&mysql_res,"can not get number of users per course");
/***** Get number of users *****/
row = mysql_fetch_row (mysql_res);
diff --git a/swad_web_service.c b/swad_web_service.c
index 1fea13f3b..c05fb0ad9 100644
--- a/swad_web_service.c
+++ b/swad_web_service.c
@@ -282,15 +282,14 @@ void Svc_Exit (const char *DetailErrorMessage)
static int Svc_GetPlgCodFromAppKey (const char *appKey)
{
- char Query[128 + Plg_MAX_BYTES_PLUGIN_APP_KEY];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
Gbl.WebService.PlgCod = -1L;
/***** Get number of plugins with a IP address *****/
- sprintf (Query,"SELECT PlgCod FROM plugins WHERE AppKey='%s'",appKey);
- if (DB_QuerySELECT (Query,&mysql_res,"can not check application key")) // Session found in table of sessions
+ DB_BuildQuery ("SELECT PlgCod FROM plugins WHERE AppKey='%s'",appKey);
+ if (DB_QuerySELECT_new (&mysql_res,"can not check application key")) // Session found in table of sessions
{
row = mysql_fetch_row (mysql_res);
@@ -373,7 +372,6 @@ static int Svc_CheckIdSession (const char *IdSession)
static int Svc_CheckWSKey (char WSKey[Svc_BYTES_WS_KEY + 1])
{
- char Query[128 + Svc_BYTES_WS_KEY];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@@ -383,9 +381,8 @@ static int Svc_CheckWSKey (char WSKey[Svc_BYTES_WS_KEY + 1])
Gbl.WebService.PlgCod = -1L;
/***** Check that key does not exist in database *****/
- sprintf (Query,"SELECT UsrCod,PlgCod FROM ws_keys WHERE WSKey='%s'",
- WSKey);
- if (DB_QuerySELECT (Query,&mysql_res,"can not get existence of key")) // Session found in table of sessions
+ DB_BuildQuery ("SELECT UsrCod,PlgCod FROM ws_keys WHERE WSKey='%s'",WSKey);
+ if (DB_QuerySELECT_new (&mysql_res,"can not get existence of key")) // Session found in table of sessions
{
row = mysql_fetch_row (mysql_res);
@@ -500,7 +497,6 @@ static int Svc_RemoveOldWSKeys (void)
static int Svc_GetCurrentDegCodFromCurrentCrsCod (void)
{
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@@ -508,9 +504,9 @@ static int Svc_GetCurrentDegCodFromCurrentCrsCod (void)
Gbl.CurrentDeg.Deg.DegCod = -1L;
/***** Check that key does not exist in database *****/
- sprintf (Query,"SELECT DegCod FROM courses WHERE CrsCod=%ld",
- Gbl.CurrentCrs.Crs.CrsCod);
- if (DB_QuerySELECT (Query,&mysql_res,"can not get the degree of a course")) // Course found in table of courses
+ DB_BuildQuery ("SELECT DegCod FROM courses WHERE CrsCod=%ld",
+ Gbl.CurrentCrs.Crs.CrsCod);
+ if (DB_QuerySELECT_new (&mysql_res,"can not get the degree of a course")) // Course found in table of courses
{
row = mysql_fetch_row (mysql_res);
@@ -530,7 +526,6 @@ static int Svc_GetCurrentDegCodFromCurrentCrsCod (void)
static bool Svc_GetSomeUsrDataFromUsrCod (struct UsrData *UsrDat,long CrsCod)
{
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@@ -540,12 +535,12 @@ static bool Svc_GetSomeUsrDataFromUsrCod (struct UsrData *UsrDat,long CrsCod)
/***** Get some user's data *****/
/* Query database */
- sprintf (Query,"SELECT Surname1,Surname2,FirstName,Photo,DATE_FORMAT(Birthday,'%%Y%%m%%d')"
+ DB_BuildQuery ("SELECT Surname1,Surname2,FirstName,Photo,DATE_FORMAT(Birthday,'%%Y%%m%%d')"
" FROM usr_data WHERE UsrCod=%ld",
- UsrDat->UsrCod);
+ UsrDat->UsrCod);
/* Check number of rows in result */
- if (DB_QuerySELECT (Query,&mysql_res,"can not get user's data") != 1)
+ if (DB_QuerySELECT_new (&mysql_res,"can not get user's data") != 1)
return false;
/* Read some user's data */
@@ -580,10 +575,10 @@ static bool Svc_GetSomeUsrDataFromUsrCod (struct UsrData *UsrDat,long CrsCod)
if (CrsCod > 0)
{
/* Get the role in the given course */
- sprintf (Query,"SELECT Role FROM crs_usr"
+ DB_BuildQuery ("SELECT Role FROM crs_usr"
" WHERE CrsCod=%ld AND UsrCod=%ld",
- CrsCod,UsrDat->UsrCod);
- if (DB_QuerySELECT (Query,&mysql_res,"can not get user's role")) // User belongs to course
+ CrsCod,UsrDat->UsrCod);
+ if (DB_QuerySELECT_new (&mysql_res,"can not get user's role")) // User belongs to course
{
row = mysql_fetch_row (mysql_res);
if (row[0])
@@ -611,10 +606,10 @@ static bool Svc_GetSomeUsrDataFromUsrCod (struct UsrData *UsrDat,long CrsCod)
else
{
/* Get the maximum role in any course */
- sprintf (Query,"SELECT MAX(Role)"
+ DB_BuildQuery ("SELECT MAX(Role)"
" FROM crs_usr WHERE UsrCod=%ld",
- UsrDat->UsrCod);
- if (DB_QuerySELECT (Query,&mysql_res,"can not get user's role") == 1)
+ UsrDat->UsrCod);
+ if (DB_QuerySELECT_new (&mysql_res,"can not get user's role") == 1)
{
row = mysql_fetch_row (mysql_res);
if (row[0])
@@ -788,9 +783,6 @@ int swad__loginByUserPasswordKey (struct soap *soap,
{
char UsrIDNickOrEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1];
int ReturnCode;
- char Query[512 +
- Cns_MAX_CHARS_EMAIL_ADDRESS +
- Pwd_BYTES_ENCRYPTED_PASSWORD];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRows;
@@ -835,23 +827,23 @@ int swad__loginByUserPasswordKey (struct soap *soap,
Str_RemoveLeadingArrobas (UsrIDNickOrEmail);
/* User has typed a nickname */
- sprintf (Query,"SELECT usr_nicknames.UsrCod"
+ DB_BuildQuery ("SELECT usr_nicknames.UsrCod"
" FROM usr_nicknames,usr_data"
" WHERE usr_nicknames.Nickname='%s'"
" AND usr_nicknames.UsrCod=usr_data.UsrCod"
" AND usr_data.Password='%s'",
- UsrIDNickOrEmail,userPassword);
+ UsrIDNickOrEmail,userPassword);
}
else if (Mai_CheckIfEmailIsValid (Gbl.Usrs.Me.UsrIdLogin)) // 2: It's an email
{
/* User has typed an email */
// TODO: Get only if email confirmed?
- sprintf (Query,"SELECT usr_emails.UsrCod"
+ DB_BuildQuery ("SELECT usr_emails.UsrCod"
" FROM usr_emails,usr_data"
" WHERE usr_emails.E_mail='%s'"
" AND usr_emails.UsrCod=usr_data.UsrCod"
" AND usr_data.Password='%s'",
- UsrIDNickOrEmail,userPassword);
+ UsrIDNickOrEmail,userPassword);
}
else // 3: It's not a nickname nor email
{
@@ -862,11 +854,11 @@ int swad__loginByUserPasswordKey (struct soap *soap,
{
/* User has typed a valid user's ID (existing or not) */
// TODO: Get only if ID confirmed?
- sprintf (Query,"SELECT usr_IDs.UsrCod FROM usr_IDs,usr_data"
+ DB_BuildQuery ("SELECT usr_IDs.UsrCod FROM usr_IDs,usr_data"
" WHERE usr_IDs.UsrID='%s'"
" AND usr_IDs.UsrCod=usr_data.UsrCod"
" AND usr_data.Password='%s'",
- UsrIDNickOrEmail,userPassword);
+ UsrIDNickOrEmail,userPassword);
}
else // String is not a valid user's nickname, email or ID
return soap_receiver_fault (Gbl.soap,
@@ -875,7 +867,7 @@ int swad__loginByUserPasswordKey (struct soap *soap,
}
/***** Get user's data from database *****/
- if ((NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get user's data")) == 1) // User found in table of users' data
+ if ((NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get user's data")) == 1) // User found in table of users' data
{
row = mysql_fetch_row (mysql_res);
@@ -956,7 +948,6 @@ int swad__loginBySessionKey (struct soap *soap,
struct swad__loginBySessionKeyOutput *loginBySessionKeyOut) // output
{
int ReturnCode;
- char Query[256 + Cns_BYTES_SESSION_ID];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRows;
@@ -1011,10 +1002,10 @@ int swad__loginBySessionKey (struct soap *soap,
// Now, we know that sessionID is a valid session identifier
/***** Query data of the session from database *****/
- sprintf (Query,"SELECT UsrCod,DegCod,CrsCod FROM sessions"
+ DB_BuildQuery ("SELECT UsrCod,DegCod,CrsCod FROM sessions"
" WHERE SessionId='%s'",
- sessionID);
- if ((NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get session data")) == 1) // Session found in table of sessions
+ sessionID);
+ if ((NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get session data")) == 1) // Session found in table of sessions
{
row = mysql_fetch_row (mysql_res);
@@ -1101,7 +1092,6 @@ int swad__getNewPassword (struct soap *soap,
{
int ReturnCode;
char UsrIDNickOrEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1];
- char Query[128 + Cns_MAX_BYTES_EMAIL_ADDRESS];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRows;
@@ -1126,15 +1116,15 @@ int swad__getNewPassword (struct soap *soap,
Str_RemoveLeadingArrobas (UsrIDNickOrEmail);
/* User has typed a nickname */
- sprintf (Query,"SELECT UsrCod FROM usr_nicknames WHERE Nickname='%s'",
- UsrIDNickOrEmail);
+ DB_BuildQuery ("SELECT UsrCod FROM usr_nicknames WHERE Nickname='%s'",
+ UsrIDNickOrEmail);
}
else if (Mai_CheckIfEmailIsValid (Gbl.Usrs.Me.UsrIdLogin)) // 2: It's an email
{
/* User has typed an email */
// TODO: Get only if email confirmed?
- sprintf (Query,"SELECT UsrCod FROM usr_emails WHERE E_mail='%s'",
- UsrIDNickOrEmail);
+ DB_BuildQuery ("SELECT UsrCod FROM usr_emails WHERE E_mail='%s'",
+ UsrIDNickOrEmail);
}
else // 3: It's not a nickname nor email
{
@@ -1145,8 +1135,8 @@ int swad__getNewPassword (struct soap *soap,
{
/* User has typed a valid user's ID (existing or not) */
// TODO: Get only if ID confirmed?
- sprintf (Query,"SELECT UsrCod FROM usr_IDs WHERE UsrID='%s'",
- UsrIDNickOrEmail);
+ DB_BuildQuery ("SELECT UsrCod FROM usr_IDs WHERE UsrID='%s'",
+ UsrIDNickOrEmail);
}
else // String is not a valid user's nickname, email or ID
return soap_receiver_fault (Gbl.soap,
@@ -1155,7 +1145,7 @@ int swad__getNewPassword (struct soap *soap,
}
/***** Get user's data from database *****/
- if ((NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get user's data")) == 1) // One unique user found in table of users' data
+ if ((NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get user's data")) == 1) // One unique user found in table of users' data
{
row = mysql_fetch_row (mysql_res);
@@ -1187,7 +1177,6 @@ int swad__getCourses (struct soap *soap,
struct swad__getCoursesOutput *getCoursesOut) // output
{
int ReturnCode;
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRow;
@@ -1215,11 +1204,11 @@ int swad__getCourses (struct soap *soap,
Gbl.Usrs.Me.Role.Logged = Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs.Role;
/***** Query my courses from database *****/
- sprintf (Query,"SELECT courses.CrsCod,courses.ShortName,courses.FullName,crs_usr.Role FROM crs_usr,courses"
+ DB_BuildQuery ("SELECT courses.CrsCod,courses.ShortName,courses.FullName,crs_usr.Role FROM crs_usr,courses"
" WHERE crs_usr.UsrCod=%ld AND crs_usr.CrsCod=courses.CrsCod"
" ORDER BY courses.FullName",
- Gbl.Usrs.Me.UsrDat.UsrCod);
- NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get user's courses");
+ Gbl.Usrs.Me.UsrDat.UsrCod);
+ NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get user's courses");
getCoursesOut->numCourses = (int) NumRows;
getCoursesOut->coursesArray.__size = (int) NumRows;
@@ -1632,7 +1621,6 @@ int swad__getGroupTypes (struct soap *soap,
struct swad__getGroupTypesOutput *getGroupTypesOut) // output
{
int ReturnCode;
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRow;
@@ -1679,12 +1667,12 @@ int swad__getGroupTypes (struct soap *soap,
"Requester must belong to course");
/***** Query group types in a course from database *****/
- sprintf (Query,"SELECT GrpTypCod,GrpTypName,Mandatory,Multiple,UNIX_TIMESTAMP(OpenTime)"
+ DB_BuildQuery ("SELECT GrpTypCod,GrpTypName,Mandatory,Multiple,UNIX_TIMESTAMP(OpenTime)"
" FROM crs_grp_types"
" WHERE CrsCod=%d"
" ORDER BY GrpTypName",
- courseCode);
- NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get group types");
+ courseCode);
+ NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get group types");
getGroupTypesOut->numGroupTypes = (int) NumRows;
getGroupTypesOut->groupTypesArray.__size = (int) NumRows;
@@ -1741,7 +1729,6 @@ int swad__getGroups (struct soap *soap,
struct swad__getGroupsOutput *getGroupsOut) // output
{
int ReturnCode;
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRow,NumRows;
@@ -1788,15 +1775,15 @@ int swad__getGroups (struct soap *soap,
"Requester must belong to course");
/***** Query groups in a course from database *****/
- sprintf (Query,"SELECT crs_grp_types.GrpTypCod,crs_grp_types.GrpTypName,"
+ DB_BuildQuery ("SELECT crs_grp_types.GrpTypCod,crs_grp_types.GrpTypName,"
"crs_grp.GrpCod,crs_grp.GrpName,"
"crs_grp.MaxStudents,crs_grp.Open,crs_grp.FileZones"
" FROM crs_grp_types,crs_grp"
" WHERE crs_grp_types.CrsCod=%d"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
- courseCode);
- NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get user's groups");
+ courseCode);
+ NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get user's groups");
getGroupsOut->numGroups = (int) NumRows;
getGroupsOut->groupsArray.__size = (int) NumRows;
@@ -1872,7 +1859,6 @@ int swad__sendMyGroups (struct soap *soap,
const char *Ptr;
char LongStr[1 + 10 + 1];
unsigned NumGrp;
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRow,NumRows;
@@ -1950,15 +1936,15 @@ int swad__sendMyGroups (struct soap *soap,
Grp_FreeListCodGrp (&LstGrpsIWant);
/***** Query groups in a course from database *****/
- sprintf (Query,"SELECT crs_grp_types.GrpTypCod,crs_grp_types.GrpTypName,"
+ DB_BuildQuery ("SELECT crs_grp_types.GrpTypCod,crs_grp_types.GrpTypName,"
"crs_grp.GrpCod,crs_grp.GrpName,"
"crs_grp.MaxStudents,crs_grp.Open,crs_grp.FileZones"
" FROM crs_grp_types,crs_grp"
" WHERE crs_grp_types.CrsCod=%d"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
- courseCode);
- NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get user's groups");
+ courseCode);
+ NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get user's groups");
SendMyGroupsOut->numGroups = (int) NumRows;
SendMyGroupsOut->groupsArray.__size = (int) NumRows;
@@ -2085,7 +2071,6 @@ int swad__getAttendanceEvents (struct soap *soap,
struct swad__getAttendanceEventsOutput *getAttendanceEventsOut) // output
{
int ReturnCode;
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
int NumAttEvent;
@@ -2129,16 +2114,16 @@ int swad__getAttendanceEvents (struct soap *soap,
"Requester must be a teacher");
/***** Query list of attendance events *****/
- sprintf (Query,"SELECT AttCod,Hidden,UsrCod,"
+ DB_BuildQuery ("SELECT AttCod,Hidden,UsrCod,"
"UNIX_TIMESTAMP(StartTime) AS ST,"
"UNIX_TIMESTAMP(EndTime) AS ET,"
"CommentTchVisible,Title,Txt"
" FROM att_events"
" WHERE CrsCod=%d"
" ORDER BY ST DESC,ET DESC,Title DESC",
- courseCode);
+ courseCode);
getAttendanceEventsOut->eventsArray.__size =
- getAttendanceEventsOut->numEvents = (int) DB_QuerySELECT (Query,&mysql_res,"can not get attendance events");
+ getAttendanceEventsOut->numEvents = (int) DB_QuerySELECT_new (&mysql_res,"can not get attendance events");
if (getAttendanceEventsOut->numEvents == 0)
getAttendanceEventsOut->eventsArray.__ptr = NULL;
@@ -2243,7 +2228,6 @@ int swad__getAttendanceEvents (struct soap *soap,
static void Svc_GetListGrpsInAttendanceEventFromDB (long AttCod,char **ListGroups)
{
- char Query[128];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long NumGrps;
@@ -2253,9 +2237,9 @@ static void Svc_GetListGrpsInAttendanceEventFromDB (long AttCod,char **ListGroup
size_t Length;
/***** Get list of groups *****/
- sprintf (Query,"SELECT GrpCod FROM att_grp WHERE AttCod=%ld",
- AttCod);
- if ((NumGrps = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get groups of an attendance event")) == 0)
+ DB_BuildQuery ("SELECT GrpCod FROM att_grp WHERE AttCod=%ld",
+ AttCod);
+ if ((NumGrps = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get groups of an attendance event")) == 0)
*ListGroups = NULL;
else // Events found
{
@@ -2511,7 +2495,6 @@ int swad__getAttendanceUsers (struct soap *soap,
int ReturnCode;
struct AttendanceEvent Att;
char SubQuery[512];
- char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRow,NumRows;
@@ -2583,14 +2566,14 @@ int swad__getAttendanceUsers (struct soap *soap,
(unsigned) Rol_STD,
Att.AttCod);
// Query: list of users in attendance list + rest of users (subquery)
- sprintf (Query,"SELECT u.UsrCod,u.Present FROM "
+ DB_BuildQuery ("SELECT u.UsrCod,u.Present FROM "
"(SELECT UsrCod,Present"
" FROM att_usr WHERE AttCod=%ld"
" UNION %s) AS u,usr_data"
" WHERE u.UsrCod=usr_data.UsrCod"
" ORDER BY usr_data.Surname1,usr_data.Surname2,usr_data.FirstName",
- (long) attendanceEventCode,SubQuery);
- NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get users in an attendance event");
+ (long) attendanceEventCode,SubQuery);
+ NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get users in an attendance event");
getAttendanceUsersOut->numUsers = (int) NumRows;
getAttendanceUsersOut->usersArray.__size = (int) NumRows;
@@ -2824,7 +2807,6 @@ int swad__getNotifications (struct soap *soap,
extern const char *Txt_Centre;
extern const char *Txt_Institution;
int ReturnCode;
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumNotifications;
@@ -2870,13 +2852,13 @@ int swad__getNotifications (struct soap *soap,
return ReturnCode;
/***** Get my notifications from database *****/
- sprintf (Query,"SELECT NtfCod,NotifyEvent,UNIX_TIMESTAMP(TimeNotif),"
+ DB_BuildQuery ("SELECT NtfCod,NotifyEvent,UNIX_TIMESTAMP(TimeNotif),"
"FromUsrCod,InsCod,CtrCod,DegCod,CrsCod,Cod,Status"
" FROM notif"
" WHERE ToUsrCod=%ld AND TimeNotif>=FROM_UNIXTIME(%ld)"
" ORDER BY TimeNotif DESC",
- Gbl.Usrs.Me.UsrDat.UsrCod,beginTime);
- NumNotifications = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get user's notifications");
+ Gbl.Usrs.Me.UsrDat.UsrCod,beginTime);
+ NumNotifications = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get user's notifications");
if (NumNotifications) // Notifications found
{
getNotificationsOut->numNotifications = (int) NumNotifications;
@@ -3051,16 +3033,15 @@ int swad__getNotifications (struct soap *soap,
static int Svc_GetMyLanguage (void)
{
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
Txt_Language_t Lan;
/***** Get user's language *****/
- sprintf (Query,"SELECT Language FROM usr_data"
+ DB_BuildQuery ("SELECT Language FROM usr_data"
" WHERE UsrCod=%ld",
- Gbl.Usrs.Me.UsrDat.UsrCod);
- if (DB_QuerySELECT (Query,&mysql_res,"can not get user's language") != 1)
+ Gbl.Usrs.Me.UsrDat.UsrCod);
+ if (DB_QuerySELECT_new (&mysql_res,"can not get user's language") != 1)
return soap_receiver_fault (Gbl.soap,
"Can not get user's language from database",
"User doen't exist in database");
@@ -3164,7 +3145,6 @@ int swad__sendMessage (struct soap *soap,
int ReturnCode;
long ReplyUsrCod = -1L;
char Nickname[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1];
- char Query[Svc_MAX_BYTES_QUERY_RECIPIENTS + 1];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRow,NumRows;
@@ -3198,15 +3178,15 @@ int swad__sendMessage (struct soap *soap,
if (messageCode)
{
/***** Check if the original message was really received by me *****/
- sprintf (Query,"SELECT SUM(N) FROM"
+ DB_BuildQuery ("SELECT SUM(N) 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);
- if (!DB_QuerySELECT (Query,&mysql_res,"can not check original message"))
+ Gbl.Usrs.Me.UsrDat.UsrCod,(long) messageCode,
+ Gbl.Usrs.Me.UsrDat.UsrCod,(long) messageCode);
+ if (!DB_QuerySELECT_new (&mysql_res,"can not check original message"))
return soap_sender_fault (Gbl.soap,
"Can not check original message",
"Error reading from database");
@@ -3227,13 +3207,13 @@ int swad__sendMessage (struct soap *soap,
"Original message does not exist");
/***** Get the recipient of the message *****/
- sprintf (Query,"SELECT UsrCod FROM msg_snt"
+ DB_BuildQuery ("SELECT UsrCod FROM msg_snt"
" WHERE MsgCod=%ld"
" UNION "
"SELECT UsrCod FROM msg_snt_deleted"
" WHERE MsgCod=%ld",
- (long) messageCode,(long) messageCode);
- if ((NumRows = DB_QuerySELECT (Query,&mysql_res,"can not check original message"))) // Message found in any of the two tables of sent messages
+ (long) messageCode,(long) messageCode);
+ if ((NumRows = DB_QuerySELECT_new (&mysql_res,"can not check original message"))) // Message found in any of the two tables of sent messages
{
row = mysql_fetch_row (mysql_res);
ReplyUsrCod = Str_ConvertStrCodToLongCod (row[0]);
@@ -3248,14 +3228,18 @@ int swad__sendMessage (struct soap *soap,
"Original message does not exist");
}
+ /***** Allocate space for query *****/
+ if ((Gbl.DB.QueryPtr = (char *) malloc (Svc_MAX_BYTES_QUERY_RECIPIENTS + 1)) == NULL)
+ Lay_NotEnoughMemoryExit ();
/***** Build query for recipients from database *****/
if (ReplyUsrCod > 0)
- sprintf (Query,"SELECT UsrCod FROM usr_data"
- " WHERE UsrCod=%ld",
- ReplyUsrCod);
+ snprintf (Gbl.DB.QueryPtr,Svc_MAX_BYTES_QUERY_RECIPIENTS + 1,
+ "SELECT UsrCod FROM usr_data"
+ " WHERE UsrCod=%ld",
+ ReplyUsrCod);
else
- Query[0] = '\0';
+ Gbl.DB.QueryPtr[0] = '\0';
/***** Loop over recipients' nicknames building query *****/
Ptr = to;
@@ -3270,7 +3254,7 @@ int swad__sendMessage (struct soap *soap,
Str_RemoveLeadingArrobas (Nickname);
/* Check for overflow in query */
- if (strlen (Query) + Nck_MAX_BYTES_NICKNAME_WITHOUT_ARROBA + 32 >
+ if (strlen (Gbl.DB.QueryPtr) + Nck_MAX_BYTES_NICKNAME_WITHOUT_ARROBA + 32 >
Svc_MAX_BYTES_QUERY_RECIPIENTS)
return soap_sender_fault (Gbl.soap,
"Can not send message",
@@ -3280,25 +3264,25 @@ int swad__sendMessage (struct soap *soap,
if (FirstNickname)
{
if (ReplyUsrCod > 0)
- Str_Concat (Query," UNION ",
+ Str_Concat (Gbl.DB.QueryPtr," UNION ",
Svc_MAX_BYTES_QUERY_RECIPIENTS);
- Str_Concat (Query,"SELECT UsrCod FROM usr_nicknames"
+ Str_Concat (Gbl.DB.QueryPtr,"SELECT UsrCod FROM usr_nicknames"
" WHERE Nickname IN ('",
Svc_MAX_BYTES_QUERY_RECIPIENTS);
FirstNickname = false;
ThereAreNicknames = true;
}
else
- Str_Concat (Query,",'",
+ Str_Concat (Gbl.DB.QueryPtr,",'",
Svc_MAX_BYTES_QUERY_RECIPIENTS);
- Str_Concat (Query,Nickname,
+ Str_Concat (Gbl.DB.QueryPtr,Nickname,
Svc_MAX_BYTES_QUERY_RECIPIENTS);
- Str_Concat (Query,"'",
+ Str_Concat (Gbl.DB.QueryPtr,"'",
Svc_MAX_BYTES_QUERY_RECIPIENTS);
}
}
if (ThereAreNicknames)
- Str_Concat (Query,")",
+ Str_Concat (Gbl.DB.QueryPtr,")",
Svc_MAX_BYTES_QUERY_RECIPIENTS);
/***** Initialize output structure *****/
@@ -3309,7 +3293,7 @@ int swad__sendMessage (struct soap *soap,
if (ReplyUsrCod > 0 || ThereAreNicknames) // There are a recipient to reply or nicknames in "to"
{
/***** Get users *****/
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get users");
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not get users");
sendMessageOut->numUsers = (int) NumRows;
sendMessageOut->usersArray.__size = (int) NumRows;
@@ -3580,15 +3564,14 @@ int swad__getTestConfig (struct soap *soap,
static int Svc_GetTstConfig (long CrsCod)
{
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
/***** Query database *****/
- sprintf (Query,"SELECT Pluggable,Min,Def,Max,MinTimeNxtTstPerQst,Feedback"
+ DB_BuildQuery ("SELECT Pluggable,Min,Def,Max,MinTimeNxtTstPerQst,Feedback"
" FROM tst_config WHERE CrsCod=%ld",
- CrsCod);
- if (DB_QuerySELECT (Query,&mysql_res,"can not get test configuration"))
+ CrsCod);
+ if (DB_QuerySELECT_new (&mysql_res,"can not get test configuration"))
{
/***** Get minimun, default and maximum *****/
row = mysql_fetch_row (mysql_res);
@@ -3722,19 +3705,18 @@ int swad__getTests (struct soap *soap,
static int Svc_GetTstTags (long CrsCod,struct swad__getTestsOutput *getTestsOut)
{
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
- char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRow;
unsigned NumRows;
/***** Get available tags from database *****/
- sprintf (Query,"SELECT TagCod,TagTxt"
+ DB_BuildQuery ("SELECT TagCod,TagTxt"
" FROM tst_tags"
" WHERE CrsCod=%ld AND TagHidden='N'"
" ORDER BY TagTxt",
- CrsCod);
- NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get test tags");
+ CrsCod);
+ NumRows = DB_QuerySELECT_new (&mysql_res,"can not get test tags");
getTestsOut->tagsArray.__size = (int) NumRows;
@@ -3774,7 +3756,6 @@ static int Svc_GetTstTags (long CrsCod,struct swad__getTestsOutput *getTestsOut)
static int Svc_GetTstQuestions (long CrsCod,long BeginTime,struct swad__getTestsOutput *getTestsOut)
{
extern const char *Tst_StrAnswerTypesXML[Tst_NUM_ANS_TYPES];
- char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRow;
@@ -3783,7 +3764,7 @@ static int Svc_GetTstQuestions (long CrsCod,long BeginTime,struct swad__getTests
/***** Get recent test questions from database *****/
// DISTINCTROW is necessary to not repeat questions
- sprintf (Query,"SELECT DISTINCTROW tst_questions.QstCod,"
+ DB_BuildQuery ("SELECT DISTINCTROW tst_questions.QstCod,"
"tst_questions.AnsType,tst_questions.Shuffle,"
"tst_questions.Stem,tst_questions.Feedback"
" FROM tst_questions,tst_question_tags,tst_tags"
@@ -3802,10 +3783,10 @@ static int Svc_GetTstQuestions (long CrsCod,long BeginTime,struct swad__getTests
"tst_tags.ChangeTime>=FROM_UNIXTIME(%ld)"
")"
" ORDER BY QstCod",
- CrsCod,CrsCod,CrsCod,
- BeginTime,
- BeginTime);
- NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get test questions");
+ CrsCod,CrsCod,CrsCod,
+ BeginTime,
+ BeginTime);
+ NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get test questions");
getTestsOut->questionsArray.__size = (int) NumRows;
@@ -3861,14 +3842,13 @@ static int Svc_GetTstQuestions (long CrsCod,long BeginTime,struct swad__getTests
static int Svc_GetTstAnswers (long CrsCod,long BeginTime,struct swad__getTestsOutput *getTestsOut)
{
extern const char *Tst_StrAnswerTypesXML[Tst_NUM_ANS_TYPES];
- char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRow,NumRows;
unsigned Index;
/***** Get recent test questions from database *****/
- sprintf (Query,"SELECT QstCod,AnsInd,Correct,Answer,Feedback"
+ DB_BuildQuery ("SELECT QstCod,AnsInd,Correct,Answer,Feedback"
" FROM tst_answers WHERE QstCod IN "
"(SELECT tst_questions.QstCod"
" FROM tst_questions,tst_question_tags,tst_tags"
@@ -3888,10 +3868,10 @@ static int Svc_GetTstAnswers (long CrsCod,long BeginTime,struct swad__getTestsOu
")"
")"
" ORDER BY QstCod,AnsInd",
- CrsCod,CrsCod,CrsCod,
- BeginTime,
- BeginTime);
- NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get test answers");
+ CrsCod,CrsCod,CrsCod,
+ BeginTime,
+ BeginTime);
+ NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get test answers");
getTestsOut->answersArray.__size = (int) NumRows;
@@ -3946,14 +3926,13 @@ static int Svc_GetTstAnswers (long CrsCod,long BeginTime,struct swad__getTestsOu
static int Svc_GetTstQuestionTags (long CrsCod,long BeginTime,struct swad__getTestsOutput *getTestsOut)
{
extern const char *Tst_StrAnswerTypesXML[Tst_NUM_ANS_TYPES];
- char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRow,NumRows;
unsigned Index;
/***** Get recent test questions from database *****/
- sprintf (Query,"SELECT QstCod,TagCod,TagInd"
+ DB_BuildQuery ("SELECT QstCod,TagCod,TagInd"
" FROM tst_question_tags WHERE QstCod IN "
"(SELECT tst_questions.QstCod"
" FROM tst_questions,tst_question_tags,tst_tags"
@@ -3973,10 +3952,10 @@ static int Svc_GetTstQuestionTags (long CrsCod,long BeginTime,struct swad__getTe
")"
")"
" ORDER BY QstCod,TagInd",
- CrsCod,CrsCod,CrsCod,
- BeginTime,
- BeginTime);
- NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get test question tags");
+ CrsCod,CrsCod,CrsCod,
+ BeginTime,
+ BeginTime);
+ NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get test question tags");
getTestsOut->questionTagsArray.__size = (int) NumRows;
@@ -4032,7 +4011,6 @@ int swad__getTrivialQuestion (struct soap *soap,
// DegStr=", ' - number ' \0"
long DegCod;
bool FirstDegree = true;
- char Query[4096];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRow;
@@ -4114,7 +4092,7 @@ int swad__getTrivialQuestion (struct soap *soap,
/***** Start query *****/
Str_SetDecimalPointToUS (); // To print the floating point as a dot
- sprintf (Query,"SELECT DISTINCTROW tst_questions.QstCod,"
+ DB_BuildQuery ("SELECT DISTINCTROW tst_questions.QstCod,"
"tst_questions.AnsType,tst_questions.Shuffle,"
"tst_questions.Stem,tst_questions.Feedback,"
"tst_questions.Score/tst_questions.NumHits AS S"
@@ -4132,11 +4110,11 @@ int swad__getTrivialQuestion (struct soap *soap,
" AND tst_tags.TagCod=tst_question_tags.TagCod)"
" HAVING S>='%f' AND S<='%f'"
" ORDER BY RAND(NOW()) LIMIT 1",
- DegreesStr,DegreesStr,
- lowerScore,upperScore);
+ DegreesStr,DegreesStr,
+ lowerScore,upperScore);
Str_SetDecimalPointToLocal (); // Return to local system
- NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get test questions");
+ NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get test questions");
if (NumRows == 1) // Question found
{
@@ -4203,11 +4181,11 @@ int swad__getTrivialQuestion (struct soap *soap,
if (QstCod > 0)
{
/***** Get answer from database *****/
- sprintf (Query,"SELECT QstCod,AnsInd,Correct,Answer,Feedback"
+ DB_BuildQuery ("SELECT QstCod,AnsInd,Correct,Answer,Feedback"
" FROM tst_answers WHERE QstCod=%ld"
" ORDER BY AnsInd",
- QstCod);
- NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get test answers");
+ QstCod);
+ NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get test answers");
getTrivialQuestionOut->answersArray.__size = (int) NumRows;