Commit c144e1a2 authored by unknown's avatar unknown
Browse files

Fixed bug #5835 load data infile...replace error with InnoDB table.


sql/ha_innodb.cc:
  Note that LOAD DATA INFILE REPLACE also handles a duplicate key error
  itself, and we must not decrement the autoinc counter if we are
  performing that statement.
parent 234a8ec0
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -2445,9 +2445,10 @@ ha_innobase::write_row(
	        /* If the insert did not succeed we restore the value of
		the auto-inc counter we used; note that this behavior was
		introduced only in version 4.0.4.
		NOTE that a REPLACE command handles a duplicate key error
		NOTE that a REPLACE command and LOAD DATA INFILE REPLACE
		handles a duplicate key error
		itself, and we must not decrement the autoinc counter
		if we are performing a REPLACE statement.
		if we are performing a those statements.
		NOTE 2: if there was an error, for example a deadlock,
		which caused InnoDB to roll back the whole transaction
		already in the call of row_insert_for_mysql(), we may no
@@ -2459,7 +2460,9 @@ ha_innobase::write_row(
	        if (error == DB_DUPLICATE_KEY
		    && (user_thd->lex->sql_command == SQLCOM_REPLACE
			|| user_thd->lex->sql_command
			                 == SQLCOM_REPLACE_SELECT)) {
			                 == SQLCOM_REPLACE_SELECT
		    	|| (user_thd->lex->sql_command == SQLCOM_LOAD
			    && user_thd->lex->duplicates == DUP_REPLACE))) {

		        skip_auto_inc_decr= TRUE;
		}
@@ -5484,6 +5487,7 @@ innobase_query_is_replace(void)
	thd = (THD *)innobase_current_thd();
	
	if ( thd->lex->sql_command == SQLCOM_REPLACE ||
	     thd->lex->sql_command == SQLCOM_REPLACE_SELECT ||
	     ( thd->lex->sql_command == SQLCOM_LOAD &&
	       thd->lex->duplicates == DUP_REPLACE )) {
		return true;