mirror of
https://github.com/MariaDB/server.git
synced 2025-02-16 18:35:34 +01:00
Backported the fix and the test case for bug #58816 from mysql-5.6 code line.
This commit is contained in:
parent
a8f5b5e866
commit
7bc6a83b02
11 changed files with 109 additions and 9 deletions
mysql-test
sql
storage
|
@ -467,6 +467,31 @@ set optimizer_switch=@save_optimizer_switch;
|
||||||
|
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #58816 "Extra temporary duplicate rows in result set when
|
||||||
|
--echo # switching ICP off"
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
set @save_optimizer_switch= @@optimizer_switch;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
pk INT NOT NULL,
|
||||||
|
c1 INT NOT NULL,
|
||||||
|
PRIMARY KEY (pk)
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1,9),(2,7),(3,6),(4,3),(5,1);
|
||||||
|
|
||||||
|
EXPLAIN SELECT pk, c1 FROM t1 WHERE pk <> 3;
|
||||||
|
|
||||||
|
SET SESSION optimizer_switch='index_condition_pushdown=off';
|
||||||
|
|
||||||
|
SELECT pk, c1 FROM t1 WHERE pk <> 3;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
set optimizer_switch= @save_optimizer_switch;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # BUG#778434 Wrong result with in_to_exists=on in maria-5.3-mwl89
|
--echo # BUG#778434 Wrong result with in_to_exists=on in maria-5.3-mwl89
|
||||||
--echo #
|
--echo #
|
||||||
|
|
|
@ -439,6 +439,29 @@ pk i
|
||||||
set optimizer_switch=@save_optimizer_switch;
|
set optimizer_switch=@save_optimizer_switch;
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
#
|
#
|
||||||
|
# Bug #58816 "Extra temporary duplicate rows in result set when
|
||||||
|
# switching ICP off"
|
||||||
|
#
|
||||||
|
set @save_optimizer_switch= @@optimizer_switch;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
pk INT NOT NULL,
|
||||||
|
c1 INT NOT NULL,
|
||||||
|
PRIMARY KEY (pk)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (1,9),(2,7),(3,6),(4,3),(5,1);
|
||||||
|
EXPLAIN SELECT pk, c1 FROM t1 WHERE pk <> 3;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 4 Using index condition
|
||||||
|
SET SESSION optimizer_switch='index_condition_pushdown=off';
|
||||||
|
SELECT pk, c1 FROM t1 WHERE pk <> 3;
|
||||||
|
pk c1
|
||||||
|
1 9
|
||||||
|
2 7
|
||||||
|
4 3
|
||||||
|
5 1
|
||||||
|
DROP TABLE t1;
|
||||||
|
set optimizer_switch= @save_optimizer_switch;
|
||||||
|
#
|
||||||
# BUG#778434 Wrong result with in_to_exists=on in maria-5.3-mwl89
|
# BUG#778434 Wrong result with in_to_exists=on in maria-5.3-mwl89
|
||||||
#
|
#
|
||||||
CREATE TABLE t1 ( f11 int) ;
|
CREATE TABLE t1 ( f11 int) ;
|
||||||
|
|
|
@ -445,6 +445,29 @@ pk i
|
||||||
set optimizer_switch=@save_optimizer_switch;
|
set optimizer_switch=@save_optimizer_switch;
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
#
|
#
|
||||||
|
# Bug #58816 "Extra temporary duplicate rows in result set when
|
||||||
|
# switching ICP off"
|
||||||
|
#
|
||||||
|
set @save_optimizer_switch= @@optimizer_switch;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
pk INT NOT NULL,
|
||||||
|
c1 INT NOT NULL,
|
||||||
|
PRIMARY KEY (pk)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (1,9),(2,7),(3,6),(4,3),(5,1);
|
||||||
|
EXPLAIN SELECT pk, c1 FROM t1 WHERE pk <> 3;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 5 Using where
|
||||||
|
SET SESSION optimizer_switch='index_condition_pushdown=off';
|
||||||
|
SELECT pk, c1 FROM t1 WHERE pk <> 3;
|
||||||
|
pk c1
|
||||||
|
1 9
|
||||||
|
2 7
|
||||||
|
4 3
|
||||||
|
5 1
|
||||||
|
DROP TABLE t1;
|
||||||
|
set optimizer_switch= @save_optimizer_switch;
|
||||||
|
#
|
||||||
# BUG#778434 Wrong result with in_to_exists=on in maria-5.3-mwl89
|
# BUG#778434 Wrong result with in_to_exists=on in maria-5.3-mwl89
|
||||||
#
|
#
|
||||||
CREATE TABLE t1 ( f11 int) ;
|
CREATE TABLE t1 ( f11 int) ;
|
||||||
|
|
|
@ -443,6 +443,29 @@ pk i
|
||||||
set optimizer_switch=@save_optimizer_switch;
|
set optimizer_switch=@save_optimizer_switch;
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
#
|
#
|
||||||
|
# Bug #58816 "Extra temporary duplicate rows in result set when
|
||||||
|
# switching ICP off"
|
||||||
|
#
|
||||||
|
set @save_optimizer_switch= @@optimizer_switch;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
pk INT NOT NULL,
|
||||||
|
c1 INT NOT NULL,
|
||||||
|
PRIMARY KEY (pk)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (1,9),(2,7),(3,6),(4,3),(5,1);
|
||||||
|
EXPLAIN SELECT pk, c1 FROM t1 WHERE pk <> 3;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 5 Using where
|
||||||
|
SET SESSION optimizer_switch='index_condition_pushdown=off';
|
||||||
|
SELECT pk, c1 FROM t1 WHERE pk <> 3;
|
||||||
|
pk c1
|
||||||
|
1 9
|
||||||
|
2 7
|
||||||
|
4 3
|
||||||
|
5 1
|
||||||
|
DROP TABLE t1;
|
||||||
|
set optimizer_switch= @save_optimizer_switch;
|
||||||
|
#
|
||||||
# BUG#778434 Wrong result with in_to_exists=on in maria-5.3-mwl89
|
# BUG#778434 Wrong result with in_to_exists=on in maria-5.3-mwl89
|
||||||
#
|
#
|
||||||
CREATE TABLE t1 ( f11 int) ;
|
CREATE TABLE t1 ( f11 int) ;
|
||||||
|
|
|
@ -350,7 +350,7 @@ GROUP BY t2.pk
|
||||||
);
|
);
|
||||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 PRIMARY t1 system NULL NULL NULL NULL 1 100.00
|
1 PRIMARY t1 system NULL NULL NULL NULL 1 100.00
|
||||||
2 SUBQUERY t2 ref int_key int_key 5 const 1 100.00 Using index condition; Using where; Using filesort
|
2 SUBQUERY t2 ref int_key int_key 5 const 1 100.00 Using where; Using filesort
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select min(1) AS `MIN(t1.pk)` from `test`.`t1` where exists(select `test`.`t2`.`pk` from `test`.`t2` where isnull(`test`.`t2`.`int_key`) group by `test`.`t2`.`pk`)
|
Note 1003 select min(1) AS `MIN(t1.pk)` from `test`.`t1` where exists(select `test`.`t2`.`pk` from `test`.`t2` where isnull(`test`.`t2`.`int_key`) group by `test`.`t2`.`pk`)
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
|
|
@ -4878,6 +4878,9 @@ int handler::ha_reset()
|
||||||
/* reset the bitmaps to point to defaults */
|
/* reset the bitmaps to point to defaults */
|
||||||
table->default_column_bitmaps();
|
table->default_column_bitmaps();
|
||||||
pushed_cond= NULL;
|
pushed_cond= NULL;
|
||||||
|
/* Reset information about pushed engine conditions */
|
||||||
|
cancel_pushed_idx_cond();
|
||||||
|
/* Reset information about pushed index conditions */
|
||||||
DBUG_RETURN(reset());
|
DBUG_RETURN(reset());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2393,6 +2393,13 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void cond_pop() { return; };
|
virtual void cond_pop() { return; };
|
||||||
virtual Item *idx_cond_push(uint keyno, Item* idx_cond) { return idx_cond; }
|
virtual Item *idx_cond_push(uint keyno, Item* idx_cond) { return idx_cond; }
|
||||||
|
/** Reset information about pushed index conditions */
|
||||||
|
virtual void cancel_pushed_idx_cond()
|
||||||
|
{
|
||||||
|
pushed_idx_cond= NULL;
|
||||||
|
pushed_idx_cond_keyno= MAX_KEY;
|
||||||
|
in_range_check_pushed_down= false;
|
||||||
|
}
|
||||||
virtual bool check_if_incompatible_data(HA_CREATE_INFO *create_info,
|
virtual bool check_if_incompatible_data(HA_CREATE_INFO *create_info,
|
||||||
uint table_changes)
|
uint table_changes)
|
||||||
{ return COMPATIBLE_DATA_NO; }
|
{ return COMPATIBLE_DATA_NO; }
|
||||||
|
|
|
@ -18002,7 +18002,11 @@ use_filesort:
|
||||||
select->quick= save_quick;
|
select->quick= save_quick;
|
||||||
}
|
}
|
||||||
if (orig_cond_saved)
|
if (orig_cond_saved)
|
||||||
|
{
|
||||||
|
tab->table->file->cancel_pushed_idx_cond();
|
||||||
tab->set_cond(orig_cond);
|
tab->set_cond(orig_cond);
|
||||||
|
}
|
||||||
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2538,9 +2538,6 @@ int ha_maria::extra(enum ha_extra_function operation)
|
||||||
|
|
||||||
int ha_maria::reset(void)
|
int ha_maria::reset(void)
|
||||||
{
|
{
|
||||||
pushed_idx_cond= NULL;
|
|
||||||
pushed_idx_cond_keyno= MAX_KEY;
|
|
||||||
in_range_check_pushed_down= FALSE;
|
|
||||||
ma_set_index_cond_func(file, NULL, 0);
|
ma_set_index_cond_func(file, NULL, 0);
|
||||||
ds_mrr.dsmrr_close();
|
ds_mrr.dsmrr_close();
|
||||||
if (file->trn)
|
if (file->trn)
|
||||||
|
|
|
@ -1971,9 +1971,6 @@ int ha_myisam::extra(enum ha_extra_function operation)
|
||||||
|
|
||||||
int ha_myisam::reset(void)
|
int ha_myisam::reset(void)
|
||||||
{
|
{
|
||||||
pushed_idx_cond= NULL;
|
|
||||||
pushed_idx_cond_keyno= MAX_KEY;
|
|
||||||
in_range_check_pushed_down= FALSE;
|
|
||||||
mi_set_index_cond_func(file, NULL, 0);
|
mi_set_index_cond_func(file, NULL, 0);
|
||||||
ds_mrr.dsmrr_close();
|
ds_mrr.dsmrr_close();
|
||||||
return mi_reset(file);
|
return mi_reset(file);
|
||||||
|
|
|
@ -2016,8 +2016,6 @@ ha_innobase::reset_template(void)
|
||||||
/* Reset index condition pushdown state */
|
/* Reset index condition pushdown state */
|
||||||
prebuilt->idx_cond = NULL;
|
prebuilt->idx_cond = NULL;
|
||||||
prebuilt->idx_cond_n_cols = 0;
|
prebuilt->idx_cond_n_cols = 0;
|
||||||
pushed_idx_cond = NULL;
|
|
||||||
pushed_idx_cond_keyno = MAX_KEY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************//**
|
/*****************************************************************//**
|
||||||
|
|
Loading…
Add table
Reference in a new issue