mirror of
https://github.com/MariaDB/server.git
synced 2026-04-26 18:25:30 +02:00
New functions in CHARSET_INFO structure
This commit is contained in:
parent
2bce5e5709
commit
953e27208b
18 changed files with 104 additions and 2 deletions
|
|
@ -112,6 +112,8 @@ typedef struct charset_info_st
|
||||||
int (*ismbchar)(struct charset_info_st *, const char *, const char *);
|
int (*ismbchar)(struct charset_info_st *, const char *, const char *);
|
||||||
my_bool (*ismbhead)(struct charset_info_st *, uint);
|
my_bool (*ismbhead)(struct charset_info_st *, uint);
|
||||||
int (*mbcharlen)(struct charset_info_st *, uint);
|
int (*mbcharlen)(struct charset_info_st *, uint);
|
||||||
|
uint (*numchars)(struct charset_info_st *, const char *b, const char *e);
|
||||||
|
uint (*charpos)(struct charset_info_st *, const char *b, const char *e, uint pos);
|
||||||
|
|
||||||
/* Unicode convertion */
|
/* Unicode convertion */
|
||||||
int (*mb_wc)(struct charset_info_st *cs,my_wc_t *wc,
|
int (*mb_wc)(struct charset_info_st *cs,my_wc_t *wc,
|
||||||
|
|
@ -252,6 +254,9 @@ int my_wildcmp_8bit(CHARSET_INFO *,
|
||||||
const char *wildstr,const char *wildend,
|
const char *wildstr,const char *wildend,
|
||||||
int escape, int w_one, int w_many);
|
int escape, int w_one, int w_many);
|
||||||
|
|
||||||
|
uint my_numchars_8bit(CHARSET_INFO *, const char *b, const char *e);
|
||||||
|
uint my_charpos_8bit(CHARSET_INFO *, const char *b, const char *e, uint pos);
|
||||||
|
|
||||||
|
|
||||||
#ifdef USE_MB
|
#ifdef USE_MB
|
||||||
/* Functions for multibyte charsets */
|
/* Functions for multibyte charsets */
|
||||||
|
|
@ -266,6 +271,9 @@ int my_wildcmp_mb(CHARSET_INFO *,
|
||||||
const char *str,const char *str_end,
|
const char *str,const char *str_end,
|
||||||
const char *wildstr,const char *wildend,
|
const char *wildstr,const char *wildend,
|
||||||
int escape, int w_one, int w_many);
|
int escape, int w_one, int w_many);
|
||||||
|
uint my_numchars_mb(CHARSET_INFO *, const char *b, const char *e);
|
||||||
|
uint my_charpos_mb(CHARSET_INFO *, const char *b, const char *e, uint pos);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define _U 01 /* Upper case */
|
#define _U 01 /* Upper case */
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,8 @@ static void simple_cs_init_functions(CHARSET_INFO *cs)
|
||||||
cs->strntod = my_strntod_8bit;
|
cs->strntod = my_strntod_8bit;
|
||||||
cs->scan = my_scan_8bit;
|
cs->scan = my_scan_8bit;
|
||||||
cs->mbmaxlen = 1;
|
cs->mbmaxlen = 1;
|
||||||
|
cs->numchars = my_numchars_8bit;
|
||||||
|
cs->charpos = my_charpos_8bit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6254,6 +6254,8 @@ CHARSET_INFO my_charset_big5 =
|
||||||
ismbchar_big5,
|
ismbchar_big5,
|
||||||
ismbhead_big5,
|
ismbhead_big5,
|
||||||
mbcharlen_big5,
|
mbcharlen_big5,
|
||||||
|
my_numchars_mb,
|
||||||
|
my_charpos_mb,
|
||||||
my_mb_wc_big5, /* mb_wc */
|
my_mb_wc_big5, /* mb_wc */
|
||||||
my_wc_mb_big5, /* wc_mb */
|
my_wc_mb_big5, /* wc_mb */
|
||||||
my_caseup_str_mb,
|
my_caseup_str_mb,
|
||||||
|
|
|
||||||
|
|
@ -292,6 +292,8 @@ CHARSET_INFO my_charset_bin =
|
||||||
NULL, /* ismbchar */
|
NULL, /* ismbchar */
|
||||||
NULL, /* ismbhead */
|
NULL, /* ismbhead */
|
||||||
NULL, /* mbcharlen */
|
NULL, /* mbcharlen */
|
||||||
|
my_numchars_8bit,
|
||||||
|
my_charpos_8bit,
|
||||||
my_mb_wc_bin, /* mb_wc */
|
my_mb_wc_bin, /* mb_wc */
|
||||||
my_wc_mb_bin, /* wc_mb */
|
my_wc_mb_bin, /* wc_mb */
|
||||||
my_caseup_str_bin, /* caseup_str */
|
my_caseup_str_bin, /* caseup_str */
|
||||||
|
|
|
||||||
|
|
@ -628,6 +628,8 @@ CHARSET_INFO my_charset_czech =
|
||||||
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,
|
||||||
|
|
|
||||||
|
|
@ -8662,6 +8662,8 @@ CHARSET_INFO my_charset_euc_kr =
|
||||||
ismbchar_euc_kr,
|
ismbchar_euc_kr,
|
||||||
ismbhead_euc_kr,
|
ismbhead_euc_kr,
|
||||||
mbcharlen_euc_kr,
|
mbcharlen_euc_kr,
|
||||||
|
my_numchars_mb,
|
||||||
|
my_charpos_mb,
|
||||||
my_mb_wc_euc_kr, /* mb_wc */
|
my_mb_wc_euc_kr, /* mb_wc */
|
||||||
my_wc_mb_euc_kr, /* wc_mb */
|
my_wc_mb_euc_kr, /* wc_mb */
|
||||||
my_caseup_str_mb,
|
my_caseup_str_mb,
|
||||||
|
|
|
||||||
|
|
@ -2828,6 +2828,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,
|
||||||
|
|
@ -2877,6 +2879,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,
|
||||||
|
|
@ -2925,6 +2929,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,
|
||||||
|
|
@ -3937,7 +3943,8 @@ CHARSET_INFO compiled_charsets[] = {
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL, /* mb_wc */
|
NULL, /* mb_wc */
|
||||||
NULL, /* wc_mb */
|
NULL, /* wc_mb */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5712,6 +5712,8 @@ CHARSET_INFO my_charset_gb2312 =
|
||||||
ismbchar_gb2312,
|
ismbchar_gb2312,
|
||||||
ismbhead_gb2312,
|
ismbhead_gb2312,
|
||||||
mbcharlen_gb2312,
|
mbcharlen_gb2312,
|
||||||
|
my_numchars_mb,
|
||||||
|
my_charpos_mb,
|
||||||
my_mb_wc_gb2312, /* mb_wc */
|
my_mb_wc_gb2312, /* mb_wc */
|
||||||
my_wc_mb_gb2312, /* wc_mb */
|
my_wc_mb_gb2312, /* wc_mb */
|
||||||
my_caseup_str_mb,
|
my_caseup_str_mb,
|
||||||
|
|
|
||||||
|
|
@ -9909,6 +9909,8 @@ CHARSET_INFO my_charset_gbk =
|
||||||
ismbchar_gbk,
|
ismbchar_gbk,
|
||||||
ismbhead_gbk,
|
ismbhead_gbk,
|
||||||
mbcharlen_gbk,
|
mbcharlen_gbk,
|
||||||
|
my_numchars_mb,
|
||||||
|
my_charpos_mb,
|
||||||
my_mb_wc_gbk, /* mb_wc */
|
my_mb_wc_gbk, /* mb_wc */
|
||||||
my_wc_mb_gbk, /* wc_mb */
|
my_wc_mb_gbk, /* wc_mb */
|
||||||
my_caseup_str_mb,
|
my_caseup_str_mb,
|
||||||
|
|
|
||||||
|
|
@ -198,6 +198,8 @@ CHARSET_INFO my_charset_latin1 =
|
||||||
NULL, /* ismbchar */
|
NULL, /* ismbchar */
|
||||||
NULL, /* ismbhead */
|
NULL, /* ismbhead */
|
||||||
NULL, /* mbcharlen */
|
NULL, /* mbcharlen */
|
||||||
|
my_numchars_8bit,
|
||||||
|
my_charpos_8bit,
|
||||||
my_mb_wc_latin1, /* mb_wc */
|
my_mb_wc_latin1, /* mb_wc */
|
||||||
my_wc_mb_latin1, /* wc_mb */
|
my_wc_mb_latin1, /* wc_mb */
|
||||||
my_caseup_str_8bit,
|
my_caseup_str_8bit,
|
||||||
|
|
|
||||||
|
|
@ -369,6 +369,8 @@ CHARSET_INFO my_charset_latin1_de =
|
||||||
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,
|
||||||
|
|
|
||||||
|
|
@ -276,5 +276,33 @@ int my_wildcmp_mb(CHARSET_INFO *cs,
|
||||||
return (str != str_end ? 1 : 0);
|
return (str != str_end ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint my_numchars_mb(CHARSET_INFO *cs __attribute__((unused)),
|
||||||
|
const char *b, const char *e)
|
||||||
|
{
|
||||||
|
register uint32 n=0,mblen;
|
||||||
|
while (b < e)
|
||||||
|
{
|
||||||
|
b+= (mblen= my_ismbchar(cs,b,e)) ? mblen : 1;
|
||||||
|
++n;
|
||||||
|
}
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint my_charpos_mb(CHARSET_INFO *cs __attribute__((unused)),
|
||||||
|
const char *b __attribute__((unused)),
|
||||||
|
const char *e __attribute__((unused)),
|
||||||
|
uint pos)
|
||||||
|
{
|
||||||
|
uint res=0, mblen;
|
||||||
|
const char *b0;
|
||||||
|
|
||||||
|
while (pos && b<e)
|
||||||
|
{
|
||||||
|
b+= (mblen= my_ismbchar(cs,b,e)) ? mblen : 1;
|
||||||
|
pos--;
|
||||||
|
}
|
||||||
|
return b-b0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1035,4 +1035,18 @@ void my_fill_8bit(CHARSET_INFO *cs __attribute__((unused)),
|
||||||
char *s, uint l, int fill)
|
char *s, uint l, int fill)
|
||||||
{
|
{
|
||||||
bfill(s,l,fill);
|
bfill(s,l,fill);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint my_numchars_8bit(CHARSET_INFO *cs __attribute__((unused)),
|
||||||
|
const char *b, const char *e)
|
||||||
|
{
|
||||||
|
return e-b;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint my_charpos_8bit(CHARSET_INFO *cs __attribute__((unused)),
|
||||||
|
const char *b __attribute__((unused)),
|
||||||
|
const char *e __attribute__((unused)),
|
||||||
|
uint pos)
|
||||||
|
{
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -4496,6 +4496,8 @@ CHARSET_INFO my_charset_sjis =
|
||||||
ismbchar_sjis,
|
ismbchar_sjis,
|
||||||
ismbhead_sjis,
|
ismbhead_sjis,
|
||||||
mbcharlen_sjis,
|
mbcharlen_sjis,
|
||||||
|
my_numchars_mb,
|
||||||
|
my_charpos_mb,
|
||||||
my_mb_wc_sjis, /* mb_wc */
|
my_mb_wc_sjis, /* mb_wc */
|
||||||
my_wc_mb_sjis, /* wc_mb */
|
my_wc_mb_sjis, /* wc_mb */
|
||||||
my_caseup_str_8bit,
|
my_caseup_str_8bit,
|
||||||
|
|
|
||||||
|
|
@ -719,6 +719,8 @@ CHARSET_INFO my_charset_tis620 =
|
||||||
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,
|
||||||
|
|
|
||||||
|
|
@ -8453,6 +8453,8 @@ CHARSET_INFO my_charset_ujis =
|
||||||
ismbchar_ujis,
|
ismbchar_ujis,
|
||||||
ismbhead_ujis,
|
ismbhead_ujis,
|
||||||
mbcharlen_ujis,
|
mbcharlen_ujis,
|
||||||
|
my_numchars_mb,
|
||||||
|
my_charpos_mb,
|
||||||
my_mb_wc_euc_jp, /* mb_wc */
|
my_mb_wc_euc_jp, /* mb_wc */
|
||||||
my_wc_mb_euc_jp, /* wc_mb */
|
my_wc_mb_euc_jp, /* wc_mb */
|
||||||
my_caseup_str_mb,
|
my_caseup_str_mb,
|
||||||
|
|
|
||||||
|
|
@ -1998,6 +1998,8 @@ CHARSET_INFO my_charset_utf8 =
|
||||||
my_ismbchar_utf8, /* ismbchar */
|
my_ismbchar_utf8, /* ismbchar */
|
||||||
my_ismbhead_utf8, /* ismbhead */
|
my_ismbhead_utf8, /* ismbhead */
|
||||||
my_mbcharlen_utf8, /* mbcharlen */
|
my_mbcharlen_utf8, /* mbcharlen */
|
||||||
|
my_numchars_mb,
|
||||||
|
my_charpos_mb,
|
||||||
my_utf8_uni, /* mb_wc */
|
my_utf8_uni, /* mb_wc */
|
||||||
my_uni_utf8, /* wc_mb */
|
my_uni_utf8, /* wc_mb */
|
||||||
my_caseup_str_utf8,
|
my_caseup_str_utf8,
|
||||||
|
|
@ -3064,6 +3066,21 @@ cnv:
|
||||||
return (int) (dst-db);
|
return (int) (dst-db);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
uint my_numchars_ucs2(CHARSET_INFO *cs __attribute__((unused)),
|
||||||
|
const char *b, const char *e)
|
||||||
|
{
|
||||||
|
return (e-b)/2;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
uint my_charpos_ucs2(CHARSET_INFO *cs __attribute__((unused)),
|
||||||
|
const char *b __attribute__((unused)),
|
||||||
|
const char *e __attribute__((unused)),
|
||||||
|
uint pos)
|
||||||
|
{
|
||||||
|
return pos/2;
|
||||||
|
}
|
||||||
|
|
||||||
CHARSET_INFO my_charset_ucs2 =
|
CHARSET_INFO my_charset_ucs2 =
|
||||||
{
|
{
|
||||||
|
|
@ -3088,6 +3105,8 @@ CHARSET_INFO my_charset_ucs2 =
|
||||||
my_ismbchar_ucs2, /* ismbchar */
|
my_ismbchar_ucs2, /* ismbchar */
|
||||||
my_ismbhead_ucs2, /* ismbhead */
|
my_ismbhead_ucs2, /* ismbhead */
|
||||||
my_mbcharlen_ucs2, /* mbcharlen */
|
my_mbcharlen_ucs2, /* mbcharlen */
|
||||||
|
my_numchars_ucs2,
|
||||||
|
my_charpos_ucs2,
|
||||||
my_ucs2_uni, /* mb_wc */
|
my_ucs2_uni, /* mb_wc */
|
||||||
my_uni_ucs2, /* wc_mb */
|
my_uni_ucs2, /* wc_mb */
|
||||||
my_caseup_str_ucs2,
|
my_caseup_str_ucs2,
|
||||||
|
|
|
||||||
|
|
@ -663,6 +663,8 @@ CHARSET_INFO my_charset_win1250ch =
|
||||||
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,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue