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 2 1
|
||||
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;
|
||||
|
||||
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.
|
||||
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.
|
||||
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())
|
||||
DBUG_RETURN(FALSE);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user