diff options
author | unknown <sergefp@mysql.com> | 2004-11-21 11:51:19 +0300 |
---|---|---|
committer | unknown <sergefp@mysql.com> | 2004-11-21 11:51:19 +0300 |
commit | febda72f628cbd3c9ca638f0022ef1c765d41c2c (patch) | |
tree | 4405a89b7616b6761af8778b22aaa0801ee5bcad /mysql-test/t/index_merge.test | |
parent | 6763a1da76a07c3962492acae491c341714f8b82 (diff) | |
download | mariadb-git-febda72f628cbd3c9ca638f0022ef1c765d41c2c.tar.gz |
Fix for BUG#4177:
* Make index merge quick selects code allow perform several scans.
* Delay additional handler objects creation till row retrieval is started.
include/queues.h:
Added trivial queue_remove_all macro
mysql-test/r/index_merge.result:
Testcase for BUG#4177
mysql-test/t/index_merge.test:
Testcase for BUG#4177
sql/opt_range.cc:
Fix for BUG#4177:
* For any quick select, row retrieval can be performed several times. Now all index_merge quick selects code handles such cases properly.
* In QUICK_INDEX_MERGE_SELECT we use one handler object for all merged scans, and it was possible that in
destructor several cleanup functions were called
* Additionally
- Removed redundant QUICK_INDEX_MERGE_SELECT members.
- Now QUICK_ROR_*_SELECTs create additional handler objects only when row retrieval is started
So if join optimizer chooses other access method, we don't create/delete handlers.
Diffstat (limited to 'mysql-test/t/index_merge.test')
-rw-r--r-- | mysql-test/t/index_merge.test | 49 |
1 files changed, 46 insertions, 3 deletions
diff --git a/mysql-test/t/index_merge.test b/mysql-test/t/index_merge.test index a4f7b71e5a3..3ab68d85125 100644 --- a/mysql-test/t/index_merge.test +++ b/mysql-test/t/index_merge.test @@ -1,9 +1,8 @@ # # Index merge tests # - --disable_warnings -drop table if exists t0, t1, t2, t3,t4; +drop table if exists t0, t1, t2, t3, t4; --enable_warnings # Create and fill a table with simple keys @@ -278,4 +277,48 @@ delete from t0 where key1 < 3 or key2 < 4; select * from t0 where key1 < 3 or key2 < 4; select count(*) from t0; -drop table t0, t1, t2, t3, t4; +# Test for BUG#4177 +drop table t4; +create table t4 (a int); +insert into t4 values (1),(4),(3); +set @save_join_buffer_size=@@join_buffer_size; +set join_buffer_size= 4000; +show variables like 'join_buffer_size'; +explain select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 + B.key5) + from t0 as A force index(i1,i2), t0 as B force index (i1,i2) + where (A.key1 < 500000 or A.key2 < 3) + and (B.key1 < 500000 or B.key2 < 3); + +select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 + B.key5) + from t0 as A force index(i1,i2), t0 as B force index (i1,i2) + where (A.key1 < 500000 or A.key2 < 3) + and (B.key1 < 500000 or B.key2 < 3); + +update t0 set key1=1; +explain select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 + B.key5) + from t0 as A force index(i1,i2), t0 as B force index (i1,i2) + where (A.key1 = 1 or A.key2 = 1) + and (B.key1 = 1 or B.key2 = 1); + +select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 + B.key5) + from t0 as A force index(i1,i2), t0 as B force index (i1,i2) + where (A.key1 = 1 or A.key2 = 1) + and (B.key1 = 1 or B.key2 = 1); + +alter table t0 add filler1 char(200), add filler2 char(200), add filler3 char(200); +update t0 set key2=1, key3=1, key4=1, key5=1,key6=1,key7=1 where key7 < 500; +explain select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 + B.key5) + from t0 as A, t0 as B + where (A.key1 = 1 and A.key2 = 1 and A.key3 = 1 and A.key4=1 and A.key5=1 and A.key6=1 and A.key7 = 1 or A.key8=1) + and (B.key1 = 1 and B.key2 = 1 and B.key3 = 1 and B.key4=1 and B.key5=1 and B.key6=1 and B.key7 = 1 or B.key8=1); + +select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 + B.key5) + from t0 as A, t0 as B + where (A.key1 = 1 and A.key2 = 1 and A.key3 = 1 and A.key4=1 and A.key5=1 and A.key6=1 and A.key7 = 1 or A.key8=1) + and (B.key1 = 1 and B.key2 = 1 and B.key3 = 1 and B.key4=1 and B.key5=1 and B.key6=1 and B.key7 = 1 or B.key8=1); + +set join_buffer_size= @save_join_buffer_size; +# Test for BUG#4177 ends + +drop table t0, t1, t2, t3, t4; + |