Commit 8c750c46 authored by unknown's avatar unknown
Browse files

indexless boolean fulltext search was depending on default_charset_info - Bug#8159

ftbw->off wasn't cleared on reinit - Bug#8234


include/ft_global.h:
  get rid of default_charset_info in indexless fulltext searches
myisam/ft_boolean_search.c:
  get rid of default_charset_info in indexless fulltext searches
  clear ftbw->off on reinits
myisam/ft_static.c:
  get rid of default_charset_info in indexless fulltext searches
myisam/ftdefs.h:
  get rid of default_charset_info in indexless fulltext searches
sql/ha_myisam.h:
  get rid of default_charset_info in indexless fulltext searches
sql/handler.h:
  get rid of default_charset_info in indexless fulltext searches
sql/item_func.cc:
  get rid of default_charset_info in indexless fulltext searches
parent c83412f7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
+4 −3
Original line number Diff line number Diff line
@@ -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));
+3 −2
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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 *);
+6 −2
Original line number Diff line number Diff line
@@ -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);
Loading