mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
MDEV-5976: TokuDB: Wrong query result using mrr=on
- Key_value_records_iterator::get_next() should pass pointer to the key to handler->ha_index_next_same(). Because of a typo bug, pointer-to-pointer was passed instead in certain cases.
This commit is contained in:
parent
216fbe2af3
commit
ee6f400fe1
3 changed files with 201 additions and 1 deletions
|
@ -1341,8 +1341,14 @@ int Key_value_records_iterator::get_next(range_id_t *range_info)
|
|||
}
|
||||
|
||||
handler *h= owner->file;
|
||||
uchar *lookup_key;
|
||||
if (owner->keypar.use_key_pointers)
|
||||
memcpy(&lookup_key, identical_key_it.read_ptr1, sizeof(void*));
|
||||
else
|
||||
lookup_key= identical_key_it.read_ptr1;
|
||||
|
||||
if ((res= h->ha_index_next_same(h->get_table()->record[0],
|
||||
identical_key_it.read_ptr1,
|
||||
lookup_key,
|
||||
owner->keypar.key_tuple_length)))
|
||||
{
|
||||
/* It's either HA_ERR_END_OF_FILE or some other error */
|
||||
|
|
132
storage/tokudb/mysql-test/tokudb_mariadb/r/mrr.result
Normal file
132
storage/tokudb/mysql-test/tokudb_mariadb/r/mrr.result
Normal file
|
@ -0,0 +1,132 @@
|
|||
drop table if exists t1,t2,t3;
|
||||
#
|
||||
# MDEV-5976: TokuDB: Wrong query result using mrr=on
|
||||
#
|
||||
create table t1(a int);
|
||||
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
CREATE TABLE t2 (
|
||||
task_id int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`type` tinyint(3) DEFAULT NULL,
|
||||
filler1 varchar(256),
|
||||
filler2 varchar(256),
|
||||
PRIMARY KEY (`task_id`),
|
||||
KEY `ymtasks_type` (`type`)
|
||||
) ENGINE=TokuDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 `COMPRESSION`=TOKUDB_LZMA;
|
||||
INSERT INTO t2 VALUES
|
||||
(1,1,'filler-data1','filler-data2'),
|
||||
(2,1,'filler-data1','filler-data2');
|
||||
CREATE TABLE t3 (
|
||||
`task_id` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`field` varchar(256) NOT NULL DEFAULT '',
|
||||
`value` varchar(4096) DEFAULT NULL,
|
||||
KEY `ymtasksoptions_task` (`task_id`),
|
||||
KEY `ymtasksoptions_field` (`field`)
|
||||
) ENGINE=TokuDB DEFAULT CHARSET=latin1 `COMPRESSION`=TOKUDB_LZMA;
|
||||
INSERT INTO t3
|
||||
select 1,
|
||||
concat('field-data-', A.a*10 + B.a),
|
||||
concat('field-data-', A.a*10 + B.a)
|
||||
from t1 A, t1 B
|
||||
where
|
||||
A.a*10 + B.a < 38;
|
||||
explain
|
||||
SELECT t3.task_id, t3.field FROM
|
||||
t3,t2 WHERE t3.task_id=t2.task_id AND t2.type NOT IN (8,11);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 index PRIMARY,ymtasks_type ymtasks_type 2 NULL 2 Using where; Using index
|
||||
1 SIMPLE t3 ref ymtasksoptions_task ymtasksoptions_task 4 test.t2.task_id 7
|
||||
SELECT t3.task_id, t3.field FROM
|
||||
t3,t2 WHERE t3.task_id=t2.task_id AND t2.type NOT IN (8,11);
|
||||
task_id field
|
||||
1 field-data-0
|
||||
1 field-data-10
|
||||
1 field-data-20
|
||||
1 field-data-30
|
||||
1 field-data-1
|
||||
1 field-data-11
|
||||
1 field-data-21
|
||||
1 field-data-31
|
||||
1 field-data-2
|
||||
1 field-data-12
|
||||
1 field-data-22
|
||||
1 field-data-32
|
||||
1 field-data-3
|
||||
1 field-data-13
|
||||
1 field-data-23
|
||||
1 field-data-33
|
||||
1 field-data-4
|
||||
1 field-data-14
|
||||
1 field-data-24
|
||||
1 field-data-34
|
||||
1 field-data-5
|
||||
1 field-data-15
|
||||
1 field-data-25
|
||||
1 field-data-35
|
||||
1 field-data-6
|
||||
1 field-data-16
|
||||
1 field-data-26
|
||||
1 field-data-36
|
||||
1 field-data-7
|
||||
1 field-data-17
|
||||
1 field-data-27
|
||||
1 field-data-37
|
||||
1 field-data-8
|
||||
1 field-data-18
|
||||
1 field-data-28
|
||||
1 field-data-9
|
||||
1 field-data-19
|
||||
1 field-data-29
|
||||
set @tmp5976_jcl=@@join_cache_level;
|
||||
set @tmp5976_os=@@optimizer_switch;
|
||||
set join_cache_level= 6;
|
||||
set optimizer_switch='mrr=on,mrr_sort_keys=on';
|
||||
explain
|
||||
SELECT t3.task_id, t3.field FROM
|
||||
t3,t2 WHERE t3.task_id=t2.task_id AND t2.type NOT IN (8,11);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 index PRIMARY,ymtasks_type ymtasks_type 2 NULL 2 Using where; Using index
|
||||
1 SIMPLE t3 ref ymtasksoptions_task ymtasksoptions_task 4 test.t2.task_id 7 Using join buffer (flat, BKA join); Key-ordered Rowid-ordered scan
|
||||
SELECT t3.task_id, t3.field FROM
|
||||
t3,t2 WHERE t3.task_id=t2.task_id AND t2.type NOT IN (8,11);
|
||||
task_id field
|
||||
1 field-data-0
|
||||
1 field-data-10
|
||||
1 field-data-20
|
||||
1 field-data-30
|
||||
1 field-data-1
|
||||
1 field-data-11
|
||||
1 field-data-21
|
||||
1 field-data-31
|
||||
1 field-data-2
|
||||
1 field-data-12
|
||||
1 field-data-22
|
||||
1 field-data-32
|
||||
1 field-data-3
|
||||
1 field-data-13
|
||||
1 field-data-23
|
||||
1 field-data-33
|
||||
1 field-data-4
|
||||
1 field-data-14
|
||||
1 field-data-24
|
||||
1 field-data-34
|
||||
1 field-data-5
|
||||
1 field-data-15
|
||||
1 field-data-25
|
||||
1 field-data-35
|
||||
1 field-data-6
|
||||
1 field-data-16
|
||||
1 field-data-26
|
||||
1 field-data-36
|
||||
1 field-data-7
|
||||
1 field-data-17
|
||||
1 field-data-27
|
||||
1 field-data-37
|
||||
1 field-data-8
|
||||
1 field-data-18
|
||||
1 field-data-28
|
||||
1 field-data-9
|
||||
1 field-data-19
|
||||
1 field-data-29
|
||||
drop table t1,t2,t3;
|
||||
set join_cache_level=@tmp5976_jcl;
|
||||
set optimizer_switch=@tmp5976_os;
|
62
storage/tokudb/mysql-test/tokudb_mariadb/t/mrr.test
Normal file
62
storage/tokudb/mysql-test/tokudb_mariadb/t/mrr.test
Normal file
|
@ -0,0 +1,62 @@
|
|||
--disable_warnings
|
||||
drop table if exists t1,t2,t3;
|
||||
--enable_warnings
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-5976: TokuDB: Wrong query result using mrr=on
|
||||
--echo #
|
||||
|
||||
create table t1(a int);
|
||||
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
|
||||
CREATE TABLE t2 (
|
||||
task_id int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`type` tinyint(3) DEFAULT NULL,
|
||||
filler1 varchar(256),
|
||||
filler2 varchar(256),
|
||||
PRIMARY KEY (`task_id`),
|
||||
KEY `ymtasks_type` (`type`)
|
||||
) ENGINE=TokuDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 `COMPRESSION`=TOKUDB_LZMA;
|
||||
|
||||
INSERT INTO t2 VALUES
|
||||
(1,1,'filler-data1','filler-data2'),
|
||||
(2,1,'filler-data1','filler-data2');
|
||||
|
||||
CREATE TABLE t3 (
|
||||
`task_id` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`field` varchar(256) NOT NULL DEFAULT '',
|
||||
`value` varchar(4096) DEFAULT NULL,
|
||||
KEY `ymtasksoptions_task` (`task_id`),
|
||||
KEY `ymtasksoptions_field` (`field`)
|
||||
) ENGINE=TokuDB DEFAULT CHARSET=latin1 `COMPRESSION`=TOKUDB_LZMA;
|
||||
|
||||
INSERT INTO t3
|
||||
select 1,
|
||||
concat('field-data-', A.a*10 + B.a),
|
||||
concat('field-data-', A.a*10 + B.a)
|
||||
from t1 A, t1 B
|
||||
where
|
||||
A.a*10 + B.a < 38;
|
||||
|
||||
explain
|
||||
SELECT t3.task_id, t3.field FROM
|
||||
t3,t2 WHERE t3.task_id=t2.task_id AND t2.type NOT IN (8,11);
|
||||
SELECT t3.task_id, t3.field FROM
|
||||
t3,t2 WHERE t3.task_id=t2.task_id AND t2.type NOT IN (8,11);
|
||||
|
||||
set @tmp5976_jcl=@@join_cache_level;
|
||||
set @tmp5976_os=@@optimizer_switch;
|
||||
|
||||
set join_cache_level= 6;
|
||||
set optimizer_switch='mrr=on,mrr_sort_keys=on';
|
||||
|
||||
explain
|
||||
SELECT t3.task_id, t3.field FROM
|
||||
t3,t2 WHERE t3.task_id=t2.task_id AND t2.type NOT IN (8,11);
|
||||
SELECT t3.task_id, t3.field FROM
|
||||
t3,t2 WHERE t3.task_id=t2.task_id AND t2.type NOT IN (8,11);
|
||||
|
||||
drop table t1,t2,t3;
|
||||
set join_cache_level=@tmp5976_jcl;
|
||||
set optimizer_switch=@tmp5976_os;
|
||||
|
Loading…
Reference in a new issue