Commit 389a7c02 authored by serg@serg.mysql.com's avatar serg@serg.mysql.com

bugfix: HAVING MATCH

parent 801259b6
...@@ -21,3 +21,7 @@ t2 CREATE TABLE `t2` ( ...@@ -21,3 +21,7 @@ t2 CREATE TABLE `t2` (
FULLTEXT KEY `tix` (`inhalt`) FULLTEXT KEY `tix` (`inhalt`)
) TYPE=MyISAM ) TYPE=MyISAM
ticket inhalt ticket inhalt
ticket inhalt
3 foobar
ticket inhalt
3 foobar
...@@ -42,7 +42,10 @@ ticket2.id = ttxt.ticket ...@@ -42,7 +42,10 @@ ticket2.id = ttxt.ticket
WHERE t1.id = ticket2.ticket and match(ttxt.inhalt) against ('foobar'); WHERE t1.id = ticket2.ticket and match(ttxt.inhalt) against ('foobar');
INSERT INTO t1 VALUES (3,3); INSERT INTO t1 VALUES (3,3);
select t1.id FROM t2 as ttxt,t1 INNER JOIN t1 as ticket2 ON ticket2.id = ttxt.ticket WHERE t1.id = ticket2.ticket and match(ttxt.inhalt) against ('foobar'); select t1.id FROM t2 as ttxt,t1
INNER JOIN t1 as ticket2 ON ticket2.id = ttxt.ticket
WHERE t1.id = ticket2.ticket and
match(ttxt.inhalt) against ('foobar');
# Check that we get 'fulltext' index in SHOW CREATE # Check that we get 'fulltext' index in SHOW CREATE
...@@ -53,4 +56,9 @@ show create table t2; ...@@ -53,4 +56,9 @@ show create table t2;
select * from t2 where MATCH inhalt AGAINST (NULL); select * from t2 where MATCH inhalt AGAINST (NULL);
# MATCH in HAVING (pretty useless, but still it should work)
select * from t2 where MATCH inhalt AGAINST ('foobar');
select * from t2 having MATCH inhalt AGAINST ('foobar');
drop table t1,t2; drop table t1,t2;
...@@ -298,8 +298,8 @@ public: ...@@ -298,8 +298,8 @@ public:
class Item_ref :public Item_ident class Item_ref :public Item_ident
{ {
Item **ref;
public: public:
Item **ref;
Item_ref(char *db_par,char *table_name_par,char *field_name_par) Item_ref(char *db_par,char *table_name_par,char *field_name_par)
:Item_ident(db_par,table_name_par,field_name_par),ref(0) {} :Item_ident(db_par,table_name_par,field_name_par),ref(0) {}
Item_ref(Item **item, char *table_name_par,char *field_name_par) Item_ref(Item **item, char *table_name_par,char *field_name_par)
......
...@@ -1961,12 +1961,15 @@ bool Item_func_match::fix_fields(THD *thd,struct st_table_list *tlist) ...@@ -1961,12 +1961,15 @@ bool Item_func_match::fix_fields(THD *thd,struct st_table_list *tlist)
while ((item=li++)) while ((item=li++))
{ {
if (item->type() != Item::FIELD_ITEM || item->fix_fields(thd,tlist) || if (item->fix_fields(thd,tlist))
!item->used_tables()) return 1;
if (item->type() == Item::REF_ITEM)
li.replace(item= *((Item_ref *)item)->ref);
if (item->type() != Item::FIELD_ITEM || !item->used_tables())
return 1; return 1;
used_tables_cache|=item->used_tables(); used_tables_cache|=item->used_tables();
} }
/* check that all columns comes from the same table */ /* check that all columns come from the same table */
if (count_bits(used_tables_cache) != 1) if (count_bits(used_tables_cache) != 1)
return 1; return 1;
const_item_cache=0; const_item_cache=0;
......
...@@ -178,8 +178,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds, ...@@ -178,8 +178,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
setup_fields(thd,tables,fields,1,&all_fields) || setup_fields(thd,tables,fields,1,&all_fields) ||
setup_conds(thd,tables,&conds) || setup_conds(thd,tables,&conds) ||
setup_order(thd,tables,fields,all_fields,order) || setup_order(thd,tables,fields,all_fields,order) ||
setup_group(thd,tables,fields,all_fields,group,&hidden_group_fields) || setup_group(thd,tables,fields,all_fields,group,&hidden_group_fields))
setup_ftfuncs(thd,tables,ftfuncs))
DBUG_RETURN(-1); /* purecov: inspected */ DBUG_RETURN(-1); /* purecov: inspected */
if (having) if (having)
...@@ -191,6 +190,8 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds, ...@@ -191,6 +190,8 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
if (having->with_sum_func) if (having->with_sum_func)
having->split_sum_func(all_fields); having->split_sum_func(all_fields);
} }
if (setup_ftfuncs(thd,tables,ftfuncs)) /* should be after having->fix_fields */
DBUG_RETURN(-1);
/* /*
Check if one one uses a not constant column with group functions Check if one one uses a not constant column with group functions
and no GROUP BY. and no GROUP BY.
......
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