mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Patch for Bug#55850 (Trigger warnings not cleared).
The problem was that the warnings risen by a trigger were not cleared upon successful completion. The warnings should be cleared if the trigger completes successfully. The fix is to skip merging warnings into caller's Warning Info for triggers.
This commit is contained in:
@@ -1877,9 +1877,6 @@ DROP PROCEDURE p1;
|
||||
#
|
||||
# Bug#5889: Exit handler for a warning doesn't hide the warning in trigger
|
||||
#
|
||||
|
||||
# - Case 1
|
||||
|
||||
CREATE TABLE t1(a INT, b INT);
|
||||
INSERT INTO t1 VALUES (1, 2);
|
||||
CREATE TRIGGER t1_bu BEFORE UPDATE ON t1 FOR EACH ROW
|
||||
@@ -1889,40 +1886,13 @@ SET NEW.a = 10;
|
||||
SET NEW.a = 99999999999;
|
||||
END|
|
||||
UPDATE t1 SET b = 20;
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
10 20
|
||||
DROP TRIGGER t1_bu;
|
||||
DROP TABLE t1;
|
||||
|
||||
# - Case 2
|
||||
|
||||
CREATE TABLE t1(a INT);
|
||||
CREATE TABLE t2(b CHAR(1));
|
||||
CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW
|
||||
BEGIN
|
||||
INSERT INTO t2 VALUES('ab'); # Produces a warning.
|
||||
INSERT INTO t2 VALUES('b'); # Does not produce a warning,
|
||||
# previous warning should be cleared.
|
||||
END|
|
||||
INSERT INTO t1 VALUES(0);
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
b
|
||||
a
|
||||
b
|
||||
DROP TRIGGER t1_bi;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
#
|
||||
# Bug#9857: Stored procedures: handler for sqlwarning ignored
|
||||
#
|
||||
@@ -1961,3 +1931,64 @@ Warning 1365 Division by 0
|
||||
DROP PROCEDURE p1;
|
||||
DROP PROCEDURE p2;
|
||||
SET sql_mode = @sql_mode_saved;
|
||||
#
|
||||
# Bug#55850: Trigger warnings not cleared.
|
||||
#
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
CREATE TABLE t1(x SMALLINT, y SMALLINT, z SMALLINT);
|
||||
CREATE TABLE t2(a SMALLINT, b SMALLINT, c SMALLINT,
|
||||
d SMALLINT, e SMALLINT, f SMALLINT);
|
||||
CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW
|
||||
INSERT INTO t2(a, b, c) VALUES(99999, 99999, 99999);
|
||||
CREATE TRIGGER t1_ai AFTER INSERT ON t1 FOR EACH ROW
|
||||
INSERT INTO t2(d, e, f) VALUES(99999, 99999, 99999);
|
||||
CREATE PROCEDURE p1()
|
||||
INSERT INTO t1 VALUES(99999, 99999, 99999);
|
||||
|
||||
CALL p1();
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'x' at row 1
|
||||
Warning 1264 Out of range value for column 'y' at row 1
|
||||
Warning 1264 Out of range value for column 'z' at row 1
|
||||
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1264 Out of range value for column 'x' at row 1
|
||||
Warning 1264 Out of range value for column 'y' at row 1
|
||||
Warning 1264 Out of range value for column 'z' at row 1
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP PROCEDURE p1;
|
||||
# ----------------------------------------------------------------------
|
||||
CREATE TABLE t1(x SMALLINT, y SMALLINT, z SMALLINT);
|
||||
CREATE TABLE t2(a SMALLINT, b SMALLINT, c SMALLINT NOT NULL);
|
||||
CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW
|
||||
BEGIN
|
||||
INSERT INTO t2 VALUES(
|
||||
CAST('111111 ' AS SIGNED),
|
||||
CAST('222222 ' AS SIGNED),
|
||||
NULL);
|
||||
END|
|
||||
CREATE PROCEDURE p1()
|
||||
INSERT INTO t1 VALUES(99999, 99999, 99999);
|
||||
|
||||
CALL p1();
|
||||
ERROR 23000: Column 'c' cannot be null
|
||||
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1264 Out of range value for column 'x' at row 1
|
||||
Warning 1264 Out of range value for column 'y' at row 1
|
||||
Warning 1264 Out of range value for column 'z' at row 1
|
||||
Warning 1292 Truncated incorrect INTEGER value: '111111 '
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
Warning 1292 Truncated incorrect INTEGER value: '222222 '
|
||||
Warning 1264 Out of range value for column 'b' at row 1
|
||||
Error 1048 Column 'c' cannot be null
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP PROCEDURE p1;
|
||||
|
||||
Reference in New Issue
Block a user