MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Georgi Kodinov Date:April 7 2010 3:18pm
Subject:bzr commit into mysql-5.1-bugteam branch (joro:3447) Bug#52512
View as plain text  
#At file:///home/kgeorge/mysql/work/B52512-5.1-bugteam/ based on revid:sergey.glukhov@stripped

 3447 Georgi Kodinov	2010-04-07
      Bug #52512: Assertion `! is_set()' in Diagnostics_area::set_ok_status 
      on LOAD DATA
      
      Two problems :
      1. LOAD DATA was not checking for SQL errors and was sending an OK
      packet even when there were errors reported already. Fixed to check for
      SQL errors in addition to the error conditions already detected.
      2. There was an over-ambitious assert() on the server to check if the 
      protocol is always followed by the client. This can cause crashes on 
      debug servers by clients not completing the protocol exchange for some
      reason (e.g. --send command in mysqltest). Fixed by keeping the assert
      only on client side, since the server always completes the protocol 
      exchange.

    modified:
      mysql-test/r/loaddata.result*
      mysql-test/t/loaddata.test
      sql/net_serv.cc
      sql/sql_load.cc
=== modified file 'mysql-test/r/loaddata.result' (properties changed: +x to -x)
--- a/mysql-test/r/loaddata.result	2010-03-30 12:10:25 +0000
+++ b/mysql-test/r/loaddata.result	2010-04-07 15:17:56 +0000
@@ -502,4 +502,11 @@ SELECT * FROM t1;
 col0
 test
 DROP TABLE t1;
+#
+# Bug #52512 : Assertion `! is_set()' in 
+#  Diagnostics_area::set_ok_status on LOAD DATA
+#
+CREATE TABLE t1 (id INT NOT NULL);
+LOAD DATA LOCAL INFILE 'tb.txt' INTO TABLE t1;
+DROP TABLE t1;
 End of 5.1 tests

=== modified file 'mysql-test/t/loaddata.test'
--- a/mysql-test/t/loaddata.test	2010-03-30 12:10:25 +0000
+++ b/mysql-test/t/loaddata.test	2010-04-07 15:17:56 +0000
@@ -554,4 +554,24 @@ let $MYSQLD_DATADIR= `select @@datadir`;
 remove_file $MYSQLD_DATADIR/test/t1.txt;
 
 
+--echo #
+--echo # Bug #52512 : Assertion `! is_set()' in 
+--echo #  Diagnostics_area::set_ok_status on LOAD DATA
+--echo #
+
+connect (con1,localhost,root,,test);
+
+CREATE TABLE t1 (id INT NOT NULL);
+--send LOAD DATA LOCAL INFILE 'tb.txt' INTO TABLE t1
+# please keep this is a spearate test file : it's important to have no
+# commands after this one
+
+connection default;
+dirty_close con1;
+
+connect (con1,localhost,root,,test);
+DROP TABLE t1;
+connection default;
+disconnect con1;
+
 --echo End of 5.1 tests

=== modified file 'sql/net_serv.cc'
--- a/sql/net_serv.cc	2009-07-28 18:44:28 +0000
+++ b/sql/net_serv.cc	2010-04-07 15:17:56 +0000
@@ -903,7 +903,13 @@ my_real_read(NET *net, size_t *complen)
 		       ("Packets out of order (Found: %d, expected %u)",
 			(int) net->buff[net->where_b + 3],
 			net->pkt_nr));
-#ifdef EXTRA_DEBUG
+            /* 
+              We don't make noise server side, since the client is expected
+              to break the protocol for e.g. --send LOAD DATA .. LOCAL where
+              the server expects the client to send a file, but the client
+              may reply with a new command instead.
+            */
+#if defined (EXTRA_DEBUG) && !defined (MYSQL_SERVER)
             fflush(stdout);
 	    fprintf(stderr,"Error: Packets out of order (Found: %d, expected %d)\n",
 		    (int) net->buff[net->where_b + 3],

=== modified file 'sql/sql_load.cc'
--- a/sql/sql_load.cc	2010-03-09 10:19:10 +0000
+++ b/sql/sql_load.cc	2010-04-07 15:17:56 +0000
@@ -940,6 +940,10 @@ read_sep_field(THD *thd, COPY_INFO &info
         DBUG_RETURN(1);
       }
     }
+
+    if (thd->is_error())
+      read_info.error= 1;
+
     if (read_info.error)
       break;
     if (skip_lines)


Attachment: [text/bzr-bundle] bzr/joro@sun.com-20100407151756-x9ayusa3fo00aiti.bundle
Thread
bzr commit into mysql-5.1-bugteam branch (joro:3447) Bug#52512Georgi Kodinov7 Apr