summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/m_ctype.h2
-rw-r--r--mysys/charset.c10
-rw-r--r--sql/sql_yacc.yy28
-rw-r--r--strings/ctype-big5.c2
-rw-r--r--strings/ctype-bin.c2
-rw-r--r--strings/ctype-czech.c2
-rw-r--r--strings/ctype-euc_kr.c2
-rw-r--r--strings/ctype-extra.c94
-rw-r--r--strings/ctype-gb2312.c2
-rw-r--r--strings/ctype-gbk.c2
-rw-r--r--strings/ctype-latin1.c2
-rw-r--r--strings/ctype-latin1_de.c2
-rw-r--r--strings/ctype-sjis.c2
-rw-r--r--strings/ctype-tis620.c2
-rw-r--r--strings/ctype-ujis.c2
-rw-r--r--strings/ctype-utf8.c4
-rw-r--r--strings/ctype-win1250ch.c2
-rw-r--r--strings/ctype.c10
18 files changed, 116 insertions, 56 deletions
diff --git a/include/m_ctype.h b/include/m_ctype.h
index 4ed5c6eec6a..19c7d315f4a 100644
--- a/include/m_ctype.h
+++ b/include/m_ctype.h
@@ -77,6 +77,8 @@ typedef struct my_uni_idx_st
typedef struct charset_info_st
{
uint number;
+ uint primary_number;
+ uint binary_number;
uint state;
const char *csname;
const char *name;
diff --git a/mysys/charset.c b/mysys/charset.c
index cfe1dcefcaf..b1abd460c2e 100644
--- a/mysys/charset.c
+++ b/mysys/charset.c
@@ -257,7 +257,13 @@ static int add_collation(CHARSET_INFO *cs)
return MY_XML_ERROR;
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))
{
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;
}
}
+ else
+ {
+ all_charsets[cs->number]->state |= cs->state;
+ }
cs->number= 0;
cs->name= NULL;
cs->state= 0;
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index e5d94c30521..e093a822303 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -674,7 +674,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
handler_rkey_function handler_read_or_scan
single_multi table_wild_list table_wild_one opt_wild
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
END_OF_INPUT
@@ -927,10 +927,9 @@ create_database_options:
create_database_option:
COLLATE_SYM collation_name_or_default
{ Lex->create_info.table_charset=$2; }
- | opt_default CHAR_SYM SET charset_name_or_default
- { Lex->create_info.table_charset=$4; }
- | opt_default CHARSET charset_name_or_default
- { Lex->create_info.table_charset=$3; };
+ | opt_default charset charset_name_or_default
+ { Lex->create_info.table_charset=$3; }
+ ;
opt_table_options:
/* empty */ { $$= 0; }
@@ -989,16 +988,11 @@ create_table_option:
table_list->next=0;
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.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
{
Lex->create_info.table_charset= $3;
@@ -1301,6 +1295,10 @@ attribute:
}
;
+charset:
+ CHAR_SYM SET {}
+ | CHARSET {}
+ ;
charset_name:
ident_or_text
@@ -1352,7 +1350,7 @@ opt_binary:
YYABORT;
}
}
- | CHAR_SYM SET charset_name { Lex->charset=$3; } ;
+ | charset charset_name { Lex->charset=$2; } ;
opt_primary:
/* empty */
@@ -3543,7 +3541,7 @@ show_param:
thd->lex.sql_command= SQLCOM_SHOW_VARIABLES;
thd->lex.option_type= (enum_var_type) $1;
}
- | CHAR_SYM SET wild
+ | charset wild
{ Lex->sql_command= SQLCOM_SHOW_CHARSETS; }
| LOGS_SYM
{ Lex->sql_command= SQLCOM_SHOW_LOGS; }
@@ -4215,12 +4213,12 @@ option_value:
find_sys_var("tx_isolation"),
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->var_list.push_back(new set_var(lex->option_type,
find_sys_var("convert_character_set"),
- $4));
+ $3));
}
| NAMES_SYM charset_name_or_default opt_collate
{
diff --git a/strings/ctype-big5.c b/strings/ctype-big5.c
index 7827b8714ec..c1d6d9e63de 100644
--- a/strings/ctype-big5.c
+++ b/strings/ctype-big5.c
@@ -6233,7 +6233,7 @@ my_mb_wc_big5(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_big5 =
{
- 1, /* number */
+ 1,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */
"big5", /* cs name */
"big5", /* name */
diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c
index c219bd95fd4..e7c3a941109 100644
--- a/strings/ctype-bin.c
+++ b/strings/ctype-bin.c
@@ -295,7 +295,7 @@ static int my_strnxfrm_bin(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_bin =
{
- 63, /* number */
+ 63,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_PRIMARY,/* state */
"binary", /* cs name */
"binary", /* name */
diff --git a/strings/ctype-czech.c b/strings/ctype-czech.c
index f42ab66fed9..9bdf666cc21 100644
--- a/strings/ctype-czech.c
+++ b/strings/ctype-czech.c
@@ -607,7 +607,7 @@ int my_strnncollsp_czech(CHARSET_INFO * cs,
CHARSET_INFO my_charset_czech =
{
- 2, /* number */
+ 2,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */
"latin2", /* cs name */
"czech", /* name */
diff --git a/strings/ctype-euc_kr.c b/strings/ctype-euc_kr.c
index e49bf6a38fd..bd588c351c4 100644
--- a/strings/ctype-euc_kr.c
+++ b/strings/ctype-euc_kr.c
@@ -8641,7 +8641,7 @@ my_mb_wc_euc_kr(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_euc_kr =
{
- 19, /* number */
+ 19,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */
"euckr", /* cs name */
"euckr", /* name */
diff --git a/strings/ctype-extra.c b/strings/ctype-extra.c
index 3e3cd38c063..cd82ffdd9bb 100644
--- a/strings/ctype-extra.c
+++ b/strings/ctype-extra.c
@@ -1187,7 +1187,7 @@ static uchar sort_order_german1[] = {
};
#endif
-#ifdef HAVE_CHARSET_greek
+#ifdef HAVE_CHARSET_greek_bad
/* The greek character set. Generated automatically by
* the ./conf_to_src program
@@ -2807,7 +2807,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_latin1
{
- 8, /* number */
+ 8,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */
"latin1", /* cs name */
"latin1", /* name */
@@ -2858,7 +2858,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_cp1251
{
- 14, /* number */
+ 14,0,0, /* number */
MY_CS_COMPILED, /* state */
"cp1251", /* cs name */
"cp1251", /* name */
@@ -2908,7 +2908,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_cp1257
{
- 29, /* number */
+ 29,0,0, /* number */
MY_CS_COMPILED, /* state */
"cp1257", /* cs name */
"cp1257", /* name */
@@ -2958,7 +2958,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_croat
{
- 27, /* number */
+ 27,0,0, /* number */
MY_CS_COMPILED, /* state */
"latin2", /* cs name */
"croat", /* name */
@@ -2979,6 +2979,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3007,7 +3009,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_danish
{
- 15, /* number */
+ 15,0,0, /* number */
MY_CS_COMPILED, /* state */
"latin1", /* cs name */
"danish", /* name */
@@ -3028,6 +3030,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3055,7 +3059,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_dec8
{
- 3, /* number */
+ 3,0,0, /* number */
MY_CS_COMPILED, /* state */
"dec8", /* cs name */
"dec8", /* name */
@@ -3076,6 +3080,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3103,7 +3109,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_dos
{
- 4, /* number */
+ 4,0,0, /* number */
MY_CS_COMPILED, /* state */
"cp850", /* cs name */
"dos", /* name */
@@ -3124,6 +3130,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3151,7 +3159,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_estonia
{
- 20, /* number */
+ 20,0,0, /* number */
MY_CS_COMPILED, /* state */
"latin7", /* cs name */
"estonia", /* name */
@@ -3172,6 +3180,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3200,7 +3210,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_german1
{
- 5, /* number */
+ 5,0,0, /* number */
MY_CS_COMPILED, /* state */
"latin1", /* cs name */
"german1", /* name */
@@ -3221,6 +3231,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3246,9 +3258,9 @@ CHARSET_INFO compiled_charsets[] = {
},
#endif
-#ifdef HAVE_CHARSET_greek
+#ifdef HAVE_CHARSET_greek_bad
{
- 25, /* number */
+ 25,0,0, /* number */
MY_CS_COMPILED, /* state */
"greek", /* cs name */
"greek", /* name */
@@ -3269,6 +3281,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3296,7 +3310,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_hebrew
{
- 16, /* number */
+ 16,0,0, /* number */
MY_CS_COMPILED, /* state */
"hebrew", /* cs name */
"hebrew", /* name */
@@ -3317,6 +3331,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3344,7 +3360,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_hp8
{
- 6, /* number */
+ 6,0,0, /* number */
MY_CS_COMPILED, /* state */
"hp8", /* cs name */
"hp8", /* name */
@@ -3365,6 +3381,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3392,7 +3410,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_hungarian
{
- 21, /* number */
+ 21,0,0, /* number */
MY_CS_COMPILED, /* state */
"latin2", /* cs name */
"hungarian", /* name */
@@ -3413,6 +3431,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3440,7 +3460,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_koi8_ru
{
- 7, /* number */
+ 7,0,0, /* number */
MY_CS_COMPILED, /* state */
"koi8r", /* cs name */
"koi8r", /* name */
@@ -3461,6 +3481,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3488,7 +3510,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_koi8_ukr
{
- 22, /* number */
+ 22,0,0, /* number */
MY_CS_COMPILED, /* state */
"koi8u", /* cs name */
"koi8u", /* name */
@@ -3509,6 +3531,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3537,7 +3561,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_latin2
{
- 9, /* number */
+ 9,0,0, /* number */
MY_CS_COMPILED, /* state */
"latin2", /* cs name */
"latin2", /* name */
@@ -3558,6 +3582,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3585,7 +3611,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_latin5
{
- 30, /* number */
+ 30,0,0, /* number */
MY_CS_COMPILED, /* state */
"latin5", /* cs name */
"latin5", /* name */
@@ -3606,6 +3632,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3634,7 +3662,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_swe7
{
- 10, /* number */
+ 10,0,0, /* number */
MY_CS_COMPILED, /* state */
"swe7", /* cs name */
"swe7", /* name */
@@ -3655,6 +3683,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3683,7 +3713,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_usa7
{
- 11, /* number */
+ 11,0,0, /* number */
MY_CS_COMPILED, /* state */
"ascii", /* cs name */
"ascii", /* name */
@@ -3704,6 +3734,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3731,7 +3763,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_win1250
{
- 26, /* number */
+ 26,0,0, /* number */
MY_CS_COMPILED, /* state */
"cp1250", /* cs name */
"cp1250", /* name */
@@ -3752,6 +3784,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3779,7 +3813,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_win1251ukr
{
- 23, /* number */
+ 23,0,0, /* number */
MY_CS_COMPILED, /* state */
"cp1251", /* cs name */
"win1251ukr", /* name */
@@ -3800,14 +3834,16 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
my_casedn_str_8bit,
my_caseup_8bit,
my_casedn_8bit,
- my_strcasecmp_8bit,
my_tosort_8bit,
+ my_strcasecmp_8bit,
my_strncasecmp_8bit,
my_hash_caseup_simple,
my_hash_sort_simple,
@@ -3827,7 +3863,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_armscii8
{
- 32, /* number */
+ 32,0,0, /* number */
MY_CS_COMPILED, /* state */
"armscii8", /* cs name */
"armscii8", /* name */
@@ -3848,6 +3884,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3875,7 +3913,7 @@ CHARSET_INFO compiled_charsets[] = {
#ifdef HAVE_CHARSET_win1251
{
- 17, /* number */
+ 17,0,0, /* number */
MY_CS_COMPILED, /* state */
"cp1251", /* cs name */
"win1251", /* name */
@@ -3896,6 +3934,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
+ my_numchars_8bit,
+ my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit,
@@ -3922,7 +3962,7 @@ CHARSET_INFO compiled_charsets[] = {
#endif
{
- 0, /* end-of-list marker */
+ 0,0,0, /* end-of-list marker */
0, /* state */
NullS, /* cs name */
NullS, /* name */
diff --git a/strings/ctype-gb2312.c b/strings/ctype-gb2312.c
index 9cc19dc46ef..9eca4383176 100644
--- a/strings/ctype-gb2312.c
+++ b/strings/ctype-gb2312.c
@@ -5691,7 +5691,7 @@ my_mb_wc_gb2312(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_gb2312 =
{
- 24, /* number */
+ 24,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */
"gb2312", /* cs name */
"gb2312", /* name */
diff --git a/strings/ctype-gbk.c b/strings/ctype-gbk.c
index 42a3686475a..c1a65c48aef 100644
--- a/strings/ctype-gbk.c
+++ b/strings/ctype-gbk.c
@@ -9888,7 +9888,7 @@ my_mb_wc_gbk(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_gbk =
{
- 28, /* number */
+ 28,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */
"gbk", /* cs name */
"gbk", /* name */
diff --git a/strings/ctype-latin1.c b/strings/ctype-latin1.c
index 518418a9050..36260356816 100644
--- a/strings/ctype-latin1.c
+++ b/strings/ctype-latin1.c
@@ -177,7 +177,7 @@ int my_wc_mb_latin1(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_latin1 =
{
- 8, /* number */
+ 8,0,0, /* number */
MY_CS_COMPILED, /* state */
"latin1", /* cs name */
"latin1", /* name */
diff --git a/strings/ctype-latin1_de.c b/strings/ctype-latin1_de.c
index 93c8ba54bc0..66f47bb7326 100644
--- a/strings/ctype-latin1_de.c
+++ b/strings/ctype-latin1_de.c
@@ -348,7 +348,7 @@ static int my_strnxfrm_latin1_de(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_latin1_de =
{
- 31, /* number */
+ 31,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */
"latin1", /* cs name */
"latin1_de", /* name */
diff --git a/strings/ctype-sjis.c b/strings/ctype-sjis.c
index a266fa71199..af87c550727 100644
--- a/strings/ctype-sjis.c
+++ b/strings/ctype-sjis.c
@@ -4475,7 +4475,7 @@ my_mb_wc_sjis(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_sjis =
{
- 13, /* number */
+ 13,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */
"sjis", /* cs name */
"sjis", /* name */
diff --git a/strings/ctype-tis620.c b/strings/ctype-tis620.c
index bf3d332880d..fd3a9318c25 100644
--- a/strings/ctype-tis620.c
+++ b/strings/ctype-tis620.c
@@ -698,7 +698,7 @@ void ThNormalize(uchar* ptr, uint field_length, const uchar* from, uint length)
CHARSET_INFO my_charset_tis620 =
{
- 18, /* number */
+ 18,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */
"tis620", /* cs name */
"tis620", /* name */
diff --git a/strings/ctype-ujis.c b/strings/ctype-ujis.c
index d39be825ef0..6c238d50dcc 100644
--- a/strings/ctype-ujis.c
+++ b/strings/ctype-ujis.c
@@ -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 =
{
- 12, /* number */
+ 12,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */
"ujis", /* cs name */
"ujis", /* name */
diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c
index e63405001f9..ecd163ac4c5 100644
--- a/strings/ctype-utf8.c
+++ b/strings/ctype-utf8.c
@@ -1977,7 +1977,7 @@ static int my_mbcharlen_utf8(CHARSET_INFO *cs __attribute__((unused)) , uint c)
CHARSET_INFO my_charset_utf8 =
{
- 33, /* number */
+ 33,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */
"utf8", /* cs name */
"utf8", /* name */
@@ -3084,7 +3084,7 @@ uint my_charpos_ucs2(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_ucs2 =
{
- 35, /* number */
+ 35,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */
"ucs2", /* cs name */
"ucs2", /* name */
diff --git a/strings/ctype-win1250ch.c b/strings/ctype-win1250ch.c
index 467d1ba4c91..978a5e8a55b 100644
--- a/strings/ctype-win1250ch.c
+++ b/strings/ctype-win1250ch.c
@@ -642,7 +642,7 @@ static my_bool my_like_range_win1250ch(CHARSET_INFO *cs __attribute__((unused)),
CHARSET_INFO my_charset_win1250ch =
{
- 34, /* number */
+ 34,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */
"cp1250", /* cs name */
"cp1250_czech", /* name */
diff --git a/strings/ctype.c b/strings/ctype.c
index 04e4e75890b..45bc2589f76 100644
--- a/strings/ctype.c
+++ b/strings/ctype.c
@@ -52,6 +52,8 @@ struct my_cs_file_section_st
#define _CS_UNIMAP 12
#define _CS_COLLMAP 13
#define _CS_CTYPEMAP 14
+#define _CS_PRIMARY_ID 15
+#define _CS_BINARY_ID 16
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.description"},
{_CS_CHARSET, "charsets.charset"},
+ {_CS_PRIMARY_ID, "charsets.charset.primary-id"},
+ {_CS_BINARY_ID, "charsets.charset.binary-id"},
{_CS_CSNAME, "charsets.charset.name"},
{_CS_FAMILY, "charsets.charset.family"},
{_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:
i->cs.number= strtol(attr,(char**)NULL,10);
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:
i->cs.name=mstr(i->name,attr,len,MY_CS_NAME_SIZE-1);
break;