mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
indexless boolean fulltext search was depending on default_charset_info - Bug#8159
ftbw->off wasn't cleared on reinit - Bug#8234
This commit is contained in:
@ -62,7 +62,7 @@ void ft_free_stopwords(void);
|
||||
#define FT_SORTED 2
|
||||
#define FT_EXPAND 4 /* query expansion */
|
||||
|
||||
FT_INFO *ft_init_search(uint,void *, uint, byte *, uint, byte *);
|
||||
FT_INFO *ft_init_search(uint,void *, uint, byte *, uint,CHARSET_INFO *, byte *);
|
||||
my_bool ft_boolean_check_syntax_string(const byte *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -365,6 +365,7 @@ static void _ftb_init_index_search(FT_INFO *ftb)
|
||||
reset_tree(& ftb->no_dupes);
|
||||
}
|
||||
|
||||
ftbw->off=0; /* in case of reinit */
|
||||
if (_ft2_search(ftb, ftbw, 1))
|
||||
return;
|
||||
}
|
||||
@ -373,7 +374,7 @@ static void _ftb_init_index_search(FT_INFO *ftb)
|
||||
|
||||
|
||||
FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, byte *query,
|
||||
uint query_len)
|
||||
uint query_len, CHARSET_INFO *cs)
|
||||
{
|
||||
FTB *ftb;
|
||||
FTB_EXPR *ftbe;
|
||||
@ -385,8 +386,8 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, byte *query,
|
||||
ftb->state=UNINITIALIZED;
|
||||
ftb->info=info;
|
||||
ftb->keynr=keynr;
|
||||
ftb->charset= ((keynr==NO_SUCH_KEY) ?
|
||||
default_charset_info : info->s->keyinfo[keynr].seg->charset);
|
||||
ftb->charset=cs;
|
||||
DBUG_ASSERT(keynr==NO_SUCH_KEY || cs == info->s->keyinfo[keynr].seg->charset);
|
||||
ftb->with_scan=0;
|
||||
ftb->lastpos=HA_OFFSET_ERROR;
|
||||
bzero(& ftb->no_dupes, sizeof(TREE));
|
||||
|
@ -55,11 +55,12 @@ const struct _ft_vft _ft_vft_boolean = {
|
||||
|
||||
|
||||
FT_INFO *ft_init_search(uint flags, void *info, uint keynr,
|
||||
byte *query, uint query_len, byte *record)
|
||||
byte *query, uint query_len, CHARSET_INFO *cs,
|
||||
byte *record)
|
||||
{
|
||||
FT_INFO *res;
|
||||
if (flags & FT_BOOL)
|
||||
res= ft_init_boolean_search((MI_INFO *)info, keynr, query, query_len);
|
||||
res= ft_init_boolean_search((MI_INFO *)info, keynr, query, query_len,cs);
|
||||
else
|
||||
res= ft_init_nlq_search((MI_INFO *)info, keynr, query, query_len, flags,
|
||||
record);
|
||||
|
@ -131,7 +131,7 @@ FT_WORD * _mi_ft_parserecord(MI_INFO *, uint, const byte *);
|
||||
uint _mi_ft_parse(TREE *, MI_INFO *, uint, const byte *, my_bool);
|
||||
|
||||
FT_INFO *ft_init_nlq_search(MI_INFO *, uint, byte *, uint, uint, byte *);
|
||||
FT_INFO *ft_init_boolean_search(MI_INFO *, uint, byte *, uint);
|
||||
FT_INFO *ft_init_boolean_search(MI_INFO *, uint, byte *, uint, CHARSET_INFO *);
|
||||
|
||||
extern const struct _ft_vft _ft_vft_nlq;
|
||||
int ft_nlq_read_next(FT_INFO *, char *);
|
||||
|
@ -88,8 +88,12 @@ class ha_myisam: public handler
|
||||
ft_handler->please->reinit_search(ft_handler);
|
||||
return 0;
|
||||
}
|
||||
FT_INFO *ft_init_ext(uint flags, uint inx,const byte *key, uint keylen)
|
||||
{ return ft_init_search(flags,file,inx,(byte*) key,keylen, table->record[0]); }
|
||||
FT_INFO *ft_init_ext(uint flags, uint inx,String *key)
|
||||
{
|
||||
return ft_init_search(flags,file,inx,
|
||||
(byte *)key->ptr(), key->length(), key->charset(),
|
||||
table->record[0]);
|
||||
}
|
||||
int ft_read(byte *buf);
|
||||
int rnd_init(bool scan);
|
||||
int rnd_next(byte *buf);
|
||||
|
@ -373,8 +373,7 @@ public:
|
||||
int compare_key(key_range *range);
|
||||
virtual int ft_init() { return HA_ERR_WRONG_COMMAND; }
|
||||
void ft_end() { ft_handler=NULL; }
|
||||
virtual FT_INFO *ft_init_ext(uint flags,uint inx,const byte *key,
|
||||
uint keylen)
|
||||
virtual FT_INFO *ft_init_ext(uint flags, uint inx,String *key)
|
||||
{ return NULL; }
|
||||
virtual int ft_read(byte *buf) { return HA_ERR_WRONG_COMMAND; }
|
||||
virtual int rnd_next(byte *buf)=0;
|
||||
|
@ -3047,9 +3047,7 @@ void Item_func_match::init_search(bool no_order)
|
||||
|
||||
if (join_key && !no_order)
|
||||
flags|=FT_SORTED;
|
||||
ft_handler=table->file->ft_init_ext(flags, key,
|
||||
(byte*) ft_tmp->ptr(),
|
||||
ft_tmp->length());
|
||||
ft_handler=table->file->ft_init_ext(flags, key, ft_tmp);
|
||||
|
||||
if (join_key)
|
||||
table->file->ft_handler=ft_handler;
|
||||
|
Reference in New Issue
Block a user