mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
Bug #44290: explain crashes for subquery with distinct in
SQL_SELECT::test_quick_select The crash was caused by an incomplete cleanup of JOIN_TAB::select during the filesort of rows for GROUP BY clause inside a subquery. Queries where a quick index access is replaced with filesort was was affected. For example: SELECT 1 FROM (SELECT COUNT(DISTINCT c1) FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x Quick index access related data in the SQL_SELECT::test_quick_select function was inconsistent after an incomplete cleanup. This function has been completed to prevent crashes in the SQL_SELECT::test_quick_select function. mysql-test/include/mix1.inc: Add test case for bug #44290. mysql-test/r/innodb_mysql.result: Add test case for bug #44290. sql/sql_select.cc: Bug #44290: explain crashes for subquery with distinct in SQL_SELECT::test_quick_select Quick index access related data in the SQL_SELECT::test_quick_select function was inconsistent after an incomplete cleanup. This function has been completed to prevent crashes in the SQL_SELECT::test_quick_select function.
This commit is contained in:
@ -1516,4 +1516,23 @@ DROP TABLE t1;
|
|||||||
# DROP TABLE t1;
|
# DROP TABLE t1;
|
||||||
#
|
#
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #44290: explain crashes for subquery with distinct in
|
||||||
|
--echo # SQL_SELECT::test_quick_select
|
||||||
|
--echo # (reproduced only with InnoDB tables)
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
eval
|
||||||
|
CREATE TABLE t1 (c1 INT, c2 INT, c3 INT, KEY (c3), KEY (c2, c3))
|
||||||
|
ENGINE=$engine_type;
|
||||||
|
INSERT INTO t1 VALUES (1,1,1), (1,1,1), (1,1,2), (1,1,1), (1,1,2);
|
||||||
|
|
||||||
|
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||||
|
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||||
|
EXPLAIN
|
||||||
|
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||||
|
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -1687,6 +1687,25 @@ vid tid idx name type
|
|||||||
3 1 2 c1 NULL
|
3 1 2 c1 NULL
|
||||||
3 1 1 pk NULL
|
3 1 1 pk NULL
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug #44290: explain crashes for subquery with distinct in
|
||||||
|
# SQL_SELECT::test_quick_select
|
||||||
|
# (reproduced only with InnoDB tables)
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (c1 INT, c2 INT, c3 INT, KEY (c3), KEY (c2, c3))
|
||||||
|
ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (1,1,1), (1,1,1), (1,1,2), (1,1,1), (1,1,2);
|
||||||
|
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||||
|
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
EXPLAIN
|
||||||
|
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||||
|
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY <derived2> system NULL NULL NULL NULL 1
|
||||||
|
2 DERIVED t1 index c3,c2 c2 10 NULL 5
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
drop table if exists t1, t2, t3;
|
drop table if exists t1, t2, t3;
|
||||||
create table t1(a int);
|
create table t1(a int);
|
||||||
|
@ -13471,6 +13471,7 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order,
|
|||||||
{
|
{
|
||||||
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
|
||||||
}
|
}
|
||||||
tab->select_cond=0;
|
tab->select_cond=0;
|
||||||
tab->last_inner= 0;
|
tab->last_inner= 0;
|
||||||
|
Reference in New Issue
Block a user