MDEV-10397: Server crashes in key_copy with join_cache_level > 2 and join on BIT fields
For BIT field null_bit is not set to 0 even for a field defined as NOT NULL. So now in the function TABLE::create_key_part_by_field, if the bit field is not nullable then the null_bit is explicitly set to 0
This commit is contained in:
parent
9b53e541f0
commit
b8d1398b1d
@ -2339,5 +2339,18 @@ Warnings:
|
|||||||
Note 1003 select `test`.`t1`.`col1` AS `col1`,`test`.`t2`.`col1` AS `col1`,`test`.`t2`.`col3` AS `col3` from `test`.`t1` left join `test`.`t2` on((`test`.`t2`.`col2` = `test`.`t1`.`col1`)) where (`f1`(`test`.`t2`.`col3`,0) = 0)
|
Note 1003 select `test`.`t1`.`col1` AS `col1`,`test`.`t2`.`col1` AS `col1`,`test`.`t2`.`col3` AS `col3` from `test`.`t1` left join `test`.`t2` on((`test`.`t2`.`col2` = `test`.`t1`.`col1`)) where (`f1`(`test`.`t2`.`col3`,0) = 0)
|
||||||
DROP FUNCTION f1;
|
DROP FUNCTION f1;
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
#
|
||||||
|
# MDEV-10397: Server crashes in key_copy with join_cache_level > 2 and join on BIT fields
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (b1 BIT NOT NULL);
|
||||||
|
INSERT INTO t1 VALUES (0),(1);
|
||||||
|
CREATE TABLE t2 (b2 BIT NOT NULL);
|
||||||
|
INSERT INTO t2 VALUES (0),(1);
|
||||||
|
SET SESSION JOIN_CACHE_LEVEL = 3;
|
||||||
|
SELECT t1.b1+'0' , t2.b2 + '0' FROM t1 LEFT JOIN t2 ON b1 = b2;
|
||||||
|
t1.b1+'0' t2.b2 + '0'
|
||||||
|
0 0
|
||||||
|
1 1
|
||||||
|
DROP TABLE t1, t2;
|
||||||
# end of 5.5 tests
|
# end of 5.5 tests
|
||||||
SET optimizer_switch=@save_optimizer_switch;
|
SET optimizer_switch=@save_optimizer_switch;
|
||||||
|
@ -2350,6 +2350,19 @@ Warnings:
|
|||||||
Note 1003 select `test`.`t1`.`col1` AS `col1`,`test`.`t2`.`col1` AS `col1`,`test`.`t2`.`col3` AS `col3` from `test`.`t1` left join `test`.`t2` on((`test`.`t2`.`col2` = `test`.`t1`.`col1`)) where (`f1`(`test`.`t2`.`col3`,0) = 0)
|
Note 1003 select `test`.`t1`.`col1` AS `col1`,`test`.`t2`.`col1` AS `col1`,`test`.`t2`.`col3` AS `col3` from `test`.`t1` left join `test`.`t2` on((`test`.`t2`.`col2` = `test`.`t1`.`col1`)) where (`f1`(`test`.`t2`.`col3`,0) = 0)
|
||||||
DROP FUNCTION f1;
|
DROP FUNCTION f1;
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
#
|
||||||
|
# MDEV-10397: Server crashes in key_copy with join_cache_level > 2 and join on BIT fields
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (b1 BIT NOT NULL);
|
||||||
|
INSERT INTO t1 VALUES (0),(1);
|
||||||
|
CREATE TABLE t2 (b2 BIT NOT NULL);
|
||||||
|
INSERT INTO t2 VALUES (0),(1);
|
||||||
|
SET SESSION JOIN_CACHE_LEVEL = 3;
|
||||||
|
SELECT t1.b1+'0' , t2.b2 + '0' FROM t1 LEFT JOIN t2 ON b1 = b2;
|
||||||
|
t1.b1+'0' t2.b2 + '0'
|
||||||
|
0 0
|
||||||
|
1 1
|
||||||
|
DROP TABLE t1, t2;
|
||||||
# end of 5.5 tests
|
# end of 5.5 tests
|
||||||
SET optimizer_switch=@save_optimizer_switch;
|
SET optimizer_switch=@save_optimizer_switch;
|
||||||
set join_cache_level=default;
|
set join_cache_level=default;
|
||||||
|
@ -1881,6 +1881,20 @@ DROP FUNCTION f1;
|
|||||||
|
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-10397: Server crashes in key_copy with join_cache_level > 2 and join on BIT fields
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (b1 BIT NOT NULL);
|
||||||
|
INSERT INTO t1 VALUES (0),(1);
|
||||||
|
|
||||||
|
CREATE TABLE t2 (b2 BIT NOT NULL);
|
||||||
|
INSERT INTO t2 VALUES (0),(1);
|
||||||
|
|
||||||
|
SET SESSION JOIN_CACHE_LEVEL = 3;
|
||||||
|
SELECT t1.b1+'0' , t2.b2 + '0' FROM t1 LEFT JOIN t2 ON b1 = b2;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
--echo # end of 5.5 tests
|
--echo # end of 5.5 tests
|
||||||
|
|
||||||
SET optimizer_switch=@save_optimizer_switch;
|
SET optimizer_switch=@save_optimizer_switch;
|
||||||
|
@ -5987,6 +5987,14 @@ void TABLE::create_key_part_by_field(KEY_PART_INFO *key_part_info,
|
|||||||
might be reused.
|
might be reused.
|
||||||
*/
|
*/
|
||||||
key_part_info->store_length= key_part_info->length;
|
key_part_info->store_length= key_part_info->length;
|
||||||
|
/*
|
||||||
|
For BIT fields null_bit is not set to 0 even if the field is defined
|
||||||
|
as NOT NULL, look at Field_bit::Field_bit
|
||||||
|
*/
|
||||||
|
if (!field->real_maybe_null())
|
||||||
|
{
|
||||||
|
key_part_info->null_bit= 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The total store length of the key part is the raw length of the field +
|
The total store length of the key part is the raw length of the field +
|
||||||
|
Loading…
x
Reference in New Issue
Block a user