mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +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
|
||||
deallocate prepare stmt;
|
||||
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
|
||||
deallocate prepare stmt;
|
||||
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;
|
||||
select @@optimizer_switch like '%exists_to_in=off%';
|
||||
@@optimizer_switch like '%exists_to_in=off%'
|
||||
|
@ -7078,6 +7078,30 @@ sq
|
||||
NULL
|
||||
deallocate prepare stmt;
|
||||
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;
|
||||
select @@optimizer_switch like '%materialization=on%';
|
||||
@@optimizer_switch like '%materialization=on%'
|
||||
|
@ -7076,4 +7076,28 @@ sq
|
||||
NULL
|
||||
deallocate prepare stmt;
|
||||
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;
|
||||
|
@ -7091,6 +7091,30 @@ sq
|
||||
NULL
|
||||
deallocate prepare stmt;
|
||||
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;
|
||||
select @@optimizer_switch like '%subquery_cache=on%';
|
||||
@@optimizer_switch like '%subquery_cache=on%'
|
||||
|
@ -7076,5 +7076,29 @@ sq
|
||||
NULL
|
||||
deallocate prepare stmt;
|
||||
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 @join_cache_level_for_subselect_test=NULL;
|
||||
|
@ -5964,3 +5964,26 @@ EXECUTE stmt;
|
||||
|
||||
deallocate prepare stmt;
|
||||
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.
|
||||
*/
|
||||
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)
|
||||
{
|
||||
@ -369,7 +370,8 @@ int opt_sum_query(THD *thd,
|
||||
indexes to find the key.
|
||||
*/
|
||||
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];
|
||||
TABLE_REF ref;
|
||||
|
Reference in New Issue
Block a user