Commit c3bac658 authored by sergefp@mysql.com's avatar sergefp@mysql.com

Manual merge

parents 069fb89b 5e9545d4
...@@ -158,5 +158,15 @@ where ...@@ -158,5 +158,15 @@ where
match(c.beitrag) against ('+abc' in boolean mode) match(c.beitrag) against ('+abc' in boolean mode)
order by order by
match(betreff) against ('+abc' in boolean mode) desc; match(betreff) against ('+abc' in boolean mode) desc;
ERROR HY000: The used table type doesn't support FULLTEXT indexes text id betreff
(select b.id, b.betreff from t3 b) union
(select b.id, b.betreff from t3 b)
order by match(betreff) against ('+abc' in boolean mode) desc;
id betreff
select distinct b.id, b.betreff from t3 b
order by match(betreff) against ('+abc' in boolean mode) desc;
id betreff
select b.id, b.betreff from t3 b group by b.id+1
order by match(betreff) against ('+abc' in boolean mode) desc;
id betreff
drop table t1,t2,t3; drop table t1,t2,t3;
...@@ -135,6 +135,17 @@ where ...@@ -135,6 +135,17 @@ where
order by order by
match(betreff) against ('+abc' in boolean mode) desc; match(betreff) against ('+abc' in boolean mode) desc;
# BUG#11869 part2: used table type doesn't support FULLTEXT indexes error
(select b.id, b.betreff from t3 b) union
(select b.id, b.betreff from t3 b)
order by match(betreff) against ('+abc' in boolean mode) desc;
select distinct b.id, b.betreff from t3 b
order by match(betreff) against ('+abc' in boolean mode) desc;
select b.id, b.betreff from t3 b group by b.id+1
order by match(betreff) against ('+abc' in boolean mode) desc;
drop table t1,t2,t3; drop table t1,t2,t3;
# End of 4.1 tests # End of 4.1 tests
...@@ -284,6 +284,11 @@ extern CHARSET_INFO *national_charset_info, *table_alias_charset; ...@@ -284,6 +284,11 @@ extern CHARSET_INFO *national_charset_info, *table_alias_charset;
#define OPTION_SETUP_TABLES_DONE (1L << 30) // intern #define OPTION_SETUP_TABLES_DONE (1L << 30) // intern
/* If not set then the thread will ignore all warnings with level notes. */ /* If not set then the thread will ignore all warnings with level notes. */
#define OPTION_SQL_NOTES (1L << 31) // THD, user #define OPTION_SQL_NOTES (1L << 31) // THD, user
/*
Force the used temporary table to be a MyISAM table (because we will use
fulltext functions when reading from it.
*/
#define TMP_TABLE_FORCE_MYISAM (1L << 30)
/* /*
Maximum length of time zone name that we support Maximum length of time zone name that we support
......
...@@ -8359,7 +8359,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields, ...@@ -8359,7 +8359,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
/* If result table is small; use a heap */ /* If result table is small; use a heap */
if (blob_count || using_unique_constraint || if (blob_count || using_unique_constraint ||
(select_options & (OPTION_BIG_TABLES | SELECT_SMALL_RESULT)) == (select_options & (OPTION_BIG_TABLES | SELECT_SMALL_RESULT)) ==
OPTION_BIG_TABLES) OPTION_BIG_TABLES ||(select_options & TMP_TABLE_FORCE_MYISAM))
{ {
table->file=get_new_handler(table,table->s->db_type= DB_TYPE_MYISAM); table->file=get_new_handler(table,table->s->db_type= DB_TYPE_MYISAM);
if (group && if (group &&
......
...@@ -296,14 +296,22 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result, ...@@ -296,14 +296,22 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
} }
} }
ulong create_options= first_select_in_union()->options | thd_arg->options |
TMP_TABLE_ALL_COLUMNS;
/*
Force the temporary table to be a MyISAM table if we're going to use
fullext functions (MATCH ... AGAINST .. IN BOOLEAN MODE) when reading
from it.
*/
if (global_parameters->ftfunc_list->elements)
create_options= create_options | TMP_TABLE_FORCE_MYISAM;
union_result->tmp_table_param.field_count= types.elements; union_result->tmp_table_param.field_count= types.elements;
if (!(table= create_tmp_table(thd_arg, if (!(table= create_tmp_table(thd_arg,
&union_result->tmp_table_param, types, &union_result->tmp_table_param, types,
(ORDER*) 0, (bool) union_distinct, 1, (ORDER*) 0, (bool) union_distinct, 1,
(first_select_in_union()->options | create_options, HA_POS_ERROR,
thd_arg->options | (char *) tmp_table_alias)))
TMP_TABLE_ALL_COLUMNS),
HA_POS_ERROR, (char *) tmp_table_alias)))
goto err; goto err;
table->file->extra(HA_EXTRA_WRITE_CACHE); table->file->extra(HA_EXTRA_WRITE_CACHE);
table->file->extra(HA_EXTRA_IGNORE_DUP_KEY); table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
......
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