1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

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 by moving
the transactional table check and autocommit_or_rollback operation to the 
end of the error handler. 

The problem was an assert was thrown after the operation completed. The 
assert found a non-sunk event in the transaction cache. The events in the 
transaction cache were added after commit_or_rollack and thereafter nothing 
removed them.

An additional test case was added to detect this
condition.


mysql-test/extra/rpl_tests/rpl_loaddata.test:
  BUG#17233 : LOAD DATA INFILE: failure causes mysqld dbug_assert, binlog not flushed 
      
  This patch adds an additional test to rpl_loaddata for handling the
  duplicate key error on LOAD DATA INFILE.
mysql-test/r/rpl_loaddata.result:
  BUG#17233 : LOAD DATA INFILE: failure causes mysqld dbug_assert, binlog not flushed 
      
  This patch adds the results for the additional test for properly handling the
  duplicate key error on LOAD DATA INFILE.
sql/sql_load.cc:
  BUG#17233 : LOAD DATA INFILE: failure causes mysqld dbug_assert, binlog not flushed 
  
  This patch moves the check for a transactional table and rollback in the
  error handler for mysql_load(). The patch moves the transactional table
  check to the end of the error handler matching the implementation for other
  similar operations (see sql_insert).
This commit is contained in:
unknown
2007-05-08 10:17:00 -04:00
parent 4598bb9e8d
commit f508249f8b
3 changed files with 19 additions and 3 deletions

View File

@ -413,9 +413,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())
;
@ -463,6 +460,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;
}