diff options
author | unknown <serg@serg.mylan> | 2003-10-15 19:01:47 +0200 |
---|---|---|
committer | unknown <serg@serg.mylan> | 2003-10-15 19:01:47 +0200 |
commit | 249798d8464d9bcbf726cdabfd6193212c945b9c (patch) | |
tree | 9a028664963415fd0997564f29f0428d651b0da4 /myisam | |
parent | b1124529ed31d2fad544504d2f44db0c84eb292e (diff) | |
download | mariadb-git-249798d8464d9bcbf726cdabfd6193212c945b9c.tar.gz |
get rid of default_charset_info for index fulltext searches
Diffstat (limited to 'myisam')
-rw-r--r-- | myisam/ft_boolean_search.c | 8 | ||||
-rw-r--r-- | myisam/ft_parser.c | 20 | ||||
-rw-r--r-- | myisam/ft_stopwords.c | 2 | ||||
-rw-r--r-- | myisam/ftdefs.h | 4 |
4 files changed, 16 insertions, 18 deletions
diff --git a/myisam/ft_boolean_search.c b/myisam/ft_boolean_search.c index 104acf02324..0b97eded872 100644 --- a/myisam/ft_boolean_search.c +++ b/myisam/ft_boolean_search.c @@ -144,7 +144,7 @@ static void _ftb_parse_query(FTB *ftb, byte **start, byte *end, param.prev=' '; param.quot=up->quot; - while ((res=ft_get_word(start,end,&w,¶m))) + while ((res=ft_get_word(ftb->charset,start,end,&w,¶m))) { int r=param.plusminus; float weight= (float) (param.pmsign ? nwghts : wghts)[(r>5)?5:((r<-5)?-5:r)]; @@ -354,8 +354,7 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, byte *query, ftb->info=info; ftb->keynr=keynr; ftb->charset= ((keynr==NO_SUCH_KEY) ? - default_charset_info : - info->s->keyinfo[keynr].seg->charset); + default_charset_info : info->s->keyinfo[keynr].seg->charset); ftb->with_scan=0; ftb->lastpos=HA_POS_ERROR; bzero(& ftb->no_dupes, sizeof(TREE)); @@ -609,7 +608,8 @@ float ft_boolean_find_relevance(FT_INFO *ftb, byte *record, uint length) continue; end=ftsi.pos+ftsi.len; - while (ft_simple_get_word((byte **) &ftsi.pos,(byte *) end, &word)) + while (ft_simple_get_word(ftb->charset, + (byte **) &ftsi.pos, (byte *) end, &word)) { int a, b, c; for (a=0, b=ftb->queue.elements, c=(a+b)/2; b-a>1; c=(a+b)/2) diff --git a/myisam/ft_parser.c b/myisam/ft_parser.c index 57b379cfac0..2cd6afdcbc2 100644 --- a/myisam/ft_parser.c +++ b/myisam/ft_parser.c @@ -79,7 +79,8 @@ FT_WORD * ft_linearize(TREE *wtree) * 2 - left bracket * 3 - right bracket */ -byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param) +byte ft_get_word(CHARSET_INFO *cs, byte **start, byte *end, + FT_WORD *word, FTB_PARAM *param) { byte *doc=*start; int mwc; @@ -91,11 +92,7 @@ byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param) { for (;doc<end;doc++) { - /* - BAR TODO: discuss with Serge how to remove - default_charset_info correctly - */ - if (true_word_char(default_charset_info,*doc)) break; + if (true_word_char(cs,*doc)) break; if (*doc == FTB_RQUOT && param->quot) { param->quot=doc; *start=doc+1; @@ -125,7 +122,7 @@ byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param) mwc=0; for (word->pos=doc; doc<end; doc++) - if (true_word_char(default_charset_info,*doc)) + if (true_word_char(cs,*doc)) mwc=0; else if (!misc_word_char(*doc) || mwc++) break; @@ -145,7 +142,8 @@ byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param) return 0; } -byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word) +byte ft_simple_get_word(CHARSET_INFO *cs, byte **start, byte *end, + FT_WORD *word) { byte *doc=*start; int mwc; @@ -155,12 +153,12 @@ byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word) { for (;doc<end;doc++) { - if (true_word_char(default_charset_info,*doc)) break; + if (true_word_char(cs,*doc)) break; } mwc=0; for(word->pos=doc; doc<end; doc++) - if (true_word_char(default_charset_info,*doc)) + if (true_word_char(cs,*doc)) mwc=0; else if (!misc_word_char(*doc) || mwc++) break; @@ -191,7 +189,7 @@ int ft_parse(TREE *wtree, byte *doc, int doclen) FT_WORD w; DBUG_ENTER("ft_parse"); - while (ft_simple_get_word(&doc,end,&w)) + while (ft_simple_get_word(wtree->custom_arg, &doc,end,&w)) { if (!tree_insert(wtree, &w, 0, wtree->custom_arg)) goto err; diff --git a/myisam/ft_stopwords.c b/myisam/ft_stopwords.c index 5163aca60bd..6682de18c65 100644 --- a/myisam/ft_stopwords.c +++ b/myisam/ft_stopwords.c @@ -81,7 +81,7 @@ int ft_init_stopwords() goto err0; len=my_read(fd, buffer, len, MYF(MY_WME)); end=start+len; - while (ft_simple_get_word(&start, end, &w)) + while (ft_simple_get_word(default_charset_info, &start, end, &w)) { if (ft_add_stopword(my_strdup_with_length(w.pos, w.len, MYF(0)))) goto err1; diff --git a/myisam/ftdefs.h b/myisam/ftdefs.h index 5b260ceb10b..6e71f20e17c 100644 --- a/myisam/ftdefs.h +++ b/myisam/ftdefs.h @@ -108,8 +108,8 @@ int is_stopword(char *word, uint len); uint _ft_make_key(MI_INFO *, uint , byte *, FT_WORD *, my_off_t); -byte ft_get_word(byte **, byte *, FT_WORD *, FTB_PARAM *); -byte ft_simple_get_word(byte **, byte *, FT_WORD *); +byte ft_get_word(CHARSET_INFO *, byte **, byte *, FT_WORD *, FTB_PARAM *); +byte ft_simple_get_word(CHARSET_INFO *, byte **, byte *, FT_WORD *); typedef struct _st_ft_seg_iterator { uint num, len; |