Commit 3b2e1fd2 authored by unknown's avatar unknown

Making full-text queries working with UNION's

parent 606e3e95
...@@ -16,6 +16,11 @@ select * from t1 where MATCH(a,b) AGAINST ("indexes collections"); ...@@ -16,6 +16,11 @@ select * from t1 where MATCH(a,b) AGAINST ("indexes collections");
a b a b
Full-text indexes are called collections Full-text indexes are called collections
Only MyISAM tables support 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); select * from t1 where MATCH(a,b) AGAINST("support -collections" IN BOOLEAN MODE);
a b a b
MySQL has now support for full-text search MySQL has now support for full-text search
......
...@@ -17,6 +17,10 @@ select * from t1 where MATCH(a,b) AGAINST ("collections"); ...@@ -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");
select * from t1 where MATCH(a,b) AGAINST ("indexes collections"); 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 # boolean search
select * from t1 where MATCH(a,b) AGAINST("support -collections" IN BOOLEAN MODE); select * from t1 where MATCH(a,b) AGAINST("support -collections" IN BOOLEAN MODE);
......
...@@ -2175,8 +2175,8 @@ bool remove_table_from_cache(THD *thd, const char *db, const char *table_name, ...@@ -2175,8 +2175,8 @@ bool remove_table_from_cache(THD *thd, const char *db, const char *table_name,
int setup_ftfuncs(THD *thd) int setup_ftfuncs(THD *thd)
{ {
List_iterator<Item_func_match> li(thd->lex.select_lex.ftfunc_list), List_iterator<Item_func_match> li(thd->lex.select->ftfunc_list),
lj(thd->lex.select_lex.ftfunc_list); lj(thd->lex.select->ftfunc_list);
Item_func_match *ftf, *ftf2; Item_func_match *ftf, *ftf2;
while ((ftf=li++)) while ((ftf=li++))
...@@ -2196,9 +2196,9 @@ int setup_ftfuncs(THD *thd) ...@@ -2196,9 +2196,9 @@ int setup_ftfuncs(THD *thd)
int init_ftfuncs(THD *thd, bool no_order) 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; Item_func_match *ifm;
DBUG_PRINT("info",("Performing FULLTEXT search")); DBUG_PRINT("info",("Performing FULLTEXT search"));
thd->proc_info="FULLTEXT initialization"; thd->proc_info="FULLTEXT initialization";
......
...@@ -196,6 +196,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds, ...@@ -196,6 +196,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
List<Item> all_fields(fields); List<Item> all_fields(fields);
bool select_distinct; bool select_distinct;
SELECT_LEX *select_lex = &(thd->lex.select_lex); SELECT_LEX *select_lex = &(thd->lex.select_lex);
SELECT_LEX *cur_sel = thd->lex.select;
DBUG_ENTER("mysql_select"); DBUG_ENTER("mysql_select");
/* Check that all tables, fields, conds and order are ok */ /* 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, ...@@ -553,7 +554,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
make_join_readinfo(&join, make_join_readinfo(&join,
(select_options & (SELECT_DESCRIBE | (select_options & (SELECT_DESCRIBE |
SELECT_NO_JOIN_CACHE)) | 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 /* Need to tell Innobase that to play it safe, it should fetch all
columns of the tables: this is because MySQL 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, ...@@ -1615,7 +1616,7 @@ update_ref_and_keys(THD *thd, DYNAMIC_ARRAY *keyuse,JOIN_TAB *join_tab,
add_key_part(keyuse,field); 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); add_ft_keys(keyuse,join_tab,cond,normal_tables);
} }
......
...@@ -126,7 +126,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) ...@@ -126,7 +126,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
} }
union_result->save_time_stamp=!describe; 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->offset_limit=sl->offset_limit;
thd->select_limit=sl->select_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) ...@@ -155,6 +155,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
delete union_result; delete union_result;
/* Send result to 'result' */ /* Send result to 'result' */
lex->select = &lex->select_lex;
res =-1; res =-1;
{ {
/* Create a list of fields in the temporary table */ /* Create a list of fields in the temporary table */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment