~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/charset.h

  • Committer: Mark Atwood
  • Date: 2011-10-25 19:08:35 UTC
  • mfrom: (2445.1.6 rf)
  • Revision ID: me@mark.atwood.name-20111025190835-g21cn911ypxjd5fi
mergeĀ lp:~olafvdspek/drizzle/refactor7

Show diffs side-by-side

added added

removed removed

Lines of Context:
105
105
#define _MY_X   0200    /* heXadecimal digit */
106
106
 
107
107
/* Some typedef to make it easy for C++ to make function pointers */
108
 
typedef int (*my_charset_conv_mb_wc)(const charset_info_st*, my_wc_t *, const unsigned char *, const unsigned char *);
109
 
typedef int (*my_charset_conv_wc_mb)(const charset_info_st*, my_wc_t, unsigned char *, unsigned char *);
110
 
typedef size_t (*my_charset_conv_case)(const charset_info_st*, char *, size_t, char *, size_t);
 
108
typedef int (*my_charset_conv_mb_wc)(const charset_info_st*, my_wc_t *, const unsigned char*, const unsigned char *);
 
109
typedef int (*my_charset_conv_wc_mb)(const charset_info_st*, my_wc_t, unsigned char*, unsigned char *);
 
110
typedef size_t (*my_charset_conv_case)(const charset_info_st*, char*, size_t, char*, size_t);
111
111
 
112
112
struct MY_UNICASE_INFO
113
113
{
118
118
 
119
119
struct MY_UNI_CTYPE
120
120
{
121
 
  unsigned char  pctype;
122
 
  unsigned char  *ctype;
 
121
  unsigned char pctype;
 
122
  unsigned char* ctype;
123
123
};
124
124
 
125
 
/* A helper function for "need at least n bytes" */
126
 
inline static int my_cs_toosmalln(int n)
127
 
{
128
 
  return -100 - n;
129
 
}
130
 
 
131
125
struct MY_UNI_IDX
132
126
{
133
127
  uint16_t from;
163
157
{
164
158
  bool (*init)(charset_info_st&, unsigned char *(*alloc)(size_t));
165
159
  /* Collation routines */
166
 
  int     (*strnncoll)(const charset_info_st*,
167
 
                       const unsigned char *, size_t, const unsigned char *, size_t, bool);
168
 
  int     (*strnncollsp)(const charset_info_st*,
169
 
                         const unsigned char *, size_t, const unsigned char *, size_t,
170
 
                         bool diff_if_only_endspace_difference);
171
 
  size_t  (*strnxfrm)(const charset_info_st*,
172
 
                      unsigned char *dst, size_t dstlen, uint32_t nweights,
173
 
                      const unsigned char *src, size_t srclen, uint32_t flags);
174
 
  size_t    (*strnxfrmlen)(const charset_info_st*, size_t);
175
 
  bool (*like_range)(const charset_info_st*,
176
 
                        const char *s, size_t s_length,
177
 
                        char escape, char w_one, char w_many,
178
 
                        size_t res_length,
179
 
                        char *min_str, char *max_str,
180
 
                        size_t *min_len, size_t *max_len);
181
 
  int     (*wildcmp)(const charset_info_st*,
182
 
                     const char *str,const char *str_end,
183
 
                     const char *wildstr,const char *wildend,
184
 
                     int escape,int w_one, int w_many);
185
 
 
186
 
  int  (*strcasecmp)(const charset_info_st*, const char *, const char *);
187
 
 
188
 
  uint32_t (*instr)(const charset_info_st*,
189
 
                const char *b, size_t b_length,
190
 
                const char *s, size_t s_length,
191
 
                my_match_t *match, uint32_t nmatch);
 
160
  int (*strnncoll)(const charset_info_st*, const unsigned char*, size_t, const unsigned char*, size_t, bool);
 
161
  int (*strnncollsp)(const charset_info_st*, const unsigned char*, size_t, const unsigned char*, size_t, bool diff_if_only_endspace_difference);
 
162
  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);
 
163
  size_t (*strnxfrmlen)(const charset_info_st*, size_t);
 
164
  bool (*like_range)(const charset_info_st*, const char *s, size_t s_length, char escape, char w_one, char w_many, 
 
165
    size_t res_length, char *min_str, char *max_str, size_t *min_len, size_t *max_len);
 
166
  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);
 
167
 
 
168
  int (*strcasecmp)(const charset_info_st*, const char*, const char *);
 
169
 
 
170
  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);
192
171
 
193
172
  /* Hash calculation */
194
 
  void (*hash_sort)(const charset_info_st *cs, const unsigned char *key, size_t len,
195
 
                    uint32_t *nr1, uint32_t *nr2);
196
 
  bool (*propagate)(const charset_info_st *cs, const unsigned char *str, size_t len);
 
173
  void (*hash_sort)(const charset_info_st*, const unsigned char *key, size_t len, uint32_t *nr1, uint32_t *nr2);
 
174
  bool (*propagate)();
197
175
};
198
176
 
199
177
/* See strings/charset_info_st.txt about information on this structure  */
200
 
typedef struct my_charset_handler_st
 
178
struct MY_CHARSET_HANDLER
201
179
{
202
 
  void (*init_unused)();
203
180
  /* Multibyte routines */
204
 
  uint32_t    (*ismbchar)(const charset_info_st*, const char *, const char *);
205
 
  uint32_t    (*mbcharlen)(const charset_info_st*, uint32_t c);
206
 
  size_t  (*numchars)(const charset_info_st*, const char *b, const char *e);
207
 
  size_t  (*charpos)(const charset_info_st*, const char *b, const char *e, size_t pos);
208
 
  size_t  (*well_formed_len)(const charset_info_st&, str_ref, size_t nchars, int *error);
209
 
  size_t  (*lengthsp)(const charset_info_st*, const char *ptr, size_t length);
210
 
  size_t  (*numcells)(const charset_info_st*, const char *b, const char *e);
 
181
  uint32_t (*ismbchar)(const charset_info_st*, const char*, const char *);
 
182
  uint32_t (*mbcharlen)(const charset_info_st*, uint32_t c);
 
183
  size_t (*numchars)(const charset_info_st*, const char *b, const char *e);
 
184
  size_t (*charpos)(const charset_info_st*, const char *b, const char *e, size_t pos);
 
185
  size_t (*well_formed_len)(const charset_info_st&, str_ref, size_t nchars, int *error);
 
186
  size_t (*lengthsp)(const charset_info_st*, const char *ptr, size_t length);
 
187
  size_t (*numcells)(const charset_info_st*, const char *b, const char *e);
211
188
 
212
189
  /* Unicode conversion */
213
190
  my_charset_conv_mb_wc mb_wc;
214
191
  my_charset_conv_wc_mb wc_mb;
215
192
 
216
193
  /* CTYPE scanner */
217
 
  int (*ctype)(const charset_info_st *cs, int *ctype,
218
 
               const unsigned char *s, const unsigned char *e);
 
194
  int (*ctype)(const charset_info_st *cs, int *ctype, const unsigned char *s, const unsigned char *e);
219
195
 
220
196
  /* Functions for case and sort conversion */
221
 
  size_t  (*caseup_str)(const charset_info_st*, char *);
222
 
  size_t  (*casedn_str)(const charset_info_st*, char *);
 
197
  size_t (*caseup_str)(const charset_info_st*, char *);
 
198
  size_t (*casedn_str)(const charset_info_st*, char *);
223
199
 
224
200
  my_charset_conv_case caseup;
225
201
  my_charset_conv_case casedn;
226
202
 
227
203
  /* Charset dependant snprintf() */
228
 
  size_t (*snprintf)(const charset_info_st*, char *to, size_t n,
229
 
                     const char *fmt,
230
 
                     ...)
 
204
  size_t (*snprintf)(const charset_info_st*, char *to, size_t n, const char *fmt, ...)
231
205
#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
232
206
                         __attribute__((format(printf, 4, 5)))
233
207
#endif
234
208
                         ;
235
 
  size_t (*long10_to_str)(const charset_info_st*, char *to, size_t n,
236
 
                          int radix, long int val);
237
 
  size_t (*int64_t10_to_str)(const charset_info_st*, char *to, size_t n,
238
 
                              int radix, int64_t val);
 
209
  size_t (*long10_to_str)(const charset_info_st*, char *to, size_t n, int radix, long int val);
 
210
  size_t (*int64_t10_to_str)(const charset_info_st*, char *to, size_t n, int radix, int64_t val);
239
211
 
240
212
  void (*fill)(const charset_info_st*, char *to, size_t len, int fill);
241
213
 
242
214
  /* String-to-number conversion routines */
243
 
  long        (*strntol)(const charset_info_st*, const char *s, size_t l,
244
 
                         int base, char **e, int *err);
245
 
  unsigned long      (*strntoul)(const charset_info_st*, const char *s, size_t l,
246
 
                         int base, char **e, int *err);
247
 
  int64_t   (*strntoll)(const charset_info_st*, const char *s, size_t l,
248
 
                         int base, char **e, int *err);
249
 
  uint64_t (*strntoull)(const charset_info_st*, const char *s, size_t l,
250
 
                         int base, char **e, int *err);
251
 
  double      (*strntod)(const charset_info_st*, char *s, size_t l, char **e,
252
 
                         int *err);
253
 
  int64_t    (*strtoll10)(const charset_info_st *cs,
254
 
                           const char *nptr, char **endptr, int *error);
255
 
  uint64_t   (*strntoull10rnd)(const charset_info_st *cs,
256
 
                                const char *str, size_t length,
257
 
                                int unsigned_fl,
258
 
                                char **endptr, int *error);
259
 
  size_t        (*scan)(const charset_info_st*, const char *b, const char *e,
260
 
                        int sq);
261
 
} MY_CHARSET_HANDLER;
262
 
 
 
215
  long (*strntol)(const charset_info_st*, const char *s, size_t l, int base, char **e, int *err);
 
216
  unsigned long (*strntoul)(const charset_info_st*, const char *s, size_t l, int base, char **e, int *err);
 
217
  int64_t (*strntoll)(const charset_info_st*, const char *s, size_t l, int base, char **e, int *err);
 
218
  uint64_t (*strntoull)(const charset_info_st*, const char *s, size_t l, int base, char **e, int *err);
 
219
  double (*strntod)(const charset_info_st*, char *s, size_t l, char **e, int *err);
 
220
  int64_t (*strtoll10)(const charset_info_st*, const char *nptr, char **endptr, int *error);
 
221
  uint64_t (*strntoull10rnd)(const charset_info_st*, const char *str, size_t length, int unsigned_fl, char **endptr, int *error);
 
222
  size_t (*scan)(const charset_info_st*, const char *b, const char *e, int sq);
 
223
};
263
224
 
264
225
/* See strings/charset_info_st.txt about information on this structure  */
265
226
struct charset_info_st
291
252
  uint16_t    min_sort_char;
292
253
  uint16_t    max_sort_char; /* For LIKE optimization */
293
254
  unsigned char     pad_char;
294
 
  bool   escape_with_backslash_is_dangerous;
295
255
  unsigned char     levels_for_compare;
296
256
  unsigned char     levels_for_order;
297
257
 
298
258
  MY_CHARSET_HANDLER *cset;
299
259
  MY_COLLATION_HANDLER *coll;
 
260
 
 
261
  bool isalpha(unsigned char c) const
 
262
  {
 
263
    return (ctype + 1)[c] & (_MY_U | _MY_L);
 
264
  }
 
265
 
 
266
  bool isupper(unsigned char c) const
 
267
  {
 
268
    return (ctype + 1)[c] & _MY_U;
 
269
  }
 
270
 
 
271
  bool islower(unsigned char c) const
 
272
  {
 
273
    return (ctype + 1)[c] & _MY_L;
 
274
  }
 
275
 
 
276
  bool isdigit(unsigned char c) const
 
277
  {
 
278
    return (ctype + 1)[c] & _MY_NMR;
 
279
  }
 
280
 
 
281
  bool isxdigit(unsigned char c) const
 
282
  {
 
283
    return (ctype + 1)[c] & _MY_X;
 
284
  }
 
285
 
 
286
  bool isalnum(unsigned char c) const
 
287
  {
 
288
    return (ctype + 1)[c] & (_MY_U | _MY_L | _MY_NMR);
 
289
  }
 
290
 
 
291
  bool isspace(unsigned char c) const
 
292
  {
 
293
    return (ctype + 1)[c] & _MY_SPC;
 
294
  }
 
295
 
 
296
  bool ispunct(unsigned char c) const  
 
297
  {
 
298
    return (ctype + 1)[c] & _MY_PNT;
 
299
  }
 
300
 
 
301
  bool isprint(unsigned char c) const
 
302
  {
 
303
    return (ctype + 1)[c] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR | _MY_B);
 
304
  }
 
305
 
 
306
  bool isgraph(unsigned char c) const
 
307
  {
 
308
    return (ctype + 1)[c] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR);
 
309
  }
 
310
 
 
311
  bool iscntrl(unsigned char c) const
 
312
  {
 
313
    return (ctype + 1)[c] & _MY_CTR;
 
314
  }
 
315
 
 
316
  bool isvar(char c) const
 
317
  {
 
318
    return isalnum(c) || (c) == '_';
 
319
  }
 
320
 
 
321
  char toupper(unsigned char c) const
 
322
  {
 
323
    return to_upper[c];
 
324
  }
 
325
 
 
326
  char tolower(unsigned char c) const
 
327
  {
 
328
    return to_lower[c];
 
329
  }
 
330
 
 
331
  bool binary_compare() const
 
332
  {
 
333
    return state  & MY_CS_BINSORT;
 
334
  }
 
335
 
 
336
  bool use_strnxfrm() const
 
337
  {
 
338
    return state & MY_CS_STRNXFRM;
 
339
  }
 
340
 
 
341
  size_t strnxfrm(unsigned char *dst, const size_t dstlen, const unsigned char *src, const uint32_t srclen) const
 
342
  {
 
343
    return coll->strnxfrm(this, dst, dstlen, dstlen, src, srclen, MY_STRXFRM_PAD_WITH_SPACE);
 
344
  }
300
345
};
301
346
 
302
347
extern DRIZZLED_API charset_info_st *all_charsets[256];
303
 
extern charset_info_st compiled_charsets[];
304
 
extern uint32_t get_charset_number(const char *cs_name, uint32_t cs_flags);
305
 
extern uint32_t get_collation_number(const char *name);
306
 
extern const char *get_charset_name(uint32_t cs_number);
307
 
extern bool resolve_charset(const char *cs_name,
308
 
                            const charset_info_st *default_cs,
309
 
                            const charset_info_st **cs);
310
 
extern bool resolve_collation(const char *cl_name,
311
 
                             const charset_info_st *default_cl,
312
 
                             const charset_info_st **cl);
313
 
extern void free_charsets();
314
 
extern char *get_charsets_dir(char *buf);
315
 
extern bool my_charset_same(const charset_info_st *cs1, const charset_info_st *cs2);
316
 
extern size_t escape_string_for_drizzle(const charset_info_st *charset_info,
317
 
                                        char *to, size_t to_length,
318
 
                                        const char *from, size_t length);
319
 
extern size_t escape_quotes_for_drizzle(const charset_info_st *charset_info,
320
 
                                        char *to, size_t to_length,
321
 
                                        const char *from, size_t length);
 
348
uint32_t get_charset_number(const char *cs_name, uint32_t cs_flags);
 
349
uint32_t get_collation_number(const char *name);
 
350
const char *get_charset_name(uint32_t cs_number);
 
351
void free_charsets();
 
352
bool my_charset_same(const charset_info_st*, const charset_info_st*);
 
353
size_t escape_string_for_drizzle(const charset_info_st *charset_info, char *to, size_t to_length, const char *from, size_t length);
 
354
size_t escape_quotes_for_drizzle(const charset_info_st *charset_info, char *to, size_t to_length, const char *from, size_t length);
322
355
extern DRIZZLED_API const charset_info_st *default_charset_info;
323
356
extern DRIZZLED_API const charset_info_st *system_charset_info;
324
357
extern const charset_info_st *files_charset_info;
331
364
extern DRIZZLED_API charset_info_st my_charset_utf8mb4_general_ci;
332
365
extern DRIZZLED_API charset_info_st my_charset_utf8mb4_unicode_ci;
333
366
size_t my_strnxfrmlen_simple(const charset_info_st*, size_t);
334
 
extern int  my_strnncollsp_simple(const charset_info_st*, const unsigned char *, size_t,
335
 
                                  const unsigned char *, size_t,
336
 
                                  bool diff_if_only_endspace_difference);
337
 
extern size_t my_lengthsp_8bit(const charset_info_st* cs, const char *ptr, size_t length);
338
 
extern uint32_t my_instr_simple(const charset_info_st*,
339
 
                            const char *b, size_t b_length,
340
 
                            const char *s, size_t s_length,
341
 
                            my_match_t *match, uint32_t nmatch);
342
 
extern MY_CHARSET_HANDLER my_charset_8bit_handler;
343
 
extern MY_CHARSET_HANDLER my_charset_ucs2_handler;
344
 
extern int my_strcasecmp_mb(const charset_info_st*  cs, const char *s, const char *t);
345
 
extern bool my_parse_charset_xml(const char *bug, size_t len,
346
 
                                    int (*add)(charset_info_st *cs));
 
367
int my_strnncollsp_simple(const charset_info_st*, const unsigned char*, size_t, const unsigned char*, size_t, bool diff_if_only_endspace_difference);
 
368
size_t my_lengthsp_8bit(const charset_info_st*, const char *ptr, size_t length);
 
369
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);
 
370
int my_strcasecmp_mb(const charset_info_st*, const char *s, const char *t);
347
371
 
348
372
DRIZZLED_API const charset_info_st *get_charset(uint32_t cs_number);
349
373
DRIZZLED_API const charset_info_st *get_charset_by_name(const char *cs_name);
350
374
DRIZZLED_API const charset_info_st *get_charset_by_csname(const char *cs_name, uint32_t cs_flags);
351
375
 
352
376
/* Functions for 8bit */
353
 
int my_mb_ctype_8bit(const charset_info_st*,int *, const unsigned char *,const unsigned char *);
354
 
int my_mb_ctype_mb(const charset_info_st*,int *, const unsigned char *,const unsigned char *);
355
 
 
356
 
size_t my_scan_8bit(const charset_info_st* cs, const char *b, const char *e, int sq);
357
 
 
358
 
size_t my_snprintf_8bit(const charset_info_st*, char *to, size_t n,
359
 
                        const char *fmt, ...)
360
 
  __attribute__((format(printf, 4, 5)));
361
 
 
362
 
long       my_strntol_8bit(const charset_info_st*, const char *s, size_t l, int base,
363
 
                           char **e, int *err);
364
 
unsigned long      my_strntoul_8bit(const charset_info_st*, const char *s, size_t l, int base,
365
 
                            char **e, int *err);
366
 
int64_t   my_strntoll_8bit(const charset_info_st*, const char *s, size_t l, int base,
367
 
                            char **e, int *err);
368
 
uint64_t my_strntoull_8bit(const charset_info_st*, const char *s, size_t l, int base,
369
 
                            char **e, int *err);
370
 
double      my_strntod_8bit(const charset_info_st*, char *s, size_t l,char **e,
371
 
                            int *err);
372
 
size_t my_long10_to_str_8bit(const charset_info_st*, char *to, size_t l, int radix,
373
 
                             long int val);
374
 
size_t my_int64_t10_to_str_8bit(const charset_info_st*, char *to, size_t l, int radix,
375
 
                                 int64_t val);
376
 
int64_t my_strtoll10_8bit(const charset_info_st* cs,
377
 
                           const char *nptr, char **endptr, int *error);
378
 
int64_t my_strtoll10_ucs2(charset_info_st *cs,
379
 
                           const char *nptr, char **endptr, int *error);
380
 
 
381
 
uint64_t my_strntoull10rnd_8bit(const charset_info_st* cs,
382
 
                                 const char *str, size_t length, int
383
 
                                 unsigned_fl, char **endptr, int *error);
384
 
uint64_t my_strntoull10rnd_ucs2(charset_info_st *cs,
385
 
                                 const char *str, size_t length,
386
 
                                 int unsigned_fl, char **endptr, int *error);
387
 
 
388
 
void my_fill_8bit(const charset_info_st* cs, char* to, size_t l, int fill);
389
 
 
390
 
bool  my_like_range_simple(const charset_info_st* cs,
 
377
int my_mb_ctype_8bit(const charset_info_st*, int*, const unsigned char*, const unsigned char *);
 
378
int my_mb_ctype_mb(const charset_info_st*, int*, const unsigned char*, const unsigned char *);
 
379
 
 
380
size_t my_scan_8bit(const charset_info_st*, const char *b, const char *e, int sq);
 
381
size_t my_snprintf_8bit(const charset_info_st*, char *to, size_t n, const char *fmt, ...) __attribute__((format(printf, 4, 5)));
 
382
 
 
383
long my_strntol_8bit(const charset_info_st*, const char *s, size_t l, int base, char **e, int *err);
 
384
unsigned long my_strntoul_8bit(const charset_info_st*, const char *s, size_t l, int base, char **e, int *err);
 
385
int64_t my_strntoll_8bit(const charset_info_st*, const char *s, size_t l, int base, char **e, int *err);
 
386
uint64_t my_strntoull_8bit(const charset_info_st*, const char *s, size_t l, int base, char **e, int *err);
 
387
double my_strntod_8bit(const charset_info_st*, char *s, size_t l,char **e, int *err);
 
388
size_t my_long10_to_str_8bit(const charset_info_st*, char *to, size_t l, int radix, long int val);
 
389
size_t my_int64_t10_to_str_8bit(const charset_info_st*, char *to, size_t l, int radix, int64_t val);
 
390
int64_t my_strtoll10_8bit(const charset_info_st*, const char *nptr, char **endptr, int *error);
 
391
 
 
392
uint64_t my_strntoull10rnd_8bit(const charset_info_st*, const char *str, size_t length, int unsigned_fl, char **endptr, int *error);
 
393
 
 
394
void my_fill_8bit(const charset_info_st*, char* to, size_t l, int fill);
 
395
 
 
396
bool  my_like_range_simple(const charset_info_st*,
391
397
                              const char *ptr, size_t ptr_length,
392
398
                              char escape, char w_one, char w_many,
393
399
                              size_t res_length,
394
400
                              char *min_str, char *max_str,
395
401
                              size_t *min_length, size_t *max_length);
396
402
 
397
 
bool  my_like_range_mb(const charset_info_st* cs,
 
403
bool  my_like_range_mb(const charset_info_st*,
398
404
                          const char *ptr, size_t ptr_length,
399
405
                          char escape, char w_one, char w_many,
400
406
                          size_t res_length,
401
407
                          char *min_str, char *max_str,
402
408
                          size_t *min_length, size_t *max_length);
403
409
 
404
 
bool  my_like_range_ucs2(const charset_info_st* cs,
405
 
                            const char *ptr, size_t ptr_length,
406
 
                            char escape, char w_one, char w_many,
407
 
                            size_t res_length,
408
 
                            char *min_str, char *max_str,
409
 
                            size_t *min_length, size_t *max_length);
410
 
 
411
 
bool  my_like_range_utf16(const charset_info_st* cs,
412
 
                             const char *ptr, size_t ptr_length,
413
 
                             char escape, char w_one, char w_many,
414
 
                             size_t res_length,
415
 
                             char *min_str, char *max_str,
416
 
                             size_t *min_length, size_t *max_length);
417
 
 
418
 
bool  my_like_range_utf32(const charset_info_st* cs,
419
 
                             const char *ptr, size_t ptr_length,
420
 
                             char escape, char w_one, char w_many,
421
 
                             size_t res_length,
422
 
                             char *min_str, char *max_str,
423
 
                             size_t *min_length, size_t *max_length);
424
 
 
425
 
 
426
410
int my_wildcmp_8bit(const charset_info_st*,
427
411
                    const char *str,const char *str_end,
428
412
                    const char *wildstr,const char *wildend,
461
445
                        const unsigned char *t, size_t tlen,
462
446
                        bool t_is_prefix);
463
447
 
464
 
int my_strnncollsp_mb_bin(const charset_info_st* cs,
 
448
int my_strnncollsp_mb_bin(const charset_info_st*,
465
449
                          const unsigned char *a, size_t a_length,
466
450
                          const unsigned char *b, size_t b_length,
467
451
                          bool diff_if_only_endspace_difference);
468
452
 
469
 
int my_wildcmp_mb_bin(const charset_info_st* cs,
 
453
int my_wildcmp_mb_bin(const charset_info_st*,
470
454
                      const char *str,const char *str_end,
471
455
                      const char *wildstr,const char *wildend,
472
456
                      int escape, int w_one, int w_many);
480
464
                      unsigned char *dst, size_t dstlen, uint32_t nweights,
481
465
                      const unsigned char *src, size_t srclen, uint32_t flags);
482
466
 
483
 
int my_wildcmp_unicode(const charset_info_st* cs,
 
467
int my_wildcmp_unicode(const charset_info_st*,
484
468
                       const char *str, const char *str_end,
485
469
                       const char *wildstr, const char *wildend,
486
470
                       int escape, int w_one, int w_many,
487
471
                       MY_UNICASE_INFO **weights);
488
472
 
489
 
bool my_propagate_simple(const charset_info_st* cs, const unsigned char *str, size_t len);
490
 
bool my_propagate_complex(const charset_info_st* cs, const unsigned char *str, size_t len);
 
473
bool my_propagate_simple();
 
474
bool my_propagate_complex();
491
475
 
492
476
 
493
477
uint32_t my_strxfrm_flag_normalize(uint32_t flags, uint32_t nlevels);
494
478
void my_strxfrm_desc_and_reverse(unsigned char *str, unsigned char *strend,
495
479
                                 uint32_t flags, uint32_t level);
496
 
size_t my_strxfrm_pad_desc_and_reverse(const charset_info_st* cs,
 
480
size_t my_strxfrm_pad_desc_and_reverse(const charset_info_st*,
497
481
                                       unsigned char *str, unsigned char *frmend, unsigned char *strend,
498
482
                                       uint32_t nweights, uint32_t flags, uint32_t level);
499
483
 
500
 
bool my_charset_is_ascii_compatible(const charset_info_st* cs);
 
484
bool my_charset_is_ascii_compatible(const charset_info_st*);
501
485
 
502
486
/*
503
487
  Compare 0-terminated UTF8 strings.
515
499
    - positive number if s > t
516
500
    - 0 is the strings are equal
517
501
*/
518
 
int my_wc_mb_filename(const charset_info_st*,
519
 
                  my_wc_t wc, unsigned char *s, unsigned char *e);
520
 
 
521
 
int my_mb_wc_filename(const charset_info_st*,
522
 
                  my_wc_t *pwc, const unsigned char *s, const unsigned char *e);
523
 
 
524
 
 
525
 
unsigned int my_ismbchar_utf8mb4(const charset_info_st* cs, const char *b, const char *e);
526
 
unsigned int my_mbcharlen_utf8mb4(const charset_info_st*, uint32_t c);
527
 
 
528
 
size_t my_strnxfrmlen_utf8mb4(const charset_info_st*, size_t len);
529
 
size_t
530
 
my_strnxfrm_utf8mb4(const charset_info_st* cs,
531
 
                    unsigned char *dst, size_t dstlen, uint32_t nweights,
532
 
                    const unsigned char *src, size_t srclen, uint32_t flags);
533
 
 
534
 
int my_wildcmp_utf8mb4(const charset_info_st* cs,
535
 
                   const char *str, const char *strend,
536
 
                   const char *wildstr, const char *wildend,
537
 
                   int escape, int w_one, int w_many);
538
 
int my_strnncollsp_utf8mb4(const charset_info_st* cs,
539
 
                       const unsigned char *s, size_t slen,
540
 
                       const unsigned char *t, size_t tlen,
541
 
                       bool diff_if_only_endspace_difference);
542
 
int my_strcasecmp_utf8mb4(const charset_info_st* cs,
543
 
                          const char *s, const char *t);
544
 
 
545
 
int my_strnncoll_utf8mb4(const charset_info_st* cs,
546
 
                     const unsigned char *s, size_t slen,
547
 
                     const unsigned char *t, size_t tlen,
548
 
                     bool t_is_prefix);
549
 
 
550
 
int my_mb_wc_utf8mb4(const charset_info_st* cs,
551
 
                 my_wc_t * pwc, const unsigned char *s, const unsigned char *e);
552
 
 
553
 
int my_wc_mb_utf8mb4(const charset_info_st* cs,
554
 
                 my_wc_t wc, unsigned char *r, unsigned char *e);
555
 
 
556
 
size_t my_caseup_str_utf8mb4(const charset_info_st* cs, char *src);
557
 
size_t my_casedn_str_utf8mb4(const charset_info_st* cs, char *src);
558
 
 
559
 
size_t my_caseup_utf8mb4(const charset_info_st* cs, char *src, size_t srclen,
560
 
                  char *dst, size_t dstlen);
561
 
size_t my_casedn_utf8mb4(const charset_info_st* cs,
562
 
                  char *src, size_t srclen,
563
 
                  char *dst, size_t dstlen);
564
 
 
565
 
 
566
 
int my_strnncoll_any_uca(const charset_info_st* cs,
567
 
                         const unsigned char *s, size_t slen,
568
 
                         const unsigned char *t, size_t tlen,
569
 
                         bool t_is_prefix);
570
 
 
571
 
int my_strnncollsp_any_uca(const charset_info_st* cs,
572
 
                           const unsigned char *s, size_t slen,
573
 
                           const unsigned char *t, size_t tlen,
574
 
                           bool diff_if_only_endspace_difference);
575
 
 
576
 
void my_hash_sort_any_uca(const charset_info_st* cs,
577
 
                          const unsigned char *s, size_t slen,
578
 
                          uint32_t *n1, uint32_t *n2);
579
 
 
580
 
size_t my_strnxfrm_any_uca(const charset_info_st* cs,
581
 
                           unsigned char *dst, size_t dstlen, uint32_t nweights,
582
 
                           const unsigned char *src, size_t srclen,
583
 
                           uint32_t flags);
584
 
 
585
 
int my_wildcmp_uca(const charset_info_st* cs,
586
 
                   const char *str,const char *str_end,
587
 
                   const char *wildstr,const char *wildend,
588
 
                   int escape, int w_one, int w_many);
 
502
int my_wc_mb_filename(const charset_info_st*, my_wc_t wc, unsigned char *s, unsigned char *e);
 
503
int my_mb_wc_filename(const charset_info_st*, my_wc_t *pwc, const unsigned char *s, const unsigned char *e);
589
504
 
590
505
int my_strnncoll_8bit_bin(const charset_info_st*,
591
506
                          const unsigned char *s, size_t slen,
596
511
                            const unsigned char *b, size_t b_length,
597
512
                            bool diff_if_only_endspace_difference);
598
513
size_t my_case_str_bin(const charset_info_st*, char *);
599
 
size_t my_case_bin(const charset_info_st*, char *,
600
 
                   size_t srclen, char *, size_t);
 
514
size_t my_case_bin(const charset_info_st*, char*,
 
515
                   size_t srclen, char*, size_t);
601
516
int my_strcasecmp_bin(const charset_info_st*,
602
517
                      const char *s, const char *t);
603
 
size_t my_strnxfrm_8bit_bin(const charset_info_st* cs,
 
518
size_t my_strnxfrm_8bit_bin(const charset_info_st*,
604
519
                     unsigned char * dst, size_t dstlen, uint32_t nweights,
605
520
                     const unsigned char *src, size_t srclen, uint32_t flags);
606
521
uint32_t my_instr_bin(const charset_info_st*,
608
523
                      const char *s, size_t s_length,
609
524
                      my_match_t *match, uint32_t nmatch);
610
525
size_t my_lengthsp_binary(const charset_info_st*,
611
 
                          const char *, size_t length);
 
526
                          const char*, size_t length);
612
527
int my_mb_wc_bin(const charset_info_st*,
613
528
                 my_wc_t *wc, const unsigned char *str,
614
529
                 const unsigned char *end);
623
538
                        const unsigned char *s, size_t slen,
624
539
                        const unsigned char *t, size_t tlen,
625
540
                        bool t_is_prefix);
626
 
int my_strnncollsp_binary(const charset_info_st* cs,
 
541
int my_strnncollsp_binary(const charset_info_st*,
627
542
                          const unsigned char *s, size_t slen,
628
543
                          const unsigned char *t, size_t tlen,
629
544
                          bool);
630
545
 
631
 
inline static bool my_isascii(char c)      
632
 
{
633
 
  return (!(c & ~0177));
634
 
}
635
 
 
636
 
inline static char my_toascii(char c)
637
 
{
638
 
  return (c & 0177);
639
 
}
640
 
 
641
 
inline static char my_tocntrl(char c) 
642
 
{
643
 
  return (c & 31);
644
 
}
645
 
 
646
 
inline static char my_toprint(char c)
647
 
{
648
 
  return (c | 64);
649
 
}
650
 
 
651
 
inline static char my_toupper(const charset_info_st *s, unsigned char c)
652
 
{
653
 
  return s->to_upper[c];
654
 
}
655
 
 
656
 
inline static char my_tolower(const charset_info_st *s, unsigned char c)
657
 
{
658
 
  return s->to_lower[c];
659
 
}
660
 
 
661
 
inline static bool my_isalpha(const charset_info_st *s, unsigned char c)
662
 
{
663
 
  return (s->ctype+1)[c] & (_MY_U | _MY_L);
664
 
}
665
 
 
666
 
inline static bool my_isupper(const charset_info_st *s, unsigned char c)
667
 
{
668
 
  return (s->ctype+1)[c] & _MY_U;
669
 
}
670
 
 
671
 
inline static bool my_islower(const charset_info_st *s, unsigned char c)
672
 
{
673
 
  return (s->ctype+1)[c] & _MY_L;
674
 
}
675
 
 
676
 
inline static bool my_isdigit(const charset_info_st *s, unsigned char c)
677
 
{
678
 
  return (s->ctype+1)[c] & _MY_NMR;
679
 
}
680
 
 
681
 
inline static bool my_isxdigit(const charset_info_st *s, unsigned char c)
682
 
{
683
 
  return (s->ctype+1)[c] & _MY_X;
684
 
}
685
 
 
686
 
inline static bool my_isalnum(const charset_info_st *s, unsigned char c) 
687
 
{
688
 
  return (s->ctype+1)[c] & (_MY_U | _MY_L | _MY_NMR);
689
 
}
690
 
 
691
 
inline static bool my_isspace(const charset_info_st *s, unsigned char c)
692
 
{
693
 
  return (s->ctype+1)[c] & _MY_SPC;
694
 
}
695
 
 
696
 
inline static bool my_ispunct(const charset_info_st *s, unsigned char c)  
697
 
{
698
 
  return (s->ctype+1)[c] & _MY_PNT;
699
 
}
700
 
 
701
 
inline static bool my_isprint(const charset_info_st *s, unsigned char c)  
702
 
{
703
 
  return (s->ctype+1)[c] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR | _MY_B);
704
 
}
705
 
 
706
 
inline static bool my_isgraph(const charset_info_st *s, unsigned char c)
707
 
{
708
 
  return (s->ctype+1)[c] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR);
709
 
}
710
 
 
711
 
inline static bool my_iscntrl(const charset_info_st *s, unsigned char c)  
712
 
{
713
 
  return (s->ctype+1)[c] & _MY_CTR;
714
 
}
715
 
 
716
 
/* Some macros that should be cleaned up a little */
717
 
inline static bool my_isvar(const charset_info_st *s, char c)
718
 
{
719
 
  return my_isalnum(s,c) || (c) == '_';
720
 
}
721
 
 
722
 
inline static bool my_isvar_start(const charset_info_st *s, char c)
723
 
{
724
 
  return my_isalpha(s,c) || (c) == '_';
725
 
}
726
 
 
727
 
inline static bool my_binary_compare(const charset_info_st *s)
728
 
{
729
 
  return s->state  & MY_CS_BINSORT;
730
 
}
731
 
 
732
 
inline static bool use_strnxfrm(const charset_info_st *s)
733
 
{
734
 
  return s->state & MY_CS_STRNXFRM;
735
 
}
736
 
 
737
 
inline static size_t my_strnxfrm(const charset_info_st *cs, 
738
 
                                 unsigned char *dst, 
739
 
                                 const size_t dstlen, 
740
 
                                 const unsigned char *src, 
741
 
                                 const uint32_t srclen)
742
 
{
743
 
  return (cs->coll->strnxfrm(cs, dst, dstlen, dstlen, src, srclen, MY_STRXFRM_PAD_WITH_SPACE));
744
 
}
745
 
 
746
546
inline static int my_strnncoll(const charset_info_st *cs, 
747
547
                               const unsigned char *s, 
748
548
                               const size_t slen, 
845
645
  return (cs->cset->strntod(cs, s, l, e, err));
846
646
}
847
647
 
848
 
int make_escape_code(const charset_info_st* cs, const char *escape);
 
648
int make_escape_code(const charset_info_st*, const char *escape);
849
649
 
850
650
} /* namespace drizzled */
851