|
|
|
@ -2782,15 +2782,6 @@ row_truncate_table_for_mysql( |
|
|
|
|
|
|
|
trx->table_id = table->id; |
|
|
|
|
|
|
|
/* Lock all index trees for this table, as we will |
|
|
|
truncate the table/index and possibly change their metadata. |
|
|
|
All DML/DDL are blocked by table level lock, with |
|
|
|
a few exceptions such as queries into information schema |
|
|
|
about the table, MySQL could try to access index stats |
|
|
|
for this kind of query, we need to use index locks to |
|
|
|
sync up */ |
|
|
|
dict_table_x_lock_indexes(table); |
|
|
|
|
|
|
|
if (table->space && !table->dir_path_of_temp_table) { |
|
|
|
/* Discard and create the single-table tablespace. */ |
|
|
|
ulint space = table->space; |
|
|
|
@ -2803,6 +2794,11 @@ row_truncate_table_for_mysql( |
|
|
|
|
|
|
|
dict_hdr_get_new_id(NULL, NULL, &space); |
|
|
|
|
|
|
|
/* Lock all index trees for this table. We must |
|
|
|
do so after dict_hdr_get_new_id() to preserve |
|
|
|
the latch order */ |
|
|
|
dict_table_x_lock_indexes(table); |
|
|
|
|
|
|
|
if (space == ULINT_UNDEFINED |
|
|
|
|| fil_create_new_single_table_tablespace( |
|
|
|
space, table->name, FALSE, flags, |
|
|
|
@ -2836,6 +2832,15 @@ row_truncate_table_for_mysql( |
|
|
|
FIL_IBD_FILE_INITIAL_SIZE, &mtr); |
|
|
|
mtr_commit(&mtr); |
|
|
|
} |
|
|
|
} else { |
|
|
|
/* Lock all index trees for this table, as we will |
|
|
|
truncate the table/index and possibly change their metadata. |
|
|
|
All DML/DDL are blocked by table level lock, with |
|
|
|
a few exceptions such as queries into information schema |
|
|
|
about the table, MySQL could try to access index stats |
|
|
|
for this kind of query, we need to use index locks to |
|
|
|
sync up */ |
|
|
|
dict_table_x_lock_indexes(table); |
|
|
|
} |
|
|
|
|
|
|
|
/* scan SYS_INDEXES for all indexes of the table */ |
|
|
|
|