Commit 249798d8 authored by unknown's avatar unknown

get rid of default_charset_info for index fulltext searches

parent b1124529
...@@ -144,7 +144,7 @@ static void _ftb_parse_query(FTB *ftb, byte **start, byte *end, ...@@ -144,7 +144,7 @@ static void _ftb_parse_query(FTB *ftb, byte **start, byte *end,
param.prev=' '; param.prev=' ';
param.quot=up->quot; param.quot=up->quot;
while ((res=ft_get_word(start,end,&w,&param))) while ((res=ft_get_word(ftb->charset,start,end,&w,&param)))
{ {
int r=param.plusminus; int r=param.plusminus;
float weight= (float) (param.pmsign ? nwghts : wghts)[(r>5)?5:((r<-5)?-5:r)]; 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, ...@@ -354,8 +354,7 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, byte *query,
ftb->info=info; ftb->info=info;
ftb->keynr=keynr; ftb->keynr=keynr;
ftb->charset= ((keynr==NO_SUCH_KEY) ? ftb->charset= ((keynr==NO_SUCH_KEY) ?
default_charset_info : default_charset_info : info->s->keyinfo[keynr].seg->charset);
info->s->keyinfo[keynr].seg->charset);
ftb->with_scan=0; ftb->with_scan=0;
ftb->lastpos=HA_POS_ERROR; ftb->lastpos=HA_POS_ERROR;
bzero(& ftb->no_dupes, sizeof(TREE)); bzero(& ftb->no_dupes, sizeof(TREE));
...@@ -609,7 +608,8 @@ float ft_boolean_find_relevance(FT_INFO *ftb, byte *record, uint length) ...@@ -609,7 +608,8 @@ float ft_boolean_find_relevance(FT_INFO *ftb, byte *record, uint length)
continue; continue;
end=ftsi.pos+ftsi.len; 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; int a, b, c;
for (a=0, b=ftb->queue.elements, c=(a+b)/2; b-a>1; c=(a+b)/2) for (a=0, b=ftb->queue.elements, c=(a+b)/2; b-a>1; c=(a+b)/2)
......
...@@ -79,7 +79,8 @@ FT_WORD * ft_linearize(TREE *wtree) ...@@ -79,7 +79,8 @@ FT_WORD * ft_linearize(TREE *wtree)
* 2 - left bracket * 2 - left bracket
* 3 - right 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; byte *doc=*start;
int mwc; int mwc;
...@@ -91,11 +92,7 @@ byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param) ...@@ -91,11 +92,7 @@ byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param)
{ {
for (;doc<end;doc++) for (;doc<end;doc++)
{ {
/* if (true_word_char(cs,*doc)) break;
BAR TODO: discuss with Serge how to remove
default_charset_info correctly
*/
if (true_word_char(default_charset_info,*doc)) break;
if (*doc == FTB_RQUOT && param->quot) { if (*doc == FTB_RQUOT && param->quot) {
param->quot=doc; param->quot=doc;
*start=doc+1; *start=doc+1;
...@@ -125,7 +122,7 @@ byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param) ...@@ -125,7 +122,7 @@ byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param)
mwc=0; mwc=0;
for (word->pos=doc; doc<end; doc++) for (word->pos=doc; doc<end; doc++)
if (true_word_char(default_charset_info,*doc)) if (true_word_char(cs,*doc))
mwc=0; mwc=0;
else if (!misc_word_char(*doc) || mwc++) else if (!misc_word_char(*doc) || mwc++)
break; break;
...@@ -145,7 +142,8 @@ byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param) ...@@ -145,7 +142,8 @@ byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param)
return 0; 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; byte *doc=*start;
int mwc; int mwc;
...@@ -155,12 +153,12 @@ byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word) ...@@ -155,12 +153,12 @@ byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word)
{ {
for (;doc<end;doc++) for (;doc<end;doc++)
{ {
if (true_word_char(default_charset_info,*doc)) break; if (true_word_char(cs,*doc)) break;
} }
mwc=0; mwc=0;
for(word->pos=doc; doc<end; doc++) for(word->pos=doc; doc<end; doc++)
if (true_word_char(default_charset_info,*doc)) if (true_word_char(cs,*doc))
mwc=0; mwc=0;
else if (!misc_word_char(*doc) || mwc++) else if (!misc_word_char(*doc) || mwc++)
break; break;
...@@ -191,7 +189,7 @@ int ft_parse(TREE *wtree, byte *doc, int doclen) ...@@ -191,7 +189,7 @@ int ft_parse(TREE *wtree, byte *doc, int doclen)
FT_WORD w; FT_WORD w;
DBUG_ENTER("ft_parse"); 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)) if (!tree_insert(wtree, &w, 0, wtree->custom_arg))
goto err; goto err;
......
...@@ -81,7 +81,7 @@ int ft_init_stopwords() ...@@ -81,7 +81,7 @@ int ft_init_stopwords()
goto err0; goto err0;
len=my_read(fd, buffer, len, MYF(MY_WME)); len=my_read(fd, buffer, len, MYF(MY_WME));
end=start+len; 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)))) if (ft_add_stopword(my_strdup_with_length(w.pos, w.len, MYF(0))))
goto err1; goto err1;
......
...@@ -108,8 +108,8 @@ int is_stopword(char *word, uint len); ...@@ -108,8 +108,8 @@ int is_stopword(char *word, uint len);
uint _ft_make_key(MI_INFO *, uint , byte *, FT_WORD *, my_off_t); 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_get_word(CHARSET_INFO *, byte **, byte *, FT_WORD *, FTB_PARAM *);
byte ft_simple_get_word(byte **, byte *, FT_WORD *); byte ft_simple_get_word(CHARSET_INFO *, byte **, byte *, FT_WORD *);
typedef struct _st_ft_seg_iterator { typedef struct _st_ft_seg_iterator {
uint num, len; uint num, len;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment