From: Jon Olav Hauglid Date: August 9 2010 12:11pm Subject: bzr commit into mysql-5.5-merge branch (jon.hauglid:3166) List-Archive: http://lists.mysql.com/commits/115310 Message-Id: <201008091212.o78CTru8012873@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============9024797497909438130==" --===============9024797497909438130== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-5.5-merge-test/ based on revid:georgi.kodinov@stripped 3166 Jon Olav Hauglid 2010-08-09 [merge] manual merge from mysql-5.1-bugteam modified: mysql-test/r/insert.result mysql-test/t/insert.test sql/sql_insert.cc sql/sql_select.cc sql/sql_update.cc === modified file 'mysql-test/r/insert.result' --- a/mysql-test/r/insert.result 2010-04-11 06:52:42 +0000 +++ b/mysql-test/r/insert.result 2010-08-09 12:11:29 +0000 @@ -671,3 +671,18 @@ drop table t1; # # End of 5.4 tests # +# +# Bug#54106 assert in Protocol::end_statement, +# INSERT IGNORE ... SELECT ... UNION SELECT ... +# +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (a INT); +INSERT INTO t1 (a, a) VALUES (1, 1); +ERROR 42000: Column 'a' specified twice +INSERT IGNORE t1 (a, a) VALUES (1, 1); +ERROR 42000: Column 'a' specified twice +INSERT IGNORE t1 (a, a) SELECT 1,1; +ERROR 42000: Column 'a' specified twice +INSERT IGNORE t1 (a, a) SELECT 1,1 UNION SELECT 2,2; +ERROR 42000: Column 'a' specified twice +DROP TABLE t1; === modified file 'mysql-test/t/insert.test' --- a/mysql-test/t/insert.test 2010-04-11 06:52:42 +0000 +++ b/mysql-test/t/insert.test 2010-08-09 12:11:29 +0000 @@ -525,3 +525,28 @@ drop table t1; --echo # --echo # End of 5.4 tests --echo # + +--echo # +--echo # Bug#54106 assert in Protocol::end_statement, +--echo # INSERT IGNORE ... SELECT ... UNION SELECT ... +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +CREATE TABLE t1 (a INT); + +--error ER_FIELD_SPECIFIED_TWICE +INSERT INTO t1 (a, a) VALUES (1, 1); +# Verify that ER_FIELD_SPECIFIED_TWICE is not ignorable +--error ER_FIELD_SPECIFIED_TWICE +INSERT IGNORE t1 (a, a) VALUES (1, 1); + +--error ER_FIELD_SPECIFIED_TWICE +INSERT IGNORE t1 (a, a) SELECT 1,1; +# Used to cause an assert +--error ER_FIELD_SPECIFIED_TWICE +INSERT IGNORE t1 (a, a) SELECT 1,1 UNION SELECT 2,2; + +DROP TABLE t1; === modified file 'sql/sql_insert.cc' --- a/sql/sql_insert.cc 2010-07-30 15:13:38 +0000 +++ b/sql/sql_insert.cc 2010-08-09 12:11:29 +0000 @@ -3043,6 +3043,9 @@ select_insert::prepare(List &value we are fixing fields from insert list. */ lex->current_select= &lex->select_lex; + + /* Errors during check_insert_fields() should not be ignored. */ + lex->current_select->no_error= FALSE; res= (setup_fields(thd, 0, values, MARK_COLUMNS_READ, 0, 0) || check_insert_fields(thd, table_list, *fields, values, !insert_into_view, 1, &map)); === modified file 'sql/sql_select.cc' --- a/sql/sql_select.cc 2010-07-30 15:13:38 +0000 +++ b/sql/sql_select.cc 2010-08-09 12:11:29 +0000 @@ -6914,6 +6914,8 @@ bool error_if_full_join(JOIN *join) { if (tab->type == JT_ALL && (!tab->select || !tab->select->quick)) { + /* This error should not be ignored. */ + join->select_lex->no_error= FALSE; my_message(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE, ER(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE), MYF(0)); return(1); === modified file 'sql/sql_update.cc' --- a/sql/sql_update.cc 2010-07-28 11:17:19 +0000 +++ b/sql/sql_update.cc 2010-08-09 12:11:29 +0000 @@ -1145,57 +1145,6 @@ int mysql_multi_update_prepare(THD *thd) } -/** - Implementation of the safe update options during UPDATE IGNORE. This syntax - causes an UPDATE statement to ignore all errors. In safe update mode, - however, we must never ignore the ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE. There - is a special hook in my_message_sql that will otherwise delete all errors - when the IGNORE option is specified. - - In the future, all IGNORE handling should be used with this class and all - traces of the hack outlined below should be removed. - - - The parser detects IGNORE option and sets thd->lex->ignore= 1 - - - In JOIN::optimize, if this is set, then - thd->lex->current_select->no_error gets set. - - - In my_message_sql(), if the flag above is set then any error is - unconditionally converted to a warning. - - We are moving in the direction of using Internal_error_handler subclasses - to do all such error tweaking, please continue this effort if new bugs - appear. - */ -class Safe_dml_handler : public Internal_error_handler { - -private: - bool m_handled_error; - -public: - explicit Safe_dml_handler() : m_handled_error(FALSE) {} - - bool handle_condition(THD *thd, - uint sql_errno, - const char* sqlstate, - MYSQL_ERROR::enum_warning_level level, - const char* msg, - MYSQL_ERROR ** cond_hdl) - { - if (level == MYSQL_ERROR::WARN_LEVEL_ERROR && - sql_errno == ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE) - { - thd->stmt_da->set_error_status(thd, sql_errno, msg, sqlstate); - m_handled_error= TRUE; - return TRUE; - } - return FALSE; - } - - bool handled_error() { return m_handled_error; } - -}; - /* Setup multi-update handling and call SELECT to do the join */ @@ -1229,11 +1178,6 @@ bool mysql_multi_update(THD *thd, List total_list; - Safe_dml_handler handler; - bool using_handler= thd->variables.option_bits & OPTION_SAFE_UPDATES; - if (using_handler) - thd->push_internal_handler(&handler); - res= mysql_select(thd, &select_lex->ref_pointer_array, table_list, select_lex->with_wild, total_list, @@ -1243,21 +1187,9 @@ bool mysql_multi_update(THD *thd, OPTION_SETUP_TABLES_DONE, *result, unit, select_lex); - if (using_handler) - { - Internal_error_handler *top_handler; - top_handler= thd->pop_internal_handler(); - DBUG_ASSERT(&handler == top_handler); - } - DBUG_PRINT("info",("res: %d report_error: %d", res, (int) thd->is_error())); res|= thd->is_error(); - /* - Todo: remove below code and make Safe_dml_handler do error processing - instead. That way we can return the actual error instead of - ER_UNKNOWN_ERROR. - */ - if (unlikely(res) && (!using_handler || !handler.handled_error())) + if (unlikely(res)) { /* If we had a another error reported earlier then this will be ignored */ (*result)->send_error(ER_UNKNOWN_ERROR, ER(ER_UNKNOWN_ERROR)); --===============9024797497909438130== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jon.hauglid@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jon.hauglid@stripped # target_branch: file:///export/home/x/mysql-5.5-merge-test/ # testament_sha1: 0d647af3b86268b79a635b077b78a365aea2a829 # timestamp: 2010-08-09 14:11:44 +0200 # source_branch: file:///export/home/x/mysql-5.1-bugteam-bug54106/ # base_revision_id: georgi.kodinov@stripped\ # ar2ebh3uiwe3yhhr # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWWPgL+cACW5fgFCQWPf//3/9 38C////wYBA9nmPrqmO2JtiW2SoEIU2gDTAAAAASoRqrAA4yZNGIYmmAgYE0wRgmJppoAMINEyjR k0aFPUyDQAaeoAAAADQA4yZNGIYmmAgYE0wRgmJppoAMIJTSAmQIaNTESZPSNT0yj0h6TJoZDTRk AESiACpjJMmEh+pNDCZG1PSZNqaehNGI02oFSiAQAJpoyCYCNTU2oINDTQyAaek5EmOVduwfkuIb b4eHgh6y9DbLBCQ1/xr+/7vyg8IQLDEHis6cWfhlQ22yUxDVNVXIvecwBQuS59TDSRLoq/LhQqgV XqZmZooADn0pDUDCUwSmSLIlRkRTOi9p3seGJNCUlDSzQzKtmmF9p1/DG3r4t/uq4O0jzhz5B+wb 4m2e3iOp0ZI6d8T2ic4kJJAJJIJJCBIL/gM3eJG4g4hgHXtPft37xLdnci7qCB18hnBSuVeFrVjQ cV52jBPT+QPSNLu6inU1iiBN3TodSd2smlSk7z8jxOnvDzD1c+/xPf8D/R3uxHg/TF6rWrz1atvj H8JfPgqrP4tSj3sbqTvdeILp5gcXzfTT8dY92m9M0Se8Sv50ak/zeGz0YhSD4TkMNuQEKMmEJe5g KNCFOeCxuas0sJxXeCD18XoLJ7UUsKjE5yXKINKEmfbL6gvwZvwSR+o2uDCsWpfG20jlSDI14DUO kJ6gOUPsaGqetsHjPZCY9xgaJxxBCwfAb4FE6Hd/0nrukkyK39r5RrSfr9wwYTcZmPP6RISSFqYg 4c9nAN18ukwPrJ+rHumX7TA3LTEYdmnouObaj9aTkTMPcie6X3ciyVSN7ufoY08vGZM2l++MwpGL BR6Dx8Nx8u9VLidWyTi0G7n3/fVRmrRRWK299iTuka2zNWd/HtRiQDkdpWBAUioWDsLUfKZemCTl Rh3di26QkkuK2OqqwBmhgSHlMchITtJsFyEseKwrMsK1ohLCXRKClbfbJVQWsV2exn5pK4qEytrV mZi25gXmZLFS14UYxyYVRGTK7wtZiGFxNNi1PaCqYzxYRYyif8EegyKyPd9Vy579hm+JfYc6DNTU kn7jEWyUEctIQEicVH3mDF1MPoBB6SDHAyFXk2Q0OSwHD+OB4StNwXbipzbReDmFMDGDPkzOpavS dF4sjPgzabTjKcm5XQk0pN+fCnaGbzyjw4Q2I6CKuZHEy1M2uTNiNGWQzHEyPZKegzUCh/s5E9DU uaVgA8TUnm1qHAxmc+HhS1Wf2cjiEPSDKRN5CLI8jyQshjOJOxQ4dugxsxeC67p3YEYMzi0vnzMb uylOXdlS1suUrOsUKNzeqhO/l+3xZNEwSdVVWTPO1daLGhdqw1SflFn20HNiw6EGJ1M4JCyiQYyO o+Rw42wS9BmUvz7QGdWu2m9soLfBdlahXA7tFecqXnCLqXY6nCwzsf6MtS1lY0TfomfL12pxYH9T +pvt3adUawhwzxRXQiSCTUKP4KTxMAhqDSJp7GBO0Aobwxgz8awYqOt7YAuJMxDCJMnI5mg+om1W CiR1s1utcyYsF6ZGlc9lzirYyYpwv5p+t6pGp+qbpxm9jw0YUrZp4VSbm1qu3nFdZhY6najUWCiz 9QuYZz1bUoiBxbM1zmh9spaj8RfPrkcHboZMmlTsas+3LW1OTRnbWlVulVZGsmDhVcbGpMISDMme 0HP/DeFEEDzMX6W5CpxTinFbRqNvZnY5WNChvbLoYlK7FJD0CY5zKG497E/pCuw32N5aFMDEzbxc UCr6HcodM3Om+jbw7kPXNqAS2LFDSVLGo2plRWMY3GA6EmjEOZ4mxqRMvb28hDSEW+YNwuexmiUC 77Y5u8W4RCUSBFkmljJpEuDeJEB25G4+yh5QfcxBQPoMC2hY3M2fUvacmzrz6GmypqzKpivVMmvF yc4mnwSPg6M7WXt7q+TbVtY4sTalhs09fn7qZ1111MaWTPnxYsJYTBjuUVaLrGK3Y5Nmhf7Jhisd XjxXdZrUaubrYrMzD2KbTqua1E0MknBJe69jTMUcSFtSBO7TMSYjOQWhUsTEQUR/GFiAFxhiw4Vp o3QWkuULI5lCXhEccqcMLEzUgORs00ixhrY75WK7GOJ3MNMzocpmB5tqMxsbFBFf0chmXpfsZbm7 UhZaxEqDNnMYCFJEqFRFJqkLbcGtfdY4MX2UuwYOVmtn2Nq5hy5bUjWG1ZObkOJYvkDZlTrCmo5V y3UOQjDAuOXCxb3c+xzwYnkOzXb7cGhFhM5zH1IPyZZmZMZ6I61Ko23QqLC8lwOauGJDoLizzFKw rKT9pOT3W+zcVUKUUSh9Y66RSIqnN+5HH4CDaeGcowUIZeJ6R6j5hwmrsCEjBiyT3jXm4X5LVbSC 1Cgf6tV+AfOe4LDUrQqMKU6yGnuW0XMW0XIIrmuQRsIRexYpQt+i8AtTRYp/M+LLgIPhTsKG0udq +UYL2xqmu8n/KUUOI7MmqcYGqlTAOFaNFeA+gXBqoZRSHEXi4q8S5lcXCIQW0oVHeKlNC9dtYQl+ IVUyXMsXQXqTn75BOYT8x+qitXd6qWjATvMKDaa+8t+QVAqB6DoF6C7IX94J5zpPT5zpPN+GZjfm bSh0eguz/d9kRzMmRMiZman33ybEdGJ9ffTrL7ZMMxE7cur98ztlwXq3nJ6+4nX6w0NN8SalcJkS nq9Yjt6nYI3+z2GMXEzKrluCGHKOoVewtVCobjFN/tc2Xgk/u67izgvUZPKq2lfJ4cl3nm/mvej0 1uS1k0PKwZV/kYtV7T5ejY6JkZ1dzVMp9fo9TY2sbZYrzexV+aQ7kxb6k1/6Ny3Q6+DiucZ1O3bo LTekYNL32xxpPVDudqjJuYHjtzvjnqpXtvYaWoX2KvnmkWxIumU2JE3v5LX+5lDB2H9PQt0qRqsX 2Deih0dMvDwWO9/85MnSrvZmDR5NDY2RMGZqSd+zwXtjQySNykkLZgyfZOWZu5m7a3bW6vjccTOT onn8r3kajrm91Pc4qM3Z3voYpHmY8D6+++qikpSPyuRb9bKF996yt3b+VfhMpInVOjvu1PK3redr zamF7nMzbct8Kfajwz002PRnebuLmt5tWlaq9GDyePYjsRY49la0itCvYjXJKLedFenJpmvzOJiv wFO6tWNm/yLU3TI5OHlv7HXdV6b7XknWmY9J6fBizae14dtVNvusOHDiNnLfG31l3HGqsxWKSPJK JO9OjK3n4exau9cJmXM/89R/b4uipQukTyU/Pz3b2gs/s2yLFLkwbKhxktSMl7L2ef+NfEjood73 ey1LHw8lWTBZ9lXs8cL/bscrF/yaFhPz9fQ3YNd7gTa7kqd/6I8UbJGo9DYOiR83TapXifBa7jT2 vudj3yilVGKmov8qUoopJMya5oM8uTCEcp9VsnWmf8z4fc2Oh7Gd93onudR5ntNJjZ9ROk+v4khW fNBTtvWLt8uspLTBccX3nr5oYpb3JWbsDwd1thXk2u16pFZIVdIrMHn4k3GRZJdPmms8u+Zkkrqx zxqM0ft8+vpJOOKzCtG1N6fLgUUM9lM/w7mdnD8tB0MaV0dQW9R2LvhcWzrizMjl8PX8VWGY+5y/ 83/8uxKRWFFUpFeLBieM+T8pWm02pXaanT1O6Sbvs+o5tHtTMzmuequRNqWpKL0i8LGK0fV6TBDV /FeXHczsafNEaIkUIqshWv0N2tkcPtCMpbPekZzNV4pPZa9kmMqm44OBRJ8Px3NHDJTCImn3ir6V jqstkXFnfRexOB4K50ybDuTOxJn0DYYBZnOx1CzQJmRyaFCGYxBOUhqKQHXMTW/BitjhLi6zdFzP AGLhjf0pNizljkliYJvLCPMpqJKUSZeRYnw2/Y7E00nm0eIbEpkKS1wGn3b4WPb3PsC6go/xD2n2 7NhjJCi5QnUxn4PDW2FprobaRTwiRtkm6xOtPg5Rrxi/BKTCPokePovnNcmD/DzOjkknu3dSiKJK eSXE4rzU1Jn0nP6Y7viZ7EyNDStehbnoyNyWLk5lxpfsbtqDJrSi8OWBz0okqTxELGDi9wLlV4yW GyyhUkCtwNkF6PIPCcZcDgGAzObXHa7wcfPuxQ4xvvh4h8biZfZrU2iHxcgzz3leuFU8VEXxtfTw A43c47UlkISaLeajF2TyS4cwwavL5R/afIGQczMzDU2yPv418vM93NeQEvsLA/KLJeJVu3gCAxmH gcQbNCuGfxGPiIQhCEIQi4ZD+I1KBCBCBQNgXLFd2rjXfVxoPkGuYcw7na7dg585Yxdnl0xgRPUV INGAQDDQk0KvhcpQpBrSeT7L2e7BGGKv95FXjRNZ7spLlvRSw09J7SbTttIq4JFSdlNCn70yXW7X YcrWEKS2aZJuTm/dw6mMuwok0aFseh4rDkmb7zG7TyMT8P4c6KaYRSNZbNy0vYp1lE/Z9/FLL1p3 tU79F0aqXJsPzbFr8NSSmwWOeCed7UuoWB1mw2HNU0FMehkk3ucmTnK66PyMDieP0OJSdpujuNa1 4ZGm9aUSPyLjqSOFVM2SxeowtdRqO+b3qeJpRzaz7nsdDsOf0MkjqMScjQdT8aSw4s3A8Go/Ue5/ +LuSKcKEgx8Bfzg= --===============9024797497909438130==--