cleanup: FOREIGN_KEY_INFO
instead of returning strings for CASCADE/RESTRICT from every storage engine, use enum values Backport of a3614d33e8a
This commit is contained in:
parent
b9bc3c2463
commit
22bcfa011a
@ -324,8 +324,6 @@ class Foreign_key: public Key {
|
|||||||
public:
|
public:
|
||||||
enum fk_match_opt { FK_MATCH_UNDEF, FK_MATCH_FULL,
|
enum fk_match_opt { FK_MATCH_UNDEF, FK_MATCH_FULL,
|
||||||
FK_MATCH_PARTIAL, FK_MATCH_SIMPLE};
|
FK_MATCH_PARTIAL, FK_MATCH_SIMPLE};
|
||||||
enum fk_option { FK_OPTION_UNDEF, FK_OPTION_RESTRICT, FK_OPTION_CASCADE,
|
|
||||||
FK_OPTION_SET_NULL, FK_OPTION_NO_ACTION, FK_OPTION_DEFAULT};
|
|
||||||
|
|
||||||
LEX_STRING ref_db;
|
LEX_STRING ref_db;
|
||||||
LEX_STRING ref_table;
|
LEX_STRING ref_table;
|
||||||
|
@ -2482,8 +2482,8 @@ struct LEX: public Query_tables_list
|
|||||||
uint uint_geom_type;
|
uint uint_geom_type;
|
||||||
uint grant, grant_tot_col, which_columns;
|
uint grant, grant_tot_col, which_columns;
|
||||||
enum Foreign_key::fk_match_opt fk_match_option;
|
enum Foreign_key::fk_match_opt fk_match_option;
|
||||||
enum Foreign_key::fk_option fk_update_opt;
|
enum_fk_option fk_update_opt;
|
||||||
enum Foreign_key::fk_option fk_delete_opt;
|
enum_fk_option fk_delete_opt;
|
||||||
uint slave_thd_opt, start_transaction_opt;
|
uint slave_thd_opt, start_transaction_opt;
|
||||||
int nest_level;
|
int nest_level;
|
||||||
/*
|
/*
|
||||||
|
@ -7534,6 +7534,7 @@ get_referential_constraints_record(THD *thd, TABLE_LIST *tables,
|
|||||||
LEX_STRING *db_name, LEX_STRING *table_name)
|
LEX_STRING *db_name, LEX_STRING *table_name)
|
||||||
{
|
{
|
||||||
CHARSET_INFO *cs= system_charset_info;
|
CHARSET_INFO *cs= system_charset_info;
|
||||||
|
LEX_CSTRING *s;
|
||||||
DBUG_ENTER("get_referential_constraints_record");
|
DBUG_ENTER("get_referential_constraints_record");
|
||||||
|
|
||||||
if (res)
|
if (res)
|
||||||
@ -7578,10 +7579,10 @@ get_referential_constraints_record(THD *thd, TABLE_LIST *tables,
|
|||||||
else
|
else
|
||||||
table->field[5]->set_null();
|
table->field[5]->set_null();
|
||||||
table->field[6]->store(STRING_WITH_LEN("NONE"), cs);
|
table->field[6]->store(STRING_WITH_LEN("NONE"), cs);
|
||||||
table->field[7]->store(f_key_info->update_method->str,
|
s= fk_option_name(f_key_info->update_method);
|
||||||
f_key_info->update_method->length, cs);
|
table->field[7]->store(s->str, s->length, cs);
|
||||||
table->field[8]->store(f_key_info->delete_method->str,
|
s= fk_option_name(f_key_info->delete_method);
|
||||||
f_key_info->delete_method->length, cs);
|
table->field[8]->store(s->str, s->length, cs);
|
||||||
if (schema_table_store_record(thd, table))
|
if (schema_table_store_record(thd, table))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
|
@ -939,7 +939,7 @@ static bool sp_create_assignment_instr(THD *thd, bool no_lookahead)
|
|||||||
struct p_elem_val *p_elem_value;
|
struct p_elem_val *p_elem_value;
|
||||||
enum index_hint_type index_hint;
|
enum index_hint_type index_hint;
|
||||||
enum enum_filetype filetype;
|
enum enum_filetype filetype;
|
||||||
enum Foreign_key::fk_option m_fk_option;
|
enum enum_fk_option m_fk_option;
|
||||||
enum enum_yes_no_unknown m_yes_no_unk;
|
enum enum_yes_no_unknown m_yes_no_unk;
|
||||||
Diag_condition_item_name diag_condition_item_name;
|
Diag_condition_item_name diag_condition_item_name;
|
||||||
Diagnostics_information::Which_area diag_area;
|
Diagnostics_information::Which_area diag_area;
|
||||||
@ -6752,19 +6752,19 @@ opt_on_update_delete:
|
|||||||
/* empty */
|
/* empty */
|
||||||
{
|
{
|
||||||
LEX *lex= Lex;
|
LEX *lex= Lex;
|
||||||
lex->fk_update_opt= Foreign_key::FK_OPTION_UNDEF;
|
lex->fk_update_opt= FK_OPTION_UNDEF;
|
||||||
lex->fk_delete_opt= Foreign_key::FK_OPTION_UNDEF;
|
lex->fk_delete_opt= FK_OPTION_UNDEF;
|
||||||
}
|
}
|
||||||
| ON UPDATE_SYM delete_option
|
| ON UPDATE_SYM delete_option
|
||||||
{
|
{
|
||||||
LEX *lex= Lex;
|
LEX *lex= Lex;
|
||||||
lex->fk_update_opt= $3;
|
lex->fk_update_opt= $3;
|
||||||
lex->fk_delete_opt= Foreign_key::FK_OPTION_UNDEF;
|
lex->fk_delete_opt= FK_OPTION_UNDEF;
|
||||||
}
|
}
|
||||||
| ON DELETE_SYM delete_option
|
| ON DELETE_SYM delete_option
|
||||||
{
|
{
|
||||||
LEX *lex= Lex;
|
LEX *lex= Lex;
|
||||||
lex->fk_update_opt= Foreign_key::FK_OPTION_UNDEF;
|
lex->fk_update_opt= FK_OPTION_UNDEF;
|
||||||
lex->fk_delete_opt= $3;
|
lex->fk_delete_opt= $3;
|
||||||
}
|
}
|
||||||
| ON UPDATE_SYM delete_option
|
| ON UPDATE_SYM delete_option
|
||||||
@ -6784,11 +6784,11 @@ opt_on_update_delete:
|
|||||||
;
|
;
|
||||||
|
|
||||||
delete_option:
|
delete_option:
|
||||||
RESTRICT { $$= Foreign_key::FK_OPTION_RESTRICT; }
|
RESTRICT { $$= FK_OPTION_RESTRICT; }
|
||||||
| CASCADE { $$= Foreign_key::FK_OPTION_CASCADE; }
|
| CASCADE { $$= FK_OPTION_CASCADE; }
|
||||||
| SET NULL_SYM { $$= Foreign_key::FK_OPTION_SET_NULL; }
|
| SET NULL_SYM { $$= FK_OPTION_SET_NULL; }
|
||||||
| NO_SYM ACTION { $$= Foreign_key::FK_OPTION_NO_ACTION; }
|
| NO_SYM ACTION { $$= FK_OPTION_NO_ACTION; }
|
||||||
| SET DEFAULT { $$= Foreign_key::FK_OPTION_DEFAULT; }
|
| SET DEFAULT { $$= FK_OPTION_SET_DEFAULT; }
|
||||||
;
|
;
|
||||||
|
|
||||||
normal_key_type:
|
normal_key_type:
|
||||||
|
13
sql/table.cc
13
sql/table.cc
@ -7251,3 +7251,16 @@ double KEY::actual_rec_per_key(uint i)
|
|||||||
read_stats->get_avg_frequency(i) : (double) rec_per_key[i]);
|
read_stats->get_avg_frequency(i) : (double) rec_per_key[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LEX_CSTRING *fk_option_name(enum_fk_option opt)
|
||||||
|
{
|
||||||
|
static LEX_CSTRING names[]=
|
||||||
|
{
|
||||||
|
{ STRING_WITH_LEN("???") },
|
||||||
|
{ STRING_WITH_LEN("RESTRICT") },
|
||||||
|
{ STRING_WITH_LEN("CASCADE") },
|
||||||
|
{ STRING_WITH_LEN("SET NULL") },
|
||||||
|
{ STRING_WITH_LEN("NO ACTION") },
|
||||||
|
{ STRING_WITH_LEN("SET DEFAULT") }
|
||||||
|
};
|
||||||
|
return names + opt;
|
||||||
|
}
|
||||||
|
@ -1429,6 +1429,9 @@ enum enum_schema_table_state
|
|||||||
PROCESSED_BY_JOIN_EXEC
|
PROCESSED_BY_JOIN_EXEC
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum enum_fk_option { FK_OPTION_UNDEF, FK_OPTION_RESTRICT, FK_OPTION_CASCADE,
|
||||||
|
FK_OPTION_SET_NULL, FK_OPTION_NO_ACTION, FK_OPTION_SET_DEFAULT};
|
||||||
|
|
||||||
typedef struct st_foreign_key_info
|
typedef struct st_foreign_key_info
|
||||||
{
|
{
|
||||||
LEX_STRING *foreign_id;
|
LEX_STRING *foreign_id;
|
||||||
@ -1436,13 +1439,15 @@ typedef struct st_foreign_key_info
|
|||||||
LEX_STRING *foreign_table;
|
LEX_STRING *foreign_table;
|
||||||
LEX_STRING *referenced_db;
|
LEX_STRING *referenced_db;
|
||||||
LEX_STRING *referenced_table;
|
LEX_STRING *referenced_table;
|
||||||
LEX_STRING *update_method;
|
enum_fk_option update_method;
|
||||||
LEX_STRING *delete_method;
|
enum_fk_option delete_method;
|
||||||
LEX_STRING *referenced_key_name;
|
LEX_STRING *referenced_key_name;
|
||||||
List<LEX_STRING> foreign_fields;
|
List<LEX_STRING> foreign_fields;
|
||||||
List<LEX_STRING> referenced_fields;
|
List<LEX_STRING> referenced_fields;
|
||||||
} FOREIGN_KEY_INFO;
|
} FOREIGN_KEY_INFO;
|
||||||
|
|
||||||
|
LEX_CSTRING *fk_option_name(enum_fk_option opt);
|
||||||
|
|
||||||
#define MY_I_S_MAYBE_NULL 1
|
#define MY_I_S_MAYBE_NULL 1
|
||||||
#define MY_I_S_UNSIGNED 2
|
#define MY_I_S_UNSIGNED 2
|
||||||
|
|
||||||
|
@ -12461,41 +12461,25 @@ get_foreign_key_info(
|
|||||||
} while (++i < foreign->n_fields);
|
} while (++i < foreign->n_fields);
|
||||||
|
|
||||||
if (foreign->type & DICT_FOREIGN_ON_DELETE_CASCADE) {
|
if (foreign->type & DICT_FOREIGN_ON_DELETE_CASCADE) {
|
||||||
len = 7;
|
f_key_info.delete_method = FK_OPTION_CASCADE;
|
||||||
ptr = "CASCADE";
|
|
||||||
} else if (foreign->type & DICT_FOREIGN_ON_DELETE_SET_NULL) {
|
} else if (foreign->type & DICT_FOREIGN_ON_DELETE_SET_NULL) {
|
||||||
len = 8;
|
f_key_info.delete_method = FK_OPTION_SET_NULL;
|
||||||
ptr = "SET NULL";
|
|
||||||
} else if (foreign->type & DICT_FOREIGN_ON_DELETE_NO_ACTION) {
|
} else if (foreign->type & DICT_FOREIGN_ON_DELETE_NO_ACTION) {
|
||||||
len = 9;
|
f_key_info.delete_method = FK_OPTION_NO_ACTION;
|
||||||
ptr = "NO ACTION";
|
|
||||||
} else {
|
} else {
|
||||||
len = 8;
|
f_key_info.delete_method = FK_OPTION_RESTRICT;
|
||||||
ptr = "RESTRICT";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
f_key_info.delete_method = thd_make_lex_string(
|
|
||||||
thd, f_key_info.delete_method, ptr,
|
|
||||||
static_cast<unsigned int>(len), 1);
|
|
||||||
|
|
||||||
if (foreign->type & DICT_FOREIGN_ON_UPDATE_CASCADE) {
|
if (foreign->type & DICT_FOREIGN_ON_UPDATE_CASCADE) {
|
||||||
len = 7;
|
f_key_info.update_method = FK_OPTION_CASCADE;
|
||||||
ptr = "CASCADE";
|
|
||||||
} else if (foreign->type & DICT_FOREIGN_ON_UPDATE_SET_NULL) {
|
} else if (foreign->type & DICT_FOREIGN_ON_UPDATE_SET_NULL) {
|
||||||
len = 8;
|
f_key_info.update_method = FK_OPTION_SET_NULL;
|
||||||
ptr = "SET NULL";
|
|
||||||
} else if (foreign->type & DICT_FOREIGN_ON_UPDATE_NO_ACTION) {
|
} else if (foreign->type & DICT_FOREIGN_ON_UPDATE_NO_ACTION) {
|
||||||
len = 9;
|
f_key_info.update_method = FK_OPTION_NO_ACTION;
|
||||||
ptr = "NO ACTION";
|
|
||||||
} else {
|
} else {
|
||||||
len = 8;
|
f_key_info.update_method = FK_OPTION_RESTRICT;
|
||||||
ptr = "RESTRICT";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
f_key_info.update_method = thd_make_lex_string(
|
|
||||||
thd, f_key_info.update_method, ptr,
|
|
||||||
static_cast<unsigned int>(len), 1);
|
|
||||||
|
|
||||||
if (foreign->referenced_index && foreign->referenced_index->name) {
|
if (foreign->referenced_index && foreign->referenced_index->name) {
|
||||||
referenced_key_name = thd_make_lex_string(thd,
|
referenced_key_name = thd_make_lex_string(thd,
|
||||||
f_key_info.referenced_key_name,
|
f_key_info.referenced_key_name,
|
||||||
|
@ -729,29 +729,29 @@ innobase_set_foreign_key_option(
|
|||||||
ut_ad(!foreign->type);
|
ut_ad(!foreign->type);
|
||||||
|
|
||||||
switch (fk_key->delete_opt) {
|
switch (fk_key->delete_opt) {
|
||||||
case Foreign_key::FK_OPTION_NO_ACTION:
|
case FK_OPTION_NO_ACTION:
|
||||||
case Foreign_key::FK_OPTION_RESTRICT:
|
case FK_OPTION_RESTRICT:
|
||||||
case Foreign_key::FK_OPTION_DEFAULT:
|
case FK_OPTION_SET_DEFAULT:
|
||||||
foreign->type = DICT_FOREIGN_ON_DELETE_NO_ACTION;
|
foreign->type = DICT_FOREIGN_ON_DELETE_NO_ACTION;
|
||||||
break;
|
break;
|
||||||
case Foreign_key::FK_OPTION_CASCADE:
|
case FK_OPTION_CASCADE:
|
||||||
foreign->type = DICT_FOREIGN_ON_DELETE_CASCADE;
|
foreign->type = DICT_FOREIGN_ON_DELETE_CASCADE;
|
||||||
break;
|
break;
|
||||||
case Foreign_key::FK_OPTION_SET_NULL:
|
case FK_OPTION_SET_NULL:
|
||||||
foreign->type = DICT_FOREIGN_ON_DELETE_SET_NULL;
|
foreign->type = DICT_FOREIGN_ON_DELETE_SET_NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (fk_key->update_opt) {
|
switch (fk_key->update_opt) {
|
||||||
case Foreign_key::FK_OPTION_NO_ACTION:
|
case FK_OPTION_NO_ACTION:
|
||||||
case Foreign_key::FK_OPTION_RESTRICT:
|
case FK_OPTION_RESTRICT:
|
||||||
case Foreign_key::FK_OPTION_DEFAULT:
|
case FK_OPTION_SET_DEFAULT:
|
||||||
foreign->type |= DICT_FOREIGN_ON_UPDATE_NO_ACTION;
|
foreign->type |= DICT_FOREIGN_ON_UPDATE_NO_ACTION;
|
||||||
break;
|
break;
|
||||||
case Foreign_key::FK_OPTION_CASCADE:
|
case FK_OPTION_CASCADE:
|
||||||
foreign->type |= DICT_FOREIGN_ON_UPDATE_CASCADE;
|
foreign->type |= DICT_FOREIGN_ON_UPDATE_CASCADE;
|
||||||
break;
|
break;
|
||||||
case Foreign_key::FK_OPTION_SET_NULL:
|
case FK_OPTION_SET_NULL:
|
||||||
foreign->type |= DICT_FOREIGN_ON_UPDATE_SET_NULL;
|
foreign->type |= DICT_FOREIGN_ON_UPDATE_SET_NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -15755,10 +15755,8 @@ int ha_mroonga::storage_get_foreign_key_list(THD *thd,
|
|||||||
ref_table_buff,
|
ref_table_buff,
|
||||||
ref_table_name_length,
|
ref_table_name_length,
|
||||||
TRUE);
|
TRUE);
|
||||||
f_key_info.update_method = thd_make_lex_string(thd, NULL, "RESTRICT",
|
f_key_info.update_method = FK_OPTION_RESTRICT;
|
||||||
8, TRUE);
|
f_key_info.delete_method = FK_OPTION_RESTRICT;
|
||||||
f_key_info.delete_method = thd_make_lex_string(thd, NULL, "RESTRICT",
|
|
||||||
8, TRUE);
|
|
||||||
f_key_info.referenced_key_name = thd_make_lex_string(thd, NULL, "PRIMARY",
|
f_key_info.referenced_key_name = thd_make_lex_string(thd, NULL, "PRIMARY",
|
||||||
7, TRUE);
|
7, TRUE);
|
||||||
LEX_STRING *field_name = thd_make_lex_string(thd, NULL, column_name,
|
LEX_STRING *field_name = thd_make_lex_string(thd, NULL, column_name,
|
||||||
|
@ -13327,41 +13327,25 @@ get_foreign_key_info(
|
|||||||
} while (++i < foreign->n_fields);
|
} while (++i < foreign->n_fields);
|
||||||
|
|
||||||
if (foreign->type & DICT_FOREIGN_ON_DELETE_CASCADE) {
|
if (foreign->type & DICT_FOREIGN_ON_DELETE_CASCADE) {
|
||||||
len = 7;
|
f_key_info.delete_method = FK_OPTION_CASCADE;
|
||||||
ptr = "CASCADE";
|
|
||||||
} else if (foreign->type & DICT_FOREIGN_ON_DELETE_SET_NULL) {
|
} else if (foreign->type & DICT_FOREIGN_ON_DELETE_SET_NULL) {
|
||||||
len = 8;
|
f_key_info.delete_method = FK_OPTION_SET_NULL;
|
||||||
ptr = "SET NULL";
|
|
||||||
} else if (foreign->type & DICT_FOREIGN_ON_DELETE_NO_ACTION) {
|
} else if (foreign->type & DICT_FOREIGN_ON_DELETE_NO_ACTION) {
|
||||||
len = 9;
|
f_key_info.delete_method = FK_OPTION_NO_ACTION;
|
||||||
ptr = "NO ACTION";
|
|
||||||
} else {
|
} else {
|
||||||
len = 8;
|
f_key_info.delete_method = FK_OPTION_RESTRICT;
|
||||||
ptr = "RESTRICT";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
f_key_info.delete_method = thd_make_lex_string(
|
|
||||||
thd, f_key_info.delete_method, ptr,
|
|
||||||
static_cast<unsigned int>(len), 1);
|
|
||||||
|
|
||||||
if (foreign->type & DICT_FOREIGN_ON_UPDATE_CASCADE) {
|
if (foreign->type & DICT_FOREIGN_ON_UPDATE_CASCADE) {
|
||||||
len = 7;
|
f_key_info.update_method = FK_OPTION_CASCADE;
|
||||||
ptr = "CASCADE";
|
|
||||||
} else if (foreign->type & DICT_FOREIGN_ON_UPDATE_SET_NULL) {
|
} else if (foreign->type & DICT_FOREIGN_ON_UPDATE_SET_NULL) {
|
||||||
len = 8;
|
f_key_info.update_method = FK_OPTION_SET_NULL;
|
||||||
ptr = "SET NULL";
|
|
||||||
} else if (foreign->type & DICT_FOREIGN_ON_UPDATE_NO_ACTION) {
|
} else if (foreign->type & DICT_FOREIGN_ON_UPDATE_NO_ACTION) {
|
||||||
len = 9;
|
f_key_info.update_method = FK_OPTION_NO_ACTION;
|
||||||
ptr = "NO ACTION";
|
|
||||||
} else {
|
} else {
|
||||||
len = 8;
|
f_key_info.update_method = FK_OPTION_RESTRICT;
|
||||||
ptr = "RESTRICT";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
f_key_info.update_method = thd_make_lex_string(
|
|
||||||
thd, f_key_info.update_method, ptr,
|
|
||||||
static_cast<unsigned int>(len), 1);
|
|
||||||
|
|
||||||
if (foreign->referenced_index && foreign->referenced_index->name) {
|
if (foreign->referenced_index && foreign->referenced_index->name) {
|
||||||
referenced_key_name = thd_make_lex_string(thd,
|
referenced_key_name = thd_make_lex_string(thd,
|
||||||
f_key_info.referenced_key_name,
|
f_key_info.referenced_key_name,
|
||||||
|
@ -730,29 +730,29 @@ innobase_set_foreign_key_option(
|
|||||||
ut_ad(!foreign->type);
|
ut_ad(!foreign->type);
|
||||||
|
|
||||||
switch (fk_key->delete_opt) {
|
switch (fk_key->delete_opt) {
|
||||||
case Foreign_key::FK_OPTION_NO_ACTION:
|
case FK_OPTION_NO_ACTION:
|
||||||
case Foreign_key::FK_OPTION_RESTRICT:
|
case FK_OPTION_RESTRICT:
|
||||||
case Foreign_key::FK_OPTION_DEFAULT:
|
case FK_OPTION_SET_DEFAULT:
|
||||||
foreign->type = DICT_FOREIGN_ON_DELETE_NO_ACTION;
|
foreign->type = DICT_FOREIGN_ON_DELETE_NO_ACTION;
|
||||||
break;
|
break;
|
||||||
case Foreign_key::FK_OPTION_CASCADE:
|
case FK_OPTION_CASCADE:
|
||||||
foreign->type = DICT_FOREIGN_ON_DELETE_CASCADE;
|
foreign->type = DICT_FOREIGN_ON_DELETE_CASCADE;
|
||||||
break;
|
break;
|
||||||
case Foreign_key::FK_OPTION_SET_NULL:
|
case FK_OPTION_SET_NULL:
|
||||||
foreign->type = DICT_FOREIGN_ON_DELETE_SET_NULL;
|
foreign->type = DICT_FOREIGN_ON_DELETE_SET_NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (fk_key->update_opt) {
|
switch (fk_key->update_opt) {
|
||||||
case Foreign_key::FK_OPTION_NO_ACTION:
|
case FK_OPTION_NO_ACTION:
|
||||||
case Foreign_key::FK_OPTION_RESTRICT:
|
case FK_OPTION_RESTRICT:
|
||||||
case Foreign_key::FK_OPTION_DEFAULT:
|
case FK_OPTION_SET_DEFAULT:
|
||||||
foreign->type |= DICT_FOREIGN_ON_UPDATE_NO_ACTION;
|
foreign->type |= DICT_FOREIGN_ON_UPDATE_NO_ACTION;
|
||||||
break;
|
break;
|
||||||
case Foreign_key::FK_OPTION_CASCADE:
|
case FK_OPTION_CASCADE:
|
||||||
foreign->type |= DICT_FOREIGN_ON_UPDATE_CASCADE;
|
foreign->type |= DICT_FOREIGN_ON_UPDATE_CASCADE;
|
||||||
break;
|
break;
|
||||||
case Foreign_key::FK_OPTION_SET_NULL:
|
case FK_OPTION_SET_NULL:
|
||||||
foreign->type |= DICT_FOREIGN_ON_UPDATE_SET_NULL;
|
foreign->type |= DICT_FOREIGN_ON_UPDATE_SET_NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user