MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Martin Hansson Date:May 4 2009 12:45pm
Subject:bzr commit into mysql-5.1-bugteam branch (mhansson:2877) Bug#44306
View as plain text  
#At file:///data0/martin/bzr/bug44306/5.1bt-gca/ based on revid:holyfoot@stripped

 2877 Martin Hansson	2009-05-04
      Bug#44306: Assertion fail on duplicate key error in 
      'INSERT ... SELECT' statements
                  
      The code that produces result rows expected that a duplicate row
      error could not occur in INSERT ... SELECT statements with 
      unfulfilled WHERE conditions. This may happen, however, if the 
      SELECT list contains only aggregate functions.
      Fixed by checking if an error occured before trying to send EOF
      to the client.
     @ mysql-test/r/insert_select.result
        Bug#44306: Test result
     @ mysql-test/t/insert_select.test
        Bug#44306: Test case
     @ sql/sql_select.cc
        Bug#44306: Fix

    modified:
      mysql-test/r/insert_select.result
      mysql-test/t/insert_select.test
      sql/sql_select.cc
=== modified file 'mysql-test/r/insert_select.result'
--- a/mysql-test/r/insert_select.result	2007-09-24 13:23:40 +0000
+++ b/mysql-test/r/insert_select.result	2009-05-04 12:45:36 +0000
@@ -765,6 +765,11 @@ f1	f2
 2	2
 10	10
 DROP TABLE t1, t2;
+CREATE TABLE t1 ( a INT KEY, b INT );
+INSERT INTO t1 VALUES ( 0, 1 );
+INSERT INTO t1 ( b ) SELECT MAX( b ) FROM t1 WHERE b = 2;
+ERROR 23000: Duplicate entry '0' for key 'PRIMARY'
+DROP TABLE t1;
 SET SQL_MODE='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
 CREATE TABLE t1 (c VARCHAR(30), INDEX ix_c (c(10)));
 CREATE TABLE t2 (d VARCHAR(10));

=== modified file 'mysql-test/t/insert_select.test'
--- a/mysql-test/t/insert_select.test	2007-09-24 13:23:40 +0000
+++ b/mysql-test/t/insert_select.test	2009-05-04 12:45:36 +0000
@@ -324,6 +324,16 @@ SELECT * FROM t2;
 DROP TABLE t1, t2;
 
 #
+# Bug#44306: Assertion fail on duplicate key error in 'INSERT ... SELECT' 
+# statements
+#
+CREATE TABLE t1 ( a INT KEY, b INT );
+INSERT INTO t1 VALUES ( 0, 1 );
+--error ER_DUP_ENTRY
+INSERT INTO t1 ( b ) SELECT MAX( b ) FROM t1 WHERE b = 2;
+DROP TABLE t1;
+
+#
 # Bug #26207: inserts don't work with shortened index
 #
 SET SQL_MODE='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

=== modified file 'sql/sql_select.cc'
--- a/sql/sql_select.cc	2009-04-29 02:59:10 +0000
+++ b/sql/sql_select.cc	2009-05-04 12:45:36 +0000
@@ -7084,15 +7084,17 @@ return_zero_rows(JOIN *join, select_resu
   if (!(result->send_fields(fields,
                               Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF)))
   {
+    bool send_error= FALSE;
     if (send_row)
     {
       List_iterator_fast<Item> it(fields);
       Item *item;
       while ((item= it++))
 	item->no_rows_in_result();
-      result->send_data(fields);
+      send_error= result->send_data(fields);
     }
-    result->send_eof();				// Should be safe
+    if (!send_error)
+      result->send_eof();				// Should be safe
   }
   /* Update results for FOUND_ROWS */
   join->thd->limit_found_rows= join->thd->examined_row_count= 0;


Attachment: [text/bzr-bundle] bzr/mhansson@mysql.com-20090504124536-uwsuq6ic8y4ywy90.bundle
Thread
bzr commit into mysql-5.1-bugteam branch (mhansson:2877) Bug#44306Martin Hansson4 May