summaryrefslogtreecommitdiff
path: root/storage/innobase/dict/dict0crea.cc
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2022-06-06 16:22:09 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2022-06-06 16:22:09 +0300
commit57d4a242dac0238dd63ac05cd9d65a38d75a5d5f (patch)
tree323a71a864c38fe00502bd95926b4d05ab6854d6 /storage/innobase/dict/dict0crea.cc
parente097abfa662751cc337febad9d8584159f23cc92 (diff)
parent7e39470e337aeeab4ee3e73336c2fff88609529f (diff)
downloadmariadb-git-57d4a242dac0238dd63ac05cd9d65a38d75a5d5f.tar.gz
Merge 10.7 into 10.8
Diffstat (limited to 'storage/innobase/dict/dict0crea.cc')
-rw-r--r--storage/innobase/dict/dict0crea.cc64
1 files changed, 25 insertions, 39 deletions
diff --git a/storage/innobase/dict/dict0crea.cc b/storage/innobase/dict/dict0crea.cc
index 47e9d9cff0c..f20e5e60154 100644
--- a/storage/innobase/dict/dict0crea.cc
+++ b/storage/innobase/dict/dict0crea.cc
@@ -754,28 +754,32 @@ dict_create_index_tree_step(
mtr.start();
search_tuple = dict_create_search_tuple(node->ind_row, node->heap);
+ node->page_no = FIL_NULL;
- btr_pcur_open(UT_LIST_GET_FIRST(dict_sys.sys_indexes->indexes),
- search_tuple, PAGE_CUR_L, BTR_MODIFY_LEAF,
- &pcur, &mtr);
+ dberr_t err =
+ btr_pcur_open(UT_LIST_GET_FIRST(dict_sys.sys_indexes->indexes),
+ search_tuple, PAGE_CUR_L, BTR_MODIFY_LEAF,
+ &pcur, &mtr);
- btr_pcur_move_to_next_user_rec(&pcur, &mtr);
+ if (err != DB_SUCCESS) {
+func_exit:
+ mtr.commit();
+ return err;
+ }
+ btr_pcur_move_to_next_user_rec(&pcur, &mtr);
- dberr_t err = DB_SUCCESS;
+ if (UNIV_UNLIKELY(btr_pcur_is_after_last_on_page(&pcur))) {
+ err = DB_CORRUPTION;
+ goto func_exit;
+ }
- if (!index->is_readable()) {
- node->page_no = FIL_NULL;
- } else {
+ if (index->is_readable()) {
index->set_modified(mtr);
node->page_no = btr_create(
index->type, index->table->space,
- index->id, index, &mtr);
-
- if (node->page_no == FIL_NULL) {
- err = DB_OUT_OF_FILE_SPACE;
- }
+ index->id, index, &mtr, &err);
DBUG_EXECUTE_IF("ib_import_create_index_failure_1",
node->page_no = FIL_NULL;
@@ -789,16 +793,13 @@ dict_create_index_tree_step(
ut_ad(len == 4);
mtr.write<4,mtr_t::MAYBE_NOP>(*btr_pcur_get_block(&pcur), data,
node->page_no);
-
- mtr.commit();
-
- return(err);
+ goto func_exit;
}
/***************************************************************//**
Creates an index tree for the index if it is not a member of a cluster.
Don't update SYSTEM TABLES.
-@return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */
+@return error code */
dberr_t
dict_create_index_tree_in_mem(
/*==========================*/
@@ -818,13 +819,14 @@ dict_create_index_tree_in_mem(
ut_ad(index->is_readable());
ut_ad(!(index->table->flags2 & DICT_TF2_DISCARDED));
+ dberr_t err;
index->page = btr_create(index->type, index->table->space,
- index->id, index, &mtr);
+ index->id, index, &mtr, &err);
mtr_commit(&mtr);
index->trx_id = trx->id;
- return index->page == FIL_NULL ? DB_OUT_OF_FILE_SPACE : DB_SUCCESS;
+ return err;
}
/** Drop the index tree associated with a row in SYS_INDEXES table.
@@ -1108,15 +1110,7 @@ dict_create_table_step(
function_exit:
trx->error_state = err;
- if (err == DB_SUCCESS) {
- /* Ok: do nothing */
-
- } else if (err == DB_LOCK_WAIT) {
-
- return(NULL);
- } else {
- /* SQL error detected */
-
+ if (err != DB_SUCCESS) {
return(NULL);
}
@@ -1300,16 +1294,8 @@ dict_create_index_step(
function_exit:
trx->error_state = err;
- if (err == DB_SUCCESS) {
- /* Ok: do nothing */
-
- } else if (err == DB_LOCK_WAIT) {
-
- return(NULL);
- } else {
- /* SQL error detected */
-
- return(NULL);
+ if (UNIV_UNLIKELY(err != DB_SUCCESS)) {
+ return nullptr;
}
thr->run_node = que_node_get_parent(node);