Making full-text queries working with UNION's
This commit is contained in:
parent
d3741dea32
commit
ec80dec9b0
@ -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");
|
|||||||
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,
|
|||||||
|
|
||||||
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)
|
|||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
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)
|
|||||||
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 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user