MDEV-15235: Assertion `length > 0' failed in create_ref_for_key
The issue is that we are creating a materialised table with key of length 0 which is incorrect, we should disable materialisation for such a case.
This commit is contained in:
parent
ac3fd5acac
commit
926edd48e1
@ -2642,3 +2642,18 @@ a b sq
|
|||||||
4 4 1
|
4 4 1
|
||||||
4 2 1
|
4 2 1
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
#
|
||||||
|
# MDEV-15235: Assertion `length > 0' failed in create_ref_for_key
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (i INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
CREATE TABLE t2 (f CHAR(1));
|
||||||
|
INSERT INTO t2 VALUES ('a'),('b');
|
||||||
|
explain
|
||||||
|
SELECT * FROM t2 WHERE f IN ( SELECT LEFT('foo',0) FROM t1 ORDER BY 1 );
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where
|
||||||
|
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 2
|
||||||
|
SELECT * FROM t2 WHERE f IN ( SELECT LEFT('foo',0) FROM t1 ORDER BY 1 );
|
||||||
|
f
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
@ -254,3 +254,16 @@ SELECT a, b, (a, b) NOT IN (SELECT a, b FROM t2) as sq
|
|||||||
FROM t1;
|
FROM t1;
|
||||||
|
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-15235: Assertion `length > 0' failed in create_ref_for_key
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (i INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
CREATE TABLE t2 (f CHAR(1));
|
||||||
|
INSERT INTO t2 VALUES ('a'),('b');
|
||||||
|
explain
|
||||||
|
SELECT * FROM t2 WHERE f IN ( SELECT LEFT('foo',0) FROM t1 ORDER BY 1 );
|
||||||
|
SELECT * FROM t2 WHERE f IN ( SELECT LEFT('foo',0) FROM t1 ORDER BY 1 );
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
@ -873,8 +873,10 @@ bool subquery_types_allow_materialization(Item_in_subselect *in_subs)
|
|||||||
Make sure that create_tmp_table will not fail due to too long keys.
|
Make sure that create_tmp_table will not fail due to too long keys.
|
||||||
See MDEV-7122. This check is performed inside create_tmp_table also and
|
See MDEV-7122. This check is performed inside create_tmp_table also and
|
||||||
we must do it so that we know the table has keys created.
|
we must do it so that we know the table has keys created.
|
||||||
|
Make sure that the length of the key for the temp_table is atleast
|
||||||
|
greater than 0.
|
||||||
*/
|
*/
|
||||||
if (total_key_length > tmp_table_max_key_length() ||
|
if (!total_key_length || total_key_length > tmp_table_max_key_length() ||
|
||||||
elements > tmp_table_max_key_parts())
|
elements > tmp_table_max_key_parts())
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user