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>
28
#include <drizzled/visibility.h>
23
29
#include <drizzled/definitions.h>
25
#include <drizzled/visibility.h>
30
struct charset_info_st;
34
#define MY_CS_NAME_SIZE 32
35
#define MY_CS_CTYPE_TABLE_SIZE 257
36
#define MY_CS_TO_LOWER_TABLE_SIZE 256
37
#define MY_CS_TO_UPPER_TABLE_SIZE 256
38
#define MY_CS_SORT_ORDER_TABLE_SIZE 256
39
#define MY_CS_TO_UNI_TABLE_SIZE 256
40
#define CHARSET_DIR "charsets/"
41
#define my_wc_t unsigned long
42
/* wm_wc and wc_mb return codes */
43
#define MY_CS_ILSEQ 0 /* Wrong by sequence: wb_wc */
44
#define MY_CS_ILUNI 0 /* Cannot encode Unicode to charset: wc_mb */
45
#define MY_CS_TOOSMALL -101 /* Need at least one byte: wc_mb and mb_wc */
46
#define MY_CS_TOOSMALL2 -102 /* Need at least two bytes: wc_mb and mb_wc */
47
#define MY_CS_TOOSMALL3 -103 /* Need at least three bytes: wc_mb and mb_wc */
48
/* These following three are currently not really used */
49
#define MY_CS_TOOSMALL4 -104 /* Need at least 4 bytes: wc_mb and mb_wc */
50
#define MY_CS_TOOSMALL5 -105 /* Need at least 5 bytes: wc_mb and mb_wc */
51
#define MY_CS_TOOSMALL6 -106 /* Need at least 6 bytes: wc_mb and mb_wc */
52
#define MY_SEQ_INTTAIL 1
53
#define MY_SEQ_SPACES 2
54
#define MY_CS_COMPILED 1 /* compiled-in sets */
55
#define MY_CS_CONFIG 2 /* sets that have a *.conf file */
56
#define MY_CS_INDEX 4 /* sets listed in the Index file */
57
#define MY_CS_LOADED 8 /* sets that are currently loaded */
58
#define MY_CS_BINSORT 16 /* if binary sort order */
59
#define MY_CS_PRIMARY 32 /* if primary collation */
60
#define MY_CS_STRNXFRM 64 /* if strnxfrm is used for sort */
61
#define MY_CS_UNICODE 128 /* is a charset is full unicode */
62
#define MY_CS_READY 256 /* if a charset is initialized */
63
#define MY_CS_AVAILABLE 512 /* If either compiled-in or loaded*/
64
#define MY_CS_CSSORT 1024 /* if case sensitive sort order */
65
#define MY_CS_HIDDEN 2048 /* don't display in SHOW */
66
#define MY_CS_NONASCII 8192 /* if not ASCII-compatible */
67
#define MY_CHARSET_UNDEFINED 0
68
/* Flags for strxfrm */
69
#define MY_STRXFRM_LEVEL1 0x00000001 /* for primary weights */
70
#define MY_STRXFRM_LEVEL2 0x00000002 /* for secondary weights */
71
#define MY_STRXFRM_LEVEL3 0x00000004 /* for tertiary weights */
72
#define MY_STRXFRM_LEVEL4 0x00000008 /* fourth level weights */
73
#define MY_STRXFRM_LEVEL5 0x00000010 /* fifth level weights */
74
#define MY_STRXFRM_LEVEL6 0x00000020 /* sixth level weights */
75
#define MY_STRXFRM_LEVEL_ALL 0x0000003F /* Bit OR for the above six */
76
#define MY_STRXFRM_NLEVELS 6 /* Number of possible levels*/
77
#define MY_STRXFRM_PAD_WITH_SPACE 0x00000040 /* if pad result with spaces */
78
#define MY_STRXFRM_UNUSED_00000080 0x00000080 /* for future extensions */
79
#define MY_STRXFRM_DESC_LEVEL1 0x00000100 /* if desc order for level1 */
80
#define MY_STRXFRM_DESC_LEVEL2 0x00000200 /* if desc order for level2 */
81
#define MY_STRXFRM_DESC_LEVEL3 0x00000300 /* if desc order for level3 */
82
#define MY_STRXFRM_DESC_LEVEL4 0x00000800 /* if desc order for level4 */
83
#define MY_STRXFRM_DESC_LEVEL5 0x00001000 /* if desc order for level5 */
84
#define MY_STRXFRM_DESC_LEVEL6 0x00002000 /* if desc order for level6 */
85
#define MY_STRXFRM_DESC_SHIFT 8
86
#define MY_STRXFRM_UNUSED_00004000 0x00004000 /* for future extensions */
87
#define MY_STRXFRM_UNUSED_00008000 0x00008000 /* for future extensions */
88
#define MY_STRXFRM_REVERSE_LEVEL1 0x00010000 /* if reverse order for level1 */
89
#define MY_STRXFRM_REVERSE_LEVEL2 0x00020000 /* if reverse order for level2 */
90
#define MY_STRXFRM_REVERSE_LEVEL3 0x00040000 /* if reverse order for level3 */
91
#define MY_STRXFRM_REVERSE_LEVEL4 0x00080000 /* if reverse order for level4 */
92
#define MY_STRXFRM_REVERSE_LEVEL5 0x00100000 /* if reverse order for level5 */
93
#define MY_STRXFRM_REVERSE_LEVEL6 0x00200000 /* if reverse order for level6 */
94
#define MY_STRXFRM_REVERSE_SHIFT 16
95
#define ILLEGAL_CHARSET_INFO_NUMBER (UINT32_MAX)
96
#define MY_UTF8MB4 "utf8"
97
#define my_charset_utf8_general_ci ::drizzled::my_charset_utf8mb4_general_ci
98
#define my_charset_utf8_bin ::drizzled::my_charset_utf8mb4_bin
99
#define _MY_U 01 /* Upper case */
100
#define _MY_L 02 /* Lower case */
101
#define _MY_NMR 04 /* Numeral (digit) */
102
#define _MY_SPC 010 /* Spacing character */
103
#define _MY_PNT 020 /* Punctuation */
104
#define _MY_CTR 040 /* Control character */
105
#define _MY_B 0100 /* Blank */
106
#define _MY_X 0200 /* heXadecimal digit */
108
/* Some typedef to make it easy for C++ to make function pointers */
109
typedef int (*my_charset_conv_mb_wc)(const struct charset_info_st * const, my_wc_t *,
110
const unsigned char *, const unsigned char *);
111
typedef int (*my_charset_conv_wc_mb)(const struct charset_info_st * const, my_wc_t,
112
unsigned char *, unsigned char *);
113
typedef size_t (*my_charset_conv_case)(const struct charset_info_st * const,
114
char *, size_t, char *, size_t);
115
struct charset_info_st;
116
typedef struct unicase_info_st
123
typedef struct uni_ctype_st
125
unsigned char pctype;
126
unsigned char *ctype;
129
/* A helper function for "need at least n bytes" */
130
inline static int my_cs_toosmalln(int n)
135
typedef struct my_uni_idx_st
151
MY_LEX_START, MY_LEX_CHAR, MY_LEX_IDENT,
152
MY_LEX_IDENT_SEP, MY_LEX_IDENT_START,
153
MY_LEX_REAL, MY_LEX_HEX_NUMBER, MY_LEX_BIN_NUMBER,
154
MY_LEX_CMP_OP, MY_LEX_LONG_CMP_OP, MY_LEX_STRING, MY_LEX_COMMENT, MY_LEX_END,
155
MY_LEX_OPERATOR_OR_IDENT, MY_LEX_NUMBER_IDENT, MY_LEX_INT_OR_REAL,
156
MY_LEX_REAL_OR_POINT, MY_LEX_BOOL, MY_LEX_EOL, MY_LEX_ESCAPE,
157
MY_LEX_LONG_COMMENT, MY_LEX_END_LONG_COMMENT, MY_LEX_SEMICOLON,
158
MY_LEX_SET_VAR, MY_LEX_USER_END, MY_LEX_HOSTNAME, MY_LEX_SKIP,
159
MY_LEX_USER_VARIABLE_DELIMITER, MY_LEX_SYSTEM_VAR,
160
MY_LEX_IDENT_OR_KEYWORD,
161
MY_LEX_IDENT_OR_HEX, MY_LEX_IDENT_OR_BIN,
162
MY_LEX_STRING_OR_DELIMITER
165
struct charset_info_st;
167
/* See strings/charset_info_st.txt for information about this structure */
168
typedef struct my_collation_handler_st
170
bool (*init)(struct charset_info_st *, unsigned char *(*alloc)(size_t));
171
/* Collation routines */
172
int (*strnncoll)(const struct charset_info_st * const,
173
const unsigned char *, size_t, const unsigned char *, size_t, bool);
174
int (*strnncollsp)(const struct charset_info_st * const,
175
const unsigned char *, size_t, const unsigned char *, size_t,
176
bool diff_if_only_endspace_difference);
177
size_t (*strnxfrm)(const struct charset_info_st * const,
178
unsigned char *dst, size_t dstlen, uint32_t nweights,
179
const unsigned char *src, size_t srclen, uint32_t flags);
180
size_t (*strnxfrmlen)(const struct charset_info_st * const, size_t);
181
bool (*like_range)(const struct charset_info_st * const,
182
const char *s, size_t s_length,
183
char escape, char w_one, char w_many,
185
char *min_str, char *max_str,
186
size_t *min_len, size_t *max_len);
187
int (*wildcmp)(const struct charset_info_st * const,
188
const char *str,const char *str_end,
189
const char *wildstr,const char *wildend,
190
int escape,int w_one, int w_many);
192
int (*strcasecmp)(const struct charset_info_st * const, const char *, const char *);
194
uint32_t (*instr)(const struct charset_info_st * const,
195
const char *b, size_t b_length,
196
const char *s, size_t s_length,
197
my_match_t *match, uint32_t nmatch);
199
/* Hash calculation */
200
void (*hash_sort)(const struct charset_info_st *cs, const unsigned char *key, size_t len,
201
uint32_t *nr1, uint32_t *nr2);
202
bool (*propagate)(const struct charset_info_st *cs, const unsigned char *str, size_t len);
203
} MY_COLLATION_HANDLER;
205
/* See strings/charset_info_st.txt about information on this structure */
206
typedef struct my_charset_handler_st
208
bool (*init)(struct charset_info_st *, unsigned char *(*alloc)(size_t));
209
/* Multibyte routines */
210
uint32_t (*ismbchar)(const struct charset_info_st * const, const char *, const char *);
211
uint32_t (*mbcharlen)(const struct charset_info_st * const, uint32_t c);
212
size_t (*numchars)(const struct charset_info_st * const, const char *b, const char *e);
213
size_t (*charpos)(const struct charset_info_st * const, const char *b, const char *e,
215
size_t (*well_formed_len)(const struct charset_info_st * const,
216
const char *b,const char *e,
217
size_t nchars, int *error);
218
size_t (*lengthsp)(const struct charset_info_st * const, const char *ptr, size_t length);
219
size_t (*numcells)(const struct charset_info_st * const, const char *b, const char *e);
221
/* Unicode conversion */
222
my_charset_conv_mb_wc mb_wc;
223
my_charset_conv_wc_mb wc_mb;
226
int (*ctype)(const struct charset_info_st *cs, int *ctype,
227
const unsigned char *s, const unsigned char *e);
229
/* Functions for case and sort conversion */
230
size_t (*caseup_str)(const struct charset_info_st * const, char *);
231
size_t (*casedn_str)(const struct charset_info_st * const, char *);
233
my_charset_conv_case caseup;
234
my_charset_conv_case casedn;
236
/* Charset dependant snprintf() */
237
size_t (*snprintf)(const struct charset_info_st * const, char *to, size_t n,
240
#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
241
__attribute__((format(printf, 4, 5)))
244
size_t (*long10_to_str)(const struct charset_info_st * const, char *to, size_t n,
245
int radix, long int val);
246
size_t (*int64_t10_to_str)(const struct charset_info_st * const, char *to, size_t n,
247
int radix, int64_t val);
249
void (*fill)(const struct charset_info_st * const, char *to, size_t len, int fill);
251
/* String-to-number conversion routines */
252
long (*strntol)(const struct charset_info_st * const, const char *s, size_t l,
253
int base, char **e, int *err);
254
unsigned long (*strntoul)(const struct charset_info_st * const, const char *s, size_t l,
255
int base, char **e, int *err);
256
int64_t (*strntoll)(const struct charset_info_st * const, const char *s, size_t l,
257
int base, char **e, int *err);
258
uint64_t (*strntoull)(const struct charset_info_st * const, const char *s, size_t l,
259
int base, char **e, int *err);
260
double (*strntod)(const struct charset_info_st * const, char *s, size_t l, char **e,
262
int64_t (*strtoll10)(const struct charset_info_st *cs,
263
const char *nptr, char **endptr, int *error);
264
uint64_t (*strntoull10rnd)(const struct charset_info_st *cs,
265
const char *str, size_t length,
267
char **endptr, int *error);
268
size_t (*scan)(const struct charset_info_st * const, const char *b, const char *e,
270
} MY_CHARSET_HANDLER;
273
/* See strings/charset_info_st.txt about information on this structure */
274
struct charset_info_st
277
uint32_t primary_number;
278
uint32_t binary_number;
283
const char *tailoring;
284
unsigned char *ctype;
285
unsigned char *to_lower;
286
unsigned char *to_upper;
287
unsigned char *sort_order;
288
uint16_t *contractions;
289
uint16_t **sort_order_big;
290
uint16_t *tab_to_uni;
291
MY_UNI_IDX *tab_from_uni;
292
MY_UNICASE_INFO **caseinfo;
293
unsigned char *state_map;
294
unsigned char *ident_map;
295
uint32_t strxfrm_multiply;
296
unsigned char caseup_multiply;
297
unsigned char casedn_multiply;
300
uint16_t min_sort_char;
301
uint16_t max_sort_char; /* For LIKE optimization */
302
unsigned char pad_char;
303
bool escape_with_backslash_is_dangerous;
304
unsigned char levels_for_compare;
305
unsigned char levels_for_order;
307
MY_CHARSET_HANDLER *cset;
308
MY_COLLATION_HANDLER *coll;
32
312
extern DRIZZLED_API charset_info_st *all_charsets[256];
33
313
extern charset_info_st compiled_charsets[];
35
314
extern uint32_t get_charset_number(const char *cs_name, uint32_t cs_flags);
36
315
extern uint32_t get_collation_number(const char *name);
37
316
extern const char *get_charset_name(uint32_t cs_number);
39
DRIZZLED_API const charset_info_st *get_charset(uint32_t cs_number);
40
DRIZZLED_API const charset_info_st *get_charset_by_name(const char *cs_name);
41
DRIZZLED_API const charset_info_st *get_charset_by_csname(const char *cs_name, uint32_t cs_flags);
43
317
extern bool resolve_charset(const char *cs_name,
44
318
const charset_info_st *default_cs,
45
319
const charset_info_st **cs);
46
320
extern bool resolve_collation(const char *cl_name,
47
321
const charset_info_st *default_cl,
48
322
const charset_info_st **cl);
50
323
extern void free_charsets(void);
51
324
extern char *get_charsets_dir(char *buf);
52
325
extern bool my_charset_same(const charset_info_st *cs1, const charset_info_st *cs2);
58
331
extern size_t escape_quotes_for_drizzle(const charset_info_st *charset_info,
59
332
char *to, size_t to_length,
60
333
const char *from, size_t length);
334
extern DRIZZLED_API const charset_info_st *default_charset_info;
335
extern DRIZZLED_API const charset_info_st *system_charset_info;
336
extern const charset_info_st *files_charset_info;
337
extern const charset_info_st *table_alias_charset;
338
extern MY_UNICASE_INFO *my_unicase_default[256];
339
extern MY_UNICASE_INFO *my_unicase_turkish[256];
340
extern MY_UNI_CTYPE my_uni_ctype[256];
341
extern MY_COLLATION_HANDLER my_collation_mb_bin_handler;
342
extern MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler;
343
extern MY_COLLATION_HANDLER my_collation_ucs2_uca_handler;
344
extern DRIZZLED_API charset_info_st my_charset_bin;
345
extern DRIZZLED_API charset_info_st my_charset_utf8mb4_bin;
346
extern DRIZZLED_API charset_info_st my_charset_utf8mb4_general_ci;
347
extern DRIZZLED_API charset_info_st my_charset_utf8mb4_unicode_ci;
348
size_t my_strnxfrmlen_simple(const charset_info_st * const, size_t);
349
extern int my_strnncollsp_simple(const charset_info_st * const, const unsigned char *, size_t,
350
const unsigned char *, size_t,
351
bool diff_if_only_endspace_difference);
352
extern size_t my_lengthsp_8bit(const charset_info_st * const cs, const char *ptr, size_t length);
353
extern uint32_t my_instr_simple(const charset_info_st * const,
354
const char *b, size_t b_length,
355
const char *s, size_t s_length,
356
my_match_t *match, uint32_t nmatch);
357
extern MY_CHARSET_HANDLER my_charset_8bit_handler;
358
extern MY_CHARSET_HANDLER my_charset_ucs2_handler;
359
extern size_t my_caseup_str_mb(const charset_info_st * const, char *);
360
extern size_t my_casedn_str_mb(const charset_info_st * const, char *);
361
extern size_t my_caseup_mb(const charset_info_st * const, char *src, size_t srclen,
362
char *dst, size_t dstlen);
363
extern size_t my_casedn_mb(const charset_info_st * const, char *src, size_t srclen,
364
char *dst, size_t dstlen);
365
extern int my_strcasecmp_mb(const charset_info_st * const cs, const char *s, const char *t);
366
extern bool my_parse_charset_xml(const char *bug, size_t len,
367
int (*add)(charset_info_st *cs));
369
DRIZZLED_API const charset_info_st *get_charset(uint32_t cs_number);
370
DRIZZLED_API const charset_info_st *get_charset_by_name(const char *cs_name);
371
DRIZZLED_API const charset_info_st *get_charset_by_csname(const char *cs_name, uint32_t cs_flags);
373
/* Functions for 8bit */
374
int my_mb_ctype_8bit(const charset_info_st * const,int *, const unsigned char *,const unsigned char *);
375
int my_mb_ctype_mb(const charset_info_st * const,int *, const unsigned char *,const unsigned char *);
377
size_t my_scan_8bit(const charset_info_st * const cs, const char *b, const char *e, int sq);
379
size_t my_snprintf_8bit(const charset_info_st * const, char *to, size_t n,
380
const char *fmt, ...)
381
__attribute__((format(printf, 4, 5)));
383
long my_strntol_8bit(const charset_info_st * const, const char *s, size_t l, int base,
385
unsigned long my_strntoul_8bit(const charset_info_st * const, const char *s, size_t l, int base,
387
int64_t my_strntoll_8bit(const charset_info_st * const, const char *s, size_t l, int base,
389
uint64_t my_strntoull_8bit(const charset_info_st * const, const char *s, size_t l, int base,
391
double my_strntod_8bit(const charset_info_st * const, char *s, size_t l,char **e,
393
size_t my_long10_to_str_8bit(const charset_info_st * const, char *to, size_t l, int radix,
395
size_t my_int64_t10_to_str_8bit(const charset_info_st * const, char *to, size_t l, int radix,
397
int64_t my_strtoll10_8bit(const charset_info_st * const cs,
398
const char *nptr, char **endptr, int *error);
399
int64_t my_strtoll10_ucs2(charset_info_st *cs,
400
const char *nptr, char **endptr, int *error);
402
uint64_t my_strntoull10rnd_8bit(const charset_info_st * const cs,
403
const char *str, size_t length, int
404
unsigned_fl, char **endptr, int *error);
405
uint64_t my_strntoull10rnd_ucs2(charset_info_st *cs,
406
const char *str, size_t length,
407
int unsigned_fl, char **endptr, int *error);
409
void my_fill_8bit(const charset_info_st * const cs, char* to, size_t l, int fill);
411
bool my_like_range_simple(const charset_info_st * const cs,
412
const char *ptr, size_t ptr_length,
413
char escape, char w_one, char w_many,
415
char *min_str, char *max_str,
416
size_t *min_length, size_t *max_length);
418
bool my_like_range_mb(const charset_info_st * const cs,
419
const char *ptr, size_t ptr_length,
420
char escape, char w_one, char w_many,
422
char *min_str, char *max_str,
423
size_t *min_length, size_t *max_length);
425
bool my_like_range_ucs2(const charset_info_st * const cs,
426
const char *ptr, size_t ptr_length,
427
char escape, char w_one, char w_many,
429
char *min_str, char *max_str,
430
size_t *min_length, size_t *max_length);
432
bool my_like_range_utf16(const charset_info_st * const cs,
433
const char *ptr, size_t ptr_length,
434
char escape, char w_one, char w_many,
436
char *min_str, char *max_str,
437
size_t *min_length, size_t *max_length);
439
bool my_like_range_utf32(const charset_info_st * const cs,
440
const char *ptr, size_t ptr_length,
441
char escape, char w_one, char w_many,
443
char *min_str, char *max_str,
444
size_t *min_length, size_t *max_length);
447
int my_wildcmp_8bit(const charset_info_st * const,
448
const char *str,const char *str_end,
449
const char *wildstr,const char *wildend,
450
int escape, int w_one, int w_many);
452
int my_wildcmp_bin(const charset_info_st * const,
453
const char *str,const char *str_end,
454
const char *wildstr,const char *wildend,
455
int escape, int w_one, int w_many);
457
size_t my_numchars_8bit(const charset_info_st * const, const char *b, const char *e);
458
size_t my_numcells_8bit(const charset_info_st * const, const char *b, const char *e);
459
size_t my_charpos_8bit(const charset_info_st * const, const char *b, const char *e, size_t pos);
460
size_t my_well_formed_len_8bit(const charset_info_st * const, const char *b, const char *e,
461
size_t pos, int *error);
462
typedef unsigned char *(*cs_alloc_func)(size_t);
463
bool my_coll_init_simple(charset_info_st *cs, cs_alloc_func alloc);
464
bool my_cset_init_8bit(charset_info_st *cs, cs_alloc_func alloc);
465
uint32_t my_mbcharlen_8bit(const charset_info_st * const, uint32_t c);
467
/* Functions for multibyte charsets */
468
int my_wildcmp_mb(const charset_info_st * const,
469
const char *str,const char *str_end,
470
const char *wildstr,const char *wildend,
471
int escape, int w_one, int w_many);
472
size_t my_numchars_mb(const charset_info_st * const, const char *b, const char *e);
473
size_t my_numcells_mb(const charset_info_st * const, const char *b, const char *e);
474
size_t my_charpos_mb(const charset_info_st * const, const char *b, const char *e, size_t pos);
475
size_t my_well_formed_len_mb(const charset_info_st * const, const char *b, const char *e,
476
size_t pos, int *error);
477
uint32_t my_instr_mb(const charset_info_st * const,
478
const char *b, size_t b_length,
479
const char *s, size_t s_length,
480
my_match_t *match, uint32_t nmatch);
482
int my_strnncoll_mb_bin(const charset_info_st * const cs,
483
const unsigned char *s, size_t slen,
484
const unsigned char *t, size_t tlen,
487
int my_strnncollsp_mb_bin(const charset_info_st * const cs,
488
const unsigned char *a, size_t a_length,
489
const unsigned char *b, size_t b_length,
490
bool diff_if_only_endspace_difference);
492
int my_wildcmp_mb_bin(const charset_info_st * const cs,
493
const char *str,const char *str_end,
494
const char *wildstr,const char *wildend,
495
int escape, int w_one, int w_many);
497
int my_strcasecmp_mb_bin(const charset_info_st * const, const char *s, const char *t);
499
void my_hash_sort_mb_bin(const charset_info_st * const,
500
const unsigned char *key, size_t len, uint32_t *nr1, uint32_t *nr2);
502
size_t my_strnxfrm_mb(const charset_info_st * const,
503
unsigned char *dst, size_t dstlen, uint32_t nweights,
504
const unsigned char *src, size_t srclen, uint32_t flags);
506
int my_wildcmp_unicode(const charset_info_st * const cs,
507
const char *str, const char *str_end,
508
const char *wildstr, const char *wildend,
509
int escape, int w_one, int w_many,
510
MY_UNICASE_INFO **weights);
512
bool my_propagate_simple(const charset_info_st * const cs, const unsigned char *str, size_t len);
513
bool my_propagate_complex(const charset_info_st * const cs, const unsigned char *str, size_t len);
516
uint32_t my_strxfrm_flag_normalize(uint32_t flags, uint32_t nlevels);
517
void my_strxfrm_desc_and_reverse(unsigned char *str, unsigned char *strend,
518
uint32_t flags, uint32_t level);
519
size_t my_strxfrm_pad_desc_and_reverse(const charset_info_st * const cs,
520
unsigned char *str, unsigned char *frmend, unsigned char *strend,
521
uint32_t nweights, uint32_t flags, uint32_t level);
523
bool my_charset_is_ascii_compatible(const charset_info_st * const cs);
526
Compare 0-terminated UTF8 strings.
529
my_strcasecmp_utf8mb3()
530
cs character set handler
531
s First 0-terminated string to compare
532
t Second 0-terminated string to compare
537
- negative number if s < t
538
- positive number if s > t
539
- 0 is the strings are equal
541
int my_wc_mb_filename(const charset_info_st * const,
542
my_wc_t wc, unsigned char *s, unsigned char *e);
544
int my_mb_wc_filename(const charset_info_st * const,
545
my_wc_t *pwc, const unsigned char *s, const unsigned char *e);
548
unsigned int my_ismbchar_utf8mb4(const charset_info_st * const cs, const char *b, const char *e);
549
unsigned int my_mbcharlen_utf8mb4(const charset_info_st * const, uint32_t c);
551
size_t my_strnxfrmlen_utf8mb4(const charset_info_st * const, size_t len);
553
my_strnxfrm_utf8mb4(const charset_info_st * const cs,
554
unsigned char *dst, size_t dstlen, uint32_t nweights,
555
const unsigned char *src, size_t srclen, uint32_t flags);
557
int my_wildcmp_utf8mb4(const charset_info_st * const cs,
558
const char *str, const char *strend,
559
const char *wildstr, const char *wildend,
560
int escape, int w_one, int w_many);
561
int my_strnncollsp_utf8mb4(const charset_info_st * const cs,
562
const unsigned char *s, size_t slen,
563
const unsigned char *t, size_t tlen,
564
bool diff_if_only_endspace_difference);
565
int my_strcasecmp_utf8mb4(const charset_info_st * const cs,
566
const char *s, const char *t);
568
int my_strnncoll_utf8mb4(const charset_info_st * const cs,
569
const unsigned char *s, size_t slen,
570
const unsigned char *t, size_t tlen,
573
int my_mb_wc_utf8mb4(const charset_info_st * const cs,
574
my_wc_t * pwc, const unsigned char *s, const unsigned char *e);
576
int my_wc_mb_utf8mb4(const charset_info_st * const cs,
577
my_wc_t wc, unsigned char *r, unsigned char *e);
579
size_t my_caseup_str_utf8mb4(const charset_info_st * const cs, char *src);
580
size_t my_casedn_str_utf8mb4(const charset_info_st * const cs, char *src);
582
size_t my_caseup_utf8mb4(const charset_info_st * const cs, char *src, size_t srclen,
583
char *dst, size_t dstlen);
584
size_t my_casedn_utf8mb4(const charset_info_st * const cs,
585
char *src, size_t srclen,
586
char *dst, size_t dstlen);
589
bool my_coll_init_uca(charset_info_st *cs, cs_alloc_func alloc);
591
int my_strnncoll_any_uca(const charset_info_st * const cs,
592
const unsigned char *s, size_t slen,
593
const unsigned char *t, size_t tlen,
596
int my_strnncollsp_any_uca(const charset_info_st * const cs,
597
const unsigned char *s, size_t slen,
598
const unsigned char *t, size_t tlen,
599
bool diff_if_only_endspace_difference);
601
void my_hash_sort_any_uca(const charset_info_st * const cs,
602
const unsigned char *s, size_t slen,
603
uint32_t *n1, uint32_t *n2);
605
size_t my_strnxfrm_any_uca(const charset_info_st * const cs,
606
unsigned char *dst, size_t dstlen, uint32_t nweights,
607
const unsigned char *src, size_t srclen,
610
int my_wildcmp_uca(const charset_info_st * const cs,
611
const char *str,const char *str_end,
612
const char *wildstr,const char *wildend,
613
int escape, int w_one, int w_many);
615
int my_strnncoll_8bit_bin(const charset_info_st * const,
616
const unsigned char *s, size_t slen,
617
const unsigned char *t, size_t tlen,
619
int my_strnncollsp_8bit_bin(const charset_info_st * const,
620
const unsigned char *a, size_t a_length,
621
const unsigned char *b, size_t b_length,
622
bool diff_if_only_endspace_difference);
623
size_t my_case_str_bin(const charset_info_st * const, char *);
624
size_t my_case_bin(const charset_info_st * const, char *,
625
size_t srclen, char *, size_t);
626
int my_strcasecmp_bin(const charset_info_st * const,
627
const char *s, const char *t);
628
size_t my_strnxfrm_8bit_bin(const charset_info_st * const cs,
629
unsigned char * dst, size_t dstlen, uint32_t nweights,
630
const unsigned char *src, size_t srclen, uint32_t flags);
631
uint32_t my_instr_bin(const charset_info_st * const,
632
const char *b, size_t b_length,
633
const char *s, size_t s_length,
634
my_match_t *match, uint32_t nmatch);
635
size_t my_lengthsp_binary(const charset_info_st * const,
636
const char *, size_t length);
637
int my_mb_wc_bin(const charset_info_st * const,
638
my_wc_t *wc, const unsigned char *str,
639
const unsigned char *end);
640
int my_wc_mb_bin(const charset_info_st * const, my_wc_t wc,
641
unsigned char *str, unsigned char *end);
642
void my_hash_sort_8bit_bin(const charset_info_st * const,
643
const unsigned char *key, size_t len,
644
uint32_t *nr1, uint32_t *nr2);
645
bool my_coll_init_8bit_bin(charset_info_st *cs,
647
int my_strnncoll_binary(const charset_info_st * const,
648
const unsigned char *s, size_t slen,
649
const unsigned char *t, size_t tlen,
651
int my_strnncollsp_binary(const charset_info_st * const cs,
652
const unsigned char *s, size_t slen,
653
const unsigned char *t, size_t tlen,
656
inline static bool my_isascii(char c)
658
return (!(c & ~0177));
661
inline static char my_toascii(char c)
666
inline static char my_tocntrl(char c)
671
inline static char my_toprint(char c)
676
inline static char my_toupper(const charset_info_st *s, unsigned char c)
678
return s->to_upper[c];
681
inline static char my_tolower(const charset_info_st *s, unsigned char c)
683
return s->to_lower[c];
686
inline static bool my_isalpha(const charset_info_st *s, unsigned char c)
688
return (s->ctype+1)[c] & (_MY_U | _MY_L);
691
inline static bool my_isupper(const charset_info_st *s, unsigned char c)
693
return (s->ctype+1)[c] & _MY_U;
696
inline static bool my_islower(const charset_info_st *s, unsigned char c)
698
return (s->ctype+1)[c] & _MY_L;
701
inline static bool my_isdigit(const charset_info_st *s, unsigned char c)
703
return (s->ctype+1)[c] & _MY_NMR;
706
inline static bool my_isxdigit(const charset_info_st *s, unsigned char c)
708
return (s->ctype+1)[c] & _MY_X;
711
inline static bool my_isalnum(const charset_info_st *s, unsigned char c)
713
return (s->ctype+1)[c] & (_MY_U | _MY_L | _MY_NMR);
716
inline static bool my_isspace(const charset_info_st *s, unsigned char c)
718
return (s->ctype+1)[c] & _MY_SPC;
721
inline static bool my_ispunct(const charset_info_st *s, unsigned char c)
723
return (s->ctype+1)[c] & _MY_PNT;
726
inline static bool my_isprint(const charset_info_st *s, unsigned char c)
728
return (s->ctype+1)[c] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR | _MY_B);
731
inline static bool my_isgraph(const charset_info_st *s, unsigned char c)
733
return (s->ctype+1)[c] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR);
736
inline static bool my_iscntrl(const charset_info_st *s, unsigned char c)
738
return (s->ctype+1)[c] & _MY_CTR;
741
/* Some macros that should be cleaned up a little */
742
inline static bool my_isvar(const charset_info_st *s, char c)
744
return my_isalnum(s,c) || (c) == '_';
747
inline static bool my_isvar_start(const charset_info_st *s, char c)
749
return my_isalpha(s,c) || (c) == '_';
752
inline static bool my_binary_compare(const charset_info_st *s)
754
return s->state & MY_CS_BINSORT;
757
inline static bool use_strnxfrm(const charset_info_st *s)
759
return s->state & MY_CS_STRNXFRM;
762
inline static size_t my_strnxfrm(const charset_info_st *cs,
765
const unsigned char *src,
766
const uint32_t srclen)
768
return (cs->coll->strnxfrm(cs, dst, dstlen, dstlen, src, srclen, MY_STRXFRM_PAD_WITH_SPACE));
771
inline static int my_strnncoll(const charset_info_st *cs,
772
const unsigned char *s,
774
const unsigned char *t,
777
return (cs->coll->strnncoll(cs, s, slen, t, tlen, 0));
780
inline static bool my_like_range(const charset_info_st *cs,
781
const char *ptr, const size_t ptrlen,
786
char *minstr, char *maxstr,
787
size_t *minlen, size_t *maxlen)
789
return (cs->coll->like_range(cs, ptr, ptrlen, escape, w_one, w_many, reslen,
790
minstr, maxstr, minlen, maxlen));
793
inline static int my_wildcmp(const charset_info_st *cs,
794
const char *str, const char *strend,
795
const char *w_str, const char *w_strend,
797
const int w_one, const int w_many)
799
return (cs->coll->wildcmp(cs, str, strend, w_str, w_strend, escape, w_one, w_many));
802
inline static int my_strcasecmp(const charset_info_st *cs, const char *s, const char *t)
804
return (cs->coll->strcasecmp(cs, s, t));
807
template <typename CHAR_T>
808
inline static size_t my_charpos(const charset_info_st *cs,
809
const CHAR_T *b, const CHAR_T* e, size_t num)
811
return cs->cset->charpos(cs, reinterpret_cast<const char*>(b), reinterpret_cast<const char*>(e), num);
814
inline static bool use_mb(const charset_info_st *cs)
816
return cs->cset->ismbchar != NULL;
819
inline static unsigned int my_ismbchar(const charset_info_st *cs, const char *a, const char *b)
821
return cs->cset->ismbchar(cs, a, b);
824
inline static unsigned int my_mbcharlen(const charset_info_st *cs, uint32_t c)
826
return cs->cset->mbcharlen(cs, c);
830
inline static size_t my_caseup_str(const charset_info_st *cs, char *src)
832
return cs->cset->caseup_str(cs, src);
835
inline static size_t my_casedn_str(const charset_info_st *cs, char *src)
837
return cs->cset->casedn_str(cs, src);
840
inline static long my_strntol(const charset_info_st *cs,
841
const char* s, const size_t l, const int base, char **e, int *err)
843
return (cs->cset->strntol(cs, s, l, base, e, err));
846
inline static unsigned long my_strntoul(const charset_info_st *cs,
847
const char* s, const size_t l, const int base,
850
return (cs->cset->strntoul(cs, s, l, base, e, err));
853
inline static int64_t my_strntoll(const charset_info_st *cs,
854
const char* s, const size_t l, const int base, char **e, int *err)
856
return (cs->cset->strntoll(cs, s, l, base, e, err));
859
inline static int64_t my_strntoull(const charset_info_st *cs,
860
const char* s, const size_t l, const int base,
863
return (cs->cset->strntoull(cs, s, l, base, e, err));
867
inline static double my_strntod(const charset_info_st *cs,
868
char* s, const size_t l, char **e, int *err)
870
return (cs->cset->strntod(cs, s, l, e, err));
873
int make_escape_code(const charset_info_st * const cs, const char *escape);
62
875
} /* namespace drizzled */