New fields in CHARSET_INFO structure to optimize searching for

binary and primary collations in the future
This commit is contained in:
bar@bar.mysql.r18.ru 2003-03-05 16:43:10 +04:00
parent 4f930a7c2a
commit f5d6b4952f
18 changed files with 116 additions and 56 deletions

View File

@ -77,6 +77,8 @@ typedef struct my_uni_idx_st
typedef struct charset_info_st typedef struct charset_info_st
{ {
uint number; uint number;
uint primary_number;
uint binary_number;
uint state; uint state;
const char *csname; const char *csname;
const char *name; const char *name;

View File

@ -258,6 +258,12 @@ static int add_collation(CHARSET_INFO *cs)
bzero((void*)all_charsets[cs->number],sizeof(CHARSET_INFO)); bzero((void*)all_charsets[cs->number],sizeof(CHARSET_INFO));
} }
if (cs->primary_number == cs->number)
cs->state |= MY_CS_PRIMARY;
if (cs->primary_number == cs->number)
cs->state |= MY_CS_BINSORT;
if (!(all_charsets[cs->number]->state & MY_CS_COMPILED)) if (!(all_charsets[cs->number]->state & MY_CS_COMPILED))
{ {
simple_cs_copy_data(all_charsets[cs->number],cs); simple_cs_copy_data(all_charsets[cs->number],cs);
@ -267,6 +273,10 @@ static int add_collation(CHARSET_INFO *cs)
all_charsets[cs->number]->state |= MY_CS_LOADED; all_charsets[cs->number]->state |= MY_CS_LOADED;
} }
} }
else
{
all_charsets[cs->number]->state |= cs->state;
}
cs->number= 0; cs->number= 0;
cs->name= NULL; cs->name= NULL;
cs->state= 0; cs->state= 0;

View File

@ -674,7 +674,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
handler_rkey_function handler_read_or_scan handler_rkey_function handler_read_or_scan
single_multi table_wild_list table_wild_one opt_wild single_multi table_wild_list table_wild_one opt_wild
union_clause union_list union_option union_clause union_list union_option
precision subselect_start opt_and precision subselect_start opt_and charset
subselect_end select_var_list select_var_list_init help opt_len subselect_end select_var_list select_var_list_init help opt_len
END_OF_INPUT END_OF_INPUT
@ -927,10 +927,9 @@ create_database_options:
create_database_option: create_database_option:
COLLATE_SYM collation_name_or_default COLLATE_SYM collation_name_or_default
{ Lex->create_info.table_charset=$2; } { Lex->create_info.table_charset=$2; }
| opt_default CHAR_SYM SET charset_name_or_default | opt_default charset charset_name_or_default
{ Lex->create_info.table_charset=$4; } { Lex->create_info.table_charset=$3; }
| opt_default CHARSET charset_name_or_default ;
{ Lex->create_info.table_charset=$3; };
opt_table_options: opt_table_options:
/* empty */ { $$= 0; } /* empty */ { $$= 0; }
@ -989,16 +988,11 @@ create_table_option:
table_list->next=0; table_list->next=0;
lex->create_info.used_fields|= HA_CREATE_USED_UNION; lex->create_info.used_fields|= HA_CREATE_USED_UNION;
} }
| opt_default CHARSET opt_equal charset_name_or_default | opt_default charset opt_equal charset_name_or_default
{ {
Lex->create_info.table_charset= $4; Lex->create_info.table_charset= $4;
Lex->create_info.used_fields|= HA_CREATE_USED_CHARSET; Lex->create_info.used_fields|= HA_CREATE_USED_CHARSET;
} }
| opt_default CHAR_SYM SET opt_equal charset_name_or_default
{
Lex->create_info.table_charset= $5;
Lex->create_info.used_fields|= HA_CREATE_USED_CHARSET;
}
| COLLATE_SYM opt_equal collation_name_or_default | COLLATE_SYM opt_equal collation_name_or_default
{ {
Lex->create_info.table_charset= $3; Lex->create_info.table_charset= $3;
@ -1301,6 +1295,10 @@ attribute:
} }
; ;
charset:
CHAR_SYM SET {}
| CHARSET {}
;
charset_name: charset_name:
ident_or_text ident_or_text
@ -1352,7 +1350,7 @@ opt_binary:
YYABORT; YYABORT;
} }
} }
| CHAR_SYM SET charset_name { Lex->charset=$3; } ; | charset charset_name { Lex->charset=$2; } ;
opt_primary: opt_primary:
/* empty */ /* empty */
@ -3543,7 +3541,7 @@ show_param:
thd->lex.sql_command= SQLCOM_SHOW_VARIABLES; thd->lex.sql_command= SQLCOM_SHOW_VARIABLES;
thd->lex.option_type= (enum_var_type) $1; thd->lex.option_type= (enum_var_type) $1;
} }
| CHAR_SYM SET wild | charset wild
{ Lex->sql_command= SQLCOM_SHOW_CHARSETS; } { Lex->sql_command= SQLCOM_SHOW_CHARSETS; }
| LOGS_SYM | LOGS_SYM
{ Lex->sql_command= SQLCOM_SHOW_LOGS; } { Lex->sql_command= SQLCOM_SHOW_LOGS; }
@ -4215,12 +4213,12 @@ option_value:
find_sys_var("tx_isolation"), find_sys_var("tx_isolation"),
new Item_int((int32) $4))); new Item_int((int32) $4)));
} }
| CHAR_SYM SET opt_equal set_expr_or_default | charset opt_equal set_expr_or_default
{ {
LEX *lex=Lex; LEX *lex=Lex;
lex->var_list.push_back(new set_var(lex->option_type, lex->var_list.push_back(new set_var(lex->option_type,
find_sys_var("convert_character_set"), find_sys_var("convert_character_set"),
$4)); $3));
} }
| NAMES_SYM charset_name_or_default opt_collate | NAMES_SYM charset_name_or_default opt_collate
{ {

View File

@ -6233,7 +6233,7 @@ my_mb_wc_big5(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_big5 = CHARSET_INFO my_charset_big5 =
{ {
1, /* 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 */
"big5", /* cs name */ "big5", /* cs name */
"big5", /* name */ "big5", /* name */

View File

@ -295,7 +295,7 @@ static int my_strnxfrm_bin(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_bin = CHARSET_INFO my_charset_bin =
{ {
63, /* number */ 63,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_PRIMARY,/* state */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_PRIMARY,/* state */
"binary", /* cs name */ "binary", /* cs name */
"binary", /* name */ "binary", /* name */

View File

@ -607,7 +607,7 @@ int my_strnncollsp_czech(CHARSET_INFO * cs,
CHARSET_INFO my_charset_czech = CHARSET_INFO my_charset_czech =
{ {
2, /* number */ 2,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */ MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */
"latin2", /* cs name */ "latin2", /* cs name */
"czech", /* name */ "czech", /* name */

View File

@ -8641,7 +8641,7 @@ my_mb_wc_euc_kr(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_euc_kr = CHARSET_INFO my_charset_euc_kr =
{ {
19, /* number */ 19,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ MY_CS_COMPILED|MY_CS_PRIMARY, /* state */
"euckr", /* cs name */ "euckr", /* cs name */
"euckr", /* name */ "euckr", /* name */

View File

@ -1187,7 +1187,7 @@ static uchar sort_order_german1[] = {
}; };
#endif #endif
#ifdef HAVE_CHARSET_greek #ifdef HAVE_CHARSET_greek_bad
/* The greek character set. Generated automatically by /* The greek character set. Generated automatically by
* the ./conf_to_src program * the ./conf_to_src program
@ -2807,7 +2807,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_latin1 #ifdef HAVE_CHARSET_latin1
{ {
8, /* number */ 8,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ MY_CS_COMPILED|MY_CS_PRIMARY, /* state */
"latin1", /* cs name */ "latin1", /* cs name */
"latin1", /* name */ "latin1", /* name */
@ -2858,7 +2858,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_cp1251 #ifdef HAVE_CHARSET_cp1251
{ {
14, /* number */ 14,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"cp1251", /* cs name */ "cp1251", /* cs name */
"cp1251", /* name */ "cp1251", /* name */
@ -2908,7 +2908,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_cp1257 #ifdef HAVE_CHARSET_cp1257
{ {
29, /* number */ 29,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"cp1257", /* cs name */ "cp1257", /* cs name */
"cp1257", /* name */ "cp1257", /* name */
@ -2958,7 +2958,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_croat #ifdef HAVE_CHARSET_croat
{ {
27, /* number */ 27,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"latin2", /* cs name */ "latin2", /* cs name */
"croat", /* name */ "croat", /* name */
@ -2979,6 +2979,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3007,7 +3009,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_danish #ifdef HAVE_CHARSET_danish
{ {
15, /* number */ 15,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"latin1", /* cs name */ "latin1", /* cs name */
"danish", /* name */ "danish", /* name */
@ -3028,6 +3030,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3055,7 +3059,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_dec8 #ifdef HAVE_CHARSET_dec8
{ {
3, /* number */ 3,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"dec8", /* cs name */ "dec8", /* cs name */
"dec8", /* name */ "dec8", /* name */
@ -3076,6 +3080,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3103,7 +3109,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_dos #ifdef HAVE_CHARSET_dos
{ {
4, /* number */ 4,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"cp850", /* cs name */ "cp850", /* cs name */
"dos", /* name */ "dos", /* name */
@ -3124,6 +3130,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3151,7 +3159,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_estonia #ifdef HAVE_CHARSET_estonia
{ {
20, /* number */ 20,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"latin7", /* cs name */ "latin7", /* cs name */
"estonia", /* name */ "estonia", /* name */
@ -3172,6 +3180,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3200,7 +3210,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_german1 #ifdef HAVE_CHARSET_german1
{ {
5, /* number */ 5,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"latin1", /* cs name */ "latin1", /* cs name */
"german1", /* name */ "german1", /* name */
@ -3221,6 +3231,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3246,9 +3258,9 @@ CHARSET_INFO compiled_charsets[] = {
}, },
#endif #endif
#ifdef HAVE_CHARSET_greek #ifdef HAVE_CHARSET_greek_bad
{ {
25, /* number */ 25,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"greek", /* cs name */ "greek", /* cs name */
"greek", /* name */ "greek", /* name */
@ -3269,6 +3281,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3296,7 +3310,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_hebrew #ifdef HAVE_CHARSET_hebrew
{ {
16, /* number */ 16,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"hebrew", /* cs name */ "hebrew", /* cs name */
"hebrew", /* name */ "hebrew", /* name */
@ -3317,6 +3331,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3344,7 +3360,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_hp8 #ifdef HAVE_CHARSET_hp8
{ {
6, /* number */ 6,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"hp8", /* cs name */ "hp8", /* cs name */
"hp8", /* name */ "hp8", /* name */
@ -3365,6 +3381,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3392,7 +3410,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_hungarian #ifdef HAVE_CHARSET_hungarian
{ {
21, /* number */ 21,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"latin2", /* cs name */ "latin2", /* cs name */
"hungarian", /* name */ "hungarian", /* name */
@ -3413,6 +3431,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3440,7 +3460,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_koi8_ru #ifdef HAVE_CHARSET_koi8_ru
{ {
7, /* number */ 7,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"koi8r", /* cs name */ "koi8r", /* cs name */
"koi8r", /* name */ "koi8r", /* name */
@ -3461,6 +3481,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3488,7 +3510,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_koi8_ukr #ifdef HAVE_CHARSET_koi8_ukr
{ {
22, /* number */ 22,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"koi8u", /* cs name */ "koi8u", /* cs name */
"koi8u", /* name */ "koi8u", /* name */
@ -3509,6 +3531,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3537,7 +3561,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_latin2 #ifdef HAVE_CHARSET_latin2
{ {
9, /* number */ 9,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"latin2", /* cs name */ "latin2", /* cs name */
"latin2", /* name */ "latin2", /* name */
@ -3558,6 +3582,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3585,7 +3611,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_latin5 #ifdef HAVE_CHARSET_latin5
{ {
30, /* number */ 30,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"latin5", /* cs name */ "latin5", /* cs name */
"latin5", /* name */ "latin5", /* name */
@ -3606,6 +3632,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3634,7 +3662,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_swe7 #ifdef HAVE_CHARSET_swe7
{ {
10, /* number */ 10,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"swe7", /* cs name */ "swe7", /* cs name */
"swe7", /* name */ "swe7", /* name */
@ -3655,6 +3683,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3683,7 +3713,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_usa7 #ifdef HAVE_CHARSET_usa7
{ {
11, /* number */ 11,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"ascii", /* cs name */ "ascii", /* cs name */
"ascii", /* name */ "ascii", /* name */
@ -3704,6 +3734,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3731,7 +3763,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_win1250 #ifdef HAVE_CHARSET_win1250
{ {
26, /* number */ 26,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"cp1250", /* cs name */ "cp1250", /* cs name */
"cp1250", /* name */ "cp1250", /* name */
@ -3752,6 +3784,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3779,7 +3813,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_win1251ukr #ifdef HAVE_CHARSET_win1251ukr
{ {
23, /* number */ 23,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"cp1251", /* cs name */ "cp1251", /* cs name */
"win1251ukr", /* name */ "win1251ukr", /* name */
@ -3800,14 +3834,16 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
my_casedn_str_8bit, my_casedn_str_8bit,
my_caseup_8bit, my_caseup_8bit,
my_casedn_8bit, my_casedn_8bit,
my_strcasecmp_8bit,
my_tosort_8bit, my_tosort_8bit,
my_strcasecmp_8bit,
my_strncasecmp_8bit, my_strncasecmp_8bit,
my_hash_caseup_simple, my_hash_caseup_simple,
my_hash_sort_simple, my_hash_sort_simple,
@ -3827,7 +3863,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_armscii8 #ifdef HAVE_CHARSET_armscii8
{ {
32, /* number */ 32,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"armscii8", /* cs name */ "armscii8", /* cs name */
"armscii8", /* name */ "armscii8", /* name */
@ -3848,6 +3884,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3875,7 +3913,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_win1251 #ifdef HAVE_CHARSET_win1251
{ {
17, /* number */ 17,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"cp1251", /* cs name */ "cp1251", /* cs name */
"win1251", /* name */ "win1251", /* name */
@ -3896,6 +3934,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3922,7 +3962,7 @@ CHARSET_INFO compiled_charsets[] = {
#endif #endif
{ {
0, /* end-of-list marker */ 0,0,0, /* end-of-list marker */
0, /* state */ 0, /* state */
NullS, /* cs name */ NullS, /* cs name */
NullS, /* name */ NullS, /* name */

View File

@ -5691,7 +5691,7 @@ my_mb_wc_gb2312(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_gb2312 = CHARSET_INFO my_charset_gb2312 =
{ {
24, /* number */ 24,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ MY_CS_COMPILED|MY_CS_PRIMARY, /* state */
"gb2312", /* cs name */ "gb2312", /* cs name */
"gb2312", /* name */ "gb2312", /* name */

View File

@ -9888,7 +9888,7 @@ my_mb_wc_gbk(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_gbk = CHARSET_INFO my_charset_gbk =
{ {
28, /* 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 */
"gbk", /* cs name */ "gbk", /* cs name */
"gbk", /* name */ "gbk", /* name */

View File

@ -177,7 +177,7 @@ int my_wc_mb_latin1(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_latin1 = CHARSET_INFO my_charset_latin1 =
{ {
8, /* number */ 8,0,0, /* number */
MY_CS_COMPILED, /* state */ MY_CS_COMPILED, /* state */
"latin1", /* cs name */ "latin1", /* cs name */
"latin1", /* name */ "latin1", /* name */

View File

@ -348,7 +348,7 @@ static int my_strnxfrm_latin1_de(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_latin1_de = CHARSET_INFO my_charset_latin1_de =
{ {
31, /* number */ 31,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */ MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */
"latin1", /* cs name */ "latin1", /* cs name */
"latin1_de", /* name */ "latin1_de", /* name */

View File

@ -4475,7 +4475,7 @@ my_mb_wc_sjis(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_sjis = CHARSET_INFO my_charset_sjis =
{ {
13, /* 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 */
"sjis", /* cs name */ "sjis", /* cs name */
"sjis", /* name */ "sjis", /* name */

View File

@ -698,7 +698,7 @@ void ThNormalize(uchar* ptr, uint field_length, const uchar* from, uint length)
CHARSET_INFO my_charset_tis620 = CHARSET_INFO my_charset_tis620 =
{ {
18, /* 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 */
"tis620", /* cs name */ "tis620", /* cs name */
"tis620", /* name */ "tis620", /* name */

View File

@ -8432,7 +8432,7 @@ my_wc_mb_euc_jp(CHARSET_INFO *c,my_wc_t wc, unsigned char *s, unsigned char *e)
CHARSET_INFO my_charset_ujis = CHARSET_INFO my_charset_ujis =
{ {
12, /* number */ 12,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ MY_CS_COMPILED|MY_CS_PRIMARY, /* state */
"ujis", /* cs name */ "ujis", /* cs name */
"ujis", /* name */ "ujis", /* name */

View File

@ -1977,7 +1977,7 @@ static int my_mbcharlen_utf8(CHARSET_INFO *cs __attribute__((unused)) , uint c)
CHARSET_INFO my_charset_utf8 = CHARSET_INFO my_charset_utf8 =
{ {
33, /* number */ 33,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */
"utf8", /* cs name */ "utf8", /* cs name */
"utf8", /* name */ "utf8", /* name */
@ -3084,7 +3084,7 @@ uint my_charpos_ucs2(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_ucs2 = CHARSET_INFO my_charset_ucs2 =
{ {
35, /* number */ 35,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */
"ucs2", /* cs name */ "ucs2", /* cs name */
"ucs2", /* name */ "ucs2", /* name */

View File

@ -642,7 +642,7 @@ static my_bool my_like_range_win1250ch(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_win1250ch = CHARSET_INFO my_charset_win1250ch =
{ {
34, /* number */ 34,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */ MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */
"cp1250", /* cs name */ "cp1250", /* cs name */
"cp1250_czech", /* name */ "cp1250_czech", /* name */

View File

@ -52,6 +52,8 @@ struct my_cs_file_section_st
#define _CS_UNIMAP 12 #define _CS_UNIMAP 12
#define _CS_COLLMAP 13 #define _CS_COLLMAP 13
#define _CS_CTYPEMAP 14 #define _CS_CTYPEMAP 14
#define _CS_PRIMARY_ID 15
#define _CS_BINARY_ID 16
static struct my_cs_file_section_st sec[] = static struct my_cs_file_section_st sec[] =
{ {
@ -62,6 +64,8 @@ static struct my_cs_file_section_st sec[] =
{_CS_MISC, "charsets.max-id"}, {_CS_MISC, "charsets.max-id"},
{_CS_MISC, "charsets.description"}, {_CS_MISC, "charsets.description"},
{_CS_CHARSET, "charsets.charset"}, {_CS_CHARSET, "charsets.charset"},
{_CS_PRIMARY_ID, "charsets.charset.primary-id"},
{_CS_BINARY_ID, "charsets.charset.binary-id"},
{_CS_CSNAME, "charsets.charset.name"}, {_CS_CSNAME, "charsets.charset.name"},
{_CS_FAMILY, "charsets.charset.family"}, {_CS_FAMILY, "charsets.charset.family"},
{_CS_MISC, "charsets.charset.alias"}, {_CS_MISC, "charsets.charset.alias"},
@ -192,6 +196,12 @@ static int cs_value(MY_XML_PARSER *st,const char *attr, uint len)
case _CS_ID: case _CS_ID:
i->cs.number= strtol(attr,(char**)NULL,10); i->cs.number= strtol(attr,(char**)NULL,10);
break; break;
case _CS_BINARY_ID:
i->cs.binary_number= strtol(attr,(char**)NULL,10);
break;
case _CS_PRIMARY_ID:
i->cs.primary_number= strtol(attr,(char**)NULL,10);
break;
case _CS_COLNAME: case _CS_COLNAME:
i->cs.name=mstr(i->name,attr,len,MY_CS_NAME_SIZE-1); i->cs.name=mstr(i->name,attr,len,MY_CS_NAME_SIZE-1);
break; break;