summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorunknown <bar@bar.mysql.r18.ru>2003-05-23 17:45:52 +0500
committerunknown <bar@bar.mysql.r18.ru>2003-05-23 17:45:52 +0500
commit5aae66c1017aaef0efc0080c095436f954288bd6 (patch)
tree40660f305f13b43f69d092c4719cebfaaf120a40 /include
parentf461dea4d7066c6dfe14b33cc549f7e0183f6b8e (diff)
downloadmariadb-git-5aae66c1017aaef0efc0080c095436f954288bd6.tar.gz
CHARSET_INFO structure reorganization for easier maintainance
Diffstat (limited to 'include')
-rw-r--r--include/m_ctype.h121
1 files changed, 67 insertions, 54 deletions
diff --git a/include/m_ctype.h b/include/m_ctype.h
index 6cf0ecfbb8a..59f75081ff9 100644
--- a/include/m_ctype.h
+++ b/include/m_ctype.h
@@ -91,27 +91,11 @@ enum my_lex_states
MY_LEX_STRING_OR_DELIMITER
};
+struct charset_info_st;
-typedef struct charset_info_st
+typedef struct my_collation_handler_st
{
- uint number;
- uint primary_number;
- uint binary_number;
- uint state;
- const char *csname;
- const char *name;
- const char *comment;
- uchar *ctype;
- uchar *to_lower;
- uchar *to_upper;
- uchar *sort_order;
- uint16 *tab_to_uni;
- MY_UNI_IDX *tab_from_uni;
- uchar state_map[256];
- uchar ident_map[256];
-
/* Collation routines */
- uint strxfrm_multiply;
int (*strnncoll)(struct charset_info_st *,
const uchar *, uint, const uchar *, uint);
int (*strnncollsp)(struct charset_info_st *,
@@ -128,9 +112,21 @@ typedef struct charset_info_st
const char *str,const char *str_end,
const char *wildstr,const char *wildend,
int escape,int w_one, int w_many);
+
+ int (*strcasecmp)(struct charset_info_st *, const char *, const char *);
+ /* Hash calculation */
+ void (*hash_sort)(struct charset_info_st *cs, const uchar *key, uint len,
+ ulong *nr1, ulong *nr2);
+} MY_COLLATION_HANDLER;
+
+extern MY_COLLATION_HANDLER my_collation_bin_handler;
+extern MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler;
+
+
+typedef struct my_charset_handler_st
+{
/* Multibyte routines */
- uint mbmaxlen;
int (*ismbchar)(struct charset_info_st *, const char *, const char *);
int (*mbcharlen)(struct charset_info_st *, uint);
uint (*numchars)(struct charset_info_st *, const char *b, const char *e);
@@ -148,15 +144,6 @@ typedef struct charset_info_st
void (*caseup)(struct charset_info_st *, char *, uint);
void (*casedn)(struct charset_info_st *, char *, uint);
- /* Functions for case comparison */
- int (*strcasecmp)(struct charset_info_st *, const char *, const char *);
-
- /* Hash calculation */
- void (*hash_sort)(struct charset_info_st *cs, const uchar *key, uint len,
- ulong *nr1, ulong *nr2);
-
- char max_sort_char; /* For LIKE optimization */
-
/* Charset dependant snprintf() */
int (*snprintf)(struct charset_info_st *, char *to, uint n, const char *fmt,
...);
@@ -181,6 +168,35 @@ typedef struct charset_info_st
ulong (*scan)(struct charset_info_st *, const char *b, const char *e,
int sq);
+} MY_CHARSET_HANDLER;
+
+extern MY_CHARSET_HANDLER my_charset_8bit_handler;
+
+
+
+typedef struct charset_info_st
+{
+ uint number;
+ uint primary_number;
+ uint binary_number;
+ uint state;
+ const char *csname;
+ const char *name;
+ const char *comment;
+ uchar *ctype;
+ uchar *to_lower;
+ uchar *to_upper;
+ uchar *sort_order;
+ uint16 *tab_to_uni;
+ MY_UNI_IDX *tab_from_uni;
+ uchar state_map[256];
+ uchar ident_map[256];
+ uint strxfrm_multiply;
+ uint mbmaxlen;
+ char max_sort_char; /* For LIKE optimization */
+
+ MY_CHARSET_HANDLER *cset;
+ MY_COLLATION_HANDLER *coll;
} CHARSET_INFO;
@@ -211,9 +227,6 @@ extern CHARSET_INFO my_charset_utf8_bin;
extern CHARSET_INFO my_charset_cp1250_czech_ci;
-extern my_bool my_parse_charset_xml(const char *bug, uint len,
- int (*add)(CHARSET_INFO *cs));
-
/* declarations for simple charsets */
extern int my_strnxfrm_simple(CHARSET_INFO *, uchar *, uint, const uchar *,
uint);
@@ -254,7 +267,6 @@ ulonglong my_strntoull_8bit(CHARSET_INFO *, const char *s, uint l, int base,
char **e, int *err);
double my_strntod_8bit(CHARSET_INFO *, char *s, uint l,char **e,
int *err);
-
int my_long10_to_str_8bit(CHARSET_INFO *, char *to, uint l, int radix,
long int val);
int my_longlong10_to_str_8bit(CHARSET_INFO *, char *to, uint l, int radix,
@@ -279,7 +291,6 @@ uint my_numchars_8bit(CHARSET_INFO *, const char *b, const char *e);
uint my_charpos_8bit(CHARSET_INFO *, const char *b, const char *e, uint pos);
-#ifdef USE_MB
/* Functions for multibyte charsets */
extern void my_caseup_str_mb(CHARSET_INFO *, char *);
extern void my_casedn_str_mb(CHARSET_INFO *, char *);
@@ -294,7 +305,10 @@ int my_wildcmp_mb(CHARSET_INFO *,
uint my_numchars_mb(CHARSET_INFO *, const char *b, const char *e);
uint my_charpos_mb(CHARSET_INFO *, const char *b, const char *e, uint pos);
-#endif
+
+extern my_bool my_parse_charset_xml(const char *bug, uint len,
+ int (*add)(CHARSET_INFO *cs));
+
#define _U 01 /* Upper case */
#define _L 02 /* Lower case */
@@ -329,27 +343,26 @@ uint my_charpos_mb(CHARSET_INFO *, const char *b, const char *e, uint pos);
#define my_isvar_start(s,c) (my_isalpha(s,c) || (c) == '_')
#define use_strnxfrm(s) ((s)->state & MY_CS_STRNXFRM)
-#define my_strnxfrm(s, a, b, c, d) ((s)->strnxfrm((s), (a), (b), (c), (d)))
-#define my_strnncoll(s, a, b, c, d) ((s)->strnncoll((s), (a), (b), (c), (d)))
+#define my_strnxfrm(s, a, b, c, d) ((s)->coll->strnxfrm((s), (a), (b), (c), (d)))
+#define my_strnncoll(s, a, b, c, d) ((s)->coll->strnncoll((s), (a), (b), (c), (d)))
#define my_like_range(s, a, b, c, d, e, f, g, h, i, j) \
- ((s)->like_range((s), (a), (b), (c), (d), (e), (f), (g), (h), (i), (j)))
-#define my_wildcmp(cs,s,se,w,we,e,o,m) ((cs)->wildcmp((cs),(s),(se),(w),(we),(e),(o),(m)))
-
-#define use_mb(s) ((s)->ismbchar != NULL)
-#define my_ismbchar(s, a, b) ((s)->ismbchar((s), (a), (b)))
-#define my_mbcharlen(s, a) ((s)->mbcharlen((s),(a)))
-
-#define my_caseup(s, a, l) ((s)->caseup((s), (a), (l)))
-#define my_casedn(s, a, l) ((s)->casedn((s), (a), (l)))
-#define my_caseup_str(s, a) ((s)->caseup_str((s), (a)))
-#define my_casedn_str(s, a) ((s)->casedn_str((s), (a)))
-#define my_strcasecmp(s, a, b) ((s)->strcasecmp((s), (a), (b)))
-
-#define my_strntol(s, a, b, c, d, e) ((s)->strntol((s),(a),(b),(c),(d),(e)))
-#define my_strntoul(s, a, b, c, d, e) ((s)->strntoul((s),(a),(b),(c),(d),(e)))
-#define my_strntoll(s, a, b, c, d, e) ((s)->strntoll((s),(a),(b),(c),(d),(e)))
-#define my_strntoull(s, a, b, c,d, e) ((s)->strntoull((s),(a),(b),(c),(d),(e)))
-#define my_strntod(s, a, b, c, d) ((s)->strntod((s),(a),(b),(c),(d)))
+ ((s)->coll->like_range((s), (a), (b), (c), (d), (e), (f), (g), (h), (i), (j)))
+#define my_wildcmp(cs,s,se,w,we,e,o,m) ((cs)->coll->wildcmp((cs),(s),(se),(w),(we),(e),(o),(m)))
+#define my_strcasecmp(s, a, b) ((s)->coll->strcasecmp((s), (a), (b)))
+
+#define use_mb(s) ((s)->cset->ismbchar != NULL)
+#define my_ismbchar(s, a, b) ((s)->cset->ismbchar((s), (a), (b)))
+#define my_mbcharlen(s, a) ((s)->cset->mbcharlen((s),(a)))
+
+#define my_caseup(s, a, l) ((s)->cset->caseup((s), (a), (l)))
+#define my_casedn(s, a, l) ((s)->cset->casedn((s), (a), (l)))
+#define my_caseup_str(s, a) ((s)->cset->caseup_str((s), (a)))
+#define my_casedn_str(s, a) ((s)->cset->casedn_str((s), (a)))
+#define my_strntol(s, a, b, c, d, e) ((s)->cset->strntol((s),(a),(b),(c),(d),(e)))
+#define my_strntoul(s, a, b, c, d, e) ((s)->cset->strntoul((s),(a),(b),(c),(d),(e)))
+#define my_strntoll(s, a, b, c, d, e) ((s)->cset->strntoll((s),(a),(b),(c),(d),(e)))
+#define my_strntoull(s, a, b, c,d, e) ((s)->cset->strntoull((s),(a),(b),(c),(d),(e)))
+#define my_strntod(s, a, b, c, d) ((s)->cset->strntod((s),(a),(b),(c),(d)))
/* XXX: still need to take care of this one */