automerge
This commit is contained in:
commit
f264697084
@ -527,4 +527,30 @@ where exists (select 1 from t2, t3
|
|||||||
|
|
||||||
drop table t0, t1, t2, t3;
|
drop table t0, t1, t2, t3;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # BUG#44810: index merge and order by with low sort_buffer_size
|
||||||
|
--echo # crashes server!
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1(a VARCHAR(128),b VARCHAR(128),KEY(A),KEY(B));
|
||||||
|
INSERT INTO t1 VALUES (REPEAT('a',128),REPEAT('b',128));
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
SET SESSION sort_buffer_size=1;
|
||||||
|
EXPLAIN
|
||||||
|
SELECT * FROM t1 FORCE INDEX(a,b) WHERE a LIKE 'a%' OR b LIKE 'b%'
|
||||||
|
ORDER BY a,b;
|
||||||
|
# we don't actually care about the result : we're checking if it crashes
|
||||||
|
--disable_result_log
|
||||||
|
SELECT * FROM t1 FORCE INDEX(a,b) WHERE a LIKE 'a%' OR b LIKE 'b%'
|
||||||
|
ORDER BY a,b;
|
||||||
|
--enable_result_log
|
||||||
|
|
||||||
|
SET SESSION sort_buffer_size=DEFAULT;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
@ -557,6 +557,30 @@ a
|
|||||||
1
|
1
|
||||||
2
|
2
|
||||||
drop table t0, t1, t2, t3;
|
drop table t0, t1, t2, t3;
|
||||||
|
#
|
||||||
|
# BUG#44810: index merge and order by with low sort_buffer_size
|
||||||
|
# crashes server!
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a VARCHAR(128),b VARCHAR(128),KEY(A),KEY(B));
|
||||||
|
INSERT INTO t1 VALUES (REPEAT('a',128),REPEAT('b',128));
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
SET SESSION sort_buffer_size=1;
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect sort_buffer_size value: '1'
|
||||||
|
EXPLAIN
|
||||||
|
SELECT * FROM t1 FORCE INDEX(a,b) WHERE a LIKE 'a%' OR b LIKE 'b%'
|
||||||
|
ORDER BY a,b;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 index_merge a,b a,b 131,131 NULL 64 Using sort_union(a,b); Using where; Using filesort
|
||||||
|
SELECT * FROM t1 FORCE INDEX(a,b) WHERE a LIKE 'a%' OR b LIKE 'b%'
|
||||||
|
ORDER BY a,b;
|
||||||
|
SET SESSION sort_buffer_size=DEFAULT;
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
#---------------- ROR-index_merge tests -----------------------
|
#---------------- ROR-index_merge tests -----------------------
|
||||||
SET SESSION STORAGE_ENGINE = MyISAM;
|
SET SESSION STORAGE_ENGINE = MyISAM;
|
||||||
|
@ -13490,9 +13490,24 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order,
|
|||||||
tab->records= table->sort.found_records; // For SQL_CALC_ROWS
|
tab->records= table->sort.found_records; // For SQL_CALC_ROWS
|
||||||
if (select)
|
if (select)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
We need to preserve tablesort's output resultset here, because
|
||||||
|
QUICK_INDEX_MERGE_SELECT::~QUICK_INDEX_MERGE_SELECT (called by
|
||||||
|
SQL_SELECT::cleanup()) may free it assuming it's the result of the quick
|
||||||
|
select operation that we no longer need. Note that all the other parts of
|
||||||
|
this data structure are cleaned up when
|
||||||
|
QUICK_INDEX_MERGE_SELECT::get_next encounters end of data, so the next
|
||||||
|
SQL_SELECT::cleanup() call changes sort.io_cache alone.
|
||||||
|
*/
|
||||||
|
IO_CACHE *tablesort_result_cache;
|
||||||
|
|
||||||
|
tablesort_result_cache= table->sort.io_cache;
|
||||||
|
table->sort.io_cache= NULL;
|
||||||
|
|
||||||
select->cleanup(); // filesort did select
|
select->cleanup(); // filesort did select
|
||||||
tab->select= 0;
|
tab->select= 0;
|
||||||
table->quick_keys.clear_all(); // as far as we cleanup select->quick
|
table->quick_keys.clear_all(); // as far as we cleanup select->quick
|
||||||
|
table->sort.io_cache= tablesort_result_cache;
|
||||||
}
|
}
|
||||||
tab->select_cond=0;
|
tab->select_cond=0;
|
||||||
tab->last_inner= 0;
|
tab->last_inner= 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user