From d197a9428dc3453ce8241f457765422eec2e167b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Tue, 7 Jan 2020 15:11:48 +0100 Subject: [PATCH] Version19.112.20 --- swad_changelog.h | 2 +- swad_country.c | 11 ++++------- swad_country.h | 2 +- swad_course.c | 20 ++++++++++++++++++-- swad_course.h | 1 + swad_global.c | 8 +++++++- swad_global.h | 5 +++++ 7 files changed, 37 insertions(+), 12 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index 817a0630..92581463 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -502,7 +502,7 @@ ps2pdf source.ps destination.pdf // TODO: Mapas más estrechos en móvil // TODO: Quitar todos los EXTRA_DATA. - Version 19.112.20:Jan 07, 2020 Optimization in number of users in a country. (? lines) + Version 19.112.20:Jan 07, 2020 Optimization in number of courses in a country. (278724 lines) Version 19.112.19:Jan 07, 2020 Optimization in number of users in a country. (278675 lines) Version 19.112.18:Jan 07, 2020 Optimization in number of users in a country. (278668 lines) Version 19.112.17:Jan 07, 2020 Optimization in number of institutions in a country. (278600 lines) diff --git a/swad_country.c b/swad_country.c index 19ca143d..b03765c8 100644 --- a/swad_country.c +++ b/swad_country.c @@ -432,7 +432,7 @@ static void Cty_ListOneCountryForSeeing (struct Country *Cty,unsigned NumCty) HTM_TD_End (); HTM_TD_Begin ("class=\"DAT RM %s\"",BgColor); - HTM_Unsigned (Cty->NumCrss); + HTM_Unsigned (Crs_GetNumCrssInCty (Cty->CtyCod)); HTM_TD_End (); HTM_TD_Begin ("class=\"DAT RM %s\"",BgColor); @@ -844,7 +844,7 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData) Cty->WWW[Lan][0] = '\0'; } Cty->NumUsrsWhoClaimToBelongToCty.Valid = false; - Cty->Inss.Num = Cty->NumCtrs = Cty->NumDegs = Cty->NumCrss = 0; + Cty->Inss.Num = Cty->NumCtrs = Cty->NumDegs = 0; /* Get the name of the country in current language */ Str_Copy (Cty->Name[Gbl.Prefs.Language],row[2], @@ -874,9 +874,6 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData) /* Get number of degrees in this country */ Cty->NumDegs = Deg_GetNumDegsInCty (Cty->CtyCod); - - /* Get number of courses in this country */ - Cty->NumCrss = Crs_GetNumCrssInCty (Cty->CtyCod); break; } } @@ -1004,7 +1001,7 @@ bool Cty_GetDataOfCountryByCod (struct Country *Cty,Cty_GetExtraData_t GetExtraD Cty->WWW[Lan][0] = '\0'; } Cty->NumUsrsWhoClaimToBelongToCty.Valid = false; - Cty->Inss.Num = Cty->NumCtrs = Cty->NumDegs = Cty->NumCrss = 0; + Cty->Inss.Num = Cty->NumCtrs = Cty->NumDegs = 0; /***** Check if country code is correct *****/ if (Cty->CtyCod == 0) @@ -1379,6 +1376,7 @@ void Cty_RemoveCountry (void) /***** Flush cache *****/ Cty_FlushCacheCountryName (); Ins_FlushCacheNumInssInCty (); + Crs_FlushCacheNumCrssInCty (); Usr_FlushCacheNumUsrsWhoClaimToBelongToCty (); /***** Write message to show the change made *****/ @@ -2083,7 +2081,6 @@ static void Cty_EditingCountryConstructor (void) Cty_EditingCty->Inss.SelectedOrder = Ins_ORDER_DEFAULT; Cty_EditingCty->NumCtrs = 0; Cty_EditingCty->NumDegs = 0; - Cty_EditingCty->NumCrss = 0; Cty_EditingCty->NumUsrsWhoClaimToBelongToCty.Valid = false; } diff --git a/swad_country.h b/swad_country.h index 3a52c6ee..d9f35137 100644 --- a/swad_country.h +++ b/swad_country.h @@ -59,7 +59,7 @@ struct Country } Inss; unsigned NumCtrs; unsigned NumDegs; - unsigned NumCrss; + // unsigned NumCrss; struct { bool Valid; diff --git a/swad_course.c b/swad_course.c index 30930c49..7d2cccc3 100644 --- a/swad_course.c +++ b/swad_course.c @@ -409,10 +409,25 @@ unsigned Crs_GetNumCrssTotal (void) /****************** Get number of courses in a country ***********************/ /*****************************************************************************/ +void Crs_FlushCacheNumCrssInCty (void) + { + Gbl.Cache.NumCrssInCty.CtyCod = -1L; + Gbl.Cache.NumCrssInCty.NumCrss = 0; + } + unsigned Crs_GetNumCrssInCty (long CtyCod) { - /***** Get number of courses in a country from database *****/ - return + /***** 1. Fast check: Trivial case *****/ + if (CtyCod <= 0) + return 0; + + /***** 2. Fast check: If cached... *****/ + if (CtyCod == Gbl.Cache.NumCrssInCty.CtyCod) + return Gbl.Cache.NumCrssInCty.NumCrss; + + /***** 3. Slow: number of courses in a country from database *****/ + Gbl.Cache.NumCrssInCty.CtyCod = CtyCod; + Gbl.Cache.NumCrssInCty.NumCrss = (unsigned) DB_QueryCOUNT ("can not get the number of courses in a country", "SELECT COUNT(*)" " FROM institutions,centres,degrees,courses" @@ -421,6 +436,7 @@ unsigned Crs_GetNumCrssInCty (long CtyCod) " AND centres.CtrCod=degrees.CtrCod" " AND degrees.DegCod=courses.DegCod", CtyCod); + return Gbl.Cache.NumCrssInCty.NumCrss; } /*****************************************************************************/ diff --git a/swad_course.h b/swad_course.h index dd4311b5..56b912ad 100644 --- a/swad_course.h +++ b/swad_course.h @@ -94,6 +94,7 @@ struct Course void Crs_ShowIntroduction (void); unsigned Crs_GetNumCrssTotal (void); +void Crs_FlushCacheNumCrssInCty (void); unsigned Crs_GetNumCrssInCty (long CtyCod); void Crs_FlushCacheNumCrssInIns (void); unsigned Crs_GetNumCrssInIns (long InsCod); diff --git a/swad_global.c b/swad_global.c index caa333d1..6d0a1d27 100644 --- a/swad_global.c +++ b/swad_global.c @@ -406,14 +406,20 @@ void Gbl_InitializeGlobals (void) Cty_FlushCacheCountryName (); Ins_FlushCacheShortNameOfInstitution (); Ins_FlushCacheFullNameAndCtyOfInstitution (); + Ins_FlushCacheNumInssInCty (); + Crs_FlushCacheNumCrssInCty (); + Dpt_FlushCacheNumDptsInIns (); Ctr_FlushCacheNumCtrsInIns (); Deg_FlushCacheNumDegsInIns (); - Deg_FlushCacheNumDegsInCtr (); Crs_FlushCacheNumCrssInIns (); + + Deg_FlushCacheNumDegsInCtr (); Crs_FlushCacheNumCrssInCtr (); + Crs_FlushCacheNumCrssInDeg (); + Usr_FlushCacheNumUsrsWhoDontClaimToBelongToAnyCty (); Usr_FlushCacheNumUsrsWhoClaimToBelongToAnotherCty (); Usr_FlushCacheNumUsrsWhoClaimToBelongToCty (); diff --git a/swad_global.h b/swad_global.h index e2645cfb..523be7d3 100644 --- a/swad_global.h +++ b/swad_global.h @@ -798,6 +798,11 @@ struct Globals long CtrCod; unsigned NumDegs; } NumDegsInCtr; + struct + { + long CtyCod; + unsigned NumCrss; + } NumCrssInCty; struct { long InsCod;