mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-7930 Assertion `table_share->tmp_table != NO_TMP_TABLE || m_lock_type != 2' failed in handler::ha_index_read_map
In optimizing aggregate function do not try to touch tables from outer query.
This commit is contained in:
@ -7085,3 +7085,27 @@ sq
|
|||||||
NULL
|
NULL
|
||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop table t1,t2,t3,t4;
|
drop table t1,t2,t3,t4;
|
||||||
|
#
|
||||||
|
# MDEV-7930: Assertion `table_share->tmp_table != NO_TMP_TABLE ||
|
||||||
|
# m_lock_type != 2' failed in handler::ha_index_read_map
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
CREATE TABLE t2 (f2 INT, KEY(f2));
|
||||||
|
INSERT INTO t2 VALUES (3);
|
||||||
|
CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t2;
|
||||||
|
SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq;
|
||||||
|
sq
|
||||||
|
3
|
||||||
|
SELECT * FROM v2 where ( SELECT MIN(v2.f2) FROM t1 ) > 0;
|
||||||
|
f2
|
||||||
|
3
|
||||||
|
SELECT count(*) FROM v2 group by ( SELECT MIN(v2.f2) FROM t1 );
|
||||||
|
count(*)
|
||||||
|
1
|
||||||
|
delete from t1;
|
||||||
|
SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq;
|
||||||
|
sq
|
||||||
|
NULL
|
||||||
|
drop view v2;
|
||||||
|
drop table t1,t2;
|
||||||
|
@ -7085,6 +7085,30 @@ sq
|
|||||||
NULL
|
NULL
|
||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop table t1,t2,t3,t4;
|
drop table t1,t2,t3,t4;
|
||||||
|
#
|
||||||
|
# MDEV-7930: Assertion `table_share->tmp_table != NO_TMP_TABLE ||
|
||||||
|
# m_lock_type != 2' failed in handler::ha_index_read_map
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
CREATE TABLE t2 (f2 INT, KEY(f2));
|
||||||
|
INSERT INTO t2 VALUES (3);
|
||||||
|
CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t2;
|
||||||
|
SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq;
|
||||||
|
sq
|
||||||
|
3
|
||||||
|
SELECT * FROM v2 where ( SELECT MIN(v2.f2) FROM t1 ) > 0;
|
||||||
|
f2
|
||||||
|
3
|
||||||
|
SELECT count(*) FROM v2 group by ( SELECT MIN(v2.f2) FROM t1 );
|
||||||
|
count(*)
|
||||||
|
1
|
||||||
|
delete from t1;
|
||||||
|
SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq;
|
||||||
|
sq
|
||||||
|
NULL
|
||||||
|
drop view v2;
|
||||||
|
drop table t1,t2;
|
||||||
set optimizer_switch=default;
|
set optimizer_switch=default;
|
||||||
select @@optimizer_switch like '%exists_to_in=off%';
|
select @@optimizer_switch like '%exists_to_in=off%';
|
||||||
@@optimizer_switch like '%exists_to_in=off%'
|
@@optimizer_switch like '%exists_to_in=off%'
|
||||||
|
@ -7078,6 +7078,30 @@ sq
|
|||||||
NULL
|
NULL
|
||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop table t1,t2,t3,t4;
|
drop table t1,t2,t3,t4;
|
||||||
|
#
|
||||||
|
# MDEV-7930: Assertion `table_share->tmp_table != NO_TMP_TABLE ||
|
||||||
|
# m_lock_type != 2' failed in handler::ha_index_read_map
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
CREATE TABLE t2 (f2 INT, KEY(f2));
|
||||||
|
INSERT INTO t2 VALUES (3);
|
||||||
|
CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t2;
|
||||||
|
SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq;
|
||||||
|
sq
|
||||||
|
3
|
||||||
|
SELECT * FROM v2 where ( SELECT MIN(v2.f2) FROM t1 ) > 0;
|
||||||
|
f2
|
||||||
|
3
|
||||||
|
SELECT count(*) FROM v2 group by ( SELECT MIN(v2.f2) FROM t1 );
|
||||||
|
count(*)
|
||||||
|
1
|
||||||
|
delete from t1;
|
||||||
|
SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq;
|
||||||
|
sq
|
||||||
|
NULL
|
||||||
|
drop view v2;
|
||||||
|
drop table t1,t2;
|
||||||
set optimizer_switch=default;
|
set optimizer_switch=default;
|
||||||
select @@optimizer_switch like '%materialization=on%';
|
select @@optimizer_switch like '%materialization=on%';
|
||||||
@@optimizer_switch like '%materialization=on%'
|
@@optimizer_switch like '%materialization=on%'
|
||||||
|
@ -7076,4 +7076,28 @@ sq
|
|||||||
NULL
|
NULL
|
||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop table t1,t2,t3,t4;
|
drop table t1,t2,t3,t4;
|
||||||
|
#
|
||||||
|
# MDEV-7930: Assertion `table_share->tmp_table != NO_TMP_TABLE ||
|
||||||
|
# m_lock_type != 2' failed in handler::ha_index_read_map
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
CREATE TABLE t2 (f2 INT, KEY(f2));
|
||||||
|
INSERT INTO t2 VALUES (3);
|
||||||
|
CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t2;
|
||||||
|
SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq;
|
||||||
|
sq
|
||||||
|
3
|
||||||
|
SELECT * FROM v2 where ( SELECT MIN(v2.f2) FROM t1 ) > 0;
|
||||||
|
f2
|
||||||
|
3
|
||||||
|
SELECT count(*) FROM v2 group by ( SELECT MIN(v2.f2) FROM t1 );
|
||||||
|
count(*)
|
||||||
|
1
|
||||||
|
delete from t1;
|
||||||
|
SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq;
|
||||||
|
sq
|
||||||
|
NULL
|
||||||
|
drop view v2;
|
||||||
|
drop table t1,t2;
|
||||||
set @optimizer_switch_for_subselect_test=null;
|
set @optimizer_switch_for_subselect_test=null;
|
||||||
|
@ -7091,6 +7091,30 @@ sq
|
|||||||
NULL
|
NULL
|
||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop table t1,t2,t3,t4;
|
drop table t1,t2,t3,t4;
|
||||||
|
#
|
||||||
|
# MDEV-7930: Assertion `table_share->tmp_table != NO_TMP_TABLE ||
|
||||||
|
# m_lock_type != 2' failed in handler::ha_index_read_map
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
CREATE TABLE t2 (f2 INT, KEY(f2));
|
||||||
|
INSERT INTO t2 VALUES (3);
|
||||||
|
CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t2;
|
||||||
|
SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq;
|
||||||
|
sq
|
||||||
|
3
|
||||||
|
SELECT * FROM v2 where ( SELECT MIN(v2.f2) FROM t1 ) > 0;
|
||||||
|
f2
|
||||||
|
3
|
||||||
|
SELECT count(*) FROM v2 group by ( SELECT MIN(v2.f2) FROM t1 );
|
||||||
|
count(*)
|
||||||
|
1
|
||||||
|
delete from t1;
|
||||||
|
SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq;
|
||||||
|
sq
|
||||||
|
NULL
|
||||||
|
drop view v2;
|
||||||
|
drop table t1,t2;
|
||||||
set optimizer_switch=default;
|
set optimizer_switch=default;
|
||||||
select @@optimizer_switch like '%subquery_cache=on%';
|
select @@optimizer_switch like '%subquery_cache=on%';
|
||||||
@@optimizer_switch like '%subquery_cache=on%'
|
@@optimizer_switch like '%subquery_cache=on%'
|
||||||
|
@ -7076,5 +7076,29 @@ sq
|
|||||||
NULL
|
NULL
|
||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop table t1,t2,t3,t4;
|
drop table t1,t2,t3,t4;
|
||||||
|
#
|
||||||
|
# MDEV-7930: Assertion `table_share->tmp_table != NO_TMP_TABLE ||
|
||||||
|
# m_lock_type != 2' failed in handler::ha_index_read_map
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
CREATE TABLE t2 (f2 INT, KEY(f2));
|
||||||
|
INSERT INTO t2 VALUES (3);
|
||||||
|
CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t2;
|
||||||
|
SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq;
|
||||||
|
sq
|
||||||
|
3
|
||||||
|
SELECT * FROM v2 where ( SELECT MIN(v2.f2) FROM t1 ) > 0;
|
||||||
|
f2
|
||||||
|
3
|
||||||
|
SELECT count(*) FROM v2 group by ( SELECT MIN(v2.f2) FROM t1 );
|
||||||
|
count(*)
|
||||||
|
1
|
||||||
|
delete from t1;
|
||||||
|
SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq;
|
||||||
|
sq
|
||||||
|
NULL
|
||||||
|
drop view v2;
|
||||||
|
drop table t1,t2;
|
||||||
set @optimizer_switch_for_subselect_test=null;
|
set @optimizer_switch_for_subselect_test=null;
|
||||||
set @join_cache_level_for_subselect_test=NULL;
|
set @join_cache_level_for_subselect_test=NULL;
|
||||||
|
@ -5964,3 +5964,26 @@ EXECUTE stmt;
|
|||||||
|
|
||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop table t1,t2,t3,t4;
|
drop table t1,t2,t3,t4;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-7930: Assertion `table_share->tmp_table != NO_TMP_TABLE ||
|
||||||
|
--echo # m_lock_type != 2' failed in handler::ha_index_read_map
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (f1 INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
|
||||||
|
CREATE TABLE t2 (f2 INT, KEY(f2));
|
||||||
|
INSERT INTO t2 VALUES (3);
|
||||||
|
|
||||||
|
CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq;
|
||||||
|
SELECT * FROM v2 where ( SELECT MIN(v2.f2) FROM t1 ) > 0;
|
||||||
|
SELECT count(*) FROM v2 group by ( SELECT MIN(v2.f2) FROM t1 );
|
||||||
|
|
||||||
|
delete from t1;
|
||||||
|
SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq;
|
||||||
|
|
||||||
|
drop view v2;
|
||||||
|
drop table t1,t2;
|
||||||
|
@ -341,7 +341,8 @@ int opt_sum_query(THD *thd,
|
|||||||
there are no outer joins.
|
there are no outer joins.
|
||||||
*/
|
*/
|
||||||
if (!conds && !((Item_sum_count*) item)->get_arg(0)->maybe_null &&
|
if (!conds && !((Item_sum_count*) item)->get_arg(0)->maybe_null &&
|
||||||
!outer_tables && maybe_exact_count)
|
!outer_tables && maybe_exact_count &&
|
||||||
|
((item->used_tables() & OUTER_REF_TABLE_BIT) == 0))
|
||||||
{
|
{
|
||||||
if (!is_exact_count)
|
if (!is_exact_count)
|
||||||
{
|
{
|
||||||
@ -369,7 +370,8 @@ int opt_sum_query(THD *thd,
|
|||||||
indexes to find the key.
|
indexes to find the key.
|
||||||
*/
|
*/
|
||||||
Item *expr=item_sum->get_arg(0);
|
Item *expr=item_sum->get_arg(0);
|
||||||
if (expr->real_item()->type() == Item::FIELD_ITEM)
|
if (((expr->used_tables() & OUTER_REF_TABLE_BIT) == 0) &&
|
||||||
|
expr->real_item()->type() == Item::FIELD_ITEM)
|
||||||
{
|
{
|
||||||
uchar key_buff[MAX_KEY_LENGTH];
|
uchar key_buff[MAX_KEY_LENGTH];
|
||||||
TABLE_REF ref;
|
TABLE_REF ref;
|
||||||
|
Reference in New Issue
Block a user