mirror of https://github.com/acanas/swad-core.git
Version 20.53.1: Mar 30, 2021 Optimizations in database selects.
This commit is contained in:
parent
fa7188661c
commit
ff125a81de
|
@ -193,7 +193,6 @@ void Acc_CheckIfEmptyAccountExists (void)
|
|||
unsigned NumUsr;
|
||||
struct UsrData UsrDat;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
|
||||
/***** Contextual menu *****/
|
||||
Mnu_ContextMenuBegin ();
|
||||
|
@ -211,14 +210,15 @@ void Acc_CheckIfEmptyAccountExists (void)
|
|||
/***** Check if there are users with this user's ID *****/
|
||||
if (ID_CheckIfUsrIDIsValid (ID))
|
||||
{
|
||||
NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get user's codes",
|
||||
"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=''",
|
||||
ID);
|
||||
NumUsrs = (unsigned)
|
||||
DB_QuerySELECT (&mysql_res,"can not get user's codes",
|
||||
"SELECT usr_ids.UsrCod" // row[0]
|
||||
" FROM usr_ids,"
|
||||
"usr_data"
|
||||
" WHERE usr_ids.UsrID='%s'"
|
||||
" AND usr_ids.UsrCod=usr_data.UsrCod"
|
||||
" AND usr_data.Password=''",
|
||||
ID);
|
||||
if (NumUsrs)
|
||||
{
|
||||
/***** Begin box and table *****/
|
||||
|
@ -237,10 +237,8 @@ void Acc_CheckIfEmptyAccountExists (void)
|
|||
NumUsr++, Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd)
|
||||
{
|
||||
/***** Get user's data from query result *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
||||
/* Get user's code */
|
||||
UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0]);
|
||||
UsrDat.UsrCod = DB_GetNextCod (mysql_res);
|
||||
|
||||
/* Get user's data */
|
||||
Usr_GetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS);
|
||||
|
|
336
swad_agenda.c
336
swad_agenda.c
|
@ -1052,8 +1052,6 @@ static void Agd_GetListEvents (struct Agd_Agenda *Agenda,
|
|||
[Dat_END_TIME ] = "EndTime,StartTime,Event,Location",
|
||||
};
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
unsigned NumEvent;
|
||||
bool DoQuery = true;
|
||||
|
||||
|
@ -1150,26 +1148,25 @@ static void Agd_GetListEvents (struct Agd_Agenda *Agenda,
|
|||
if (DoQuery)
|
||||
{
|
||||
/* Make query */
|
||||
NumRows = DB_QuerySELECT (&mysql_res,"can not get agenda events",
|
||||
"SELECT AgdCod"
|
||||
" FROM agd_agendas"
|
||||
" WHERE %s%s%s%s"
|
||||
" ORDER BY %s",
|
||||
UsrSubQuery,
|
||||
Past__FutureEventsSubQuery,
|
||||
PrivatPublicEventsSubQuery,
|
||||
HiddenVisiblEventsSubQuery,
|
||||
OrderBySubQuery[Agenda->SelectedOrder]);
|
||||
Agenda->Num = (unsigned)
|
||||
DB_QuerySELECT (&mysql_res,"can not get agenda events",
|
||||
"SELECT AgdCod" // row[0]
|
||||
" FROM agd_agendas"
|
||||
" WHERE %s%s%s%s"
|
||||
" ORDER BY %s",
|
||||
UsrSubQuery,
|
||||
Past__FutureEventsSubQuery,
|
||||
PrivatPublicEventsSubQuery,
|
||||
HiddenVisiblEventsSubQuery,
|
||||
OrderBySubQuery[Agenda->SelectedOrder]);
|
||||
|
||||
/* Free allocated memory for subquery */
|
||||
free (UsrSubQuery);
|
||||
|
||||
if (NumRows) // Events found...
|
||||
if (Agenda->Num) // Events found...
|
||||
{
|
||||
Agenda->Num = (unsigned) NumRows;
|
||||
|
||||
/***** Create list of events *****/
|
||||
if ((Agenda->LstAgdCods = calloc (NumRows,
|
||||
if ((Agenda->LstAgdCods = calloc ((size_t) Agenda->Num,
|
||||
sizeof (*Agenda->LstAgdCods))) == NULL)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
|
||||
|
@ -1177,19 +1174,14 @@ static void Agd_GetListEvents (struct Agd_Agenda *Agenda,
|
|||
for (NumEvent = 0;
|
||||
NumEvent < Agenda->Num;
|
||||
NumEvent++)
|
||||
{
|
||||
/* Get next event code */
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
if ((Agenda->LstAgdCods[NumEvent] = Str_ConvertStrCodToLongCod (row[0])) < 0)
|
||||
if ((Agenda->LstAgdCods[NumEvent] = DB_GetNextCod (mysql_res)) < 0)
|
||||
Lay_ShowErrorAndExit ("Error: wrong event code.");
|
||||
}
|
||||
}
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
}
|
||||
else
|
||||
Agenda->Num = 0;
|
||||
|
||||
Agenda->LstIsRead = true;
|
||||
}
|
||||
|
@ -1878,102 +1870,88 @@ unsigned Agd_GetNumEventsFromUsr (long UsrCod)
|
|||
|
||||
unsigned Agd_GetNumUsrsWithEvents (Hie_Lvl_Level_t Scope)
|
||||
{
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumUsrs;
|
||||
|
||||
/***** Get number of courses with events from database *****/
|
||||
switch (Scope)
|
||||
{
|
||||
case Hie_Lvl_SYS:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of users with events",
|
||||
"SELECT COUNT(DISTINCT UsrCod)"
|
||||
" FROM agd_agendas"
|
||||
" WHERE UsrCod>0");
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of users with events",
|
||||
"SELECT COUNT(DISTINCT UsrCod)"
|
||||
" FROM agd_agendas"
|
||||
" WHERE UsrCod>0");
|
||||
case Hie_Lvl_CTY:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of users with events",
|
||||
"SELECT COUNT(DISTINCT agd_agendas.UsrCod)"
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE ins_instits.CtyCod=%ld"
|
||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.Status=0"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Cty.CtyCod);
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of users with events",
|
||||
"SELECT COUNT(DISTINCT agd_agendas.UsrCod)"
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE ins_instits.CtyCod=%ld"
|
||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.Status=0"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Cty.CtyCod);
|
||||
case Hie_Lvl_INS:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of users with events",
|
||||
"SELECT COUNT(DISTINCT agd_agendas.UsrCod)"
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.Status=0"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Ins.InsCod);
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of users with events",
|
||||
"SELECT COUNT(DISTINCT agd_agendas.UsrCod)"
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.Status=0"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Ins.InsCod);
|
||||
case Hie_Lvl_CTR:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of users with events",
|
||||
"SELECT COUNT(DISTINCT agd_agendas.UsrCod)"
|
||||
" FROM deg_degrees,"
|
||||
"crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.Status=0"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Ctr.CtrCod);
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of users with events",
|
||||
"SELECT COUNT(DISTINCT agd_agendas.UsrCod)"
|
||||
" FROM deg_degrees,"
|
||||
"crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.Status=0"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Ctr.CtrCod);
|
||||
case Hie_Lvl_DEG:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of users with events",
|
||||
"SELECT COUNT(DISTINCT agd_agendas.UsrCod)"
|
||||
" FROM crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE crs_courses.DegCod=%ld"
|
||||
" AND crs_courses.Status=0"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Deg.DegCod);
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of users with events",
|
||||
"SELECT COUNT(DISTINCT agd_agendas.UsrCod)"
|
||||
" FROM crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE crs_courses.DegCod=%ld"
|
||||
" AND crs_courses.Status=0"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Deg.DegCod);
|
||||
case Hie_Lvl_CRS:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of users with events",
|
||||
"SELECT COUNT(DISTINCT agd_agendas.UsrCod)"
|
||||
" FROM crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE crs_users.CrsCod=%ld"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of users with events",
|
||||
"SELECT COUNT(DISTINCT agd_agendas.UsrCod)"
|
||||
" FROM crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE crs_users.CrsCod=%ld"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
default:
|
||||
Lay_WrongScopeExit ();
|
||||
break;
|
||||
return 0; // Not reached
|
||||
}
|
||||
|
||||
/***** Get number of users *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
if (sscanf (row[0],"%u",&NumUsrs) != 1)
|
||||
Lay_ShowErrorAndExit ("Error when getting number of users with events.");
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
|
||||
return NumUsrs;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -1983,98 +1961,84 @@ unsigned Agd_GetNumUsrsWithEvents (Hie_Lvl_Level_t Scope)
|
|||
|
||||
unsigned Agd_GetNumEvents (Hie_Lvl_Level_t Scope)
|
||||
{
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumEvents;
|
||||
|
||||
/***** Get number of events from database *****/
|
||||
switch (Scope)
|
||||
{
|
||||
case Hie_Lvl_SYS:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of events",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM agd_agendas"
|
||||
" WHERE UsrCod>0");
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of events",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM agd_agendas"
|
||||
" WHERE UsrCod>0");
|
||||
case Hie_Lvl_CTY:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of events",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE ins_instits.CtyCod=%ld"
|
||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Cty.CtyCod);
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of events",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE ins_instits.CtyCod=%ld"
|
||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Cty.CtyCod);
|
||||
case Hie_Lvl_INS:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of events",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Ins.InsCod);
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of events",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Ins.InsCod);
|
||||
case Hie_Lvl_CTR:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of events",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM deg_degrees,"
|
||||
"crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Ctr.CtrCod);
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of events",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM deg_degrees,"
|
||||
"crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Ctr.CtrCod);
|
||||
case Hie_Lvl_DEG:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of events",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE crs_courses.DegCod=%ld"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Deg.DegCod);
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of events",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM crs_courses,"
|
||||
"crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE crs_courses.DegCod=%ld"
|
||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Deg.DegCod);
|
||||
case Hie_Lvl_CRS:
|
||||
DB_QuerySELECT (&mysql_res,"can not get number of events",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE crs_users.CrsCod=%ld"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
break;
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of events",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM crs_users,"
|
||||
"agd_agendas"
|
||||
" WHERE crs_users.CrsCod=%ld"
|
||||
" AND crs_users.UsrCod=agd_agendas.UsrCod",
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
default:
|
||||
Lay_WrongScopeExit ();
|
||||
break;
|
||||
return 0; // Not reached
|
||||
}
|
||||
|
||||
/***** Get number of events *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
if (sscanf (row[0],"%u",&NumEvents) != 1)
|
||||
Lay_ShowErrorAndExit ("Error when getting number of events.");
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
|
||||
return NumEvents;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -600,13 +600,14 @@ TODO: Salvador Romero Cort
|
|||
|
||||
TODO: FIX BUG, URGENT! En las fechas como parámetro Dat_WriteParamsIniEndDates(), por ejemplo al cambiar el color de la gráfica de accesos por día y hora, no se respeta la zona horaria.
|
||||
*/
|
||||
#define Log_PLATFORM_VERSION "SWAD 20.53 (2021-03-29)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 20.53.1 (2021-03-30)"
|
||||
#define CSS_FILE "swad20.45.css"
|
||||
#define JS_FILE "swad20.6.2.js"
|
||||
/*
|
||||
TODO: Rename CENTRE to CENTER in help wiki.
|
||||
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
|
||||
|
||||
Version 20.53.1: Mar 30, 2021 Optimizations in database selects. (309459 lines)
|
||||
Version 20.53: Mar 29, 2021 Code refactoring in database selects. (309473 lines)
|
||||
Version 20.52: Mar 28, 2021 Code refactoring in database selects. (309103 lines)
|
||||
Version 20.51.49: Mar 26, 2021 User IDs database table renamed. (308816 lines)
|
||||
|
|
|
@ -3827,6 +3827,22 @@ static unsigned long DB_QuerySELECTusingQueryStr (char *Query,
|
|||
return (unsigned long) mysql_num_rows (*mysql_res);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************** Get next code from query result **********************/
|
||||
/*****************************************************************************/
|
||||
/* Each row of the result should hold a code (long) */
|
||||
|
||||
long DB_GetNextCod (MYSQL_RES *mysql_res)
|
||||
{
|
||||
MYSQL_ROW row;
|
||||
|
||||
/***** Get next row from query result *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
||||
/***** row[0] should hold a code (long) ******/
|
||||
return Str_ConvertStrCodToLongCod (row[0]);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**************** Make a SELECT COUNT query from database ********************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -41,6 +41,7 @@ void DB_BuildQuery (char **Query,const char *fmt,...);
|
|||
|
||||
unsigned long DB_QuerySELECT (MYSQL_RES **mysql_res,const char *MsgError,
|
||||
const char *fmt,...);
|
||||
long DB_GetNextCod (MYSQL_RES *mysql_res);
|
||||
unsigned long DB_GetNumRowsTable (const char *Table);
|
||||
unsigned long DB_QueryCOUNT (const char *MsgError,const char *fmt,...);
|
||||
|
||||
|
|
Loading…
Reference in New Issue