Commit 9e8c87e7 authored by serg@serg.mysql.com's avatar serg@serg.mysql.com
Browse files

Merge work:/home/bk/mysql-4.0

into serg.mysql.com:/usr/home/serg/Abk/mysql-4.0
parents 4175461c dca6c608
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -79,6 +79,8 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
#error
#endif

  DBUG_ENTER("walk_and_match");

  word->weight=LWS_FOR_QUERY;

  keylen=_ft_make_key(aio->info,aio->keynr,(char*) aio->keybuff,word,0);
@@ -111,7 +113,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
#else
#error
#endif
    if(tmp_weight==0) return doc_cnt; /* stopword, doc_cnt should be 0 */
    if(tmp_weight==0) DBUG_RETURN(doc_cnt); /* stopword, doc_cnt should be 0 */

#ifdef EVAL_RUN
    cnt=*(byte *)(aio->info->lastkey+keylen);
@@ -121,7 +123,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)

    /* saving document matched into dtree */
    if (!(selem=tree_insert(&aio->dtree, &sdoc, 0)))
      return 1;
      DBUG_RETURN(1);

    sptr=(FT_SUPERDOC *)ELEMENT_KEY((&aio->dtree), selem);

@@ -152,21 +154,22 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
  if (doc_cnt)
  {
    word->weight*=GWS_IN_USE;
    if (word->weight < 0)
      word->weight=0;
    if (word->weight < 0) word->weight=0;

  }
  return 0;
  DBUG_RETURN(0);
}


static int walk_and_copy(FT_SUPERDOC *from,
			 uint32 count __attribute__((unused)), FT_DOC **to)
{
  DBUG_ENTER("walk_and_copy");
  from->doc.weight+=from->tmp_weight*from->word_ptr->weight;
  (*to)->dpos=from->doc.dpos;
  (*to)->weight=from->doc.weight;
  (*to)++;
  return 0;
  DBUG_RETURN(0);
}


@@ -184,12 +187,13 @@ FT_INFO *ft_init_nlq_search(MI_INFO *info, uint keynr, byte *query,
  FT_DOC     *dptr;
  FT_INFO    *dlist=NULL;
  my_off_t    saved_lastpos=info->lastpos;
  DBUG_ENTER("ft_init_nlq_search");

/* black magic ON */
  if ((int) (keynr = _mi_check_index(info,keynr)) < 0)
    return NULL;
    DBUG_RETURN(NULL);
  if (_mi_readinfo(info,F_RDLCK,1))
    return NULL;
    DBUG_RETURN(NULL);
/* black magic OFF */

  aio.info=info;
@@ -236,7 +240,7 @@ FT_INFO *ft_init_nlq_search(MI_INFO *info, uint keynr, byte *query,

err:
  info->lastpos=saved_lastpos;
  return dlist;
  DBUG_RETURN(dlist);
}


+8 −4
Original line number Diff line number Diff line
@@ -186,6 +186,7 @@ byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word)
{
  byte *doc=*start;
  int mwc;
  DBUG_ENTER("ft_simple_get_word");

  while (doc<end)
  {
@@ -207,32 +208,35 @@ byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word)
        !is_stopword(word->pos, word->len))
    {
      *start=doc;
      return 1;
      DBUG_RETURN(1);
    }
  }
  return 0;
  DBUG_RETURN(0);
}

void ft_parse_init(TREE *wtree, CHARSET_INFO *cs)
{
  DBUG_ENTER("ft_parse_init");
  if (!is_tree_inited(wtree))
    init_tree(wtree,0,0,sizeof(FT_WORD),(qsort_cmp2)&FT_WORD_cmp,0,NULL, cs);
  DBUG_VOID_RETURN;
}

int ft_parse(TREE *wtree, byte *doc, int doclen)
{
  byte   *end=doc+doclen;
  FT_WORD w;
  DBUG_ENTER("ft_parse");

  while (ft_simple_get_word(&doc,end,&w))
  {
    if (!tree_insert(wtree, &w, 0))
      goto err;
  }
  return 0;
  DBUG_RETURN(0);

err:
  delete_tree(wtree);
  return 1;
  DBUG_RETURN(1);
}
+1 −1
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ extern ulong collstat;
/* Mysterious, but w/o (double) GWS_IDF performs better :-o */
#define GWS_IDF		   log(aio->info->state->records/doc_cnt)
#define GWS_IDF1	   log((double)aio->info->state->records/doc_cnt)
#define GWS_PROB log(((double)(aio->info->state->records-doc_cnt))/doc_cnt)
#define GWS_PROB ((aio->info->state->records > doc_cnt) ? log(((double)(aio->info->state->records-doc_cnt))/doc_cnt) : 0 )
#define GWS_FREQ					(1.0/doc_cnt)
#define GWS_SQUARED pow(log((double)aio->info->state->records/doc_cnt),2)
#define GWS_CUBIC   pow(log((double)aio->info->state->records/doc_cnt),3)
+12 −11
Original line number Diff line number Diff line
@@ -2104,8 +2104,9 @@ longlong Item_func_inet_aton::val_int()

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

  if (key == NO_SUCH_KEY)
    concat= new Item_func_concat_ws(new Item_string(" ",1), fields);
@@ -2116,7 +2117,7 @@ void Item_func_match::init_search(bool no_order)
    master->init_search(no_order);
    ft_handler=master->ft_handler;
    join_key=master->join_key;
    return;
    DBUG_VOID_RETURN;
  }

  String *ft_tmp=0;
@@ -2136,10 +2137,9 @@ void Item_func_match::init_search(bool no_order)
				      join_key && !no_order);

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

  DBUG_VOID_RETURN;
}


@@ -2289,13 +2289,14 @@ bool Item_func_match::eq(const Item *item, bool binary_cmp) const

double Item_func_match::val()
{
  DBUG_ENTER("Item_func_match::val");
  if (ft_handler == NULL)
    return -1.0;
    DBUG_RETURN(-1.0);

  if (join_key)
  {
    if (table->file->ft_handler)
      return ft_handler->please->get_relevance(ft_handler);
      DBUG_RETURN(ft_handler->please->get_relevance(ft_handler));
    join_key=0;
  }

@@ -2303,12 +2304,12 @@ double Item_func_match::val()
  {
    String *a= concat->val_str(&value);
    if ((null_value= (a == 0)))
      return 0;
    return ft_handler->please->find_relevance(ft_handler,
					      (byte *)a->ptr(), a->length());
      DBUG_RETURN(0);
    DBUG_RETURN(ft_handler->please->find_relevance(ft_handler,
				      (byte *)a->ptr(), a->length()));
  }
  else
    return ft_handler->please->find_relevance(ft_handler, record, 0);
    DBUG_RETURN(ft_handler->please->find_relevance(ft_handler, record, 0));
}

longlong Item_func_bit_xor::val_int()