#At file:///opt/local/work/mysql-6.1-fk-stage/
2708 Konstantin Osipov 2008-12-12
WL#148, Milestone 8, Part 1.
Review comments.
Split preparation of the runtime context for cascading actions
into a separate function.
Preparing for some code reuse.
modified:
sql/fk.cc
=== modified file 'sql/fk.cc'
--- a/sql/fk.cc 2008-12-11 23:46:13 +0000
+++ b/sql/fk.cc 2008-12-12 00:09:36 +0000
@@ -142,6 +142,7 @@ public:
}
bool prepare(bool old_row_is_record1);
+ bool prepare_cascade();
bool check_children_exist();
bool has_changed_columns();
bool do_cascading_actions();
@@ -303,8 +304,11 @@ Fk_constraint_list::prepare_for_update(T
return TRUE;
if (rctx->is_cascading() &&
- m_fkeys_parent_cascade.push_back(rctx, thd->mem_root))
+ (rctx->prepare_cascade() ||
+ m_fkeys_parent_cascade.push_back(rctx, thd->mem_root)))
+ {
return TRUE;
+ }
}
}
return FALSE;
@@ -944,12 +948,6 @@ bool Foreign_key_parent_rcontext::prepar
(m_key->key_parts + 1))))
return TRUE;
- if (m_fk_list->action_type() == TRG_EVENT_UPDATE &&
- m_ref_action == FK_OPTION_CASCADE &&
- !(m_cascade_copy= (Copy_field **)m_thd->calloc(sizeof(Copy_field *) *
- (m_key->key_parts + 1))))
- return TRUE;
-
/*
We can rely on key having proper number of key parts and containing
all columns, thanks to the way in which we search for it.
@@ -1002,9 +1000,33 @@ bool Foreign_key_parent_rcontext::prepar
key_col_pos+= m_key->key_part[i].store_length;
}
+ return FALSE;
+}
+
+
+/**
+ Prepare structures to perform cascading actions on the child table.
+
+ This method can only be called after a normal prepare().
+
+ @retval FALSE Success
+ @retval TRUE Error, out of resources.
+*/
+
+bool Foreign_key_parent_rcontext::prepare_cascade()
+{
+ uint i;
+
+ DBUG_ASSERT(is_cascading());
+
if (m_fk_list->action_type() == TRG_EVENT_UPDATE &&
m_ref_action == FK_OPTION_CASCADE)
{
+ if (!(m_cascade_copy= (Copy_field **)
+ m_thd->calloc(sizeof(Copy_field *) *
+ (m_key->key_parts + 1))))
+ return TRUE;
+
for (i= 0; i < m_key->key_parts; i++)
{
uint src_field_index= m_key_copy[i]->from_field_index();
@@ -1055,7 +1077,6 @@ bool Foreign_key_parent_rcontext::prepar
m_child_table->write_set))
return TRUE;
}
-
return FALSE;
}
| Thread |
|---|
| • bzr commit into mysql-6.1-fk branch (kostja:2708) WL#148 | Konstantin Osipov | 12 Dec |