summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <salle@geopard.(none)>2002-11-08 16:40:19 +0200
committerunknown <salle@geopard.(none)>2002-11-08 16:40:19 +0200
commitcbc851c605e96023a6058949b0ea7fa68b89441c (patch)
tree6b2ece89a1241986fcdb4c93a1e8652c534244a7
parent7bf4febc2539c22ec8a337446d531a9fd2849e07 (diff)
parentde6eea8b6f320ccb59f533476d2056a737311226 (diff)
downloadmariadb-git-cbc851c605e96023a6058949b0ea7fa68b89441c.tar.gz
Merge akeremidarski@work.mysql.com:/home/bk/mysql
into geopard.(none):/storage/bk/mysql-3.23
-rw-r--r--innobase/row/row0mysql.c23
-rw-r--r--sql/sql_select.cc2
2 files changed, 21 insertions, 4 deletions
diff --git a/innobase/row/row0mysql.c b/innobase/row/row0mysql.c
index 26878f8c97c..ebb3cbe8dc8 100644
--- a/innobase/row/row0mysql.c
+++ b/innobase/row/row0mysql.c
@@ -1000,8 +1000,8 @@ row_update_cascade_for_mysql(
or set null operation */
dict_table_t* table) /* in: table where we do the operation */
{
- ulint err;
- trx_t* trx;
+ ulint err;
+ trx_t* trx;
trx = thr_get_trx(thr);
run_again:
@@ -1012,11 +1012,26 @@ run_again:
err = trx->error_state;
+ /* Note that the cascade node is a subnode of another InnoDB
+ query graph node. We do a normal lock wait in this node, but
+ all errors are handled by the parent node. */
+
if (err == DB_LOCK_WAIT) {
- que_thr_stop_for_mysql(thr);
+ /* Handle lock wait here */
- row_mysql_handle_errors(&err, trx, thr, NULL);
+ que_thr_stop_for_mysql(thr);
+ srv_suspend_mysql_thread(thr);
+
+ /* Note that a lock wait may also end in a lock wait timeout */
+
+ if (trx->error_state != DB_SUCCESS) {
+
+ return(trx->error_state);
+ }
+
+ /* Retry operation after a normal lock wait */
+
goto run_again;
}
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 0c3c19c6e69..3596fdc0c05 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -4970,6 +4970,8 @@ end_write_group(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
}
else
{
+ if (end_of_records)
+ DBUG_RETURN(0);
join->first_record=1;
VOID(test_if_group_changed(join->group_fields));
}