Version 16.155.3

This commit is contained in:
Antonio Cañas Vargas 2017-03-10 02:40:01 +01:00
parent ed5640e1b1
commit 1001e70582
5 changed files with 133 additions and 103 deletions

View File

@ -215,15 +215,15 @@ CREATE TABLE IF NOT EXISTS countries (
CtyCod INT NOT NULL,
Alpha2 CHAR(2) NOT NULL,
MapAttribution TEXT NOT NULL,
Name_ca VARCHAR(255) NOT NULL,
Name_de VARCHAR(255) NOT NULL,
Name_en VARCHAR(255) NOT NULL,
Name_es VARCHAR(255) NOT NULL,
Name_fr VARCHAR(255) NOT NULL,
Name_gn VARCHAR(255) NOT NULL,
Name_it VARCHAR(255) NOT NULL,
Name_pl VARCHAR(255) NOT NULL,
Name_pt VARCHAR(255) NOT NULL,
Name_ca VARCHAR(767) NOT NULL,
Name_de VARCHAR(767) NOT NULL,
Name_en VARCHAR(767) NOT NULL,
Name_es VARCHAR(767) NOT NULL,
Name_fr VARCHAR(767) NOT NULL,
Name_gn VARCHAR(767) NOT NULL,
Name_it VARCHAR(767) NOT NULL,
Name_pl VARCHAR(767) NOT NULL,
Name_pt VARCHAR(767) NOT NULL,
WWW_ca VARCHAR(255) NOT NULL,
WWW_de VARCHAR(255) NOT NULL,
WWW_en VARCHAR(255) NOT NULL,

View File

@ -204,13 +204,26 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 16.155.2 (2017-03-09)"
#define Log_PLATFORM_VERSION "SWAD 16.155.3 (2017-03-09)"
#define CSS_FILE "swad16.147.css"
#define JS_FILE "swad16.144.js"
// Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
/*
Version 16.155.3: Mar 10, 2017 Adjusting size of database fields.
Code refactoring related with renaming country name. (216620 lines)
9 changes necessary in database:
ALTER TABLE countries CHANGE COLUMN Name_ca Name_ca VARCHAR(767) NOT NULL;
ALTER TABLE countries CHANGE COLUMN Name_de Name_de VARCHAR(767) NOT NULL;
ALTER TABLE countries CHANGE COLUMN Name_en Name_en VARCHAR(767) NOT NULL;
ALTER TABLE countries CHANGE COLUMN Name_es Name_es VARCHAR(767) NOT NULL;
ALTER TABLE countries CHANGE COLUMN Name_fr Name_fr VARCHAR(767) NOT NULL;
ALTER TABLE countries CHANGE COLUMN Name_gn Name_gn VARCHAR(767) NOT NULL;
ALTER TABLE countries CHANGE COLUMN Name_it Name_it VARCHAR(767) NOT NULL;
ALTER TABLE countries CHANGE COLUMN Name_pl Name_pl VARCHAR(767) NOT NULL;
ALTER TABLE countries CHANGE COLUMN Name_pt Name_pt VARCHAR(767) NOT NULL;
Version 16.155.2: Mar 09, 2017 Adjusting size of database fields. (216596 lines)
1 change necessary in database:
ALTER TABLE chat CHANGE COLUMN RoomCode RoomCode VARCHAR(16) NOT NULL;

View File

@ -85,6 +85,8 @@ static long Cty_GetParamOtherCtyCod (void);
static bool Cty_CheckIfNumericCountryCodeExists (long CtyCod);
static bool Cty_CheckIfAlpha2CountryCodeExists (const char Alpha2[2 + 1]);
static bool Cty_CheckIfCountryNameExists (Txt_Language_t Language,const char *Name,long CtyCod);
static void Cty_UpdateCtyNameDB (long CtyCod,const char *FieldName,const char *NewCtyName);
static void Cty_PutFormToCreateCountry (void);
static void Cty_PutHeadCountriesForEdition (void);
static void Cty_CreateCountry (struct Country *Cty);
@ -803,7 +805,7 @@ void Cty_DrawCountryMapAndNameWithLink (struct Country *Cty,Act_Action_t Action,
const char *ClassLink)
{
extern const char *Txt_Go_to_X;
char CountryName[Hie_MAX_BYTES_FULL_NAME + 1];
char CountryName[Cty_MAX_BYTES_NAME + 1];
/***** Start form *****/
Act_FormGoToStart (Action);
@ -819,7 +821,7 @@ void Cty_DrawCountryMapAndNameWithLink (struct Country *Cty,Act_Action_t Action,
/***** Write country name and end link *****/
Str_Copy (CountryName,Cty->Name[Gbl.Prefs.Language],
Hie_MAX_BYTES_FULL_NAME);
Cty_MAX_BYTES_NAME);
fprintf (Gbl.F.Out," %s (%s)"
"</a>"
"</div>",
@ -1099,7 +1101,7 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData)
/* Get the name of the country in current language */
Str_Copy (Cty->Name[Gbl.Prefs.Language],row[2],
Hie_MAX_BYTES_FULL_NAME);
Cty_MAX_BYTES_NAME);
break;
case Cty_GET_EXTRA_DATA:
/* Get the name of the country in several languages */
@ -1108,7 +1110,7 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData)
Lan++)
{
Str_Copy (Cty->Name[Lan],row[1 + Lan],
Hie_MAX_BYTES_FULL_NAME);
Cty_MAX_BYTES_NAME);
Str_Copy (Cty->WWW[Lan],row[1 + Txt_NUM_LANGUAGES + Lan],
Cns_MAX_BYTES_WWW);
}
@ -1212,7 +1214,7 @@ void Cty_WriteSelectorOfCountry (void)
void Cty_WriteCountryName (long CtyCod,const char *ClassLink)
{
extern struct Act_Actions Act_Actions[Act_NUM_ACTIONS];
char CtyName[Hie_MAX_BYTES_FULL_NAME + 1];
char CtyName[Cty_MAX_BYTES_NAME + 1];
char ActTxt[Act_MAX_BYTES_ACTION_TXT + 1];
bool PutForm = ClassLink &&
!Gbl.Form.Inside && // Only if not inside another form
@ -1279,7 +1281,7 @@ bool Cty_GetDataOfCountryByCod (struct Country *Cty,Cty_GetExtraData_t GetExtraD
Lan++)
if (Lan == Gbl.Prefs.Language)
Str_Copy (Cty->Name[Lan],Txt_Another_country,
Hie_MAX_BYTES_FULL_NAME);
Cty_MAX_BYTES_NAME);
else
Cty->Name[Lan][0] = '\0';
return false;
@ -1355,7 +1357,7 @@ bool Cty_GetDataOfCountryByCod (struct Country *Cty,Cty_GetExtraData_t GetExtraD
case Cty_GET_BASIC_DATA:
/* Get name and WWW of the country in current language */
Str_Copy (Cty->Name[Gbl.Prefs.Language],row[1],
Hie_MAX_BYTES_FULL_NAME);
Cty_MAX_BYTES_NAME);
Str_Copy (Cty->WWW[Gbl.Prefs.Language],row[2],
Cns_MAX_BYTES_WWW);
break;
@ -1366,7 +1368,7 @@ bool Cty_GetDataOfCountryByCod (struct Country *Cty,Cty_GetExtraData_t GetExtraD
Lan++)
{
Str_Copy (Cty->Name[Lan],row[Lan],
Hie_MAX_BYTES_FULL_NAME);
Cty_MAX_BYTES_NAME);
Str_Copy (Cty->WWW[Lan],row[Txt_NUM_LANGUAGES + Lan],
Cns_MAX_BYTES_WWW);
}
@ -1398,7 +1400,7 @@ bool Cty_GetDataOfCountryByCod (struct Country *Cty,Cty_GetExtraData_t GetExtraD
/***************************** Get country name ******************************/
/*****************************************************************************/
void Cty_GetCountryName (long CtyCod,char CtyName[Hie_MAX_BYTES_FULL_NAME + 1])
void Cty_GetCountryName (long CtyCod,char CtyName[Cty_MAX_BYTES_NAME + 1])
{
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
char Query[128];
@ -1407,7 +1409,7 @@ void Cty_GetCountryName (long CtyCod,char CtyName[Hie_MAX_BYTES_FULL_NAME + 1])
static struct
{
long CtyCod;
char CtyName[Hie_MAX_BYTES_FULL_NAME + 1];
char CtyName[Cty_MAX_BYTES_NAME + 1];
} Cached =
{
-1L,
@ -1433,7 +1435,7 @@ void Cty_GetCountryName (long CtyCod,char CtyName[Hie_MAX_BYTES_FULL_NAME + 1])
/* Get the name of the country */
Str_Copy (Cached.CtyName,row[0],
Hie_MAX_BYTES_FULL_NAME);
Cty_MAX_BYTES_NAME);
}
else
Cached.CtyName[0] = '\0';
@ -1443,7 +1445,7 @@ void Cty_GetCountryName (long CtyCod,char CtyName[Hie_MAX_BYTES_FULL_NAME + 1])
}
Str_Copy (CtyName,Cached.CtyName,
Hie_MAX_BYTES_FULL_NAME);
Cty_MAX_BYTES_NAME);
}
}
@ -1604,7 +1606,7 @@ static void Cty_ListCountriesForEdition (void)
fprintf (Gbl.F.Out,"<input type=\"text\" name=\"Name\""
" size=\"15\" maxlength=\"%u\" value=\"%s\""
" onchange=\"document.getElementById('%s').submit();\" />",
Hie_MAX_CHARS_FULL_NAME,
Cty_MAX_CHARS_NAME,
Cty->Name[Lan],Gbl.Form.Id);
Act_FormEnd ();
fprintf (Gbl.F.Out,"</td>");
@ -1721,10 +1723,10 @@ void Cty_RenameCountry (void)
extern const char *Txt_The_country_X_has_been_renamed_as_Y;
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
extern const char *Txt_The_name_of_the_country_X_has_not_changed;
char Query[512];
struct Country *Cty;
char NewCtyName[Hie_MAX_BYTES_FULL_NAME + 1];
char NewCtyName[Cty_MAX_BYTES_NAME + 1];
Txt_Language_t Language;
char FieldName[4 + 1 + 2 + 1]; // Example: "Name_en"
Cty = &Gbl.Ctys.EditingCty;
@ -1736,7 +1738,7 @@ void Cty_RenameCountry (void)
Language = Pre_GetParamLanguage ();
/* Get the new name for the country */
Par_GetParToText ("Name",NewCtyName,Hie_MAX_BYTES_FULL_NAME);
Par_GetParToText ("Name",NewCtyName,Cty_MAX_BYTES_NAME);
/***** Get from the database the data of the country *****/
Cty_GetDataOfCountryByCod (Cty,Cty_GET_EXTRA_DATA);
@ -1763,12 +1765,10 @@ void Cty_RenameCountry (void)
else
{
/* Update the table changing old name by new name */
sprintf (Query,"UPDATE countries SET Name_%s='%s'"
" WHERE CtyCod='%03ld'",
Txt_STR_LANG_ID[Language],NewCtyName,Cty->CtyCod);
DB_QueryUPDATE (Query,"can not update the name of a country");
sprintf (FieldName,"Name_%s",Txt_STR_LANG_ID[Language]);
Cty_UpdateCtyNameDB (Cty->CtyCod,FieldName,NewCtyName);
/***** Write message to show the change made *****/
/* Write message to show the change made */
sprintf (Gbl.Message,Txt_The_country_X_has_been_renamed_as_Y,
Cty->Name[Language],NewCtyName);
Lay_ShowAlert (Lay_SUCCESS,Gbl.Message);
@ -1784,7 +1784,7 @@ void Cty_RenameCountry (void)
/***** Show the form again *****/
Str_Copy (Cty->Name[Language],NewCtyName,
Hie_MAX_BYTES_FULL_NAME);
Cty_MAX_BYTES_NAME);
Cty_EditCountries ();
}
@ -1794,7 +1794,7 @@ void Cty_RenameCountry (void)
static bool Cty_CheckIfNumericCountryCodeExists (long CtyCod)
{
char Query[256];
char Query[128];
/***** Get number of countries with a name from database *****/
sprintf (Query,"SELECT COUNT(*) FROM countries WHERE CtyCod='%03ld'",
@ -1808,7 +1808,7 @@ static bool Cty_CheckIfNumericCountryCodeExists (long CtyCod)
static bool Cty_CheckIfAlpha2CountryCodeExists (const char Alpha2[2 + 1])
{
char Query[512];
char Query[128];
/***** Get number of countries with a name from database *****/
sprintf (Query,"SELECT COUNT(*) FROM countries WHERE Alpha2='%s'",
@ -1823,7 +1823,7 @@ static bool Cty_CheckIfAlpha2CountryCodeExists (const char Alpha2[2 + 1])
static bool Cty_CheckIfCountryNameExists (Txt_Language_t Language,const char *Name,long CtyCod)
{
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
char Query[512];
char Query[256 + Cty_MAX_BYTES_NAME];
/***** Get number of countries with a name from database *****/
sprintf (Query,"SELECT COUNT(*) FROM countries"
@ -1832,6 +1832,20 @@ static bool Cty_CheckIfCountryNameExists (Txt_Language_t Language,const char *Na
return (DB_QueryCOUNT (Query,"can not check if the name of a country already existed") != 0);
}
/*****************************************************************************/
/************ Update institution name in table of institutions ***************/
/*****************************************************************************/
static void Cty_UpdateCtyNameDB (long CtyCod,const char *FieldName,const char *NewCtyName)
{
char Query[128 + Cty_MAX_BYTES_NAME];
/***** Update country changing old name by new name */
sprintf (Query,"UPDATE countries SET %s='%s' WHERE CtyCod='%03ld'",
FieldName,NewCtyName,CtyCod);
DB_QueryUPDATE (Query,"can not update the name of a country");
}
/*****************************************************************************/
/************************ Change the URL of a country ************************/
/*****************************************************************************/
@ -1855,7 +1869,7 @@ void Cty_ChangeCtyWWW (void)
Language = Pre_GetParamLanguage ();
/* Get the new WWW for the country */
Par_GetParToText ("WWW",NewWWW,Hie_MAX_BYTES_FULL_NAME);
Par_GetParToText ("WWW",NewWWW,Cns_MAX_BYTES_WWW);
/***** Get from the database the data of the country *****/
Cty_GetDataOfCountryByCod (Cty,Cty_GET_EXTRA_DATA);
@ -1983,7 +1997,7 @@ static void Cty_PutFormToCreateCountry (void)
" required=\"required\" />"
"</td>",
Txt_STR_LANG_ID[Lan],
Hie_MAX_CHARS_FULL_NAME,
Cty_MAX_CHARS_NAME,
Cty->Name[Lan]);
/* WWW */
@ -2116,7 +2130,7 @@ void Cty_RecFormNewCountry (void)
Lan++)
{
sprintf (ParamName,"Name_%s",Txt_STR_LANG_ID[Lan]);
Par_GetParToText (ParamName,Cty->Name[Lan],Hie_MAX_BYTES_FULL_NAME);
Par_GetParToText (ParamName,Cty->Name[Lan],Cty_MAX_BYTES_NAME);
if (Cty->Name[Lan][0]) // If there's a country name
{
@ -2155,7 +2169,7 @@ void Cty_RecFormNewCountry (void)
/**************************** Create a new country ***************************/
/*****************************************************************************/
#define Cty_MAX_BYTES_SUBQUERY_CTYS_NAME ((1 + Txt_NUM_LANGUAGES) * Hie_MAX_BYTES_FULL_NAME)
#define Cty_MAX_BYTES_SUBQUERY_CTYS_NAME ((1 + Txt_NUM_LANGUAGES) * Cty_MAX_BYTES_NAME)
#define Cty_MAX_BYTES_SUBQUERY_CTYS_WWW ((1 + Txt_NUM_LANGUAGES) * Cns_MAX_BYTES_WWW)
static void Cty_CreateCountry (struct Country *Cty)

View File

@ -40,11 +40,14 @@
#define Cty_MAX_COUNTRS_PER_USR 10 // Used in list of my countries
#define Cty_MAX_CHARS_NAME (48 - 1) // 47
#define Cty_MAX_BYTES_NAME ((Cty_MAX_CHARS_NAME + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 767
struct Country
{
long CtyCod;
char Alpha2[2 + 1];
char Name[1 + Txt_NUM_LANGUAGES][Hie_MAX_BYTES_FULL_NAME + 1];
char Name[1 + Txt_NUM_LANGUAGES][Cty_MAX_BYTES_NAME + 1];
char WWW [1 + Txt_NUM_LANGUAGES][Cns_MAX_BYTES_WWW + 1];
unsigned NumUsrsWhoClaimToBelongToCty;
unsigned NumInss;
@ -96,7 +99,7 @@ void Cty_FreeListCountries (void);
void Cty_WriteSelectorOfCountry (void);
void Cty_WriteCountryName (long CtyCod,const char *ClassLink);
bool Cty_GetDataOfCountryByCod (struct Country *Cty,Cty_GetExtraData_t GetExtraData);
void Cty_GetCountryName (long CtyCod,char CtyName[Hie_MAX_BYTES_FULL_NAME + 1]);
void Cty_GetCountryName (long CtyCod,char CtyName[Cty_MAX_BYTES_NAME + 1]);
void Cty_PutParamCtyCod (long CtyCod);
long Cty_GetAndCheckParamOtherCtyCod (void);
void Cty_RemoveCountry (void);

View File

@ -434,7 +434,7 @@ mysql> DESCRIBE centres;
"ShortName VARCHAR(511) COLLATE latin1_spanish_ci NOT NULL," // Hie_MAX_BYTES_SHRT_NAME
"FullName VARCHAR(2047) COLLATE latin1_spanish_ci NOT NULL," // Hie_MAX_BYTES_FULL_NAME
"WWW VARCHAR(255) NOT NULL," // Cns_MAX_BYTES_WWW
"PhotoAttribution TEXT NOT NULL,"
"PhotoAttribution TEXT NOT NULL," // Img_MAX_BYTES_ATTRIBUTION
"UNIQUE INDEX(CtrCod),"
"INDEX(InsCod),"
"INDEX(PlcCod),"
@ -468,9 +468,9 @@ mysql> DESCRIBE clicks_without_photo;
2 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS clicks_without_photo ("
"UsrCod INT NOT NULL,"
"NumClicks INT NOT NULL,"
"UNIQUE INDEX(UsrCod))");
"UsrCod INT NOT NULL,"
"NumClicks INT NOT NULL,"
"UNIQUE INDEX(UsrCod))");
/***** Table clipboard *****/
/*
@ -489,16 +489,16 @@ mysql> DESCRIBE clipboard;
7 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS clipboard ("
"UsrCod INT NOT NULL,"
"FileBrowser TINYINT NOT NULL,"
"Cod INT NOT NULL DEFAULT -1,"
"WorksUsrCod INT NOT NULL,"
"FileType TINYINT NOT NULL DEFAULT 0,"
"Path TEXT COLLATE latin1_bin NOT NULL,"
"CopyTime TIMESTAMP,"
"UNIQUE INDEX(UsrCod),"
"INDEX(FileBrowser,Cod),"
"INDEX(WorksUsrCod))");
"UsrCod INT NOT NULL,"
"FileBrowser TINYINT NOT NULL,"
"Cod INT NOT NULL DEFAULT -1,"
"WorksUsrCod INT NOT NULL,"
"FileType TINYINT NOT NULL DEFAULT 0,"
"Path TEXT COLLATE latin1_bin NOT NULL," // PATH_MAX
"CopyTime TIMESTAMP,"
"UNIQUE INDEX(UsrCod),"
"INDEX(FileBrowser,Cod),"
"INDEX(WorksUsrCod))");
/***** Table connected *****/
/*
@ -514,13 +514,13 @@ mysql> DESCRIBE connected;
4 rows in set (0,00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS connected ("
"UsrCod INT NOT NULL,"
"RoleInLastCrs TINYINT NOT NULL DEFAULT 0,"
"LastCrsCod INT NOT NULL DEFAULT -1,"
"LastTime DATETIME NOT NULL,"
"UNIQUE INDEX(UsrCod),"
"INDEX(RoleInLastCrs),"
"INDEX(LastCrsCod))");
"UsrCod INT NOT NULL,"
"RoleInLastCrs TINYINT NOT NULL DEFAULT 0,"
"LastCrsCod INT NOT NULL DEFAULT -1,"
"LastTime DATETIME NOT NULL,"
"UNIQUE INDEX(UsrCod),"
"INDEX(RoleInLastCrs),"
"INDEX(LastCrsCod))");
/***** Table countries *****/
/*
@ -531,15 +531,15 @@ mysql> DESCRIBE countries;
| CtyCod | int(11) | NO | PRI | NULL | |
| Alpha2 | char(2) | NO | UNI | NULL | |
| MapAttribution | text | NO | | NULL | |
| Name_ca | varchar(255) | NO | MUL | NULL | |
| Name_de | varchar(255) | NO | MUL | NULL | |
| Name_en | varchar(255) | NO | MUL | NULL | |
| Name_es | varchar(255) | NO | MUL | NULL | |
| Name_fr | varchar(255) | NO | MUL | NULL | |
| Name_gn | varchar(255) | NO | MUL | NULL | |
| Name_it | varchar(255) | NO | MUL | NULL | |
| Name_pl | varchar(255) | NO | MUL | NULL | |
| Name_pt | varchar(255) | NO | MUL | NULL | |
| Name_ca | varchar(767) | NO | MUL | NULL | |
| Name_de | varchar(767) | NO | MUL | NULL | |
| Name_en | varchar(767) | NO | MUL | NULL | |
| Name_es | varchar(767) | NO | MUL | NULL | |
| Name_fr | varchar(767) | NO | MUL | NULL | |
| Name_gn | varchar(767) | NO | MUL | NULL | |
| Name_it | varchar(767) | NO | MUL | NULL | |
| Name_pl | varchar(767) | NO | MUL | NULL | |
| Name_pt | varchar(767) | NO | MUL | NULL | |
| WWW_ca | varchar(255) | NO | | NULL | |
| WWW_de | varchar(255) | NO | | NULL | |
| WWW_en | varchar(255) | NO | | NULL | |
@ -550,40 +550,40 @@ mysql> DESCRIBE countries;
| WWW_pl | varchar(255) | NO | | NULL | |
| WWW_pt | varchar(255) | NO | | NULL | |
+----------------+--------------+------+-----+---------+-------+
21 rows in set (0.00 sec)
21 rows in set (0,00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS countries ("
"CtyCod INT NOT NULL,"
"Alpha2 CHAR(2) NOT NULL,"
"MapAttribution TEXT NOT NULL,"
"Name_ca VARCHAR(255) NOT NULL,"
"Name_de VARCHAR(255) NOT NULL,"
"Name_en VARCHAR(255) NOT NULL,"
"Name_es VARCHAR(255) NOT NULL,"
"Name_fr VARCHAR(255) NOT NULL,"
"Name_gn VARCHAR(255) NOT NULL,"
"Name_it VARCHAR(255) NOT NULL,"
"Name_pl VARCHAR(255) NOT NULL,"
"Name_pt VARCHAR(255) NOT NULL,"
"WWW_ca VARCHAR(255) NOT NULL,"
"WWW_de VARCHAR(255) NOT NULL,"
"WWW_en VARCHAR(255) NOT NULL,"
"WWW_es VARCHAR(255) NOT NULL,"
"WWW_fr VARCHAR(255) NOT NULL,"
"WWW_gn VARCHAR(255) NOT NULL,"
"WWW_it VARCHAR(255) NOT NULL,"
"WWW_pl VARCHAR(255) NOT NULL,"
"WWW_pt VARCHAR(255) NOT NULL,"
"UNIQUE INDEX(CtyCod),UNIQUE INDEX(Alpha2),"
"INDEX(Name_ca),"
"INDEX(Name_de),"
"INDEX(Name_en),"
"INDEX(Name_es),"
"INDEX(Name_fr),"
"INDEX(Name_gn),"
"INDEX(Name_it),"
"INDEX(Name_pl),"
"INDEX(Name_pt))"); // ISO 3166-1 country codes
"CtyCod INT NOT NULL,"
"Alpha2 CHAR(2) NOT NULL,"
"MapAttribution TEXT NOT NULL," // Img_MAX_BYTES_ATTRIBUTION
"Name_ca VARCHAR(767) NOT NULL," // Cty_MAX_BYTES_NAME
"Name_de VARCHAR(767) NOT NULL," // Cty_MAX_BYTES_NAME
"Name_en VARCHAR(767) NOT NULL," // Cty_MAX_BYTES_NAME
"Name_es VARCHAR(767) NOT NULL," // Cty_MAX_BYTES_NAME
"Name_fr VARCHAR(767) NOT NULL," // Cty_MAX_BYTES_NAME
"Name_gn VARCHAR(767) NOT NULL," // Cty_MAX_BYTES_NAME
"Name_it VARCHAR(767) NOT NULL," // Cty_MAX_BYTES_NAME
"Name_pl VARCHAR(767) NOT NULL," // Cty_MAX_BYTES_NAME
"Name_pt VARCHAR(767) NOT NULL," // Cty_MAX_BYTES_NAME
"WWW_ca VARCHAR(255) NOT NULL," // Cns_MAX_BYTES_WWW
"WWW_de VARCHAR(255) NOT NULL," // Cns_MAX_BYTES_WWW
"WWW_en VARCHAR(255) NOT NULL," // Cns_MAX_BYTES_WWW
"WWW_es VARCHAR(255) NOT NULL," // Cns_MAX_BYTES_WWW
"WWW_fr VARCHAR(255) NOT NULL," // Cns_MAX_BYTES_WWW
"WWW_gn VARCHAR(255) NOT NULL," // Cns_MAX_BYTES_WWW
"WWW_it VARCHAR(255) NOT NULL," // Cns_MAX_BYTES_WWW
"WWW_pl VARCHAR(255) NOT NULL," // Cns_MAX_BYTES_WWW
"WWW_pt VARCHAR(255) NOT NULL," // Cns_MAX_BYTES_WWW
"UNIQUE INDEX(CtyCod),UNIQUE INDEX(Alpha2),"
"INDEX(Name_ca),"
"INDEX(Name_de),"
"INDEX(Name_en),"
"INDEX(Name_es),"
"INDEX(Name_fr),"
"INDEX(Name_gn),"
"INDEX(Name_it),"
"INDEX(Name_pl),"
"INDEX(Name_pt))"); // ISO 3166-1 country codes
/***** Table courses *****/
/*