From: Alexander Nozdrin Date: October 14 2010 1:06pm Subject: bzr commit into mysql-5.5-bugteam branch (alexander.nozdrin:3097) Bug#55850 List-Archive: http://lists.mysql.com/commits/120772 X-Bug: 55850 Message-Id: <201010141307.o9EBWoEN014414@rcsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7014041824835553699==" --===============7014041824835553699== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/alik/MySQL/bzr/00/bug55850/mysql-5.5-bugteam-bug55850/ based on revid:alexander.nozdrin@stripped 3097 Alexander Nozdrin 2010-10-14 Patch for Bug#55850 (Trigger warnings not cleared). The problem was that the warnings risen by a trigger were not cleared. The warnings should be cleared if the trigger completes successfully. The fix is to skip merging warnings into caller's Warning Info for triggers. modified: mysql-test/r/sp-error.result mysql-test/t/sp-error.test sql/sp_head.cc sql/sp_head.h === modified file 'mysql-test/r/sp-error.result' --- a/mysql-test/r/sp-error.result 2010-10-06 17:35:29 +0000 +++ b/mysql-test/r/sp-error.result 2010-10-14 13:06:37 +0000 @@ -1869,9 +1869,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 @@ -1883,36 +1880,11 @@ END| UPDATE t1 SET b = 20; 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 # @@ -1949,3 +1921,26 @@ 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 +DROP TABLE t1; +DROP TABLE t2; +DROP PROCEDURE p1; === modified file 'mysql-test/t/sp-error.test' --- a/mysql-test/t/sp-error.test 2010-07-30 15:28:36 +0000 +++ b/mysql-test/t/sp-error.test 2010-10-14 13:06:37 +0000 @@ -2719,10 +2719,6 @@ DROP PROCEDURE p1; --echo # Bug#5889: Exit handler for a warning doesn't hide the warning in trigger --echo # ---echo ---echo # - Case 1 ---echo - CREATE TABLE t1(a INT, b INT); INSERT INTO t1 VALUES (1, 2); @@ -2747,36 +2743,6 @@ SELECT * FROM t1; DROP TRIGGER t1_bu; DROP TABLE t1; ---echo ---echo # - Case 2 ---echo - -CREATE TABLE t1(a INT); -CREATE TABLE t2(b CHAR(1)); - -delimiter |; - -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| - -delimiter ;| - -INSERT INTO t1 VALUES(0); - -SHOW WARNINGS; - -SELECT * FROM t1; -SELECT * FROM t2; - -DROP TRIGGER t1_bi; -DROP TABLE t1; -DROP TABLE t2; - --echo # --echo # Bug#9857: Stored procedures: handler for sqlwarning ignored --echo # @@ -2813,3 +2779,46 @@ SHOW WARNINGS; DROP PROCEDURE p1; DROP PROCEDURE p2; SET sql_mode = @sql_mode_saved; + +--echo # +--echo # Bug#55850: Trigger warnings not cleared. +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t2; +DROP PROCEDURE IF EXISTS p1; +--enable_warnings + +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); + +# What happened before the patch was: +# - INSERT INTO t1 added 3 warnings about overflow in 'x', 'y' and 'z' columns; +# - t1_bi run and added 3 warnings about overflow in 'a', 'b' and 'c' columns; +# - t1_ai run and added 3 warnings about overflow in 'd', 'e' and 'f' columns; +# => we had 9 warnings. +# +# Now what happens is: +# - INSERT INTO t1 adds 3 warnings about overflow in 'x', 'y' and 'z' columns; +# - t1_bi adds 3 warnings about overflow in 'a', 'b' and 'c' columns; +# - The warnings added by triggers are cleared; +# - t1_ai run and added 3 warnings about overflow in 'd', 'e' and 'f' columns; +# - The warnings added by triggers are cleared; +# => we have 3 warnings. + +CALL p1(); + +DROP TABLE t1; +DROP TABLE t2; +DROP PROCEDURE p1; === modified file 'sql/sp_head.cc' --- a/sql/sp_head.cc 2010-10-06 17:35:29 +0000 +++ b/sql/sp_head.cc 2010-10-14 13:06:37 +0000 @@ -1217,7 +1217,7 @@ find_handler_after_execution(THD *thd, s */ bool -sp_head::execute(THD *thd) +sp_head::execute(THD *thd, bool merge_warnings_to_caller) { DBUG_ENTER("sp_head::execute"); char saved_cur_db_name_buf[NAME_LEN+1]; @@ -1492,7 +1492,8 @@ sp_head::execute(THD *thd) state= EXECUTED; /* Restore the caller's original warning information area. */ - saved_warning_info->merge_with_routine_info(thd, thd->warning_info); + if (merge_warnings_to_caller) + saved_warning_info->merge_with_routine_info(thd, thd->warning_info); thd->warning_info= saved_warning_info; done: @@ -1714,7 +1715,7 @@ sp_head::execute_trigger(THD *thd, thd->spcont= nctx; - err_status= execute(thd); + err_status= execute(thd, FALSE); err_with_cleanup: thd->restore_active_arena(&call_arena, &backup_arena); @@ -1931,7 +1932,7 @@ sp_head::execute_function(THD *thd, Item */ thd->set_n_backup_active_arena(&call_arena, &backup_arena); - err_status= execute(thd); + err_status= execute(thd, TRUE); thd->restore_active_arena(&call_arena, &backup_arena); @@ -2164,7 +2165,7 @@ sp_head::execute_procedure(THD *thd, Lis #endif if (!err_status) - err_status= execute(thd); + err_status= execute(thd, TRUE); if (save_log_general) thd->variables.option_bits &= ~OPTION_LOG_OFF; === modified file 'sql/sp_head.h' --- a/sql/sp_head.h 2010-08-16 15:16:07 +0000 +++ b/sql/sp_head.h 2010-10-14 13:06:37 +0000 @@ -527,7 +527,7 @@ private: HASH m_sptabs; bool - execute(THD *thd); + execute(THD *thd, bool merge_warnings_to_caller); /** Perform a forward flow analysis in the generated code. --===============7014041824835553699== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/alexander.nozdrin@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: alexander.nozdrin@stripped\ # 3kcjuuaqvng31tr8 # target_branch: file:///home/alik/MySQL/bzr/00/bug55850/mysql-5.5-\ # bugteam-bug55850/ # testament_sha1: 2d2fa23d250ccf60a30dff4ae2196587ee2628e6 # timestamp: 2010-10-14 17:06:42 +0400 # base_revision_id: alexander.nozdrin@stripped\ # 2qmlj0bc8rqmc17h # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWT/M6bMABUJfgGA0WPf//3/n 38C////wYAqO+jTWw1QpQCa0FtYADXRkBQBKJJtKflMoGQzQm1GmmQHpHlDQ00HqDQGgyqA2poBp jUDTQABkAAAAADjJk0YhiaYCBgTTBGCYmmmgAwgkSJoE0aTZTTKZT2qeUzKMgZGTRp5T01M1Hqaa DjJk0YhiaYCBgTTBGCYmmmgAwgkkCaAmI00AmQAmhomiPUxqGh6gzRIS2IGZNtLtfcYWF0KjC421 LNtRMUFPbuzTKsGvM911cpJfTxazoNQGRvJuJU12LipDd8UbbTbaM7IKpuI2DyquRKCBxS4dqcrm Sxi1xK/COFD6YRU40GYiFiA0ti+BgZkEEEKBkHTZ2+cuA4B2BQG2DaGxtWdyXyT8arhhxRHO28nk 6mSrMiVKTpXSkmZvm4k377qW7pVq4dzLMwWPIWh4we4PyEa8KRLXMKMaq5wMTnwB4DRTKF/SLunq chZJT5n/FwXjGMYZGw+sz9A2c+VsC0KqDdHpF5FMhXhQZOCA68fKDNyrE6g5V7FAVI8GrP71SuGn X5Ca7Nv/H7egPU6UG0/QY+ppoCRzTkTmtidi/gHxC8vGdRzjGQTCZBcBXyYYYTl0bTGS9QlMcCMI J/y9lG3dUJ+ngdb4piwccmteIJ8gUQ1pMSJCqIHf94zAmY2K42G09/i6vk0B3E1EisFvZBsDoKsf 9wmHLbEkfnpay5ms/FfKNPcqYkRmjYOPcKAKaeYDhxqGHDGgc4KANaLTicg7Ug5o6AvauWqzYUfh 5o9xAr9W7iZdb04AQN8jzj8XRUKLnqvYkFJLruAXIFL6w4BbUkYtIbXUx9EgkwIFm3iwnpAyBb5Y AxpcDgkScFRExkiALfaXzYywLcBhMTNCuPkjgSLbYsfAuNGKTqhaZRKIKDPuNoF24HHtml/lkB97 AuhvwN9ludUqMAkEl9FTXXnswy20XTiCw1wg/YKtCdpYJXGWOvRPSO0wflNQIGbySMUP/KYTCQuN LtIxrnoNAbQ0gwETcbC+QTjk8D0kCrGNFQrAuNIdaQqIBkYUeWYUVEwzkb6TqXrnEhUikC2Xbakt IajEs1cZHKk2/udCZkiocRybFLc7EjiaQLgUcGXvBPqpNRs55Fb7EXFlhEFDM4kDqwMC/YPcU09h cZgpDMuMZLfWreOZtepaEspQC0jyryk6EjaT3HN1tUwYkTIEQ22uVrbEUFNJ0rIzLf3OsnC+wu0X RpjzzpDdANRN4VualDHIrn81twOSo02lZtDqqDdBjiYHw3ky88hiJsMgoliVFFeRO2EKI4vcYIsj CwVV+BsgCqcpKis6dUKO0drIuLrhVUF5x+RHQacTMlfGyVL3agVcoqRYiMj2FEUV7thfTVcOxHDr +kd5nOIo12lqNJ1mpYwqIIcwXFArdJffMmG3N4M8KIDRerGVhErIXxwoiWF3VgjMQYUU6cWejHAi 9h4MaIkx0Ly0whSPjIQRGEFQL1FrKy/pw8q1EYQGVdchTZF9mimMVxAq4E63NFqVLH56DQXl7Byk NhQICNP2ooufloNdQWyIBgCkRvVBSYbhpeIHL0AlIPNB9iB5fokIhzZ60wbasPEFVCmfuKYQI94w VQu07gZpEMDgPp9ioICK7xe0mfsEwUxTF9hMisuKBMLQsKCvB4NNthgIGB8xODAExBckLAQYheJB QuAuFAMFsEw7FQFMWyAxFrIGGIi0PiLwBWBWCmAxavAFMQaRYApCCQLERqPuJgTFrFkQOcFZaLQK QsQoob0C6QP0Xcl9HmDyI9w0o6+8gD2JyXnEWJb/ocfMpEfEn+BT8JPPmfE+mE7RRxwSCFt4pBYg IxlkkHkg56JpCoyGTGhQUoKDP5W1wamnIMzfhsQfwkELHjO8F20LktyR/gd4IbR7bBqKydrJElhj owEbxcAwltXz03yIqM55lRCOdhKxwkjv0lR4IsLTRS3gH0O05Hn1kh4sJeRBeiQMT327SBAphyRe Yf3NI2ZwP0qH7OKMzbSaNi+p9V6HjUehMfbVHA7j0p1rmcQW2G0ckGKWtkGAI5O6jmSrRhC0Twh9 ucF9YolRzH+KPgMdQPVYquzu7DeOJEjXoFCmkT4yJIG3cTtTiuQioXjSkD+080Z+F9J1ET3pBWXz zKjt4DvecA29y9xB4zeaYOR3opJpIyPNbKMqWJvKGhwOWQd4P4KbDphwmk4YKQJPSyPE0G04rsQ4 KmMqGDmMbnGPf00McPEbIs5GHprm1/6uMu/LsNSNSYW2lkUA5IN+7pQLr0os6H2uuGYtTVds+L0O vV8xyTkg86wkglN5mndw85AV+w6zv2eK7u0eMbx5IlxPBiCKlcjWZHxDzDBDxeS7UeBBGDG05bFJ HUmBeHEf7SBkchyz0MkwV8wNQDzrzOkxIgWVnE2nkmLtIjUvj3Qk0uxtsb6A/BLKN5crtmw5gW09 AM0HI7XImZ1Da89CBqMDsRIDfcCiRSgkHBJ+ilVBoYAqodpMIXJhrFQIirkpssBZUCUC68EkJLIS CW6IUbArD2bkrPHn0H9hSrgfaMK/XAOy8JJAwRYNQ9Jnh3/nvEFgxijScaYBWbBbXLAsiqkHXRDr wikEpDuKmj1Ii6uxvc3ZmatBSiu9BqK5ohabiM+BeF7GMtWu2HvNxAVCB1agwETSaQOU47GB0gmV JiRfqBLzFoT5xByFRfqE0VNMwrhy7stvkmcwyoHKdBJ0StY8zSROSSViXbEgTQwv4SCxJ+hlU9eA V8MKhVRuE5cxfTZM4j6BBh3FIa2ByQNyYGEz0QLyIaKiORvlacolVb7Cz4+0y3Fp+pnDFGtHWjkx iYgst7JnOcB5sIHCYyGqBUqAhb9amSg4Qc1n4yRzKEihvkNbZ7kwdiQToW8tBLExo1lT8ROpW5Fo Lo1kEy6GZoPucBUNeyJ38nkeohCEhQWD1uj7uHD5ZWy5aM6GtoZ1JQEffpFl6xe1tttlo2cGLlWA FSsSrevJ+oz3gxmgYOGlMVbawA9fSiAUeoDIeUo4ws139yuLQG4m5/qv4GcHeXarsi9+o8NVLtay SgvL+SFJD62FfanFglPq0rv+a7jD1KFJBYnFdJuX5KYsENwNwLgP0aVEqMVEV2uaXqC9+0zKBHgf LergBkwmhmxE5FHoru/YaEg9TkVj0VjILTjxYrTq27iw9qoJLs5m6ZYkGCK7Ylhu/+LuSKcKEgf5 nTZg --===============7014041824835553699==--