17
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
Header File that defines all the charset declarations being used in Drizzle source code
26
#include <sys/types.h>
29
#include <drizzled/visibility.h>
30
#include <drizzled/common_fwd.h>
23
31
#include <drizzled/definitions.h>
25
#include <drizzled/visibility.h>
30
typedef struct charset_info_st CHARSET_INFO;
32
extern DRIZZLED_API CHARSET_INFO *all_charsets[256];
33
extern CHARSET_INFO compiled_charsets[];
35
extern uint32_t get_charset_number(const char *cs_name, uint32_t cs_flags);
36
extern uint32_t get_collation_number(const char *name);
37
extern const char *get_charset_name(uint32_t cs_number);
39
DRIZZLED_API const CHARSET_INFO *get_charset(uint32_t cs_number);
40
DRIZZLED_API const CHARSET_INFO *get_charset_by_name(const char *cs_name);
41
DRIZZLED_API const CHARSET_INFO *get_charset_by_csname(const char *cs_name, uint32_t cs_flags);
43
extern bool resolve_charset(const char *cs_name,
44
const CHARSET_INFO *default_cs,
45
const CHARSET_INFO **cs);
46
extern bool resolve_collation(const char *cl_name,
47
const CHARSET_INFO *default_cl,
48
const CHARSET_INFO **cl);
50
extern void free_charsets(void);
51
extern char *get_charsets_dir(char *buf);
52
extern bool my_charset_same(const CHARSET_INFO *cs1, const CHARSET_INFO *cs2);
53
extern bool init_compiled_charsets(myf flags);
54
extern void add_compiled_collation(CHARSET_INFO *cs);
55
extern size_t escape_string_for_drizzle(const CHARSET_INFO *charset_info,
56
char *to, size_t to_length,
57
const char *from, size_t length);
58
extern size_t escape_quotes_for_drizzle(const CHARSET_INFO *charset_info,
59
char *to, size_t to_length,
60
const char *from, size_t length);
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
43
/* wm_wc and wc_mb return codes */
44
#define MY_CS_ILSEQ 0 /* Wrong by sequence: wb_wc */
45
#define MY_CS_ILUNI 0 /* Cannot encode Unicode to charset: wc_mb */
46
#define MY_CS_TOOSMALL -101 /* Need at least one byte: wc_mb and mb_wc */
47
#define MY_CS_TOOSMALL2 -102 /* Need at least two bytes: wc_mb and mb_wc */
48
#define MY_CS_TOOSMALL3 -103 /* Need at least three bytes: wc_mb and mb_wc */
49
/* These following three are currently not really used */
50
#define MY_CS_TOOSMALL4 -104 /* Need at least 4 bytes: wc_mb and mb_wc */
51
#define MY_CS_TOOSMALL5 -105 /* Need at least 5 bytes: wc_mb and mb_wc */
52
#define MY_CS_TOOSMALL6 -106 /* Need at least 6 bytes: wc_mb and mb_wc */
53
#define MY_SEQ_INTTAIL 1
54
#define MY_SEQ_SPACES 2
55
#define MY_CS_COMPILED 1 /* compiled-in sets */
56
#define MY_CS_CONFIG 2 /* sets that have a *.conf file */
57
#define MY_CS_INDEX 4 /* sets listed in the Index file */
58
#define MY_CS_LOADED 8 /* sets that are currently loaded */
59
#define MY_CS_BINSORT 16 /* if binary sort order */
60
#define MY_CS_PRIMARY 32 /* if primary collation */
61
#define MY_CS_STRNXFRM 64 /* if strnxfrm is used for sort */
62
#define MY_CS_UNICODE 128 /* is a charset is full unicode */
63
#define MY_CS_READY 256 /* if a charset is initialized */
64
#define MY_CS_AVAILABLE 512 /* If either compiled-in or loaded*/
65
#define MY_CS_CSSORT 1024 /* if case sensitive sort order */
66
#define MY_CS_HIDDEN 2048 /* don't display in SHOW */
67
#define MY_CS_NONASCII 8192 /* if not ASCII-compatible */
68
#define MY_CHARSET_UNDEFINED 0
69
/* Flags for strxfrm */
70
#define MY_STRXFRM_LEVEL1 0x00000001 /* for primary weights */
71
#define MY_STRXFRM_LEVEL2 0x00000002 /* for secondary weights */
72
#define MY_STRXFRM_LEVEL3 0x00000004 /* for tertiary weights */
73
#define MY_STRXFRM_LEVEL4 0x00000008 /* fourth level weights */
74
#define MY_STRXFRM_LEVEL5 0x00000010 /* fifth level weights */
75
#define MY_STRXFRM_LEVEL6 0x00000020 /* sixth level weights */
76
#define MY_STRXFRM_LEVEL_ALL 0x0000003F /* Bit OR for the above six */
77
#define MY_STRXFRM_NLEVELS 6 /* Number of possible levels*/
78
#define MY_STRXFRM_PAD_WITH_SPACE 0x00000040 /* if pad result with spaces */
79
#define MY_STRXFRM_UNUSED_00000080 0x00000080 /* for future extensions */
80
#define MY_STRXFRM_DESC_LEVEL1 0x00000100 /* if desc order for level1 */
81
#define MY_STRXFRM_DESC_LEVEL2 0x00000200 /* if desc order for level2 */
82
#define MY_STRXFRM_DESC_LEVEL3 0x00000300 /* if desc order for level3 */
83
#define MY_STRXFRM_DESC_LEVEL4 0x00000800 /* if desc order for level4 */
84
#define MY_STRXFRM_DESC_LEVEL5 0x00001000 /* if desc order for level5 */
85
#define MY_STRXFRM_DESC_LEVEL6 0x00002000 /* if desc order for level6 */
86
#define MY_STRXFRM_DESC_SHIFT 8
87
#define MY_STRXFRM_UNUSED_00004000 0x00004000 /* for future extensions */
88
#define MY_STRXFRM_UNUSED_00008000 0x00008000 /* for future extensions */
89
#define MY_STRXFRM_REVERSE_LEVEL1 0x00010000 /* if reverse order for level1 */
90
#define MY_STRXFRM_REVERSE_LEVEL2 0x00020000 /* if reverse order for level2 */
91
#define MY_STRXFRM_REVERSE_LEVEL3 0x00040000 /* if reverse order for level3 */
92
#define MY_STRXFRM_REVERSE_LEVEL4 0x00080000 /* if reverse order for level4 */
93
#define MY_STRXFRM_REVERSE_LEVEL5 0x00100000 /* if reverse order for level5 */
94
#define MY_STRXFRM_REVERSE_LEVEL6 0x00200000 /* if reverse order for level6 */
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
100
#define _MY_U 01 /* Upper case */
101
#define _MY_L 02 /* Lower case */
102
#define _MY_NMR 04 /* Numeral (digit) */
103
#define _MY_SPC 010 /* Spacing character */
104
#define _MY_PNT 020 /* Punctuation */
105
#define _MY_CTR 040 /* Control character */
106
#define _MY_B 0100 /* Blank */
107
#define _MY_X 0200 /* heXadecimal digit */
109
/* Some typedef to make it easy for C++ to make function pointers */
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);
114
struct MY_UNICASE_INFO
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
157
/* See strings/charset_info_st.txt for information about this structure */
158
struct MY_COLLATION_HANDLER
160
bool (*init)(charset_info_st&, unsigned char *(*alloc)(size_t));
161
/* 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);
174
/* Hash calculation */
175
void (*hash_sort)(const charset_info_st*, const unsigned char *key, size_t len, uint32_t *nr1, uint32_t *nr2);
179
/* See strings/charset_info_st.txt about information on this structure */
180
struct MY_CHARSET_HANDLER
182
/* 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);
191
/* Unicode conversion */
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);
198
/* 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 *);
202
my_charset_conv_case caseup;
203
my_charset_conv_case casedn;
205
/* Charset dependant snprintf() */
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);
216
/* 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);
227
/* See strings/charset_info_st.txt about information on this structure */
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;
245
MY_UNI_IDX *tab_from_uni;
246
MY_UNICASE_INFO **caseinfo;
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; /* For LIKE optimization */
256
unsigned char pad_char;
257
unsigned char levels_for_compare;
258
unsigned char levels_for_order;
260
MY_CHARSET_HANDLER *cset;
261
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
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);
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;
376
extern MY_UNICASE_INFO *my_unicase_default[256];
377
extern MY_UNICASE_INFO *my_unicase_turkish[256];
378
extern MY_UNI_CTYPE my_uni_ctype[256];
379
extern DRIZZLED_API charset_info_st my_charset_bin;
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);
393
/* 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*,
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);
446
/* Functions for multibyte charsets */
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,
458
my_match_t *match, uint32_t nmatch);
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);
484
int my_wildcmp_unicode(const charset_info_st*,
485
const char *str, const char *str_end,
486
const char *wildstr, const char *wildend,
487
int escape, int w_one, int w_many,
488
MY_UNICASE_INFO **weights);
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*);
504
Compare 0-terminated UTF8 strings.
507
my_strcasecmp_utf8mb3()
508
cs character set handler
509
s First 0-terminated string to compare
510
t Second 0-terminated string to compare
515
- negative number if s < t
516
- positive number if s > t
517
- 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*,
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,
541
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*,
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);
62
652
} /* namespace drizzled */