Version 20.100: Sep 10, 2021 New module swad_figure_database for database queries related to figures.

This commit is contained in:
acanas 2021-09-10 20:22:09 +02:00
parent 87d72a9d6f
commit 7468bf70cd
9 changed files with 201 additions and 149 deletions

View File

@ -46,9 +46,10 @@ OBJS = swad_account.o swad_account_database.o swad_action.o swad_admin.o \
swad_enrolment.o swad_enrolment_database.o swad_error.o swad_exam.o \
swad_exam_database.o swad_exam_log.o swad_exam_print.o \
swad_exam_result.o swad_exam_session.o swad_exam_set.o \
swad_figure.o swad_figure_cache.o swad_file.o swad_file_browser.o \
swad_file_extension.o swad_file_MIME.o swad_firewall.o swad_follow.o \
swad_follow_database.o swad_form.o swad_forum.o \
swad_figure.o swad_figure_cache.o swad_figure_database.o swad_file.o \
swad_file_browser.o swad_file_extension.o swad_file_MIME.o \
swad_firewall.o swad_follow.o swad_follow_database.o swad_form.o \
swad_forum.o \
swad_game.o swad_global.o swad_group.o swad_group_database.o \
swad_help.o swad_hierarchy.o swad_hierarchy_config.o swad_holiday.o \
swad_HTML.o \

View File

@ -427,7 +427,8 @@ unsigned Ctr_DB_GetNumCtrsWithDegs (HieLvl_Level_t Scope,long Cod)
" FROM ins_instits,"
"ctr_centers,"
"deg_degrees"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" WHERE %s"
"ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod",
SubQuery);
}
@ -449,7 +450,8 @@ unsigned Ctr_DB_GetNumCtrsWithCrss (HieLvl_Level_t Scope,long Cod)
"ctr_centers,"
"deg_degrees,"
"crs_courses"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" WHERE %s"
"ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod",
SubQuery);
@ -475,7 +477,7 @@ unsigned Ctr_DB_GetNumCtrsWithUsrs (Rol_Role_t Role,
"crs_courses,"
"crs_users"
" WHERE %s"
"institutions.InsCod=ctr_centers.InsCod"
"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"

View File

@ -602,13 +602,14 @@ TODO: FIX BUG, URGENT! En las fechas como par
TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo.
*/
#define Log_PLATFORM_VERSION "SWAD 20.99 (2021-09-10)"
#define Log_PLATFORM_VERSION "SWAD 20.100 (2021-09-10)"
#define CSS_FILE "swad20.45.css"
#define JS_FILE "swad20.69.1.js"
/*
TODO: Rename CENTRE to CENTER in help wiki.
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
Version 20.100: Sep 10, 2021 New module swad_figure_database for database queries related to figures. (314940 lines)
Version 20.99: Sep 10, 2021 Queries moved to module swad_institution_database. (314758 lines)
Version 20.98: Sep 10, 2021 New module swad_institution_database for database queries related to institutions. (314663 lines)
Version 20.97: Sep 10, 2021 Code refactoring related to scope. (314566 lines)

View File

@ -372,7 +372,7 @@ unsigned Crs_DB_GetNumCrssWithUsrs (Rol_Role_t Role,
"crs_courses,"
"crs_users"
" WHERE %s"
"institutions.InsCod=ctr_centers.InsCod"
"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"

View File

@ -490,7 +490,8 @@ unsigned Deg_DB_GetNumDegsWithCrss (HieLvl_Level_t Scope,long Cod)
"ctr_centers,"
"deg_degrees,"
"crs_courses"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" WHERE %s"
"ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod",
SubQuery);
@ -515,7 +516,8 @@ unsigned Deg_DB_GetNumDegsWithUsrs (Rol_Role_t Role,
"deg_degrees,"
"crs_courses,"
"crs_users"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" WHERE %s"
"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"

View File

@ -48,6 +48,7 @@
#include "swad_hierarchy_level.h"
#include "swad_HTML.h"
#include "swad_institution.h"
#include "swad_institution_database.h"
#include "swad_logo.h"
#include "swad_message.h"
#include "swad_network.h"
@ -1013,40 +1014,16 @@ static void Fig_GetAndShowInssOrderedByNumCtrs (void)
switch (Gbl.Scope.Current)
{
case HieLvl_SYS:
NumInss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ctr_centers"
" GROUP BY InsCod"
" ORDER BY N DESC");
NumInss = Ins_DB_GetInssInCurrentSysOrderedByNumberOfCtrs (&mysql_res);
break;
case HieLvl_CTY:
NumInss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ins_instits,"
"ctr_centers"
" WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod"
" GROUP BY ctr_centers.InsCod"
" ORDER BY N DESC",
Gbl.Hierarchy.Cty.CtyCod);
NumInss = Ins_DB_GetInssInCurrentCtyOrderedByNumberOfCtrs (&mysql_res);
break;
case HieLvl_INS:
case HieLvl_CTR:
case HieLvl_DEG:
case HieLvl_CRS:
NumInss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ctr_centers"
" WHERE InsCod=%ld"
" GROUP BY InsCod"
" ORDER BY N DESC",
Gbl.Hierarchy.Ins.InsCod);
NumInss = Ins_DB_GetInssInCurrentInsOrderedByNumberOfCtrs (&mysql_res);
break;
default:
Err_WrongScopeExit ();
@ -1083,46 +1060,16 @@ static void Fig_GetAndShowInssOrderedByNumDegs (void)
switch (Gbl.Scope.Current)
{
case HieLvl_SYS:
NumInss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ctr_centers,"
"deg_degrees"
" WHERE ctr_centers.CtrCod=deg_degrees.CtrCod"
" GROUP BY InsCod"
" ORDER BY N DESC");
NumInss = Ins_DB_GetInssInCurrentSysOrderedByNumberOfDegs (&mysql_res);
break;
case HieLvl_CTY:
NumInss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ins_instits,"
"ctr_centers,"
"deg_degrees"
" WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" GROUP BY ctr_centers.InsCod"
" ORDER BY N DESC",
Gbl.Hierarchy.Cty.CtyCod);
NumInss = Ins_DB_GetInssInCurrentCtyOrderedByNumberOfDegs (&mysql_res);
break;
case HieLvl_INS:
case HieLvl_CTR:
case HieLvl_DEG:
case HieLvl_CRS:
NumInss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ctr_centers,"
"deg_degrees"
" WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" GROUP BY ctr_centers.InsCod"
" ORDER BY N DESC",
Gbl.Hierarchy.Ins.InsCod);
NumInss = Ins_DB_GetInssInCurrentInsOrderedByNumberOfDegs (&mysql_res);
break;
default:
Err_WrongScopeExit ();
@ -1159,52 +1106,16 @@ static void Fig_GetAndShowInssOrderedByNumCrss (void)
switch (Gbl.Scope.Current)
{
case HieLvl_SYS:
NumInss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ctr_centers,"
"deg_degrees,"
"crs_courses"
" WHERE ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" GROUP BY InsCod"
" ORDER BY N DESC");
NumInss = Ins_DB_GetInssInCurrentSysOrderedByNumberOfCrss (&mysql_res);
break;
case HieLvl_CTY:
NumInss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ins_instits,"
"ctr_centers,"
"deg_degrees,"
"crs_courses"
" 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"
" GROUP BY ctr_centers.InsCod"
" ORDER BY N DESC",
Gbl.Hierarchy.Cty.CtyCod);
NumInss = Ins_DB_GetInssInCurrentCtyOrderedByNumberOfCrss (&mysql_res);
break;
case HieLvl_INS:
case HieLvl_CTR:
case HieLvl_DEG:
case HieLvl_CRS:
NumInss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ctr_centers,"
"deg_degrees,"
"crs_courses"
" WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" GROUP BY ctr_centers.InsCod"
" ORDER BY N DESC",
Gbl.Hierarchy.Ins.InsCod);
NumInss = Ins_DB_GetInssInCurrentInsOrderedByNumberOfCrss (&mysql_res);
break;
default:
Err_WrongScopeExit ();

View File

@ -29,6 +29,7 @@
#include "swad_database.h"
#include "swad_figure_cache.h"
#include "swad_figure_database.h"
#include "swad_scope.h"
#include "swad_string.h"
@ -53,7 +54,7 @@
/*****************************************************************************/
/*****************************************************************************/
/************** Get number of users who have chosen an option ****************/
/*************************** Update figure into cache ************************/
/*****************************************************************************/
void FigCch_UpdateFigureIntoCache (FigCch_FigureCached_t Figure,
@ -68,34 +69,18 @@ void FigCch_UpdateFigureIntoCache (FigCch_FigureCached_t Figure,
switch (Type)
{
case FigCch_UNSIGNED:
DB_QueryREPLACE ("can not update cached figure value",
"REPLACE INTO fig_figures"
" (Figure,Scope,Cod,ValueInt,ValueDouble)"
" VALUES"
" (%u,'%s',%ld,%u,'0.0')",
(unsigned) Figure,
Sco_GetDBStrFromScope (Scope),
Cod,
*((unsigned *) ValuePtr));
Fig_DB_UpdateUnsignedFigureIntoCache (Figure,Scope,Cod,
*((unsigned *) ValuePtr));
break;
case FigCch_DOUBLE:
Str_SetDecimalPointToUS (); // To write the decimal point as a dot
DB_QueryREPLACE ("can not update cached figure value",
"REPLACE INTO fig_figures"
" (Figure,Scope,Cod,ValueInt,ValueDouble)"
" VALUES"
" (%u,'%s',%ld,0,'%.15lg')",
(unsigned) Figure,
Sco_GetDBStrFromScope (Scope),
Cod,
*((double *) ValuePtr));
Str_SetDecimalPointToLocal (); // Return to local system
Fig_DB_UpdateDoubleFigureIntoCache (Figure,Scope,Cod,
*((double *) ValuePtr));
break;
}
}
/*****************************************************************************/
/************** Get number of users who have chosen an option ****************/
/************************** Get figure from cache ****************************/
/*****************************************************************************/
// Return true is figure is found (if figure is cached and recently updated)
@ -114,11 +99,6 @@ bool FigCch_GetFigureFromCache (FigCch_FigureCached_t Figure,
[HieLvl_DEG] = (time_t) ( 1UL * 60UL * 60UL), // Degree
[HieLvl_CRS] = (time_t) ( 60UL), // Course
};
static const char *Field[FigCch_NUM_TYPES] =
{
[FigCch_UNSIGNED] = "ValueInt",
[FigCch_DOUBLE ] = "ValueDouble",
};
MYSQL_RES *mysql_res;
MYSQL_ROW row;
bool Found = false;
@ -140,16 +120,7 @@ bool FigCch_GetFigureFromCache (FigCch_FigureCached_t Figure,
return false;
/***** Get figure's value if cached and recent *****/
if (DB_QuerySELECT (&mysql_res,"can not get cached figure value",
"SELECT %s" // row[0]
" FROM fig_figures"
" WHERE Figure=%u"
" AND Scope='%s'"
" AND Cod=%ld"
" AND LastUpdate>FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)",
Field[Type],
(unsigned) Figure,Sco_GetDBStrFromScope (Scope),Cod,
TimeCached[Scope]))
if (Fig_DB_GetFigureFromCache (&mysql_res,Figure,Scope,Cod,Type,TimeCached[Scope]))
{
/* Get row */
row = mysql_fetch_row (mysql_res);

View File

@ -297,6 +297,7 @@ unsigned Ins_DB_GetInssInCtyOrderedByFullName (MYSQL_RES **mysql_res,long CtyCod
" ORDER BY FullName",
CtyCod);
}
/*****************************************************************************/
/************* Get full list of institutions **************/
/************* with number of users who claim to belong to them **************/
@ -346,6 +347,154 @@ unsigned Ins_DB_GetFullListOfInssInCty (MYSQL_RES **mysql_res,long CtyCod)
OrderBySubQuery[Gbl.Hierarchy.Inss.SelectedOrder]);
}
/*****************************************************************************/
/**************** Get list of institutions in system ***************/
/**************** ordered by number of centers/degrees/courses ***************/
/*****************************************************************************/
unsigned Ins_DB_GetInssInCurrentSysOrderedByNumberOfCtrs (MYSQL_RES **mysql_res)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get institutions",
"SELECT InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ctr_centers"
" GROUP BY InsCod"
" ORDER BY N DESC");
}
unsigned Ins_DB_GetInssInCurrentSysOrderedByNumberOfDegs (MYSQL_RES **mysql_res)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ctr_centers,"
"deg_degrees"
" WHERE ctr_centers.CtrCod=deg_degrees.CtrCod"
" GROUP BY InsCod"
" ORDER BY N DESC");
}
unsigned Ins_DB_GetInssInCurrentSysOrderedByNumberOfCrss (MYSQL_RES **mysql_res)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ctr_centers,"
"deg_degrees,"
"crs_courses"
" WHERE ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" GROUP BY InsCod"
" ORDER BY N DESC");
}
/*****************************************************************************/
/************ Get list of institutions in current country *******************/
/************ ordered by number of centers/degrees/courses *******************/
/*****************************************************************************/
unsigned Ins_DB_GetInssInCurrentCtyOrderedByNumberOfCtrs (MYSQL_RES **mysql_res)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ins_instits,"
"ctr_centers"
" WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod"
" GROUP BY ctr_centers.InsCod"
" ORDER BY N DESC",
Gbl.Hierarchy.Cty.CtyCod);
}
unsigned Ins_DB_GetInssInCurrentCtyOrderedByNumberOfDegs (MYSQL_RES **mysql_res)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ins_instits,"
"ctr_centers,"
"deg_degrees"
" WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" GROUP BY ctr_centers.InsCod"
" ORDER BY N DESC",
Gbl.Hierarchy.Cty.CtyCod);
}
unsigned Ins_DB_GetInssInCurrentCtyOrderedByNumberOfCrss (MYSQL_RES **mysql_res)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ins_instits,"
"ctr_centers,"
"deg_degrees,"
"crs_courses"
" 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"
" GROUP BY ctr_centers.InsCod"
" ORDER BY N DESC",
Gbl.Hierarchy.Cty.CtyCod);
}
/*****************************************************************************/
/***** Get current institution and its number of centers/degrees/courses *****/
/*****************************************************************************/
unsigned Ins_DB_GetInssInCurrentInsOrderedByNumberOfCtrs (MYSQL_RES **mysql_res)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get institutions",
"SELECT InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ctr_centers"
" WHERE InsCod=%ld"
" GROUP BY InsCod",
Gbl.Hierarchy.Ins.InsCod);
}
unsigned Ins_DB_GetInssInCurrentInsOrderedByNumberOfDegs (MYSQL_RES **mysql_res)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ctr_centers,"
"deg_degrees"
" WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" GROUP BY ctr_centers.InsCod"
" ORDER BY N DESC",
Gbl.Hierarchy.Ins.InsCod);
}
unsigned Ins_DB_GetInssInCurrentInsOrderedByNumberOfCrss (MYSQL_RES **mysql_res)
{
return (unsigned)
DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," // row[0]
"COUNT(*) AS N" // row[1]
" FROM ctr_centers,"
"deg_degrees,"
"crs_courses"
" WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" GROUP BY ctr_centers.InsCod"
" ORDER BY N DESC",
Gbl.Hierarchy.Ins.InsCod);
}
/*****************************************************************************/
/**************** Get number of institutions in a country ********************/
/*****************************************************************************/
@ -375,7 +524,8 @@ unsigned Ins_DB_GetNumInssWithCtrs (HieLvl_Level_t Scope,long Cod)
"SELECT COUNT(DISTINCT ins_instits.InsCod)"
" FROM ins_instits,"
"ctr_centers"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod",
" WHERE %s"
"ins_instits.InsCod=ctr_centers.InsCod",
SubQuery);
}
@ -395,7 +545,8 @@ unsigned Ins_DB_GetNumInssWithDegs (HieLvl_Level_t Scope,long Cod)
" FROM ins_instits,"
"ctr_centers,"
"deg_degrees"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" WHERE %s"
"ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod",
SubQuery);
}
@ -417,7 +568,8 @@ unsigned Ins_DB_GetNumInssWithCrss (HieLvl_Level_t Scope,long Cod)
"ctr_centers,"
"deg_degrees,"
"crs_courses"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" WHERE %s"
"ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod",
SubQuery);

View File

@ -61,6 +61,18 @@ unsigned Ins_DB_GetInssInCtyOrderedByShrtName (MYSQL_RES **mysql_res,long CtyCod
unsigned Ins_DB_GetInssInCtyOrderedByFullName (MYSQL_RES **mysql_res,long CtyCod);
unsigned Ins_DB_GetFullListOfInssInCty (MYSQL_RES **mysql_res,long CtyCod);
unsigned Ins_DB_GetInssInCurrentSysOrderedByNumberOfCtrs (MYSQL_RES **mysql_res);
unsigned Ins_DB_GetInssInCurrentSysOrderedByNumberOfDegs (MYSQL_RES **mysql_res);
unsigned Ins_DB_GetInssInCurrentSysOrderedByNumberOfCrss (MYSQL_RES **mysql_res);
unsigned Ins_DB_GetInssInCurrentCtyOrderedByNumberOfCtrs (MYSQL_RES **mysql_res);
unsigned Ins_DB_GetInssInCurrentCtyOrderedByNumberOfDegs (MYSQL_RES **mysql_res);
unsigned Ins_DB_GetInssInCurrentCtyOrderedByNumberOfCrss (MYSQL_RES **mysql_res);
unsigned Ins_DB_GetInssInCurrentInsOrderedByNumberOfCtrs (MYSQL_RES **mysql_res);
unsigned Ins_DB_GetInssInCurrentInsOrderedByNumberOfDegs (MYSQL_RES **mysql_res);
unsigned Ins_DB_GetInssInCurrentInsOrderedByNumberOfCrss (MYSQL_RES **mysql_res);
unsigned Ins_DB_GetNumInssInCty (long CtyCod);
unsigned Ins_DB_GetNumInssWithCtrs (HieLvl_Level_t Scope,long Cod);