#At file:///opt/local/work/mysql-6.1-fk-stage/
2701 Konstantin Osipov 2008-12-11
WL#148, Milestone 8, Part 1. Add misc comments.
modified:
sql/fk.cc
=== modified file 'sql/fk.cc'
--- a/sql/fk.cc 2008-12-11 00:50:28 +0000
+++ b/sql/fk.cc 2008-12-11 10:41:25 +0000
@@ -179,7 +179,7 @@ private:
An array of auxiliary objects which are used for constructing new values
for child columns of foreign key in ON UPDATE CASCADE operation.
*/
- Copy_field **cascade_copy;
+ Copy_field **m_cascade_copy;
/** Type of referential action to be invoked on the child table. */
enum_fk_option m_ref_action;
@@ -890,6 +890,11 @@ bool Foreign_key_parent_rcontext::prepar
}
m_key_idx= m_key - m_child_table->key_info;
+ /*
+ Create Field objects to operate with old record (record[1]
+ during update. We need to work with the old parent
+ value to be able to find its old children.
+ */
List_iterator<Field> parent_col_it(m_fk_share->column_list);
Field *parent_col;
while ((parent_col= parent_col_it++))
@@ -915,6 +920,12 @@ bool Foreign_key_parent_rcontext::prepar
return TRUE;
}
+ /*
+ Allocate a buffer to store child key. Allocate objects to perform store
+ in the key. Allocate objects to store parent value in the child record
+ buffer, they are used if we do cascade.
+ */
+
if (!(m_key_buff= (uchar*)m_thd->calloc(m_key->key_length)) ||
!(m_key_copy= (store_key_field**)m_thd->calloc(sizeof(store_key_field *) *
(m_key->key_parts + 1))))
@@ -922,8 +933,8 @@ bool Foreign_key_parent_rcontext::prepar
if (m_fk_list->action_type() == TRG_EVENT_UPDATE &&
m_ref_action == FK_OPTION_CASCADE &&
- !(cascade_copy= (Copy_field **)m_thd->calloc(sizeof(Copy_field *) *
- (m_key->key_parts + 1))))
+ !(m_cascade_copy= (Copy_field **)m_thd->calloc(sizeof(Copy_field *) *
+ (m_key->key_parts + 1))))
return TRUE;
/*
@@ -965,9 +976,9 @@ bool Foreign_key_parent_rcontext::prepar
if (m_fk_list->action_type() == TRG_EVENT_UPDATE &&
m_ref_action == FK_OPTION_CASCADE)
{
- if (!(cascade_copy[i]= new (m_thd->mem_root) Copy_field()))
+ if (!(m_cascade_copy[i]= new (m_thd->mem_root) Copy_field()))
return TRUE;
- cascade_copy[i]->set(m_key->key_part[i].field,
+ m_cascade_copy[i]->set(m_key->key_part[i].field,
m_parent_table->field[old_parent_col->field_index],
FALSE);
}
@@ -1168,7 +1179,7 @@ bool Foreign_key_parent_rcontext::do_cas
break;
case FK_OPTION_CASCADE:
for (i= 0 ; i < m_key->key_parts; i++)
- cascade_copy[i]->do_copy(cascade_copy[i]);
+ m_cascade_copy[i]->do_copy(m_cascade_copy[i]);
break;
default:
DBUG_ASSERT(0);
| Thread |
|---|
| • bzr commit into mysql-6.1-fk branch (kostja:2701) WL#148 | Konstantin Osipov | 11 Dec |