Commit 1392f571 authored by serg@serg.mysql.com's avatar serg@serg.mysql.com
Browse files

Merge serg@work:/home/bk/mysql

into serg.mysql.com:/usr/home/serg/Abk/mysql
parents df3c60a6 f39734eb
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ FT_DOCLIST * ft_init_search(void *, uint, byte *, uint, my_bool);
int          ft_read_next(FT_DOCLIST *, char *);
#define      ft_close_search(handler)   my_free(((gptr)(handler)),MYF(0))
#define      ft_get_relevance(handler)  ((handler)->doc[(handler)->curdoc].weight)
#define      ft_reinit_search(handler)  (((FT_DOCLIST *)(handler))->curdoc=-1)

#ifdef  __cplusplus
}
+2 −1
Original line number Diff line number Diff line
@@ -1088,7 +1088,8 @@ int ha_myisam::ft_read(byte * buf)

  thread_safe_increment(ha_read_next_count,&LOCK_status); // why ?

  error=ft_read_next((FT_DOCLIST *) ft_handler,(char*) buf);
  if (error=ft_read_next((FT_DOCLIST *) ft_handler,(char*) buf))
    ft_handler=NULL; // Magic here ! See Item_func_match::val()

  table->status=error ? STATUS_NOT_FOUND: 0;
  return error;
+27 −23
Original line number Diff line number Diff line
@@ -1846,10 +1846,12 @@ double Item_func_match::val()

  if (join_key)
  {
    if (table->file->ft_handler)
      return ft_get_relevance(ft_handler);

    join_key=0; // Magic here ! See ha_myisam::ft_read()
  }
  else
  {

  /* we'll have to find ft_relevance manually in ft_handler array */

  int a,b,c;
@@ -1872,17 +1874,18 @@ double Item_func_match::val()
    return docs[a].weight;
  else
    return 0.0;
  }

}

void Item_func_match::init_search()
void Item_func_match::init_search(bool no_order)
{
  if (ft_handler)
    return;

  if (master)
  {
    master->init_search();
    join_key=master->join_key=join_key|master->join_key;
    master->init_search(no_order);
    ft_handler=master->ft_handler;
    join_key=master->join_key;
    return;
@@ -1894,7 +1897,8 @@ void Item_func_match::init_search()

  ft_tmp=key_item()->val_str(&tmp2);
  ft_handler=(FT_DOCLIST *)
     table->file->ft_init_ext(key, (byte*) ft_tmp->ptr(), ft_tmp->length(), join_key);
     table->file->ft_init_ext(key, (byte*) ft_tmp->ptr(), ft_tmp->length(),
                              join_key && !no_order);

  if (join_key)
  {
+1 −1
Original line number Diff line number Diff line
@@ -863,5 +863,5 @@ class Item_func_match :public Item_real_func
  longlong val_int() { return val()!=0.0; }

  bool fix_index();
  void init_search();
  void init_search(bool no_order);
};
+1 −1
Original line number Diff line number Diff line
@@ -532,7 +532,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,

    while ((ifm=li++))
    {
      ifm->init_search();
      ifm->init_search(test(order));
    }
  }
  /* Create a tmp table if distinct or if the sort is too complicated */