Bug #48709: Assertion failed in sql_select.cc:11782:
int join_read_key(JOIN_TAB*) The eq_ref access method TABLE_REF (accessed through JOIN_TAB) to save state and to track if this is the first row it finds or not. This state was not reset on subquery re-execution causing an assert. Fixed by resetting the state before the subquery re-execution.
This commit is contained in:
parent
dd5550d396
commit
188c6f8c74
@ -4410,6 +4410,31 @@ WHERE a = 230;
|
|||||||
MAX(b) (SELECT COUNT(*) FROM st1,st2 WHERE st2.b <= t1.b)
|
MAX(b) (SELECT COUNT(*) FROM st1,st2 WHERE st2.b <= t1.b)
|
||||||
NULL 0
|
NULL 0
|
||||||
DROP TABLE t1, st1, st2;
|
DROP TABLE t1, st1, st2;
|
||||||
|
#
|
||||||
|
# Bug #48709: Assertion failed in sql_select.cc:11782:
|
||||||
|
# int join_read_key(JOIN_TAB*)
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (pk int PRIMARY KEY, int_key int);
|
||||||
|
INSERT INTO t1 VALUES (10,1), (14,1);
|
||||||
|
CREATE TABLE t2 (pk int PRIMARY KEY, int_key int);
|
||||||
|
INSERT INTO t2 VALUES (3,3), (5,NULL), (7,3);
|
||||||
|
# should have eq_ref for t1
|
||||||
|
EXPLAIN
|
||||||
|
SELECT * FROM t2 outr
|
||||||
|
WHERE outr.int_key NOT IN (SELECT t1.pk FROM t1, t2)
|
||||||
|
ORDER BY outr.pk;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
x x outr ALL x x x x x x
|
||||||
|
x x t1 eq_ref x x x x x x
|
||||||
|
x x t2 index x x x x x x
|
||||||
|
# should not crash on debug binaries
|
||||||
|
SELECT * FROM t2 outr
|
||||||
|
WHERE outr.int_key NOT IN (SELECT t1.pk FROM t1, t2)
|
||||||
|
ORDER BY outr.pk;
|
||||||
|
pk int_key
|
||||||
|
3 3
|
||||||
|
7 3
|
||||||
|
DROP TABLE t1,t2;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
CREATE TABLE t1 (a INT, b INT);
|
CREATE TABLE t1 (a INT, b INT);
|
||||||
INSERT INTO t1 VALUES (2,22),(1,11),(2,22);
|
INSERT INTO t1 VALUES (2,22),(1,11),(2,22);
|
||||||
|
@ -3368,6 +3368,32 @@ WHERE a = 230;
|
|||||||
|
|
||||||
DROP TABLE t1, st1, st2;
|
DROP TABLE t1, st1, st2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #48709: Assertion failed in sql_select.cc:11782:
|
||||||
|
--echo # int join_read_key(JOIN_TAB*)
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (pk int PRIMARY KEY, int_key int);
|
||||||
|
INSERT INTO t1 VALUES (10,1), (14,1);
|
||||||
|
|
||||||
|
CREATE TABLE t2 (pk int PRIMARY KEY, int_key int);
|
||||||
|
INSERT INTO t2 VALUES (3,3), (5,NULL), (7,3);
|
||||||
|
|
||||||
|
--echo # should have eq_ref for t1
|
||||||
|
--replace_column 1 x 2 x 5 x 6 x 7 x 8 x 9 x 10 x
|
||||||
|
EXPLAIN
|
||||||
|
SELECT * FROM t2 outr
|
||||||
|
WHERE outr.int_key NOT IN (SELECT t1.pk FROM t1, t2)
|
||||||
|
ORDER BY outr.pk;
|
||||||
|
|
||||||
|
--echo # should not crash on debug binaries
|
||||||
|
SELECT * FROM t2 outr
|
||||||
|
WHERE outr.int_key NOT IN (SELECT t1.pk FROM t1, t2)
|
||||||
|
ORDER BY outr.pk;
|
||||||
|
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
|
||||||
--echo End of 5.0 tests.
|
--echo End of 5.0 tests.
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -1622,6 +1622,11 @@ JOIN::reinit()
|
|||||||
if (join_tab_save)
|
if (join_tab_save)
|
||||||
memcpy(join_tab, join_tab_save, sizeof(JOIN_TAB) * tables);
|
memcpy(join_tab, join_tab_save, sizeof(JOIN_TAB) * tables);
|
||||||
|
|
||||||
|
/* need to reset ref access state (see join_read_key) */
|
||||||
|
if (join_tab)
|
||||||
|
for (uint i= 0; i < tables; i++)
|
||||||
|
join_tab[i].ref.key_err= TRUE;
|
||||||
|
|
||||||
if (tmp_join)
|
if (tmp_join)
|
||||||
restore_tmp();
|
restore_tmp();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user