diff options
author | unknown <svoj@may.pils.ru> | 2006-06-19 19:57:42 +0500 |
---|---|---|
committer | unknown <svoj@may.pils.ru> | 2006-06-19 19:57:42 +0500 |
commit | dc54cbc1d768ca13aa311429c3112f1bd4ab8081 (patch) | |
tree | 38e495b217dd4e13cec843e59e7bf2cbd5796b24 /storage | |
parent | 6f5c5c3c7a2f862310d8703b42c09e51a3ecf3cf (diff) | |
parent | fde030d7b1cf4240096ebdedb621684c3d9ba381 (diff) | |
download | mariadb-git-dc54cbc1d768ca13aa311429c3112f1bd4ab8081.tar.gz |
Merge april:devel/BitKeeper/mysql-5.1-engines
into may.pils.ru:/home/svoj/devel/mysql/BUG18036/mysql-5.1
sql/sql_show.cc:
Auto merged
Diffstat (limited to 'storage')
-rw-r--r-- | storage/myisam/ft_parser.c | 32 | ||||
-rw-r--r-- | storage/myisam/ft_update.c | 5 | ||||
-rw-r--r-- | storage/myisam/ftdefs.h | 5 |
3 files changed, 25 insertions, 17 deletions
diff --git a/storage/myisam/ft_parser.c b/storage/myisam/ft_parser.c index 38ac744d4a8..adc3f351dc8 100644 --- a/storage/myisam/ft_parser.c +++ b/storage/myisam/ft_parser.c @@ -111,6 +111,7 @@ byte ft_get_word(CHARSET_INFO *cs, byte **start, byte *end, FT_WORD *word, MYSQL_FTPARSER_BOOLEAN_INFO *param) { byte *doc=*start; + int ctype; uint mwc, length, mbl; param->yesno=(FTB_YES==' ') ? 1 : (param->quot != 0); @@ -119,9 +120,11 @@ byte ft_get_word(CHARSET_INFO *cs, byte **start, byte *end, while (doc<end) { - for (;doc<end;doc++) + for (; doc < end; doc+= (mbl > 0 ? mbl : 1)) { - if (true_word_char(cs,*doc)) break; + mbl= cs->cset->ctype(cs, &ctype, (uchar*)doc, (uchar*)end); + if (true_word_char(ctype, *doc)) + break; if (*doc == FTB_RQUOT && param->quot) { param->quot=doc; @@ -155,14 +158,16 @@ byte ft_get_word(CHARSET_INFO *cs, byte **start, byte *end, } mwc=length=0; - for (word->pos=doc; doc<end; length++, mbl=my_mbcharlen(cs, *(uchar *)doc), doc+=(mbl ? mbl : 1)) - if (true_word_char(cs,*doc)) + for (word->pos= doc; doc < end; length++, doc+= (mbl > 0 ? mbl : 1)) + { + mbl= cs->cset->ctype(cs, &ctype, (uchar*)doc, (uchar*)end); + if (true_word_char(ctype, *doc)) mwc=0; else if (!misc_word_char(*doc) || mwc) break; else mwc++; - + } param->prev='A'; /* be sure *prev is true_word_char */ word->len= (uint)(doc-word->pos) - mwc; if ((param->trunc=(doc<end && *doc == FTB_TRUNC))) @@ -197,24 +202,31 @@ byte ft_simple_get_word(CHARSET_INFO *cs, byte **start, const byte *end, { byte *doc= *start; uint mwc, length, mbl; + int ctype; DBUG_ENTER("ft_simple_get_word"); do { - for (;; doc++) + for (;; doc+= (mbl > 0 ? mbl : 1)) { - if (doc >= end) DBUG_RETURN(0); - if (true_word_char(cs, *doc)) break; + if (doc >= end) + DBUG_RETURN(0); + mbl= cs->cset->ctype(cs, &ctype, (uchar*)doc, (uchar*)end); + if (true_word_char(ctype, *doc)) + break; } mwc= length= 0; - for (word->pos=doc; doc<end; length++, mbl=my_mbcharlen(cs, *(uchar *)doc), doc+=(mbl ? mbl : 1)) - if (true_word_char(cs,*doc)) + for (word->pos= doc; doc < end; length++, doc+= (mbl > 0 ? mbl : 1)) + { + mbl= cs->cset->ctype(cs, &ctype, (uchar*)doc, (uchar*)end); + if (true_word_char(ctype, *doc)) mwc= 0; else if (!misc_word_char(*doc) || mwc) break; else mwc++; + } word->len= (uint)(doc-word->pos) - mwc; diff --git a/storage/myisam/ft_update.c b/storage/myisam/ft_update.c index 08d605dbcc2..7a0876ce5a4 100644 --- a/storage/myisam/ft_update.c +++ b/storage/myisam/ft_update.c @@ -174,11 +174,6 @@ int _mi_ft_cmp(MI_INFO *info, uint keynr, const byte *rec1, const byte *rec2) FT_SEG_ITERATOR ftsi1, ftsi2; CHARSET_INFO *cs=info->s->keyinfo[keynr].seg->charset; DBUG_ENTER("_mi_ft_cmp"); -#ifndef MYSQL_HAS_TRUE_CTYPE_IMPLEMENTATION - if (cs->mbmaxlen > 1) - DBUG_RETURN(THOSE_TWO_DAMN_KEYS_ARE_REALLY_DIFFERENT); -#endif - _mi_ft_segiterator_init(info, keynr, rec1, &ftsi1); _mi_ft_segiterator_init(info, keynr, rec2, &ftsi2); diff --git a/storage/myisam/ftdefs.h b/storage/myisam/ftdefs.h index 108faf4f1a3..3c5b9d9e608 100644 --- a/storage/myisam/ftdefs.h +++ b/storage/myisam/ftdefs.h @@ -24,9 +24,10 @@ #include <queues.h> #include <mysql/plugin.h> -#define true_word_char(s,X) (my_isalnum(s,X) || (X)=='_') +#define true_word_char(ctype, character) \ + ((ctype) & (_MY_U | _MY_L | _MY_NMR) || \ + (character) == '_') #define misc_word_char(X) 0 -#define word_char(s,X) (true_word_char(s,X) || misc_word_char(X)) #define FT_MAX_WORD_LEN_FOR_SORT 31 |