Commit ec80dec9 authored by Sinisa@sinisa.nasamreza.org's avatar Sinisa@sinisa.nasamreza.org
Browse files

Making full-text queries working with UNION's

parent d3741dea
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -16,6 +16,11 @@ select * from t1 where MATCH(a,b) AGAINST ("indexes collections");
a	b
Full-text indexes	are called collections
Only MyISAM tables	support collections
select * from t1 where MATCH(a,b) AGAINST ("collections") UNION ALL select * from t1 where MATCH(a,b) AGAINST ("indexes");
a	b
Only MyISAM tables	support collections
Full-text indexes	are called collections
Full-text indexes	are called collections
select * from t1 where MATCH(a,b) AGAINST("support -collections" IN BOOLEAN MODE);
a	b
MySQL has now support	for full-text search
+4 −0
Original line number Diff line number Diff line
@@ -17,6 +17,10 @@ select * from t1 where MATCH(a,b) AGAINST ("collections");
select * from t1 where MATCH(a,b) AGAINST ("indexes");
select * from t1 where MATCH(a,b) AGAINST ("indexes collections");

# UNION of fulltext's
select * from t1 where MATCH(a,b) AGAINST ("collections") UNION ALL select * from t1 where MATCH(a,b) AGAINST ("indexes");


# boolean search

select * from t1 where MATCH(a,b) AGAINST("support -collections" IN BOOLEAN MODE);
+4 −4
Original line number Diff line number Diff line
@@ -2175,8 +2175,8 @@ bool remove_table_from_cache(THD *thd, const char *db, const char *table_name,

int setup_ftfuncs(THD *thd)
{
  List_iterator<Item_func_match> li(thd->lex.select_lex.ftfunc_list),
                                 lj(thd->lex.select_lex.ftfunc_list);
  List_iterator<Item_func_match> li(thd->lex.select->ftfunc_list),
                                 lj(thd->lex.select->ftfunc_list);
  Item_func_match *ftf, *ftf2;

  while ((ftf=li++))
@@ -2196,9 +2196,9 @@ int setup_ftfuncs(THD *thd)

int init_ftfuncs(THD *thd, bool no_order)
{
  if (thd->lex.select_lex.ftfunc_list.elements)
  if (thd->lex.select->ftfunc_list.elements)
  {
    List_iterator<Item_func_match> li(thd->lex.select_lex.ftfunc_list);
    List_iterator<Item_func_match> li(thd->lex.select->ftfunc_list);
    Item_func_match *ifm;
    DBUG_PRINT("info",("Performing FULLTEXT search"));
    thd->proc_info="FULLTEXT initialization";
+3 −2
Original line number Diff line number Diff line
@@ -196,6 +196,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
  List<Item>	all_fields(fields);
  bool		select_distinct;
  SELECT_LEX *select_lex = &(thd->lex.select_lex);
  SELECT_LEX *cur_sel = thd->lex.select;
  DBUG_ENTER("mysql_select");

  /* Check that all tables, fields, conds and order are ok */
@@ -553,7 +554,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
  make_join_readinfo(&join,
		     (select_options & (SELECT_DESCRIBE |
					SELECT_NO_JOIN_CACHE)) |
     (select_lex->ftfunc_list.elements ? SELECT_NO_JOIN_CACHE : 0));
     (cur_sel->ftfunc_list.elements ? SELECT_NO_JOIN_CACHE : 0));

  /* Need to tell Innobase that to play it safe, it should fetch all
     columns of the tables: this is because MySQL
@@ -1615,7 +1616,7 @@ update_ref_and_keys(THD *thd, DYNAMIC_ARRAY *keyuse,JOIN_TAB *join_tab,
      add_key_part(keyuse,field);
  }

  if (thd->lex.select_lex.ftfunc_list.elements)
  if (thd->lex.select->ftfunc_list.elements)
  {
    add_ft_keys(keyuse,join_tab,cond,normal_tables);
  }
+2 −1
Original line number Diff line number Diff line
@@ -126,7 +126,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
  }
  union_result->save_time_stamp=!describe;

  for (sl=&lex->select_lex;sl;sl=sl->next)
  for (sl=lex->select=&lex->select_lex;sl;sl=lex->select=sl->next)
  {
    thd->offset_limit=sl->offset_limit;
    thd->select_limit=sl->select_limit+sl->offset_limit;
@@ -155,6 +155,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
  delete union_result;

  /* Send result to 'result' */
  lex->select = &lex->select_lex;
  res =-1;
  {
    /* Create a list of fields in the temporary table */