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.
This commit is contained in:
parent
234a8ec061
commit
c144e1a23c
@ -2445,9 +2445,10 @@ ha_innobase::write_row(
|
|||||||
/* If the insert did not succeed we restore the value of
|
/* If the insert did not succeed we restore the value of
|
||||||
the auto-inc counter we used; note that this behavior was
|
the auto-inc counter we used; note that this behavior was
|
||||||
introduced only in version 4.0.4.
|
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
|
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,
|
NOTE 2: if there was an error, for example a deadlock,
|
||||||
which caused InnoDB to roll back the whole transaction
|
which caused InnoDB to roll back the whole transaction
|
||||||
already in the call of row_insert_for_mysql(), we may no
|
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
|
if (error == DB_DUPLICATE_KEY
|
||||||
&& (user_thd->lex->sql_command == SQLCOM_REPLACE
|
&& (user_thd->lex->sql_command == SQLCOM_REPLACE
|
||||||
|| user_thd->lex->sql_command
|
|| 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;
|
skip_auto_inc_decr= TRUE;
|
||||||
}
|
}
|
||||||
@ -5484,6 +5487,7 @@ innobase_query_is_replace(void)
|
|||||||
thd = (THD *)innobase_current_thd();
|
thd = (THD *)innobase_current_thd();
|
||||||
|
|
||||||
if ( thd->lex->sql_command == SQLCOM_REPLACE ||
|
if ( thd->lex->sql_command == SQLCOM_REPLACE ||
|
||||||
|
thd->lex->sql_command == SQLCOM_REPLACE_SELECT ||
|
||||||
( thd->lex->sql_command == SQLCOM_LOAD &&
|
( thd->lex->sql_command == SQLCOM_LOAD &&
|
||||||
thd->lex->duplicates == DUP_REPLACE )) {
|
thd->lex->duplicates == DUP_REPLACE )) {
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user