diff options
-rw-r--r-- | mysql-test/r/loaddata.result | 7 | ||||
-rw-r--r-- | mysql-test/t/loaddata.test | 20 | ||||
-rw-r--r-- | sql/net_serv.cc | 8 | ||||
-rw-r--r-- | sql/sql_load.cc | 4 |
4 files changed, 38 insertions, 1 deletions
diff --git a/mysql-test/r/loaddata.result b/mysql-test/r/loaddata.result index 7a79603adb3..a7407cfa699 100644 --- a/mysql-test/r/loaddata.result +++ b/mysql-test/r/loaddata.result @@ -496,4 +496,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 diff --git a/mysql-test/t/loaddata.test b/mysql-test/t/loaddata.test index c10a7d82c43..27c4cc8a75c 100644 --- a/mysql-test/t/loaddata.test +++ b/mysql-test/t/loaddata.test @@ -550,4 +550,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 diff --git a/sql/net_serv.cc b/sql/net_serv.cc index a29f0e394dc..918798529de 100644 --- a/sql/net_serv.cc +++ b/sql/net_serv.cc @@ -920,7 +920,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], diff --git a/sql/sql_load.cc b/sql/sql_load.cc index 2c42f29ae71..7e540ffbe4b 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -995,6 +995,10 @@ read_sep_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list, DBUG_RETURN(1); } } + + if (thd->is_error()) + read_info.error= 1; + if (read_info.error) break; if (skip_lines) |