Commit ea0f9d35 authored by sasha@mysql.sashanet.com's avatar sasha@mysql.sashanet.com
Browse files

Merge work.mysql.com:/home/bk/mysql

into mysql.sashanet.com:/home/sasha/src/bk/mysql
parents 0decc269 1a23c2e1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
monty@donna.mysql.com
sasha@mysql.sashanet.com
serg@serg.mysql.com
+26 −15
Original line number Diff line number Diff line
@@ -1975,33 +1975,44 @@ bool Item_func_match::fix_index()
    }
  }

  uint max_cnt=0, max_key=0;
  uint max_cnt=0, mkeys=0;
  for (key=0 ; key<fts ; key++)
  {
    if (ft_cnt[key] > max_cnt)
    {
      max_cnt=ft_cnt[key];
      max_key=ft_to_key[key];
      mkeys=0;
      max_cnt=ft_cnt[mkeys]=ft_cnt[key];
      ft_to_key[mkeys]=ft_to_key[key];
      continue;
    }
    if (ft_cnt[key] == max_cnt)
    {
      mkeys++;
      ft_cnt[mkeys]=ft_cnt[key];
      ft_to_key[mkeys]=ft_to_key[key];
      continue;
    }
  }

  for (key=0 ; key<=mkeys ; key++)
  {
    // for now, partial keys won't work. SerG

    if (max_cnt < fields.elements ||
      max_cnt < table->key_info[max_key].key_parts)
  {
    my_printf_error(ER_FT_MATCHING_KEY_NOT_FOUND,
                 ER(ER_FT_MATCHING_KEY_NOT_FOUND),MYF(0));
    return 1;
  }
        max_cnt < table->key_info[ft_to_key[key]].key_parts)
      continue;

  this->key=max_key;
    this->key=ft_to_key[key];
    maybe_null=1;
    join_key=0;

    return 0;
  }

  my_printf_error(ER_FT_MATCHING_KEY_NOT_FOUND,
               ER(ER_FT_MATCHING_KEY_NOT_FOUND),MYF(0));
  return 1;
}

bool Item_func_match::eq(const Item *item) const
{
  if (item->type() != FUNC_ITEM)