Variables were rename, binary collation names were added

Fixed that SHOW CHARACTER SET displayed non-dynamic charsets even if they were not really compiled
This commit is contained in:
bar@bar.mysql.r18.ru 2003-05-22 17:20:19 +05:00
parent 79326cf901
commit 2b1e1f6494
17 changed files with 59 additions and 80 deletions

View File

@ -61,6 +61,7 @@ typedef struct unicase_info_st
#define MY_CS_BINSORT 16 /* if binary sort order */
#define MY_CS_PRIMARY 32 /* if primary collation */
#define MY_CS_STRNXFRM 64 /* if strnxfrm is used for sort */
#define MY_CS_UNICODE 128 /* is a charset is full unicode */
#define MY_CHARSET_UNDEFINED 0
#define MY_CHARSET_CURRENT (default_charset_info->number)
@ -185,20 +186,29 @@ typedef struct charset_info_st
extern CHARSET_INFO my_charset_bin;
extern CHARSET_INFO my_charset_big5_chinese_ci;
extern CHARSET_INFO my_charset_big5_bin;
extern CHARSET_INFO my_charset_euckr_korean_ci;
extern CHARSET_INFO my_charset_euckr_bin;
extern CHARSET_INFO my_charset_gb2312_chinese_ci;
extern CHARSET_INFO my_charset_gb2312_bin;
extern CHARSET_INFO my_charset_gbk_chinese_ci;
extern CHARSET_INFO my_charset_gbk_bin;
extern CHARSET_INFO my_charset_latin1;
extern CHARSET_INFO my_charset_big5;
extern CHARSET_INFO my_charset_czech;
extern CHARSET_INFO my_charset_euc_kr;
extern CHARSET_INFO my_charset_gb2312;
extern CHARSET_INFO my_charset_gbk;
extern CHARSET_INFO my_charset_latin1_de;
extern CHARSET_INFO my_charset_sjis;
extern CHARSET_INFO my_charset_tis620;
extern CHARSET_INFO my_charset_ucs2;
extern CHARSET_INFO my_charset_ucse;
extern CHARSET_INFO my_charset_ujis;
extern CHARSET_INFO my_charset_utf8;
extern CHARSET_INFO my_charset_win1250ch;
extern CHARSET_INFO my_charset_latin1_german2_ci;
extern CHARSET_INFO my_charset_latin1_bin;
extern CHARSET_INFO my_charset_latin2_czech_ci;
extern CHARSET_INFO my_charset_sjis_japanese_ci;
extern CHARSET_INFO my_charset_sjis_bin;
extern CHARSET_INFO my_charset_tis620_thai_ci;
extern CHARSET_INFO my_charset_tis620_bin;
extern CHARSET_INFO my_charset_ucs2_general_ci;
extern CHARSET_INFO my_charset_ucs2_bin;
extern CHARSET_INFO my_charset_ujis_japanese_ci;
extern CHARSET_INFO my_charset_ujis_bin;
extern CHARSET_INFO my_charset_utf8_general_ci;
extern CHARSET_INFO my_charset_utf8_bin;
extern CHARSET_INFO my_charset_cp1250_czech_ci;
extern my_bool my_parse_charset_xml(const char *bug, uint len,

View File

@ -313,6 +313,8 @@ static int add_collation(CHARSET_INFO *cs)
{
if (!all_charsets[cs->number])
{
if (cs->state & MY_CS_COMPILED)
return MY_XML_OK;
if (!(all_charsets[cs->number]=
(CHARSET_INFO*) my_once_alloc(sizeof(CHARSET_INFO),MYF(0))))
return MY_XML_ERROR;
@ -422,57 +424,53 @@ CHARSET_INFO *default_charset_info = &my_charset_latin1;
static my_bool init_compiled_charsets(myf flags __attribute__((unused)))
{
CHARSET_INFO *cs;
MY_ADD_CHARSET(&my_charset_latin1);
MY_ADD_CHARSET(&my_charset_latin1);
MY_ADD_CHARSET(&my_charset_bin);
MY_ADD_CHARSET(&my_charset_latin1_german2_ci);
#ifdef HAVE_CHARSET_big5
MY_ADD_CHARSET(&my_charset_big5);
MY_ADD_CHARSET(&my_charset_big5_chinese_ci);
#endif
#ifdef HAVE_CHARSET_czech
MY_ADD_CHARSET(&my_charset_czech);
MY_ADD_CHARSET(&my_charset_latin2_czech_ci);
#endif
#ifdef HAVE_CHARSET_euc_kr
MY_ADD_CHARSET(&my_charset_euc_kr);
MY_ADD_CHARSET(&my_charset_euckr_korean_ci);
#endif
#ifdef HAVE_CHARSET_gb2312
MY_ADD_CHARSET(&my_charset_gb2312);
MY_ADD_CHARSET(&my_charset_gb2312_chinese_ci);
#endif
#ifdef HAVE_CHARSET_gbk
MY_ADD_CHARSET(&my_charset_gbk);
#endif
#ifdef HAVE_CHARSET_latin1_de
MY_ADD_CHARSET(&my_charset_latin1_de);
MY_ADD_CHARSET(&my_charset_gbk_chinese_ci);
#endif
#ifdef HAVE_CHARSET_sjis
MY_ADD_CHARSET(&my_charset_sjis);
MY_ADD_CHARSET(&my_charset_sjis_japanese_ci);
#endif
#ifdef HAVE_CHARSET_tis620
MY_ADD_CHARSET(&my_charset_tis620);
MY_ADD_CHARSET(&my_charset_tis620_thai_ci);
#endif
#ifdef HAVE_CHARSET_ucs2
MY_ADD_CHARSET(&my_charset_ucs2);
MY_ADD_CHARSET(&my_charset_ucs2_general_ci);
#endif
#ifdef HAVE_CHARSET_ujis
MY_ADD_CHARSET(&my_charset_ujis);
MY_ADD_CHARSET(&my_charset_ujis_japanese_ci);
#endif
#ifdef HAVE_CHARSET_utf8
MY_ADD_CHARSET(&my_charset_utf8);
MY_ADD_CHARSET(&my_charset_utf8_general_ci);
#endif
#ifdef HAVE_CHARSET_win1250ch
MY_ADD_CHARSET(&my_charset_win1250ch);
MY_ADD_CHARSET(&my_charset_cp1250_czech_ci);
#endif
/* Copy compiled charsets */
@ -533,12 +531,6 @@ void free_charsets(void)
}
static void get_charset_conf_name(const char *cs_name, char *buf)
{
strxmov(get_charsets_dir(buf), cs_name, ".conf", NullS);
}
uint get_charset_number(const char *charset_name)
{
CHARSET_INFO **cs;
@ -661,28 +653,3 @@ CHARSET_INFO *get_charset_by_csname(const char *cs_name,
return cs;
}
/* Only append name if it doesn't exist from before */
static my_bool charset_in_string(const char *name, DYNAMIC_STRING *s)
{
uint length= (uint) strlen(name);
const char *pos;
for (pos=s->str ; (pos=strstr(pos,name)) ; pos++)
{
if (! pos[length] || pos[length] == ' ')
return TRUE; /* Already existed */
}
return FALSE;
}
static void charset_append(DYNAMIC_STRING *s, const char *name)
{
if (!charset_in_string(name, s))
{
dynstr_append(s, name);
dynstr_append(s, " ");
}
}

View File

@ -1420,8 +1420,8 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
static bool write_collation(Protocol *protocol, CHARSET_INFO *cs)
{
protocol->prepare_for_resend();
protocol->store(cs->csname, system_charset_info);
protocol->store(cs->name, system_charset_info);
protocol->store(cs->csname, system_charset_info);
protocol->store_short((longlong) cs->number);
protocol->store((cs->state & MY_CS_PRIMARY) ? "Y" : "",system_charset_info);
protocol->store((cs->state & MY_CS_COMPILED)? "Y" : "",system_charset_info);
@ -1440,8 +1440,8 @@ int mysqld_show_collations(THD *thd, const char *wild)
DBUG_ENTER("mysqld_show_charsets");
field_list.push_back(new Item_empty_string("Charset",30));
field_list.push_back(new Item_empty_string("Collation",30));
field_list.push_back(new Item_empty_string("Charset",30));
field_list.push_back(new Item_return_int("Id",11, FIELD_TYPE_SHORT));
field_list.push_back(new Item_empty_string("D",30));
field_list.push_back(new Item_empty_string("C",30));

View File

@ -28,9 +28,9 @@
#include <floatingpoint.h>
#endif
CHARSET_INFO *system_charset_info= &my_charset_utf8;
CHARSET_INFO *files_charset_info= &my_charset_utf8;
CHARSET_INFO *national_charset_info= &my_charset_utf8;
CHARSET_INFO *system_charset_info= &my_charset_utf8_general_ci;
CHARSET_INFO *files_charset_info= &my_charset_utf8_general_ci;
CHARSET_INFO *national_charset_info= &my_charset_utf8_general_ci;
extern gptr sql_alloc(unsigned size);
extern void sql_element_free(void *ptr);

View File

@ -6226,7 +6226,7 @@ my_mb_wc_big5(CHARSET_INFO *cs __attribute__((unused)),
return 2;
}
CHARSET_INFO my_charset_big5 =
CHARSET_INFO my_charset_big5_chinese_ci =
{
1,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */

View File

@ -605,7 +605,7 @@ int my_strnncollsp_czech(CHARSET_INFO * cs,
}
CHARSET_INFO my_charset_czech =
CHARSET_INFO my_charset_latin2_czech_ci =
{
2,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */

View File

@ -8634,7 +8634,7 @@ my_mb_wc_euc_kr(CHARSET_INFO *cs __attribute__((unused)),
return 2;
}
CHARSET_INFO my_charset_euc_kr =
CHARSET_INFO my_charset_euckr_korean_ci =
{
19,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */

View File

@ -5684,7 +5684,7 @@ my_mb_wc_gb2312(CHARSET_INFO *cs __attribute__((unused)),
return 2;
}
CHARSET_INFO my_charset_gb2312 =
CHARSET_INFO my_charset_gb2312_chinese_ci =
{
24,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */

View File

@ -9881,7 +9881,7 @@ my_mb_wc_gbk(CHARSET_INFO *cs __attribute__((unused)),
}
CHARSET_INFO my_charset_gbk =
CHARSET_INFO my_charset_gbk_chinese_ci =
{
28,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */

View File

@ -428,7 +428,7 @@ static int my_strnxfrm_latin1_de(CHARSET_INFO *cs __attribute__((unused)),
return dest - dest_orig;
}
CHARSET_INFO my_charset_latin1_de =
CHARSET_INFO my_charset_latin1_german2_ci =
{
31,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */

View File

@ -4468,7 +4468,7 @@ my_mb_wc_sjis(CHARSET_INFO *cs __attribute__((unused)),
return 2;
}
CHARSET_INFO my_charset_sjis =
CHARSET_INFO my_charset_sjis_japanese_ci =
{
13,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */

View File

@ -688,7 +688,7 @@ void ThNormalize(uchar* ptr, uint field_length, const uchar* from, uint length)
}
CHARSET_INFO my_charset_tis620 =
CHARSET_INFO my_charset_tis620_thai_ci =
{
18,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */

View File

@ -997,10 +997,10 @@ uint my_charpos_ucs2(CHARSET_INFO *cs __attribute__((unused)),
return pos*2;
}
CHARSET_INFO my_charset_ucs2 =
CHARSET_INFO my_charset_ucs2_general_ci =
{
35,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE, /* state */
"ucs2", /* cs name */
"ucs2_general_ci", /* name */
"", /* comment */

View File

@ -8425,7 +8425,7 @@ my_wc_mb_euc_jp(CHARSET_INFO *c,my_wc_t wc, unsigned char *s, unsigned char *e)
return MY_CS_ILUNI;
}
CHARSET_INFO my_charset_ujis =
CHARSET_INFO my_charset_ujis_japanese_ci =
{
12,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */

View File

@ -1950,10 +1950,10 @@ static int my_mbcharlen_utf8(CHARSET_INFO *cs __attribute__((unused)) , uint c)
return 0; /* Illegal mb head */;
}
CHARSET_INFO my_charset_utf8 =
CHARSET_INFO my_charset_utf8_general_ci =
{
33,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE, /* state */
"utf8", /* cs name */
"utf8_general_ci", /* name */
"", /* comment */

View File

@ -640,7 +640,7 @@ static my_bool my_like_range_win1250ch(CHARSET_INFO *cs __attribute__((unused)),
}
CHARSET_INFO my_charset_win1250ch =
CHARSET_INFO my_charset_cp1250_czech_ci =
{
34,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */

View File

@ -220,6 +220,8 @@ static int cs_value(MY_XML_PARSER *st,const char *attr, uint len)
i->cs.state|= MY_CS_PRIMARY;
else if (!strncmp("binary",attr,len))
i->cs.state|= MY_CS_BINSORT;
else if (!strncmp("compiled",attr,len))
i->cs.state|= MY_CS_COMPILED;
break;
case _CS_UPPERMAP:
fill_uchar(i->to_upper,MY_CS_TO_UPPER_TABLE_SIZE,attr,len);