Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/psergey/mysql-5.0-bug11869-part3 BitKeeper/deleted/.del-not_windows.inc: Auto merged mysql-test/r/create.result: Auto merged mysql-test/r/query_cache.result: Auto merged mysql-test/r/type_datetime.result: Auto merged mysql-test/t/query_cache.test: Auto merged mysql-test/t/rpl_flush_tables.test: Auto merged sql/item_sum.cc: Auto merged sql/mysql_priv.h: Auto merged sql-common/my_time.c: Auto merged sql/sql_select.cc: Auto merged sql/sql_show.cc: Auto merged sql/sql_union.cc: Auto merged
This commit is contained in:
commit
7ca7da411e
@ -1,4 +1,4 @@
|
|||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1,t2,t3;
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
a INT AUTO_INCREMENT PRIMARY KEY,
|
a INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
message CHAR(20),
|
message CHAR(20),
|
||||||
@ -158,5 +158,19 @@ 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 b.id, b.betreff from t3 b) union
|
||||||
|
(select b.id, b.betreff from t3 b)
|
||||||
|
order by match(betreff) against ('+abc') desc;
|
||||||
|
ERROR HY000: Can't find FULLTEXT index matching the column list
|
||||||
|
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;
|
||||||
|
@ -756,6 +756,13 @@ INSERT INTO t1 VALUES (1);
|
|||||||
SELECT n+1 AS n FROM t1 GROUP BY n;
|
SELECT n+1 AS n FROM t1 GROUP BY n;
|
||||||
n
|
n
|
||||||
2
|
2
|
||||||
|
create table t1 (f1 date);
|
||||||
|
insert into t1 values('2005-06-06');
|
||||||
|
insert into t1 values('2005-06-06');
|
||||||
|
select date(left(f1+0,8)) from t1 group by 1;
|
||||||
|
date(left(f1+0,8))
|
||||||
|
2005-06-06
|
||||||
|
drop table t1;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1052 Column 'n' in group statement is ambiguous
|
Warning 1052 Column 'n' in group statement is ambiguous
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
--disable_warnings
|
--disable_warnings
|
||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1,t2,t3;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
@ -117,8 +117,6 @@ where
|
|||||||
order by
|
order by
|
||||||
match(b.betreff) against ('+abc' in boolean mode) desc;
|
match(b.betreff) against ('+abc' in boolean mode) desc;
|
||||||
|
|
||||||
-- todo psergey: fix
|
|
||||||
--error 1214
|
|
||||||
select a.text, b.id, b.betreff
|
select a.text, b.id, b.betreff
|
||||||
from
|
from
|
||||||
t2 a inner join t3 b on a.id = b.forum inner join
|
t2 a inner join t3 b on a.id = b.forum inner join
|
||||||
@ -135,6 +133,22 @@ 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;
|
||||||
|
|
||||||
|
--error 1191
|
||||||
|
(select b.id, b.betreff from t3 b) union
|
||||||
|
(select b.id, b.betreff from t3 b)
|
||||||
|
order by match(betreff) against ('+abc') 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
|
||||||
|
@ -576,6 +576,16 @@ INSERT INTO t1 VALUES ('trans1'), ('trans2');
|
|||||||
CREATE TABLE t2 (id varchar(20) NOT NULL, err_comment blob NOT NULL);
|
CREATE TABLE t2 (id varchar(20) NOT NULL, err_comment blob NOT NULL);
|
||||||
INSERT INTO t2 VALUES ('trans1', 'a problem');
|
INSERT INTO t2 VALUES ('trans1', 'a problem');
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #12266 GROUP BY expression on DATE column produces result with
|
||||||
|
# reduced length
|
||||||
|
#
|
||||||
|
create table t1 (f1 date);
|
||||||
|
insert into t1 values('2005-06-06');
|
||||||
|
insert into t1 values('2005-06-06');
|
||||||
|
select date(left(f1+0,8)) from t1 group by 1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
SELECT COUNT(DISTINCT(t1.id)), LEFT(err_comment, 256) AS comment
|
SELECT COUNT(DISTINCT(t1.id)), LEFT(err_comment, 256) AS comment
|
||||||
FROM t1 LEFT JOIN t2 ON t1.id=t2.id GROUP BY comment;
|
FROM t1 LEFT JOIN t2 ON t1.id=t2.id GROUP BY comment;
|
||||||
|
|
||||||
|
@ -2291,7 +2291,8 @@ bool Item_sum_count_distinct::setup(THD *thd)
|
|||||||
DBUG_ASSERT(table == 0);
|
DBUG_ASSERT(table == 0);
|
||||||
if (!(table= create_tmp_table(thd, tmp_table_param, list, (ORDER*) 0, 1,
|
if (!(table= create_tmp_table(thd, tmp_table_param, list, (ORDER*) 0, 1,
|
||||||
0,
|
0,
|
||||||
select_lex->options | thd->options,
|
(select_lex->options | thd->options) &
|
||||||
|
~TMP_TABLE_FORCE_MYISAM,
|
||||||
HA_POS_ERROR, (char*)"")))
|
HA_POS_ERROR, (char*)"")))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
table->file->extra(HA_EXTRA_NO_ROWS); // Don't update rows
|
table->file->extra(HA_EXTRA_NO_ROWS); // Don't update rows
|
||||||
@ -3073,7 +3074,8 @@ bool Item_func_group_concat::setup(THD *thd)
|
|||||||
*/
|
*/
|
||||||
if (!(table= create_tmp_table(thd, tmp_table_param, all_fields,
|
if (!(table= create_tmp_table(thd, tmp_table_param, all_fields,
|
||||||
(ORDER*) 0, 0, TRUE,
|
(ORDER*) 0, 0, TRUE,
|
||||||
select_lex->options | thd->options,
|
(select_lex->options | thd->options) &
|
||||||
|
~TMP_TABLE_FORCE_MYISAM,
|
||||||
HA_POS_ERROR, (char*) "")))
|
HA_POS_ERROR, (char*) "")))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
table->file->extra(HA_EXTRA_NO_ROWS);
|
table->file->extra(HA_EXTRA_NO_ROWS);
|
||||||
|
@ -714,6 +714,12 @@ public:
|
|||||||
{
|
{
|
||||||
return (new Field_date(maybe_null, name, t_arg, &my_charset_bin));
|
return (new Field_date(maybe_null, name, t_arg, &my_charset_bin));
|
||||||
}
|
}
|
||||||
|
void fix_length_and_dec()
|
||||||
|
{
|
||||||
|
collation.set(&my_charset_bin);
|
||||||
|
max_length= 10;
|
||||||
|
maybe_null= 1;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -256,6 +256,13 @@ extern CHARSET_INFO *national_charset_info, *table_alias_charset;
|
|||||||
#define OPTION_WARNINGS (1L << 13) // THD, user
|
#define OPTION_WARNINGS (1L << 13) // THD, user
|
||||||
#define OPTION_AUTO_IS_NULL (1L << 14) // THD, user, binlog
|
#define OPTION_AUTO_IS_NULL (1L << 14) // THD, user, binlog
|
||||||
#define OPTION_FOUND_COMMENT (1L << 15) // SELECT, intern, parser
|
#define OPTION_FOUND_COMMENT (1L << 15) // SELECT, intern, parser
|
||||||
|
/*
|
||||||
|
Force the used temporary table to be a MyISAM table (because we will use
|
||||||
|
fulltext functions when reading from it. This uses the same constant as
|
||||||
|
OPTION_FOUND_COMMENT because we've run out of bits and these two values
|
||||||
|
are not used together.
|
||||||
|
*/
|
||||||
|
#define TMP_TABLE_FORCE_MYISAM (1L << 15)
|
||||||
#define OPTION_SAFE_UPDATES (1L << 16) // THD, user
|
#define OPTION_SAFE_UPDATES (1L << 16) // THD, user
|
||||||
#define OPTION_BUFFER_RESULT (1L << 17) // SELECT, user
|
#define OPTION_BUFFER_RESULT (1L << 17) // SELECT, user
|
||||||
#define OPTION_BIN_LOG (1L << 18) // THD, user
|
#define OPTION_BIN_LOG (1L << 18) // THD, user
|
||||||
|
@ -142,7 +142,8 @@ int mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *orig_table_list)
|
|||||||
unit->types, (ORDER*) 0,
|
unit->types, (ORDER*) 0,
|
||||||
FALSE, 1,
|
FALSE, 1,
|
||||||
(first_select->options | thd->options |
|
(first_select->options | thd->options |
|
||||||
TMP_TABLE_ALL_COLUMNS),
|
TMP_TABLE_ALL_COLUMNS) &
|
||||||
|
~TMP_TABLE_FORCE_MYISAM,
|
||||||
HA_POS_ERROR,
|
HA_POS_ERROR,
|
||||||
orig_table_list->alias)))
|
orig_table_list->alias)))
|
||||||
{
|
{
|
||||||
|
@ -1016,7 +1016,7 @@ JOIN::optimize()
|
|||||||
group_list : (ORDER*) 0),
|
group_list : (ORDER*) 0),
|
||||||
group_list ? 0 : select_distinct,
|
group_list ? 0 : select_distinct,
|
||||||
group_list && simple_group,
|
group_list && simple_group,
|
||||||
select_options,
|
select_options & ~TMP_TABLE_FORCE_MYISAM,
|
||||||
(order == 0 || skip_sort_order) ? select_limit :
|
(order == 0 || skip_sort_order) ? select_limit :
|
||||||
HA_POS_ERROR,
|
HA_POS_ERROR,
|
||||||
(char *) "")))
|
(char *) "")))
|
||||||
@ -1396,7 +1396,8 @@ JOIN::exec()
|
|||||||
(ORDER*) 0,
|
(ORDER*) 0,
|
||||||
curr_join->select_distinct &&
|
curr_join->select_distinct &&
|
||||||
!curr_join->group_list,
|
!curr_join->group_list,
|
||||||
1, curr_join->select_options,
|
1, curr_join->select_options
|
||||||
|
& ~TMP_TABLE_FORCE_MYISAM,
|
||||||
HA_POS_ERROR,
|
HA_POS_ERROR,
|
||||||
(char *) "")))
|
(char *) "")))
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
@ -8381,7 +8382,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 &&
|
||||||
|
@ -3319,7 +3319,8 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list)
|
|||||||
if (!(table= create_tmp_table(thd, tmp_table_param,
|
if (!(table= create_tmp_table(thd, tmp_table_param,
|
||||||
field_list, (ORDER*) 0, 0, 0,
|
field_list, (ORDER*) 0, 0, 0,
|
||||||
(select_lex->options | thd->options |
|
(select_lex->options | thd->options |
|
||||||
TMP_TABLE_ALL_COLUMNS),
|
TMP_TABLE_ALL_COLUMNS) &
|
||||||
|
~TMP_TABLE_FORCE_MYISAM,
|
||||||
HA_POS_ERROR, table_list->alias)))
|
HA_POS_ERROR, table_list->alias)))
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
table_list->schema_table_param= tmp_table_param;
|
table_list->schema_table_param= tmp_table_param;
|
||||||
|
@ -119,8 +119,6 @@ void
|
|||||||
st_select_lex_unit::init_prepare_fake_select_lex(THD *thd)
|
st_select_lex_unit::init_prepare_fake_select_lex(THD *thd)
|
||||||
{
|
{
|
||||||
thd->lex->current_select= fake_select_lex;
|
thd->lex->current_select= fake_select_lex;
|
||||||
fake_select_lex->ftfunc_list_alloc.empty();
|
|
||||||
fake_select_lex->ftfunc_list= &fake_select_lex->ftfunc_list_alloc;
|
|
||||||
fake_select_lex->table_list.link_in_list((byte *)&result_table_list,
|
fake_select_lex->table_list.link_in_list((byte *)&result_table_list,
|
||||||
(byte **)
|
(byte **)
|
||||||
&result_table_list.next_local);
|
&result_table_list.next_local);
|
||||||
@ -302,14 +300,23 @@ 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) & ~TMP_TABLE_FORCE_MYISAM;
|
||||||
|
/*
|
||||||
|
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 (this should be removed in 5.2 when fulltext search is moved
|
||||||
|
out of MyISAM).
|
||||||
|
*/
|
||||||
|
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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user