diff --git a/storage/innobase/ddl/ddl0builder.cc b/storage/innobase/ddl/ddl0builder.cc index af9fd0c32f5..381ef32cc08 100644 --- a/storage/innobase/ddl/ddl0builder.cc +++ b/storage/innobase/ddl/ddl0builder.cc @@ -1466,20 +1466,12 @@ dberr_t Builder::bulk_add_row(Cursor &cursor, Row &row, size_t thread_id, if (!key_buffer->empty()) { ut_a(err == DB_SUCCESS || err == DB_OVERFLOW); - err = key_buffer_sort(thread_id); - - if (DBUG_EVALUATE_IF("builder_bulk_add_row_trigger_error_1", - (m_btr_load && m_btr_load->get_n_recs() != 0), - false)) { - err = DB_DUPLICATE_KEY; - } - - if (err != DB_SUCCESS) { - set_error(err); - return get_error(); - } - if (is_skip_file_sort()) { + /* Check last error, may be DB_DUPLICATE_KEY */ + if (get_error() != DB_SUCCESS) { + return get_error(); + } + if (!cursor.eof()) { /* Copy the row data and release any latches held by the parallel scan thread. Required for the log_free_check() during mtr.commit(). */ @@ -1522,6 +1514,14 @@ dberr_t Builder::bulk_add_row(Cursor &cursor, Row &row, size_t thread_id, ut_a(m_btr_load == nullptr); return DB_END_OF_INDEX; + } else { + /* Need to sort when the index cannot skip file sort */ + err = key_buffer_sort(thread_id); + + if (err != DB_SUCCESS) { + set_error(err); + return get_error(); + } } }