summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorheikki@hundin.mysql.fi <>2003-07-07 16:39:53 +0300
committerheikki@hundin.mysql.fi <>2003-07-07 16:39:53 +0300
commitea8ed30f03fcf99de0578b76310bc970b06ef1ef (patch)
tree90f7e15926bfff52755777d5c4bd0114dbf5965b /sql
parente386d0e1266981f0149594549cc9eb210c584c7f (diff)
downloadmariadb-git-ea8ed30f03fcf99de0578b76310bc970b06ef1ef.tar.gz
sql_delete.cc:
Fix bug: if a DELETE failed in a FOREIGN KEY error and it had already deleted some rows, then MySQL did not roll back the failed SQL statement, and also wrote it to the binlog
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_delete.cc7
1 files changed, 6 insertions, 1 deletions
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index caa1e0e0312..96638617610 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -145,7 +145,12 @@ int mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, ORDER *order,
else
{
table->file->print_error(error,MYF(0));
- error=0;
+ error=1; /* In < 4.0.14 we set the error number to 0 here, but that
+ was not sensible, because then MySQL would not roll back the
+ failed DELETE, and also wrote it to the binlog. For MyISAM
+ tables a DELETE probably never should fail (?), but for
+ InnoDB it can fail in a FOREIGN KEY error or an
+ out-of-tablespace error. (Comment by Heikki July 7, 2003) */
break;
}
}