summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
authorGeorgi Kodinov <Georgi.Kodinov@Oracle.com>2010-11-03 16:09:17 +0200
committerGeorgi Kodinov <Georgi.Kodinov@Oracle.com>2010-11-03 16:09:17 +0200
commit7b2e07232a9307220187ee858c7c12a0d899d593 (patch)
tree72015dab42a49c01b928bb1243b9be81273453df /storage
parent39bceaac0295e556a8db5d354315b39dfb0f3ef6 (diff)
parent4cfa91f42c4cde9c35979cd2b9837cb60213d876 (diff)
downloadmariadb-git-7b2e07232a9307220187ee858c7c12a0d899d593.tar.gz
merge
Diffstat (limited to 'storage')
-rw-r--r--storage/innobase/row/row0mysql.c9
-rw-r--r--storage/innodb_plugin/ChangeLog12
-rw-r--r--storage/innodb_plugin/row/row0mysql.c9
3 files changed, 26 insertions, 4 deletions
diff --git a/storage/innobase/row/row0mysql.c b/storage/innobase/row/row0mysql.c
index 99738115cc7..8b770229c16 100644
--- a/storage/innobase/row/row0mysql.c
+++ b/storage/innobase/row/row0mysql.c
@@ -1613,6 +1613,9 @@ row_update_cascade_for_mysql(
trx = thr_get_trx(thr);
+ /* Increment fk_cascade_depth to record the recursive call depth on
+ a single update/delete that affects multiple tables chained
+ together with foreign key relations. */
thr->fk_cascade_depth++;
if (thr->fk_cascade_depth > FK_MAX_CASCADE_DEL) {
@@ -1624,6 +1627,12 @@ run_again:
row_upd_step(thr);
+ /* The recursive call for cascading update/delete happens
+ in above row_upd_step(), reset the counter once we come
+ out of the recursive call, so it does not accumulate for
+ different row deletes */
+ thr->fk_cascade_depth = 0;
+
err = trx->error_state;
/* Note that the cascade node is a subnode of another InnoDB
diff --git a/storage/innodb_plugin/ChangeLog b/storage/innodb_plugin/ChangeLog
index 9033e5557f3..47ee33e062f 100644
--- a/storage/innodb_plugin/ChangeLog
+++ b/storage/innodb_plugin/ChangeLog
@@ -39,10 +39,14 @@
2010-10-11 The InnoDB Team
- * row/row0sel.c:
- Fix Bug#57345 btr_pcur_store_position abort for load with concurrent
- lock/unlock tables
-
+ * row/row0sel.c
+ Fix Bug #57345 btr_pcur_store_position abort for load with
+ concurrent lock/unlock tables
+
+2010-10-06 The InnoDB Team
+ * row/row0mysql.c, innodb_bug57255.result, innodb_bug57255.test
+ Fix Bug #Cascade Delete results in "Got error -1 from storage engine"
+
2010-09-27 The InnoDB Team
* row/row0sel.c, innodb_bug56716.result, innodb_bug56716.test:
diff --git a/storage/innodb_plugin/row/row0mysql.c b/storage/innodb_plugin/row/row0mysql.c
index 827be32bdf7..609533c7647 100644
--- a/storage/innodb_plugin/row/row0mysql.c
+++ b/storage/innodb_plugin/row/row0mysql.c
@@ -1593,6 +1593,9 @@ row_update_cascade_for_mysql(
trx = thr_get_trx(thr);
+ /* Increment fk_cascade_depth to record the recursive call depth on
+ a single update/delete that affects multiple tables chained
+ together with foreign key relations. */
thr->fk_cascade_depth++;
if (thr->fk_cascade_depth > FK_MAX_CASCADE_DEL) {
@@ -1604,6 +1607,12 @@ run_again:
row_upd_step(thr);
+ /* The recursive call for cascading update/delete happens
+ in above row_upd_step(), reset the counter once we come
+ out of the recursive call, so it does not accumulate for
+ different row deletes */
+ thr->fk_cascade_depth = 0;
+
err = trx->error_state;
/* Note that the cascade node is a subnode of another InnoDB