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_BINSORT 16 /* if binary sort order */
#define MY_CS_PRIMARY 32 /* if primary collation */ #define MY_CS_PRIMARY 32 /* if primary collation */
#define MY_CS_STRNXFRM 64 /* if strnxfrm is used for sort */ #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_UNDEFINED 0
#define MY_CHARSET_CURRENT (default_charset_info->number) #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_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_latin1;
extern CHARSET_INFO my_charset_big5; extern CHARSET_INFO my_charset_latin1_german2_ci;
extern CHARSET_INFO my_charset_czech; extern CHARSET_INFO my_charset_latin1_bin;
extern CHARSET_INFO my_charset_euc_kr; extern CHARSET_INFO my_charset_latin2_czech_ci;
extern CHARSET_INFO my_charset_gb2312; extern CHARSET_INFO my_charset_sjis_japanese_ci;
extern CHARSET_INFO my_charset_gbk; extern CHARSET_INFO my_charset_sjis_bin;
extern CHARSET_INFO my_charset_latin1_de; extern CHARSET_INFO my_charset_tis620_thai_ci;
extern CHARSET_INFO my_charset_sjis; extern CHARSET_INFO my_charset_tis620_bin;
extern CHARSET_INFO my_charset_tis620; extern CHARSET_INFO my_charset_ucs2_general_ci;
extern CHARSET_INFO my_charset_ucs2; extern CHARSET_INFO my_charset_ucs2_bin;
extern CHARSET_INFO my_charset_ucse; extern CHARSET_INFO my_charset_ujis_japanese_ci;
extern CHARSET_INFO my_charset_ujis; extern CHARSET_INFO my_charset_ujis_bin;
extern CHARSET_INFO my_charset_utf8; extern CHARSET_INFO my_charset_utf8_general_ci;
extern CHARSET_INFO my_charset_win1250ch; 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, 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 (!all_charsets[cs->number])
{ {
if (cs->state & MY_CS_COMPILED)
return MY_XML_OK;
if (!(all_charsets[cs->number]= if (!(all_charsets[cs->number]=
(CHARSET_INFO*) my_once_alloc(sizeof(CHARSET_INFO),MYF(0)))) (CHARSET_INFO*) my_once_alloc(sizeof(CHARSET_INFO),MYF(0))))
return MY_XML_ERROR; 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))) static my_bool init_compiled_charsets(myf flags __attribute__((unused)))
{ {
CHARSET_INFO *cs; 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_bin);
MY_ADD_CHARSET(&my_charset_latin1_german2_ci);
#ifdef HAVE_CHARSET_big5 #ifdef HAVE_CHARSET_big5
MY_ADD_CHARSET(&my_charset_big5); MY_ADD_CHARSET(&my_charset_big5_chinese_ci);
#endif #endif
#ifdef HAVE_CHARSET_czech #ifdef HAVE_CHARSET_czech
MY_ADD_CHARSET(&my_charset_czech); MY_ADD_CHARSET(&my_charset_latin2_czech_ci);
#endif #endif
#ifdef HAVE_CHARSET_euc_kr #ifdef HAVE_CHARSET_euc_kr
MY_ADD_CHARSET(&my_charset_euc_kr); MY_ADD_CHARSET(&my_charset_euckr_korean_ci);
#endif #endif
#ifdef HAVE_CHARSET_gb2312 #ifdef HAVE_CHARSET_gb2312
MY_ADD_CHARSET(&my_charset_gb2312); MY_ADD_CHARSET(&my_charset_gb2312_chinese_ci);
#endif #endif
#ifdef HAVE_CHARSET_gbk #ifdef HAVE_CHARSET_gbk
MY_ADD_CHARSET(&my_charset_gbk); MY_ADD_CHARSET(&my_charset_gbk_chinese_ci);
#endif
#ifdef HAVE_CHARSET_latin1_de
MY_ADD_CHARSET(&my_charset_latin1_de);
#endif #endif
#ifdef HAVE_CHARSET_sjis #ifdef HAVE_CHARSET_sjis
MY_ADD_CHARSET(&my_charset_sjis); MY_ADD_CHARSET(&my_charset_sjis_japanese_ci);
#endif #endif
#ifdef HAVE_CHARSET_tis620 #ifdef HAVE_CHARSET_tis620
MY_ADD_CHARSET(&my_charset_tis620); MY_ADD_CHARSET(&my_charset_tis620_thai_ci);
#endif #endif
#ifdef HAVE_CHARSET_ucs2 #ifdef HAVE_CHARSET_ucs2
MY_ADD_CHARSET(&my_charset_ucs2); MY_ADD_CHARSET(&my_charset_ucs2_general_ci);
#endif #endif
#ifdef HAVE_CHARSET_ujis #ifdef HAVE_CHARSET_ujis
MY_ADD_CHARSET(&my_charset_ujis); MY_ADD_CHARSET(&my_charset_ujis_japanese_ci);
#endif #endif
#ifdef HAVE_CHARSET_utf8 #ifdef HAVE_CHARSET_utf8
MY_ADD_CHARSET(&my_charset_utf8); MY_ADD_CHARSET(&my_charset_utf8_general_ci);
#endif #endif
#ifdef HAVE_CHARSET_win1250ch #ifdef HAVE_CHARSET_win1250ch
MY_ADD_CHARSET(&my_charset_win1250ch); MY_ADD_CHARSET(&my_charset_cp1250_czech_ci);
#endif #endif
/* Copy compiled charsets */ /* 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) uint get_charset_number(const char *charset_name)
{ {
CHARSET_INFO **cs; CHARSET_INFO **cs;
@ -661,28 +653,3 @@ CHARSET_INFO *get_charset_by_csname(const char *cs_name,
return cs; 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) static bool write_collation(Protocol *protocol, CHARSET_INFO *cs)
{ {
protocol->prepare_for_resend(); protocol->prepare_for_resend();
protocol->store(cs->csname, system_charset_info);
protocol->store(cs->name, 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_short((longlong) cs->number);
protocol->store((cs->state & MY_CS_PRIMARY) ? "Y" : "",system_charset_info); protocol->store((cs->state & MY_CS_PRIMARY) ? "Y" : "",system_charset_info);
protocol->store((cs->state & MY_CS_COMPILED)? "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"); 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("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_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("D",30));
field_list.push_back(new Item_empty_string("C",30)); field_list.push_back(new Item_empty_string("C",30));

View File

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

View File

@ -6226,7 +6226,7 @@ my_mb_wc_big5(CHARSET_INFO *cs __attribute__((unused)),
return 2; return 2;
} }
CHARSET_INFO my_charset_big5 = CHARSET_INFO my_charset_big5_chinese_ci =
{ {
1,0,0, /* number */ 1,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ 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 */ 2,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */ 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; return 2;
} }
CHARSET_INFO my_charset_euc_kr = CHARSET_INFO my_charset_euckr_korean_ci =
{ {
19,0,0, /* number */ 19,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ MY_CS_COMPILED|MY_CS_PRIMARY, /* state */

View File

@ -5684,7 +5684,7 @@ my_mb_wc_gb2312(CHARSET_INFO *cs __attribute__((unused)),
return 2; return 2;
} }
CHARSET_INFO my_charset_gb2312 = CHARSET_INFO my_charset_gb2312_chinese_ci =
{ {
24,0,0, /* number */ 24,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ 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 */ 28,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ 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; return dest - dest_orig;
} }
CHARSET_INFO my_charset_latin1_de = CHARSET_INFO my_charset_latin1_german2_ci =
{ {
31,0,0, /* number */ 31,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */ MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */

View File

@ -4468,7 +4468,7 @@ my_mb_wc_sjis(CHARSET_INFO *cs __attribute__((unused)),
return 2; return 2;
} }
CHARSET_INFO my_charset_sjis = CHARSET_INFO my_charset_sjis_japanese_ci =
{ {
13,0,0, /* number */ 13,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ 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 */ 18,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ 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; return pos*2;
} }
CHARSET_INFO my_charset_ucs2 = CHARSET_INFO my_charset_ucs2_general_ci =
{ {
35,0,0, /* number */ 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", /* cs name */
"ucs2_general_ci", /* name */ "ucs2_general_ci", /* name */
"", /* comment */ "", /* 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; return MY_CS_ILUNI;
} }
CHARSET_INFO my_charset_ujis = CHARSET_INFO my_charset_ujis_japanese_ci =
{ {
12,0,0, /* number */ 12,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ 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 */; return 0; /* Illegal mb head */;
} }
CHARSET_INFO my_charset_utf8 = CHARSET_INFO my_charset_utf8_general_ci =
{ {
33,0,0, /* number */ 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", /* cs name */
"utf8_general_ci", /* name */ "utf8_general_ci", /* name */
"", /* comment */ "", /* 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 */ 34,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */ 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; i->cs.state|= MY_CS_PRIMARY;
else if (!strncmp("binary",attr,len)) else if (!strncmp("binary",attr,len))
i->cs.state|= MY_CS_BINSORT; i->cs.state|= MY_CS_BINSORT;
else if (!strncmp("compiled",attr,len))
i->cs.state|= MY_CS_COMPILED;
break; break;
case _CS_UPPERMAP: case _CS_UPPERMAP:
fill_uchar(i->to_upper,MY_CS_TO_UPPER_TABLE_SIZE,attr,len); fill_uchar(i->to_upper,MY_CS_TO_UPPER_TABLE_SIZE,attr,len);