From: Martin Hansson Date: June 19 2009 9:33am Subject: bzr commit into mysql-5.1-bugteam branch (mhansson:2936) Bug#44653 List-Archive: http://lists.mysql.com/commits/76653 X-Bug: 44653 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0845285719==" --===============0845285719== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///data0/martin/bzr/bug44653/5.1bt-gca-commit/ based on revid:davi.arnaut@stripped 2936 Martin Hansson 2009-06-19 Bug#44653: Server crash noticed when executing random queries with partitions. When opening a table, it is imperative that the flag TABLE::auto_increment_field_not_null be false. But if an error occured during the creation of a table (e.g. the table exists already) with an auto_increment column and a BEFORE trigger that used the INSERT ... SELECT construct, the flag was not reset until after error checking. Thus if an error occured, the function returned immediately and it was not done. Crash happened if the table was opened again. Fixed by resetting the flag before error checking. @ mysql-test/r/trigger.result Bug#44653: Test result @ mysql-test/t/trigger.test Bug#44653: Test case @ sql/sql_insert.cc Bug#44653: Fix: Make sure to set this field before returning in case of error modified: mysql-test/r/trigger.result mysql-test/t/trigger.test sql/sql_insert.cc === modified file 'mysql-test/r/trigger.result' --- a/mysql-test/r/trigger.result 2009-03-27 12:55:14 +0000 +++ b/mysql-test/r/trigger.result 2009-06-19 09:33:49 +0000 @@ -2073,4 +2073,18 @@ select @a, @b; drop trigger trg1; drop trigger trg2; drop table t1, t2; +CREATE TABLE t1 ( a INT, b INT ); +CREATE TABLE t2 ( a INT AUTO_INCREMENT KEY, b INT ); +INSERT INTO t1 (a) VALUES (1); +CREATE TRIGGER tr1 +BEFORE INSERT ON t2 +FOR EACH ROW +BEGIN +UPDATE a_nonextisting_table SET a = 1; +END// +CREATE TABLE IF NOT EXISTS t2 ( a INT, b INT ) SELECT a, b FROM t1; +ERROR 42S02: Table 'test.a_nonextisting_table' doesn't exist +SELECT * FROM t2; +a b +DROP TABLE t1, t2; End of 5.1 tests. === modified file 'mysql-test/t/trigger.test' --- a/mysql-test/t/trigger.test 2009-03-27 12:55:14 +0000 +++ b/mysql-test/t/trigger.test 2009-06-19 09:33:49 +0000 @@ -2370,4 +2370,30 @@ drop trigger trg1; drop trigger trg2; drop table t1, t2; +# +# Bug#44653: Server crash noticed when executing random queries with partitions. +# +CREATE TABLE t1 ( a INT, b INT ); +CREATE TABLE t2 ( a INT AUTO_INCREMENT KEY, b INT ); + +INSERT INTO t1 (a) VALUES (1); + +delimiter //; +CREATE TRIGGER tr1 +BEFORE INSERT ON t2 +FOR EACH ROW +BEGIN + UPDATE a_nonextisting_table SET a = 1; +END// +delimiter ;// + +--disable_abort_on_error +CREATE TABLE IF NOT EXISTS t2 ( a INT, b INT ) SELECT a, b FROM t1; +--enable_abort_on_error + +# Caused failed assertion +SELECT * FROM t2; + +DROP TABLE t1, t2; + --echo End of 5.1 tests. === modified file 'sql/sql_insert.cc' --- a/sql/sql_insert.cc 2009-06-04 23:30:08 +0000 +++ b/sql/sql_insert.cc 2009-06-19 09:33:49 +0000 @@ -3099,6 +3099,7 @@ bool select_insert::send_data(List thd->count_cuted_fields= CHECK_FIELD_WARN; // Calculate cuted fields store_values(values); thd->count_cuted_fields= CHECK_FIELD_IGNORE; + table->auto_increment_field_not_null= FALSE; if (thd->is_error()) DBUG_RETURN(1); if (table_list) // Not CREATE ... SELECT @@ -3115,7 +3116,6 @@ bool select_insert::send_data(List ha_release_temporary_latches(thd); error= write_record(thd, table, &info); - table->auto_increment_field_not_null= FALSE; if (!error) { --===============0845285719== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/mhansson@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: mhansson@stripped # target_branch: file:///data0/martin/bzr/bug44653/5.1bt-gca-commit/ # testament_sha1: 5a534c15920a191c057073d2df9ff89347abe45d # timestamp: 2009-06-19 11:33:59 +0200 # base_revision_id: davi.arnaut@stripped\ # y7y7n931lbgnesb4 # # Begin bundle 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 --===============0845285719==--