26 #include <sys/types.h>
30 #include <drizzled/common_fwd.h>
35 #define MY_CS_NAME_SIZE 32
36 #define MY_CS_CTYPE_TABLE_SIZE 257
37 #define MY_CS_TO_LOWER_TABLE_SIZE 256
38 #define MY_CS_TO_UPPER_TABLE_SIZE 256
39 #define MY_CS_SORT_ORDER_TABLE_SIZE 256
40 #define MY_CS_TO_UNI_TABLE_SIZE 256
41 #define CHARSET_DIR "charsets/"
42 #define my_wc_t unsigned long
46 #define MY_CS_TOOSMALL -101
47 #define MY_CS_TOOSMALL2 -102
48 #define MY_CS_TOOSMALL3 -103
50 #define MY_CS_TOOSMALL4 -104
51 #define MY_CS_TOOSMALL5 -105
52 #define MY_CS_TOOSMALL6 -106
53 #define MY_SEQ_INTTAIL 1
54 #define MY_SEQ_SPACES 2
55 #define MY_CS_COMPILED 1
56 #define MY_CS_CONFIG 2
58 #define MY_CS_LOADED 8
59 #define MY_CS_BINSORT 16
60 #define MY_CS_PRIMARY 32
61 #define MY_CS_STRNXFRM 64
62 #define MY_CS_UNICODE 128
63 #define MY_CS_READY 256
64 #define MY_CS_AVAILABLE 512
65 #define MY_CS_CSSORT 1024
66 #define MY_CS_HIDDEN 2048
67 #define MY_CS_NONASCII 8192
68 #define MY_CHARSET_UNDEFINED 0
70 #define MY_STRXFRM_LEVEL1 0x00000001
71 #define MY_STRXFRM_LEVEL2 0x00000002
72 #define MY_STRXFRM_LEVEL3 0x00000004
73 #define MY_STRXFRM_LEVEL4 0x00000008
74 #define MY_STRXFRM_LEVEL5 0x00000010
75 #define MY_STRXFRM_LEVEL6 0x00000020
76 #define MY_STRXFRM_LEVEL_ALL 0x0000003F
77 #define MY_STRXFRM_NLEVELS 6
78 #define MY_STRXFRM_PAD_WITH_SPACE 0x00000040
79 #define MY_STRXFRM_UNUSED_00000080 0x00000080
80 #define MY_STRXFRM_DESC_LEVEL1 0x00000100
81 #define MY_STRXFRM_DESC_LEVEL2 0x00000200
82 #define MY_STRXFRM_DESC_LEVEL3 0x00000300
83 #define MY_STRXFRM_DESC_LEVEL4 0x00000800
84 #define MY_STRXFRM_DESC_LEVEL5 0x00001000
85 #define MY_STRXFRM_DESC_LEVEL6 0x00002000
86 #define MY_STRXFRM_DESC_SHIFT 8
87 #define MY_STRXFRM_UNUSED_00004000 0x00004000
88 #define MY_STRXFRM_UNUSED_00008000 0x00008000
89 #define MY_STRXFRM_REVERSE_LEVEL1 0x00010000
90 #define MY_STRXFRM_REVERSE_LEVEL2 0x00020000
91 #define MY_STRXFRM_REVERSE_LEVEL3 0x00040000
92 #define MY_STRXFRM_REVERSE_LEVEL4 0x00080000
93 #define MY_STRXFRM_REVERSE_LEVEL5 0x00100000
94 #define MY_STRXFRM_REVERSE_LEVEL6 0x00200000
95 #define MY_STRXFRM_REVERSE_SHIFT 16
96 #define ILLEGAL_CHARSET_INFO_NUMBER (UINT32_MAX)
97 #define MY_UTF8MB4 "utf8"
98 #define my_charset_utf8_general_ci ::drizzled::my_charset_utf8mb4_general_ci
99 #define my_charset_utf8_bin ::drizzled::my_charset_utf8mb4_bin
110 typedef int (*my_charset_conv_mb_wc)(
const charset_info_st*, my_wc_t *,
const unsigned char*,
const unsigned char *);
111 typedef int (*my_charset_conv_wc_mb)(
const charset_info_st*, my_wc_t,
unsigned char*,
unsigned char *);
112 typedef size_t (*my_charset_conv_case)(
const charset_info_st*,
char*, size_t,
char*, size_t);
123 unsigned char pctype;
124 unsigned char* ctype;
143 MY_LEX_START, MY_LEX_CHAR, MY_LEX_IDENT,
144 MY_LEX_IDENT_SEP, MY_LEX_IDENT_START,
145 MY_LEX_REAL, MY_LEX_HEX_NUMBER, MY_LEX_BIN_NUMBER,
146 MY_LEX_CMP_OP, MY_LEX_LONG_CMP_OP, MY_LEX_STRING, MY_LEX_COMMENT, MY_LEX_END,
147 MY_LEX_OPERATOR_OR_IDENT, MY_LEX_NUMBER_IDENT, MY_LEX_INT_OR_REAL,
148 MY_LEX_REAL_OR_POINT, MY_LEX_BOOL, MY_LEX_EOL, MY_LEX_ESCAPE,
149 MY_LEX_LONG_COMMENT, MY_LEX_END_LONG_COMMENT, MY_LEX_SEMICOLON,
150 MY_LEX_SET_VAR, MY_LEX_USER_END, MY_LEX_HOSTNAME, MY_LEX_SKIP,
151 MY_LEX_USER_VARIABLE_DELIMITER, MY_LEX_SYSTEM_VAR,
152 MY_LEX_IDENT_OR_KEYWORD,
153 MY_LEX_IDENT_OR_HEX, MY_LEX_IDENT_OR_BIN,
154 MY_LEX_STRING_OR_DELIMITER
160 bool (*init)(charset_info_st&,
unsigned char *(*alloc)(size_t));
162 int (*strnncoll)(
const charset_info_st*,
const unsigned char*, size_t,
const unsigned char*, size_t, bool);
163 int (*strnncollsp)(
const charset_info_st*,
const unsigned char*, size_t,
const unsigned char*, size_t,
bool diff_if_only_endspace_difference);
164 size_t (*strnxfrm)(
const charset_info_st*,
unsigned char *dst,
size_t dstlen, uint32_t nweights,
const unsigned char *src,
size_t srclen, uint32_t flags);
165 size_t (*strnxfrmlen)(
const charset_info_st*, size_t);
166 bool (*like_range)(
const charset_info_st*,
const char *s,
size_t s_length,
char escape,
char w_one,
char w_many,
167 size_t res_length,
char *min_str,
char *max_str,
size_t *min_len,
size_t *max_len);
168 int (*wildcmp)(
const charset_info_st*,
const char *str,
const char *str_end,
const char *wildstr,
const char *wildend,
int escape,
int w_one,
int w_many);
170 int (*strcasecmp)(
const charset_info_st*,
const char*,
const char *);
172 uint32_t (*instr)(
const charset_info_st*,
const char *b,
size_t b_length,
const char *s,
size_t s_length,
my_match_t *match, uint32_t nmatch);
175 void (*hash_sort)(
const charset_info_st*,
const unsigned char *key,
size_t len, uint32_t *nr1, uint32_t *nr2);
183 uint32_t (*ismbchar)(
const charset_info_st*,
const char*,
const char *);
184 uint32_t (*mbcharlen)(
const charset_info_st*, uint32_t c);
185 size_t (*numchars)(
const charset_info_st*,
const char *b,
const char *e);
186 size_t (*charpos)(
const charset_info_st*,
const char *b,
const char *e,
size_t pos);
187 size_t (*well_formed_len)(
const charset_info_st&,
str_ref,
size_t nchars,
int *error);
188 size_t (*lengthsp)(
const charset_info_st*,
const char *ptr,
size_t length);
189 size_t (*numcells)(
const charset_info_st*,
const char *b,
const char *e);
192 my_charset_conv_mb_wc mb_wc;
193 my_charset_conv_wc_mb wc_mb;
196 int (*ctype)(
const charset_info_st *cs,
int *ctype,
const unsigned char *s,
const unsigned char *e);
199 size_t (*caseup_str)(
const charset_info_st*,
char *);
200 size_t (*casedn_str)(
const charset_info_st*,
char *);
202 my_charset_conv_case caseup;
203 my_charset_conv_case casedn;
206 size_t (*snprintf)(
const charset_info_st*,
char *to,
size_t n,
const char *fmt, ...)
207 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
208 __attribute__((format(printf, 4, 5)))
211 size_t (*long10_to_str)(
const charset_info_st*,
char *to,
size_t n,
int radix,
long int val);
212 size_t (*int64_t10_to_str)(
const charset_info_st*,
char *to,
size_t n,
int radix, int64_t val);
214 void (*fill)(
const charset_info_st*,
char *to,
size_t len,
int fill);
217 long (*strntol)(
const charset_info_st*,
const char *s,
size_t l,
int base,
char **e,
int *err);
218 unsigned long (*strntoul)(
const charset_info_st*,
const char *s,
size_t l,
int base,
char **e,
int *err);
219 int64_t (*strntoll)(
const charset_info_st*,
const char *s,
size_t l,
int base,
char **e,
int *err);
220 uint64_t (*strntoull)(
const charset_info_st*,
const char *s,
size_t l,
int base,
char **e,
int *err);
221 double (*strntod)(
const charset_info_st*,
char *s,
size_t l,
char **e,
int *err);
222 int64_t (*strtoll10)(
const charset_info_st*,
const char *nptr,
char **endptr,
int *error);
223 uint64_t (*strntoull10rnd)(
const charset_info_st*,
const char *str,
size_t length,
int unsigned_fl,
char **endptr,
int *error);
224 size_t (*scan)(
const charset_info_st*,
const char *b,
const char *e,
int sq);
228 struct charset_info_st
231 uint32_t primary_number;
232 uint32_t binary_number;
237 const char *tailoring;
238 unsigned char *ctype;
239 unsigned char *to_lower;
240 unsigned char *to_upper;
241 unsigned char *sort_order;
242 uint16_t *contractions;
243 uint16_t **sort_order_big;
244 uint16_t *tab_to_uni;
247 unsigned char *state_map;
248 unsigned char *ident_map;
249 uint32_t strxfrm_multiply;
250 unsigned char caseup_multiply;
251 unsigned char casedn_multiply;
254 uint16_t min_sort_char;
255 uint16_t max_sort_char;
256 unsigned char pad_char;
257 unsigned char levels_for_compare;
258 unsigned char levels_for_order;
263 bool isalpha(
unsigned char c)
const
265 return ctype[c + 1] & (_MY_U | _MY_L);
268 bool isupper(
unsigned char c)
const
270 return ctype[c + 1] & _MY_U;
273 bool islower(
unsigned char c)
const
275 return ctype[c + 1] & _MY_L;
278 bool isdigit(
unsigned char c)
const
280 return ctype[c + 1] & _MY_NMR;
283 bool isxdigit(
unsigned char c)
const
285 return ctype[c + 1] & _MY_X;
288 bool isalnum(
unsigned char c)
const
290 return ctype[c + 1] & (_MY_U | _MY_L | _MY_NMR);
293 bool isspace(
unsigned char c)
const
295 return ctype[c + 1] & _MY_SPC;
298 bool ispunct(
unsigned char c)
const
300 return ctype[c + 1] & _MY_PNT;
303 bool isprint(
unsigned char c)
const
305 return ctype[c + 1] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR | _MY_B);
308 bool isgraph(
unsigned char c)
const
310 return ctype[c + 1] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR);
313 bool iscntrl(
unsigned char c)
const
315 return ctype[c + 1] & _MY_CTR;
318 bool isvar(
char c)
const
320 return isalnum(c) || (c) ==
'_';
323 char toupper(
unsigned char c)
const
328 char tolower(
unsigned char c)
const
333 bool binary_compare()
const
335 return state & MY_CS_BINSORT;
338 bool use_strnxfrm()
const
340 return state & MY_CS_STRNXFRM;
343 size_t strnxfrm(
unsigned char *dst,
const size_t dstlen,
const unsigned char *src,
const uint32_t srclen)
const
345 return coll->strnxfrm(
this, dst, dstlen, dstlen, src, srclen, MY_STRXFRM_PAD_WITH_SPACE);
348 int strcasecmp(
const char *s,
const char *t)
const
350 return coll->strcasecmp(
this, s, t);
353 size_t caseup_str(
char* src)
const
355 return cset->caseup_str(
this, src);
358 size_t casedn_str(
char* src)
const
360 return cset->casedn_str(
this, src);
365 uint32_t get_charset_number(
const char *cs_name, uint32_t cs_flags);
366 uint32_t get_collation_number(
const char *name);
367 const char *get_charset_name(uint32_t cs_number);
368 void free_charsets();
369 bool my_charset_same(
const charset_info_st*,
const charset_info_st*);
370 size_t escape_string_for_drizzle(
const charset_info_st *charset_info,
char *to,
size_t to_length,
const char *from,
size_t length);
371 size_t escape_quotes_for_drizzle(
const charset_info_st *charset_info,
char *to,
size_t to_length,
const char *from,
size_t length);
372 extern DRIZZLED_API const charset_info_st *default_charset_info;
373 extern DRIZZLED_API const charset_info_st *system_charset_info;
374 extern const charset_info_st *files_charset_info;
375 extern const charset_info_st *table_alias_charset;
380 extern DRIZZLED_API charset_info_st my_charset_utf8mb4_bin;
381 extern DRIZZLED_API charset_info_st my_charset_utf8mb4_general_ci;
382 extern DRIZZLED_API charset_info_st my_charset_utf8mb4_unicode_ci;
383 size_t my_strnxfrmlen_simple(
const charset_info_st*,
size_t);
384 int my_strnncollsp_simple(
const charset_info_st*,
const unsigned char*,
size_t,
const unsigned char*,
size_t,
bool diff_if_only_endspace_difference);
385 size_t my_lengthsp_8bit(
const charset_info_st*,
const char *ptr,
size_t length);
386 uint32_t my_instr_simple(
const charset_info_st*,
const char *b,
size_t b_length,
const char *s,
size_t s_length,
my_match_t *match, uint32_t nmatch);
387 int my_strcasecmp_mb(
const charset_info_st*,
const char *s,
const char *t);
389 DRIZZLED_API const charset_info_st *get_charset(uint32_t cs_number);
390 DRIZZLED_API const charset_info_st *get_charset_by_name(
const char *cs_name);
391 DRIZZLED_API const charset_info_st *get_charset_by_csname(
const char *cs_name, uint32_t cs_flags);
394 int my_mb_ctype_8bit(
const charset_info_st*,
int*,
const unsigned char*,
const unsigned char *);
395 int my_mb_ctype_mb(
const charset_info_st*,
int*,
const unsigned char*,
const unsigned char *);
397 size_t my_scan_8bit(
const charset_info_st*,
const char *b,
const char *e,
int sq);
398 size_t my_snprintf_8bit(
const charset_info_st*,
char *to,
size_t n,
const char *fmt, ...) __attribute__((format(printf, 4, 5)));
400 long my_strntol_8bit(const charset_info_st*, const
char *s,
size_t l,
int base,
char **e,
int *err);
401 unsigned long my_strntoul_8bit(const charset_info_st*, const
char *s,
size_t l,
int base,
char **e,
int *err);
402 int64_t my_strntoll_8bit(const charset_info_st*, const
char *s,
size_t l,
int base,
char **e,
int *err);
403 uint64_t my_strntoull_8bit(const charset_info_st*, const
char *s,
size_t l,
int base,
char **e,
int *err);
404 double my_strntod_8bit(const charset_info_st*,
char *s,
size_t l,
char **e,
int *err);
405 size_t my_long10_to_str_8bit(const charset_info_st*,
char *to,
size_t l,
int radix,
long int val);
406 size_t my_int64_t10_to_str_8bit(const charset_info_st*,
char *to,
size_t l,
int radix, int64_t val);
407 int64_t my_strtoll10_8bit(const charset_info_st*, const
char *nptr,
char **endptr,
int *error);
409 uint64_t my_strntoull10rnd_8bit(const charset_info_st*, const
char *str,
size_t length,
int unsigned_fl,
char **endptr,
int *error);
411 void my_fill_8bit(const charset_info_st*,
char* to,
size_t l,
int fill);
413 bool my_like_range_simple(const charset_info_st*,
414 const
char *ptr,
size_t ptr_length,
415 char escape,
char w_one,
char w_many,
417 char *min_str,
char *max_str,
418 size_t *min_length,
size_t *max_length);
420 bool my_like_range_mb(const charset_info_st*,
421 const
char *ptr,
size_t ptr_length,
422 char escape,
char w_one,
char w_many,
424 char *min_str,
char *max_str,
425 size_t *min_length,
size_t *max_length);
427 int my_wildcmp_8bit(const charset_info_st*,
428 const
char *str,const
char *str_end,
429 const
char *wildstr,const
char *wildend,
430 int escape,
int w_one,
int w_many);
432 int my_wildcmp_bin(const charset_info_st*,
433 const
char *str,const
char *str_end,
434 const
char *wildstr,const
char *wildend,
435 int escape,
int w_one,
int w_many);
437 size_t my_numchars_8bit(const charset_info_st*, const
char *b, const
char *e);
438 size_t my_numcells_8bit(const charset_info_st*, const
char *b, const
char *e);
439 size_t my_charpos_8bit(const charset_info_st*, const
char *b, const
char *e,
size_t pos);
440 size_t my_well_formed_len_8bit(const charset_info_st&,
str_ref,
size_t pos,
int *error);
441 typedef
unsigned char *(*cs_alloc_func)(
size_t);
442 bool my_coll_init_simple(charset_info_st *cs, cs_alloc_func alloc);
443 bool my_cset_init_8bit(charset_info_st *cs, cs_alloc_func alloc);
444 uint32_t my_mbcharlen_8bit(const charset_info_st*, uint32_t c);
447 int my_wildcmp_mb(const charset_info_st*,
448 const
char *str,const
char *str_end,
449 const
char *wildstr,const
char *wildend,
450 int escape,
int w_one,
int w_many);
451 size_t my_numchars_mb(const charset_info_st*, const
char *b, const
char *e);
452 size_t my_numcells_mb(const charset_info_st*, const
char *b, const
char *e);
453 size_t my_charpos_mb(const charset_info_st*, const
char *b, const
char *e,
size_t pos);
454 size_t my_well_formed_len_mb(const charset_info_st&, str_ref,
size_t pos,
int *error);
455 uint32_t my_instr_mb(const charset_info_st*,
456 const
char *b,
size_t b_length,
457 const
char *s,
size_t s_length,
460 int my_strnncoll_mb_bin(const charset_info_st* cs,
461 const
unsigned char *s,
size_t slen,
462 const
unsigned char *t,
size_t tlen,
465 int my_strnncollsp_mb_bin(const charset_info_st*,
466 const
unsigned char *a,
size_t a_length,
467 const
unsigned char *b,
size_t b_length,
468 bool diff_if_only_endspace_difference);
470 int my_wildcmp_mb_bin(const charset_info_st*,
471 const
char *str,const
char *str_end,
472 const
char *wildstr,const
char *wildend,
473 int escape,
int w_one,
int w_many);
475 int my_strcasecmp_mb_bin(const charset_info_st*, const
char *s, const
char *t);
477 void my_hash_sort_mb_bin(const charset_info_st*,
478 const
unsigned char *key,
size_t len, uint32_t *nr1, uint32_t *nr2);
480 size_t my_strnxfrm_mb(const charset_info_st*,
481 unsigned char *dst,
size_t dstlen, uint32_t nweights,
482 const
unsigned char *src,
size_t srclen, uint32_t flags);
485 const
char *str, const
char *str_end,
486 const
char *wildstr, const
char *wildend,
487 int escape,
int w_one,
int w_many,
490 bool my_propagate_simple();
491 bool my_propagate_complex();
494 uint32_t my_strxfrm_flag_normalize(uint32_t flags, uint32_t nlevels);
495 void my_strxfrm_desc_and_reverse(
unsigned char *str,
unsigned char *strend,
496 uint32_t flags, uint32_t level);
497 size_t my_strxfrm_pad_desc_and_reverse(const charset_info_st*,
498 unsigned char *str,
unsigned char *frmend,
unsigned char *strend,
499 uint32_t nweights, uint32_t flags, uint32_t level);
501 bool my_charset_is_ascii_compatible(const charset_info_st*);
519 int my_wc_mb_filename(const charset_info_st*, my_wc_t wc,
unsigned char *s,
unsigned char *e);
520 int my_mb_wc_filename(const charset_info_st*, my_wc_t *pwc, const
unsigned char *s, const
unsigned char *e);
522 int my_strnncoll_8bit_bin(const charset_info_st*,
523 const
unsigned char *s,
size_t slen,
524 const
unsigned char *t,
size_t tlen,
526 int my_strnncollsp_8bit_bin(const charset_info_st*,
527 const
unsigned char *a,
size_t a_length,
528 const
unsigned char *b,
size_t b_length,
529 bool diff_if_only_endspace_difference);
530 size_t my_case_str_bin(const charset_info_st*,
char *);
531 size_t my_case_bin(const charset_info_st*,
char*,
532 size_t srclen,
char*,
size_t);
533 int my_strcasecmp_bin(const charset_info_st*,
534 const
char *s, const
char *t);
535 size_t my_strnxfrm_8bit_bin(const charset_info_st*,
536 unsigned char * dst,
size_t dstlen, uint32_t nweights,
537 const
unsigned char *src,
size_t srclen, uint32_t flags);
538 uint32_t my_instr_bin(const charset_info_st*,
539 const
char *b,
size_t b_length,
540 const
char *s,
size_t s_length,
542 size_t my_lengthsp_binary(const charset_info_st*,
543 const
char*,
size_t length);
544 int my_mb_wc_bin(const charset_info_st*,
545 my_wc_t *wc, const
unsigned char *str,
546 const
unsigned char *end);
547 int my_wc_mb_bin(const charset_info_st*, my_wc_t wc,
548 unsigned char *str,
unsigned char *end);
549 void my_hash_sort_8bit_bin(const charset_info_st*,
550 const
unsigned char *key,
size_t len,
551 uint32_t *nr1, uint32_t *nr2);
552 bool my_coll_init_8bit_bin(charset_info_st *cs,
554 int my_strnncoll_binary(const charset_info_st*,
555 const
unsigned char *s,
size_t slen,
556 const
unsigned char *t,
size_t tlen,
558 int my_strnncollsp_binary(const charset_info_st*,
559 const
unsigned char *s,
size_t slen,
560 const
unsigned char *t,
size_t tlen,
563 inline static
int my_strnncoll(const charset_info_st *cs,
564 const
unsigned char *s,
566 const
unsigned char *t,
569 return (cs->coll->strnncoll(cs, s, slen, t, tlen, 0));
572 inline static bool my_like_range(
const charset_info_st *cs,
573 const char *ptr,
const size_t ptrlen,
578 char *minstr,
char *maxstr,
579 size_t *minlen,
size_t *maxlen)
581 return (cs->coll->like_range(cs, ptr, ptrlen, escape, w_one, w_many, reslen,
582 minstr, maxstr, minlen, maxlen));
585 inline static int my_wildcmp(
const charset_info_st *cs,
586 const char *str,
const char *strend,
587 const char *w_str,
const char *w_strend,
589 const int w_one,
const int w_many)
591 return (cs->coll->wildcmp(cs, str, strend, w_str, w_strend, escape, w_one, w_many));
594 template <
typename CHAR_T>
595 inline static size_t my_charpos(
const charset_info_st *cs,
596 const CHAR_T *b,
const CHAR_T* e,
size_t num)
598 return cs->cset->charpos(cs, reinterpret_cast<const char*>(b), reinterpret_cast<const char*>(e), num);
601 inline static bool use_mb(
const charset_info_st *cs)
603 return cs->cset->ismbchar != NULL;
606 inline static unsigned int my_ismbchar(
const charset_info_st *cs,
const char *a,
const char *b)
608 return cs->cset->ismbchar(cs, a, b);
611 inline static unsigned int my_mbcharlen(
const charset_info_st *cs, uint32_t c)
613 return cs->cset->mbcharlen(cs, c);
617 inline static long my_strntol(
const charset_info_st *cs,
618 const char* s,
const size_t l,
const int base,
char **e,
int *err)
620 return (cs->cset->strntol(cs, s, l, base, e, err));
623 inline static unsigned long my_strntoul(
const charset_info_st *cs,
624 const char* s,
const size_t l,
const int base,
627 return (cs->cset->strntoul(cs, s, l, base, e, err));
630 inline static int64_t my_strntoll(
const charset_info_st *cs,
631 const char* s,
const size_t l,
const int base,
char **e,
int *err)
633 return (cs->cset->strntoll(cs, s, l, base, e, err));
636 inline static int64_t my_strntoull(
const charset_info_st *cs,
637 const char* s,
const size_t l,
const int base,
640 return (cs->cset->strntoull(cs, s, l, base, e, err));
644 inline static double my_strntod(
const charset_info_st *cs,
645 char* s,
const size_t l,
char **e,
int *err)
647 return (cs->cset->strntod(cs, s, l, e, err));
650 int make_escape_code(
const charset_info_st*,
const char *escape);
int my_wildcmp_unicode(const charset_info_st *, const char *str, const char *str_end, const char *wildstr, const char *wildend, int escape, int w_one, int w_many, MY_UNICASE_INFO **weights)
TODO: Rename this file - func.h is stupid.
Visibility Control Macros.