154
161
MY_LEX_STRING_OR_DELIMITER
164
struct charset_info_st;
157
166
/* See strings/charset_info_st.txt for information about this structure */
158
struct MY_COLLATION_HANDLER
167
typedef struct my_collation_handler_st
160
169
bool (*init)(charset_info_st&, unsigned char *(*alloc)(size_t));
161
170
/* Collation routines */
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);
171
int (*strnncoll)(const struct charset_info_st * const,
172
const unsigned char *, size_t, const unsigned char *, size_t, bool);
173
int (*strnncollsp)(const struct charset_info_st * const,
174
const unsigned char *, size_t, const unsigned char *, size_t,
175
bool diff_if_only_endspace_difference);
176
size_t (*strnxfrm)(const struct charset_info_st * const,
177
unsigned char *dst, size_t dstlen, uint32_t nweights,
178
const unsigned char *src, size_t srclen, uint32_t flags);
179
size_t (*strnxfrmlen)(const struct charset_info_st * const, size_t);
180
bool (*like_range)(const struct charset_info_st * const,
181
const char *s, size_t s_length,
182
char escape, char w_one, char w_many,
184
char *min_str, char *max_str,
185
size_t *min_len, size_t *max_len);
186
int (*wildcmp)(const struct charset_info_st * const,
187
const char *str,const char *str_end,
188
const char *wildstr,const char *wildend,
189
int escape,int w_one, int w_many);
191
int (*strcasecmp)(const struct charset_info_st * const, const char *, const char *);
193
uint32_t (*instr)(const struct charset_info_st * const,
194
const char *b, size_t b_length,
195
const char *s, size_t s_length,
196
my_match_t *match, uint32_t nmatch);
174
198
/* Hash calculation */
175
void (*hash_sort)(const charset_info_st*, const unsigned char *key, size_t len, uint32_t *nr1, uint32_t *nr2);
199
void (*hash_sort)(const struct charset_info_st *cs, const unsigned char *key, size_t len,
200
uint32_t *nr1, uint32_t *nr2);
201
bool (*propagate)(const struct charset_info_st *cs, const unsigned char *str, size_t len);
202
} MY_COLLATION_HANDLER;
179
204
/* See strings/charset_info_st.txt about information on this structure */
180
struct MY_CHARSET_HANDLER
205
typedef struct my_charset_handler_st
207
void (*init_unused)();
182
208
/* Multibyte routines */
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);
209
uint32_t (*ismbchar)(const struct charset_info_st * const, const char *, const char *);
210
uint32_t (*mbcharlen)(const struct charset_info_st * const, uint32_t c);
211
size_t (*numchars)(const struct charset_info_st * const, const char *b, const char *e);
212
size_t (*charpos)(const struct charset_info_st * const, const char *b, const char *e,
214
size_t (*well_formed_len)(const struct charset_info_st * const,
215
const char *b,const char *e,
216
size_t nchars, int *error);
217
size_t (*lengthsp)(const struct charset_info_st * const, const char *ptr, size_t length);
218
size_t (*numcells)(const struct charset_info_st * const, const char *b, const char *e);
191
220
/* Unicode conversion */
192
221
my_charset_conv_mb_wc mb_wc;
193
222
my_charset_conv_wc_mb wc_mb;
195
224
/* CTYPE scanner */
196
int (*ctype)(const charset_info_st *cs, int *ctype, const unsigned char *s, const unsigned char *e);
225
int (*ctype)(const struct charset_info_st *cs, int *ctype,
226
const unsigned char *s, const unsigned char *e);
198
228
/* Functions for case and sort conversion */
199
size_t (*caseup_str)(const charset_info_st*, char *);
200
size_t (*casedn_str)(const charset_info_st*, char *);
229
size_t (*caseup_str)(const struct charset_info_st * const, char *);
230
size_t (*casedn_str)(const struct charset_info_st * const, char *);
202
232
my_charset_conv_case caseup;
203
233
my_charset_conv_case casedn;
205
235
/* Charset dependant snprintf() */
206
size_t (*snprintf)(const charset_info_st*, char *to, size_t n, const char *fmt, ...)
236
size_t (*snprintf)(const struct charset_info_st * const, char *to, size_t n,
207
239
#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
208
240
__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);
243
size_t (*long10_to_str)(const struct charset_info_st * const, char *to, size_t n,
244
int radix, long int val);
245
size_t (*int64_t10_to_str)(const struct charset_info_st * const, char *to, size_t n,
246
int radix, int64_t val);
214
void (*fill)(const charset_info_st*, char *to, size_t len, int fill);
248
void (*fill)(const struct charset_info_st * const, char *to, size_t len, int fill);
216
250
/* String-to-number conversion routines */
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);
251
long (*strntol)(const struct charset_info_st * const, const char *s, size_t l,
252
int base, char **e, int *err);
253
unsigned long (*strntoul)(const struct charset_info_st * const, const char *s, size_t l,
254
int base, char **e, int *err);
255
int64_t (*strntoll)(const struct charset_info_st * const, const char *s, size_t l,
256
int base, char **e, int *err);
257
uint64_t (*strntoull)(const struct charset_info_st * const, const char *s, size_t l,
258
int base, char **e, int *err);
259
double (*strntod)(const struct charset_info_st * const, char *s, size_t l, char **e,
261
int64_t (*strtoll10)(const struct charset_info_st *cs,
262
const char *nptr, char **endptr, int *error);
263
uint64_t (*strntoull10rnd)(const struct charset_info_st *cs,
264
const char *str, size_t length,
266
char **endptr, int *error);
267
size_t (*scan)(const struct charset_info_st * const, const char *b, const char *e,
269
} MY_CHARSET_HANDLER;
227
272
/* See strings/charset_info_st.txt about information on this structure */
228
273
struct charset_info_st
254
299
uint16_t min_sort_char;
255
300
uint16_t max_sort_char; /* For LIKE optimization */
256
301
unsigned char pad_char;
302
bool escape_with_backslash_is_dangerous;
257
303
unsigned char levels_for_compare;
258
304
unsigned char levels_for_order;
260
306
MY_CHARSET_HANDLER *cset;
261
307
MY_COLLATION_HANDLER *coll;
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);
364
311
extern DRIZZLED_API charset_info_st *all_charsets[256];
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);
312
extern charset_info_st compiled_charsets[];
313
extern uint32_t get_charset_number(const char *cs_name, uint32_t cs_flags);
314
extern uint32_t get_collation_number(const char *name);
315
extern const char *get_charset_name(uint32_t cs_number);
316
extern bool resolve_charset(const char *cs_name,
317
const charset_info_st *default_cs,
318
const charset_info_st **cs);
319
extern bool resolve_collation(const char *cl_name,
320
const charset_info_st *default_cl,
321
const charset_info_st **cl);
322
extern void free_charsets();
323
extern char *get_charsets_dir(char *buf);
324
extern bool my_charset_same(const charset_info_st *cs1, const charset_info_st *cs2);
325
extern size_t escape_string_for_drizzle(const charset_info_st *charset_info,
326
char *to, size_t to_length,
327
const char *from, size_t length);
328
extern size_t escape_quotes_for_drizzle(const charset_info_st *charset_info,
329
char *to, size_t to_length,
330
const char *from, size_t length);
372
331
extern DRIZZLED_API const charset_info_st *default_charset_info;
373
332
extern DRIZZLED_API const charset_info_st *system_charset_info;
374
333
extern const charset_info_st *files_charset_info;
380
339
extern DRIZZLED_API charset_info_st my_charset_utf8mb4_bin;
381
340
extern DRIZZLED_API charset_info_st my_charset_utf8mb4_general_ci;
382
341
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);
342
size_t my_strnxfrmlen_simple(const charset_info_st * const, size_t);
343
extern int my_strnncollsp_simple(const charset_info_st * const, const unsigned char *, size_t,
344
const unsigned char *, size_t,
345
bool diff_if_only_endspace_difference);
346
extern size_t my_lengthsp_8bit(const charset_info_st * const cs, const char *ptr, size_t length);
347
extern uint32_t my_instr_simple(const charset_info_st * const,
348
const char *b, size_t b_length,
349
const char *s, size_t s_length,
350
my_match_t *match, uint32_t nmatch);
351
extern MY_CHARSET_HANDLER my_charset_8bit_handler;
352
extern MY_CHARSET_HANDLER my_charset_ucs2_handler;
353
extern int my_strcasecmp_mb(const charset_info_st * const cs, const char *s, const char *t);
354
extern bool my_parse_charset_xml(const char *bug, size_t len,
355
int (*add)(charset_info_st *cs));
389
357
DRIZZLED_API const charset_info_st *get_charset(uint32_t cs_number);
390
358
DRIZZLED_API const charset_info_st *get_charset_by_name(const char *cs_name);
391
359
DRIZZLED_API const charset_info_st *get_charset_by_csname(const char *cs_name, uint32_t cs_flags);
393
361
/* Functions for 8bit */
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*,
362
int my_mb_ctype_8bit(const charset_info_st * const,int *, const unsigned char *,const unsigned char *);
363
int my_mb_ctype_mb(const charset_info_st * const,int *, const unsigned char *,const unsigned char *);
365
size_t my_scan_8bit(const charset_info_st * const cs, const char *b, const char *e, int sq);
367
size_t my_snprintf_8bit(const charset_info_st * const, char *to, size_t n,
368
const char *fmt, ...)
369
__attribute__((format(printf, 4, 5)));
371
long my_strntol_8bit(const charset_info_st * const, const char *s, size_t l, int base,
373
unsigned long my_strntoul_8bit(const charset_info_st * const, const char *s, size_t l, int base,
375
int64_t my_strntoll_8bit(const charset_info_st * const, const char *s, size_t l, int base,
377
uint64_t my_strntoull_8bit(const charset_info_st * const, const char *s, size_t l, int base,
379
double my_strntod_8bit(const charset_info_st * const, char *s, size_t l,char **e,
381
size_t my_long10_to_str_8bit(const charset_info_st * const, char *to, size_t l, int radix,
383
size_t my_int64_t10_to_str_8bit(const charset_info_st * const, char *to, size_t l, int radix,
385
int64_t my_strtoll10_8bit(const charset_info_st * const cs,
386
const char *nptr, char **endptr, int *error);
387
int64_t my_strtoll10_ucs2(charset_info_st *cs,
388
const char *nptr, char **endptr, int *error);
390
uint64_t my_strntoull10rnd_8bit(const charset_info_st * const cs,
391
const char *str, size_t length, int
392
unsigned_fl, char **endptr, int *error);
393
uint64_t my_strntoull10rnd_ucs2(charset_info_st *cs,
394
const char *str, size_t length,
395
int unsigned_fl, char **endptr, int *error);
397
void my_fill_8bit(const charset_info_st * const cs, char* to, size_t l, int fill);
399
bool my_like_range_simple(const charset_info_st * const cs,
414
400
const char *ptr, size_t ptr_length,
415
401
char escape, char w_one, char w_many,
416
402
size_t res_length,
417
403
char *min_str, char *max_str,
418
404
size_t *min_length, size_t *max_length);
420
bool my_like_range_mb(const charset_info_st*,
406
bool my_like_range_mb(const charset_info_st * const cs,
421
407
const char *ptr, size_t ptr_length,
422
408
char escape, char w_one, char w_many,
423
409
size_t res_length,
424
410
char *min_str, char *max_str,
425
411
size_t *min_length, size_t *max_length);
427
int my_wildcmp_8bit(const charset_info_st*,
413
bool my_like_range_ucs2(const charset_info_st * const cs,
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_utf16(const charset_info_st * const cs,
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
bool my_like_range_utf32(const charset_info_st * const cs,
428
const char *ptr, size_t ptr_length,
429
char escape, char w_one, char w_many,
431
char *min_str, char *max_str,
432
size_t *min_length, size_t *max_length);
435
int my_wildcmp_8bit(const charset_info_st * const,
428
436
const char *str,const char *str_end,
429
437
const char *wildstr,const char *wildend,
430
438
int escape, int w_one, int w_many);
432
int my_wildcmp_bin(const charset_info_st*,
440
int my_wildcmp_bin(const charset_info_st * const,
433
441
const char *str,const char *str_end,
434
442
const char *wildstr,const char *wildend,
435
443
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);
445
size_t my_numchars_8bit(const charset_info_st * const, const char *b, const char *e);
446
size_t my_numcells_8bit(const charset_info_st * const, const char *b, const char *e);
447
size_t my_charpos_8bit(const charset_info_st * const, const char *b, const char *e, size_t pos);
448
size_t my_well_formed_len_8bit(const charset_info_st * const, const char *b, const char *e,
449
size_t pos, int *error);
441
450
typedef unsigned char *(*cs_alloc_func)(size_t);
442
451
bool my_coll_init_simple(charset_info_st *cs, cs_alloc_func alloc);
443
452
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);
453
uint32_t my_mbcharlen_8bit(const charset_info_st * const, uint32_t c);
446
455
/* Functions for multibyte charsets */
447
int my_wildcmp_mb(const charset_info_st*,
456
int my_wildcmp_mb(const charset_info_st * const,
448
457
const char *str,const char *str_end,
449
458
const char *wildstr,const char *wildend,
450
459
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*,
460
size_t my_numchars_mb(const charset_info_st * const, const char *b, const char *e);
461
size_t my_numcells_mb(const charset_info_st * const, const char *b, const char *e);
462
size_t my_charpos_mb(const charset_info_st * const, const char *b, const char *e, size_t pos);
463
size_t my_well_formed_len_mb(const charset_info_st * const, const char *b, const char *e,
464
size_t pos, int *error);
465
uint32_t my_instr_mb(const charset_info_st * const,
456
466
const char *b, size_t b_length,
457
467
const char *s, size_t s_length,
458
468
my_match_t *match, uint32_t nmatch);
460
int my_strnncoll_mb_bin(const charset_info_st* cs,
470
int my_strnncoll_mb_bin(const charset_info_st * const cs,
461
471
const unsigned char *s, size_t slen,
462
472
const unsigned char *t, size_t tlen,
463
473
bool t_is_prefix);
465
int my_strnncollsp_mb_bin(const charset_info_st*,
475
int my_strnncollsp_mb_bin(const charset_info_st * const cs,
466
476
const unsigned char *a, size_t a_length,
467
477
const unsigned char *b, size_t b_length,
468
478
bool diff_if_only_endspace_difference);
470
int my_wildcmp_mb_bin(const charset_info_st*,
480
int my_wildcmp_mb_bin(const charset_info_st * const cs,
471
481
const char *str,const char *str_end,
472
482
const char *wildstr,const char *wildend,
473
483
int escape, int w_one, int w_many);
475
int my_strcasecmp_mb_bin(const charset_info_st*, const char *s, const char *t);
485
int my_strcasecmp_mb_bin(const charset_info_st * const, const char *s, const char *t);
477
void my_hash_sort_mb_bin(const charset_info_st*,
487
void my_hash_sort_mb_bin(const charset_info_st * const,
478
488
const unsigned char *key, size_t len, uint32_t *nr1, uint32_t *nr2);
480
size_t my_strnxfrm_mb(const charset_info_st*,
490
size_t my_strnxfrm_mb(const charset_info_st * const,
481
491
unsigned char *dst, size_t dstlen, uint32_t nweights,
482
492
const unsigned char *src, size_t srclen, uint32_t flags);
484
int my_wildcmp_unicode(const charset_info_st*,
494
int my_wildcmp_unicode(const charset_info_st * const cs,
485
495
const char *str, const char *str_end,
486
496
const char *wildstr, const char *wildend,
487
497
int escape, int w_one, int w_many,
488
498
MY_UNICASE_INFO **weights);
490
bool my_propagate_simple();
491
bool my_propagate_complex();
500
bool my_propagate_simple(const charset_info_st * const cs, const unsigned char *str, size_t len);
501
bool my_propagate_complex(const charset_info_st * const cs, const unsigned char *str, size_t len);
494
504
uint32_t my_strxfrm_flag_normalize(uint32_t flags, uint32_t nlevels);
495
505
void my_strxfrm_desc_and_reverse(unsigned char *str, unsigned char *strend,
496
506
uint32_t flags, uint32_t level);
497
size_t my_strxfrm_pad_desc_and_reverse(const charset_info_st*,
507
size_t my_strxfrm_pad_desc_and_reverse(const charset_info_st * const cs,
498
508
unsigned char *str, unsigned char *frmend, unsigned char *strend,
499
509
uint32_t nweights, uint32_t flags, uint32_t level);
501
bool my_charset_is_ascii_compatible(const charset_info_st*);
511
bool my_charset_is_ascii_compatible(const charset_info_st * const cs);
504
514
Compare 0-terminated UTF8 strings.
516
526
- positive number if s > t
517
527
- 0 is the strings are equal
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*,
529
int my_wc_mb_filename(const charset_info_st * const,
530
my_wc_t wc, unsigned char *s, unsigned char *e);
532
int my_mb_wc_filename(const charset_info_st * const,
533
my_wc_t *pwc, const unsigned char *s, const unsigned char *e);
536
unsigned int my_ismbchar_utf8mb4(const charset_info_st * const cs, const char *b, const char *e);
537
unsigned int my_mbcharlen_utf8mb4(const charset_info_st * const, uint32_t c);
539
size_t my_strnxfrmlen_utf8mb4(const charset_info_st * const, size_t len);
541
my_strnxfrm_utf8mb4(const charset_info_st * const cs,
542
unsigned char *dst, size_t dstlen, uint32_t nweights,
543
const unsigned char *src, size_t srclen, uint32_t flags);
545
int my_wildcmp_utf8mb4(const charset_info_st * const cs,
546
const char *str, const char *strend,
547
const char *wildstr, const char *wildend,
548
int escape, int w_one, int w_many);
549
int my_strnncollsp_utf8mb4(const charset_info_st * const cs,
550
const unsigned char *s, size_t slen,
551
const unsigned char *t, size_t tlen,
552
bool diff_if_only_endspace_difference);
553
int my_strcasecmp_utf8mb4(const charset_info_st * const cs,
554
const char *s, const char *t);
556
int my_strnncoll_utf8mb4(const charset_info_st * const cs,
557
const unsigned char *s, size_t slen,
558
const unsigned char *t, size_t tlen,
561
int my_mb_wc_utf8mb4(const charset_info_st * const cs,
562
my_wc_t * pwc, const unsigned char *s, const unsigned char *e);
564
int my_wc_mb_utf8mb4(const charset_info_st * const cs,
565
my_wc_t wc, unsigned char *r, unsigned char *e);
567
size_t my_caseup_str_utf8mb4(const charset_info_st * const cs, char *src);
568
size_t my_casedn_str_utf8mb4(const charset_info_st * const cs, char *src);
570
size_t my_caseup_utf8mb4(const charset_info_st * const cs, char *src, size_t srclen,
571
char *dst, size_t dstlen);
572
size_t my_casedn_utf8mb4(const charset_info_st * const cs,
573
char *src, size_t srclen,
574
char *dst, size_t dstlen);
577
int my_strnncoll_any_uca(const charset_info_st * const cs,
578
const unsigned char *s, size_t slen,
579
const unsigned char *t, size_t tlen,
582
int my_strnncollsp_any_uca(const charset_info_st * const cs,
583
const unsigned char *s, size_t slen,
584
const unsigned char *t, size_t tlen,
585
bool diff_if_only_endspace_difference);
587
void my_hash_sort_any_uca(const charset_info_st * const cs,
588
const unsigned char *s, size_t slen,
589
uint32_t *n1, uint32_t *n2);
591
size_t my_strnxfrm_any_uca(const charset_info_st * const cs,
592
unsigned char *dst, size_t dstlen, uint32_t nweights,
593
const unsigned char *src, size_t srclen,
596
int my_wildcmp_uca(const charset_info_st * const cs,
597
const char *str,const char *str_end,
598
const char *wildstr,const char *wildend,
599
int escape, int w_one, int w_many);
601
int my_strnncoll_8bit_bin(const charset_info_st * const,
523
602
const unsigned char *s, size_t slen,
524
603
const unsigned char *t, size_t tlen,
525
604
bool t_is_prefix);
526
int my_strnncollsp_8bit_bin(const charset_info_st*,
605
int my_strnncollsp_8bit_bin(const charset_info_st * const,
527
606
const unsigned char *a, size_t a_length,
528
607
const unsigned char *b, size_t b_length,
529
608
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*,
609
size_t my_case_str_bin(const charset_info_st * const, char *);
610
size_t my_case_bin(const charset_info_st * const, char *,
611
size_t srclen, char *, size_t);
612
int my_strcasecmp_bin(const charset_info_st * const,
534
613
const char *s, const char *t);
535
size_t my_strnxfrm_8bit_bin(const charset_info_st*,
614
size_t my_strnxfrm_8bit_bin(const charset_info_st * const cs,
536
615
unsigned char * dst, size_t dstlen, uint32_t nweights,
537
616
const unsigned char *src, size_t srclen, uint32_t flags);
538
uint32_t my_instr_bin(const charset_info_st*,
617
uint32_t my_instr_bin(const charset_info_st * const,
539
618
const char *b, size_t b_length,
540
619
const char *s, size_t s_length,
541
620
my_match_t *match, uint32_t nmatch);
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*,
621
size_t my_lengthsp_binary(const charset_info_st * const,
622
const char *, size_t length);
623
int my_mb_wc_bin(const charset_info_st * const,
545
624
my_wc_t *wc, const unsigned char *str,
546
625
const unsigned char *end);
547
int my_wc_mb_bin(const charset_info_st*, my_wc_t wc,
626
int my_wc_mb_bin(const charset_info_st * const, my_wc_t wc,
548
627
unsigned char *str, unsigned char *end);
549
void my_hash_sort_8bit_bin(const charset_info_st*,
628
void my_hash_sort_8bit_bin(const charset_info_st * const,
550
629
const unsigned char *key, size_t len,
551
630
uint32_t *nr1, uint32_t *nr2);
552
631
bool my_coll_init_8bit_bin(charset_info_st *cs,
554
int my_strnncoll_binary(const charset_info_st*,
633
int my_strnncoll_binary(const charset_info_st * const,
555
634
const unsigned char *s, size_t slen,
556
635
const unsigned char *t, size_t tlen,
557
636
bool t_is_prefix);
558
int my_strnncollsp_binary(const charset_info_st*,
637
int my_strnncollsp_binary(const charset_info_st * const cs,
559
638
const unsigned char *s, size_t slen,
560
639
const unsigned char *t, size_t tlen,
642
inline static bool my_isascii(char c)
644
return (!(c & ~0177));
647
inline static char my_toascii(char c)
652
inline static char my_tocntrl(char c)
657
inline static char my_toprint(char c)
662
inline static char my_toupper(const charset_info_st *s, unsigned char c)
664
return s->to_upper[c];
667
inline static char my_tolower(const charset_info_st *s, unsigned char c)
669
return s->to_lower[c];
672
inline static bool my_isalpha(const charset_info_st *s, unsigned char c)
674
return (s->ctype+1)[c] & (_MY_U | _MY_L);
677
inline static bool my_isupper(const charset_info_st *s, unsigned char c)
679
return (s->ctype+1)[c] & _MY_U;
682
inline static bool my_islower(const charset_info_st *s, unsigned char c)
684
return (s->ctype+1)[c] & _MY_L;
687
inline static bool my_isdigit(const charset_info_st *s, unsigned char c)
689
return (s->ctype+1)[c] & _MY_NMR;
692
inline static bool my_isxdigit(const charset_info_st *s, unsigned char c)
694
return (s->ctype+1)[c] & _MY_X;
697
inline static bool my_isalnum(const charset_info_st *s, unsigned char c)
699
return (s->ctype+1)[c] & (_MY_U | _MY_L | _MY_NMR);
702
inline static bool my_isspace(const charset_info_st *s, unsigned char c)
704
return (s->ctype+1)[c] & _MY_SPC;
707
inline static bool my_ispunct(const charset_info_st *s, unsigned char c)
709
return (s->ctype+1)[c] & _MY_PNT;
712
inline static bool my_isprint(const charset_info_st *s, unsigned char c)
714
return (s->ctype+1)[c] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR | _MY_B);
717
inline static bool my_isgraph(const charset_info_st *s, unsigned char c)
719
return (s->ctype+1)[c] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR);
722
inline static bool my_iscntrl(const charset_info_st *s, unsigned char c)
724
return (s->ctype+1)[c] & _MY_CTR;
727
/* Some macros that should be cleaned up a little */
728
inline static bool my_isvar(const charset_info_st *s, char c)
730
return my_isalnum(s,c) || (c) == '_';
733
inline static bool my_isvar_start(const charset_info_st *s, char c)
735
return my_isalpha(s,c) || (c) == '_';
738
inline static bool my_binary_compare(const charset_info_st *s)
740
return s->state & MY_CS_BINSORT;
743
inline static bool use_strnxfrm(const charset_info_st *s)
745
return s->state & MY_CS_STRNXFRM;
748
inline static size_t my_strnxfrm(const charset_info_st *cs,
751
const unsigned char *src,
752
const uint32_t srclen)
754
return (cs->coll->strnxfrm(cs, dst, dstlen, dstlen, src, srclen, MY_STRXFRM_PAD_WITH_SPACE));
563
757
inline static int my_strnncoll(const charset_info_st *cs,
564
758
const unsigned char *s,
565
759
const size_t slen,