Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
d5646eb6
Commit
d5646eb6
authored
Apr 12, 2005
by
marko@hundin.mysql.fi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
InnoDB: Ignore character set mismatch in ALTER TABLE and RENAME TABLE
if foreign_key_checks=0. (Bug #9802)
parent
b38a5171
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
34 additions
and
18 deletions
+34
-18
innobase/dict/dict0dict.c
innobase/dict/dict0dict.c
+16
-3
innobase/dict/dict0load.c
innobase/dict/dict0load.c
+7
-8
innobase/include/dict0dict.h
innobase/include/dict0dict.h
+2
-1
innobase/include/dict0load.h
innobase/include/dict0load.h
+2
-1
innobase/row/row0mysql.c
innobase/row/row0mysql.c
+3
-5
sql/ha_innodb.cc
sql/ha_innodb.cc
+4
-0
No files found.
innobase/dict/dict0dict.c
View file @
d5646eb6
...
...
@@ -2167,7 +2167,8 @@ ulint
dict_foreign_add_to_cache
(
/*======================*/
/* out: DB_SUCCESS or error code */
dict_foreign_t
*
foreign
)
/* in, own: foreign key constraint */
dict_foreign_t
*
foreign
,
/* in, own: foreign key constraint */
ibool
check_types
)
/* in: TRUE=check type compatibility */
{
dict_table_t
*
for_table
;
dict_table_t
*
ref_table
;
...
...
@@ -2203,10 +2204,16 @@ dict_foreign_add_to_cache(
}
if
(
for_in_cache
->
referenced_table
==
NULL
&&
ref_table
)
{
dict_index_t
*
types_idx
;
if
(
check_types
)
{
types_idx
=
for_in_cache
->
foreign_index
;
}
else
{
types_idx
=
NULL
;
}
index
=
dict_foreign_find_index
(
ref_table
,
(
const
char
**
)
for_in_cache
->
referenced_col_names
,
for_in_cache
->
n_fields
,
for_in_cache
->
foreign_inde
x
);
types_id
x
);
if
(
index
==
NULL
)
{
dict_foreign_error_report
(
ef
,
for_in_cache
,
...
...
@@ -2230,10 +2237,16 @@ dict_foreign_add_to_cache(
}
if
(
for_in_cache
->
foreign_table
==
NULL
&&
for_table
)
{
dict_index_t
*
types_idx
;
if
(
check_types
)
{
types_idx
=
for_in_cache
->
referenced_index
;
}
else
{
types_idx
=
NULL
;
}
index
=
dict_foreign_find_index
(
for_table
,
(
const
char
**
)
for_in_cache
->
foreign_col_names
,
for_in_cache
->
n_fields
,
for_in_cache
->
referenced_inde
x
);
types_id
x
);
if
(
index
==
NULL
)
{
dict_foreign_error_report
(
ef
,
for_in_cache
,
...
...
innobase/dict/dict0load.c
View file @
d5646eb6
...
...
@@ -873,7 +873,7 @@ dict_load_table(
dict_load_indexes
(
table
,
heap
);
err
=
dict_load_foreigns
(
table
->
name
);
err
=
dict_load_foreigns
(
table
->
name
,
TRUE
);
/*
if (err != DB_SUCCESS) {
...
...
@@ -1092,8 +1092,9 @@ ulint
dict_load_foreign
(
/*==============*/
/* out: DB_SUCCESS or error code */
const
char
*
id
)
/* in: foreign constraint id as a
const
char
*
id
,
/* in: foreign constraint id as a
null-terminated string */
ibool
check_types
)
/* in: TRUE=check type compatibility */
{
dict_foreign_t
*
foreign
;
dict_table_t
*
sys_foreign
;
...
...
@@ -1105,7 +1106,6 @@ dict_load_foreign(
rec_t
*
rec
;
byte
*
field
;
ulint
len
;
ulint
err
;
mtr_t
mtr
;
#ifdef UNIV_SYNC_DEBUG
...
...
@@ -1205,9 +1205,7 @@ dict_load_foreign(
a new foreign key constraint but loading one from the data
dictionary. */
err
=
dict_foreign_add_to_cache
(
foreign
);
return
(
err
);
return
(
dict_foreign_add_to_cache
(
foreign
,
check_types
));
}
/***************************************************************************
...
...
@@ -1221,7 +1219,8 @@ ulint
dict_load_foreigns
(
/*===============*/
/* out: DB_SUCCESS or error code */
const
char
*
table_name
)
/* in: table name */
const
char
*
table_name
,
/* in: table name */
ibool
check_types
)
/* in: TRUE=check type compatibility */
{
btr_pcur_t
pcur
;
mem_heap_t
*
heap
;
...
...
@@ -1320,7 +1319,7 @@ dict_load_foreigns(
/* Load the foreign constraint definition to the dictionary cache */
err
=
dict_load_foreign
(
id
);
err
=
dict_load_foreign
(
id
,
check_types
);
if
(
err
!=
DB_SUCCESS
)
{
btr_pcur_close
(
&
pcur
);
...
...
innobase/include/dict0dict.h
View file @
d5646eb6
...
...
@@ -189,7 +189,8 @@ ulint
dict_foreign_add_to_cache
(
/*======================*/
/* out: DB_SUCCESS or error code */
dict_foreign_t
*
foreign
);
/* in, own: foreign key constraint */
dict_foreign_t
*
foreign
,
/* in, own: foreign key constraint */
ibool
check_types
);
/* in: TRUE=check type compatibility */
/*************************************************************************
Checks if a table is referenced by foreign keys. */
...
...
innobase/include/dict0load.h
View file @
d5646eb6
...
...
@@ -81,7 +81,8 @@ ulint
dict_load_foreigns
(
/*===============*/
/* out: DB_SUCCESS or error code */
const
char
*
table_name
);
/* in: table name */
const
char
*
table_name
,
/* in: table name */
ibool
check_types
);
/* in: TRUE=check type compatibility */
/************************************************************************
Prints to the standard output information on all tables found in the data
dictionary system table. */
...
...
innobase/row/row0mysql.c
View file @
d5646eb6
...
...
@@ -1796,7 +1796,7 @@ row_table_add_foreign_constraints(
if
(
err
==
DB_SUCCESS
)
{
/* Check that also referencing constraints are ok */
err
=
dict_load_foreigns
(
name
);
err
=
dict_load_foreigns
(
name
,
trx
->
check_foreigns
);
}
if
(
err
!=
DB_SUCCESS
)
{
...
...
@@ -3204,6 +3204,8 @@ row_rename_table_for_mysql(
goto
funct_exit
;
}
err
=
dict_load_foreigns
(
new_name
,
trx
->
check_foreigns
);
if
(
row_is_mysql_tmp_table_name
(
old_name
))
{
/* MySQL is doing an ALTER TABLE command and it
...
...
@@ -3213,8 +3215,6 @@ row_rename_table_for_mysql(
table. But we want to load also the foreign key
constraint definitions for the original table name. */
err
=
dict_load_foreigns
(
new_name
);
if
(
err
!=
DB_SUCCESS
)
{
ut_print_timestamp
(
stderr
);
fputs
(
" InnoDB: Error: in ALTER TABLE "
,
...
...
@@ -3233,8 +3233,6 @@ row_rename_table_for_mysql(
trx
->
error_state
=
DB_SUCCESS
;
}
}
else
{
err
=
dict_load_foreigns
(
new_name
);
if
(
err
!=
DB_SUCCESS
)
{
ut_print_timestamp
(
stderr
);
...
...
sql/ha_innodb.cc
View file @
d5646eb6
...
...
@@ -4183,6 +4183,10 @@ ha_innobase::rename_table(
trx
->
mysql_thd
=
current_thd
;
trx
->
mysql_query_str
=
&
((
*
current_thd
).
query
);
if
(
current_thd
->
options
&
OPTION_NO_FOREIGN_KEY_CHECKS
)
{
trx
->
check_foreigns
=
FALSE
;
}
name_len1
=
strlen
(
from
);
name_len2
=
strlen
(
to
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment