Commit 41b8ddc8 authored by cbell/Chuck@mysql_cab.'s avatar cbell/Chuck@mysql_cab.
Browse files

BUG#17233 : LOAD DATA INFILE: failure causes mysqld dbug_assert, binlog not flushed

This patch corrects a bug involving a LOAD DATA INFILE operation on a 
transactional table. It corrects a problem in the error handler moving
the transactional table check and autocommit_or_rollback operation to the 
end of the error handler. An additional test case was added to detect this
condition.
parent f4c4de6a
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -80,3 +80,7 @@ ERROR 23000: Duplicate entry '2003-03-22' for key 1
drop table t2;
drop table t2;
drop table t1;
CREATE TABLE t1 (word CHAR(20) NOT NULL PRIMARY KEY) ENGINE=INNODB;
LOAD DATA INFILE "../std_data_ln/words.dat" INTO TABLE t1;
ERROR 23000: Duplicate entry 'Aarhus' for key 1
DROP TABLE IF EXISTS t1;
+12 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
# Last_slave_errno in SHOW SLAVE STATUS (1st and 3rd commands did not: bug 986)

source include/master-slave.inc;
source include/have_innodb.inc;

connection slave;
reset master;
@@ -150,5 +151,16 @@ drop table t2;
connection master;
drop table t2;
drop table t1;

# BUG#17233 LOAD DATA INFILE: failure causes mysqld dbug_assert, binlog not flushed
CREATE TABLE t1 (word CHAR(20) NOT NULL PRIMARY KEY) ENGINE=INNODB;

--error 1062
LOAD DATA INFILE "../std_data_ln/words.dat" INTO TABLE t1;

--disable warnings
DROP TABLE IF EXISTS t1;
--enable warnings

sync_with_master;
# End of 4.1 tests
+3 −3
Original line number Diff line number Diff line
@@ -414,9 +414,6 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,

  if (error)
  {
    if (transactional_table)
      ha_autocommit_or_rollback(thd,error);

    if (read_file_from_client)
      while (!read_info.next_line())
	;
@@ -460,6 +457,9 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
      }
    }
#endif /*!EMBEDDED_LIBRARY*/
    if (transactional_table)
      ha_autocommit_or_rollback(thd,error);

    error= -1;				// Error on read
    goto err;
  }