mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Fixed bug #25398: crash in a trigger when using trigger fields
in a select list. The objects of the Item_trigger_field class inherited the implementations of the methods copy_or_same, get_tmp_table_item and get_tmp_table_field from the class Item_field while they rather should have used the default implementations defined for the base class Item. It could cause catastrophic problems for triggers that used SELECTs with select list containing trigger fields such as NEW.<table column> under DISTINCT.
This commit is contained in:
@@ -1278,4 +1278,36 @@ a b
|
||||
2 b
|
||||
3 c
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
id int NOT NULL DEFAULT '0',
|
||||
a varchar(10) NOT NULL,
|
||||
b varchar(10),
|
||||
c varchar(10),
|
||||
d timestamp NOT NULL,
|
||||
PRIMARY KEY (id, a)
|
||||
);
|
||||
CREATE TABLE t2 (
|
||||
fubar_id int unsigned NOT NULL DEFAULT '0',
|
||||
last_change_time datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (fubar_id)
|
||||
);
|
||||
CREATE TRIGGER fubar_change
|
||||
AFTER UPDATE ON t1
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
INSERT INTO t2 (fubar_id, last_change_time)
|
||||
SELECT DISTINCT NEW.id AS fubar_id, NOW() AS last_change_time
|
||||
FROM t1 WHERE (id = NEW.id) AND (OLD.c != NEW.c)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
last_change_time =
|
||||
IF((fubar_id = NEW.id)AND(OLD.c != NEW.c),NOW(),last_change_time);
|
||||
END
|
||||
|
|
||||
INSERT INTO t1 (id,a, b,c,d) VALUES
|
||||
(1,'a','b','c',now()),(2,'a','b','c',now());
|
||||
UPDATE t1 SET c='Bang!' WHERE id=1;
|
||||
SELECT fubar_id FROM t2;
|
||||
fubar_id
|
||||
1
|
||||
DROP TABLE t1,t2;
|
||||
End of 5.0 tests
|
||||
|
||||
Reference in New Issue
Block a user