Bug#51650: crash with user variables and triggers
The problem was that bits of the destructive equality propagation optimization weren't being undone after the execution of a stored program. Modifications to the parse tree that are based on transient properties must be undone to enable the re-execution of stored programs. The solution is to cleanup any references to predicates generated by the equality propagation during the execution of a stored program.
This commit is contained in:
parent
bfd837cc82
commit
154fcda822
@ -2087,4 +2087,28 @@ ERROR 42S02: Table 'test.a_nonextisting_table' doesn't exist
|
|||||||
SELECT * FROM t2;
|
SELECT * FROM t2;
|
||||||
a b
|
a b
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
#
|
||||||
|
# Bug#51650 crash with user variables and triggers
|
||||||
|
#
|
||||||
|
DROP TRIGGER IF EXISTS trg1;
|
||||||
|
DROP TABLE IF EXISTS t1, t2;
|
||||||
|
CREATE TABLE t1 (b VARCHAR(50) NOT NULL);
|
||||||
|
CREATE TABLE t2 (a VARCHAR(10) NOT NULL DEFAULT '');
|
||||||
|
CREATE TRIGGER trg1 AFTER INSERT ON t2
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
SELECT 1 FROM t1 c WHERE
|
||||||
|
(@bug51650 IS NULL OR @bug51650 != c.b) AND c.b = NEW.a LIMIT 1 INTO @foo;
|
||||||
|
END//
|
||||||
|
SET @bug51650 = 1;
|
||||||
|
INSERT IGNORE INTO t2 VALUES();
|
||||||
|
Warnings:
|
||||||
|
Warning 1329 No data - zero rows fetched, selected, or processed
|
||||||
|
INSERT IGNORE INTO t1 SET b = '777';
|
||||||
|
INSERT IGNORE INTO t2 SET a = '111';
|
||||||
|
Warnings:
|
||||||
|
Warning 1329 No data - zero rows fetched, selected, or processed
|
||||||
|
SET @bug51650 = 1;
|
||||||
|
INSERT IGNORE INTO t2 SET a = '777';
|
||||||
|
DROP TRIGGER trg1;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
End of 5.1 tests.
|
End of 5.1 tests.
|
||||||
|
@ -2396,4 +2396,34 @@ SELECT * FROM t2;
|
|||||||
|
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#51650 crash with user variables and triggers
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP TRIGGER IF EXISTS trg1;
|
||||||
|
DROP TABLE IF EXISTS t1, t2;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
CREATE TABLE t1 (b VARCHAR(50) NOT NULL);
|
||||||
|
CREATE TABLE t2 (a VARCHAR(10) NOT NULL DEFAULT '');
|
||||||
|
|
||||||
|
delimiter //;
|
||||||
|
CREATE TRIGGER trg1 AFTER INSERT ON t2
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
SELECT 1 FROM t1 c WHERE
|
||||||
|
(@bug51650 IS NULL OR @bug51650 != c.b) AND c.b = NEW.a LIMIT 1 INTO @foo;
|
||||||
|
END//
|
||||||
|
delimiter ;//
|
||||||
|
|
||||||
|
SET @bug51650 = 1;
|
||||||
|
INSERT IGNORE INTO t2 VALUES();
|
||||||
|
INSERT IGNORE INTO t1 SET b = '777';
|
||||||
|
INSERT IGNORE INTO t2 SET a = '111';
|
||||||
|
SET @bug51650 = 1;
|
||||||
|
INSERT IGNORE INTO t2 SET a = '777';
|
||||||
|
|
||||||
|
DROP TRIGGER trg1;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
--echo End of 5.1 tests.
|
--echo End of 5.1 tests.
|
||||||
|
@ -4475,6 +4475,7 @@ void Item_field::cleanup()
|
|||||||
I.e. we can drop 'field'.
|
I.e. we can drop 'field'.
|
||||||
*/
|
*/
|
||||||
field= result_field= 0;
|
field= result_field= 0;
|
||||||
|
item_equal= NULL;
|
||||||
null_value= FALSE;
|
null_value= FALSE;
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user