|  | MySQL 9.5.0
    Source Code Documentation | 
For loading indexes. More...
#include <ddl0impl-builder.h>
| Classes | |
| struct | Thread_ctx | 
| State of a cluster index reader thread.  More... | |
| Public Types | |
| enum class | State : uint8_t { INIT , ADD , SETUP_SORT , SORT , BTREE_BUILD , FTS_SORT_AND_BUILD , FINISH , STOP , ERROR } | 
| Build phase/states.  More... | |
| Public Member Functions | |
| Builder (ddl::Context &ctx, Loader &loader, size_t i) noexcept | |
| Constructor.  More... | |
| ~Builder () noexcept | |
| Destructor/.  More... | |
| dberr_t | get_error () const noexcept | 
| bool | set_error (dberr_t err) noexcept | 
| Set the error code.  More... | |
| size_t | id () const noexcept | 
| dict_index_t * | index () noexcept | 
| Context & | ctx () noexcept | 
| void | fallback_to_single_thread () noexcept | 
| Parallel scan thread spawn failed, release the extra thread states.  More... | |
| bool | is_spatial_index () const noexcept | 
| bool | is_fts_index () const noexcept | 
| bool | is_unique_index () const noexcept | 
| State | get_state () const noexcept | 
| void | set_state (State state) noexcept | 
| Set the next state.  More... | |
| Alter_stage * | stage () noexcept | 
| void | set_next_state () noexcept | 
| Set the next state.  More... | |
| dberr_t | init (Cursor &cursor, size_t n_threads) noexcept | 
| Initialize the cursor.  More... | |
| dberr_t | add_row (Cursor &cursor, Row &row, size_t thread_id, Latch_release &&latch_release) noexcept | 
| Add a row to the merge buffer.  More... | |
| bool | is_skip_file_sort () const noexcept | 
| dberr_t | fts_sort_and_build () noexcept | 
| FTS: Sort and insert the rows read.  More... | |
| dberr_t | setup_sort () noexcept | 
| Non-FTS: Sort the rows read.  More... | |
| dberr_t | merge_sort (size_t thread_id) noexcept | 
| Non-FTS: Sort the rows read.  More... | |
| dberr_t | btree_build () noexcept | 
| Load the sorted data into the B+Tree.  More... | |
| dberr_t | finish () noexcept | 
| Close temporary files, Flush all dirty pages, apply the row log and write the redo log record.  More... | |
| dberr_t | dtuple_copy_blobs (dtuple_t *dtuple, ulint *offsets, const mrec_t *mrec, mem_heap_t *heap) noexcept | 
| Copy blobs to the tuple.  More... | |
| dberr_t | append (ddl::file_t &file, IO_buffer file_buffer) noexcept | 
| Write data to disk - in append mode.  More... | |
| const char * | tmpdir () const noexcept | 
| dberr_t | batch_insert (size_t thread_id, Latch_release &&latch_release) noexcept | 
| Insert cached rows.  More... | |
| void | batch_insert_deep_copy_tuples (size_t thread_id) noexcept | 
| Note that the latches are going to be released.  More... | |
| dberr_t | check_state_of_online_build_log () noexcept | 
| Check the state of the online build log for the index.  More... | |
| Static Public Member Functions | |
| static void | write_redo (const dict_index_t *index) noexcept | 
| Write an MLOG_INDEX_LOAD record to indicate in the redo-log that redo-logging of individual index pages was disabled, and the flushing of such pages to the data files was completed.  More... | |
| Private Types | |
| using | Allocator = ut::allocator< Thread_ctx * > | 
| using | Thread_ctxs = std::vector< Thread_ctx *, Allocator > | 
| Private Member Functions | |
| dberr_t | create_merge_sort_tasks () noexcept | 
| Create the tasks to merge Sort the file before we load the file into the Btree index.  More... | |
| dberr_t | finalize () noexcept | 
| Flush all dirty pages, apply the row log and write the redo log record.  More... | |
| dberr_t | batch_add_row (Row &row, size_t thread_id) noexcept | 
| Cache a row for batch inserts.  More... | |
| dberr_t | bulk_add_row (Cursor &cursor, Row &row, size_t thread_id, Latch_release &&latch_release) noexcept | 
| Add a row to the merge buffer.  More... | |
| void | clear_virtual_heap () noexcept | 
| Clear the heap used for virtual columns.  More... | |
| void | fts_add_doc_id (dfield_t *dst, const dict_field_t *src, doc_id_t &write_doc_id) noexcept | 
| Add the FTS document ID to the destination field.  More... | |
| dberr_t | copy_row (Copy_ctx &ctx, size_t &mv_rows_added) noexcept | 
| Add a row to the write buffer.  More... | |
| dberr_t | get_virtual_column (Copy_ctx &ctx, const dict_field_t *ifield, dict_col_t *col, dfield_t *&src_field, size_t &mv_rows_added) noexcept | 
| Setup the virtual column src column.  More... | |
| dberr_t | copy_fts_column (Copy_ctx &ctx, dfield_t *field) noexcept | 
| Copy the FTS columns.  More... | |
| dberr_t | copy_columns (Copy_ctx &ctx, size_t &mv_rows_added, doc_id_t &write_doc_id) noexcept | 
| Copy the columns to the temporary file buffer.  More... | |
| dberr_t | add_to_key_buffer (Copy_ctx &ctx, size_t &mv_rows_added) noexcept | 
| Add row to the key buffer.  More... | |
| void | fts_wait_for_completion (const dict_index_t *index) noexcept | 
| Wait for FTS completion.  More... | |
| dberr_t | key_buffer_sort (size_t thread_id) noexcept | 
| Sort the data in the key buffer.  More... | |
| dberr_t | insert_direct (Cursor &cursor, size_t thread_id) noexcept | 
| Sort the buffer in memory and insert directly in the BTree loader, don't write to a temporary file.  More... | |
| bool | create_file (ddl::file_t &file) noexcept | 
| Create the merge file, if needed.  More... | |
| dberr_t | check_duplicates (Thread_ctxs &dupcheck, Dup *dup) noexcept | 
| Check for duplicates in the first block.  More... | |
| dberr_t | handle_error (dberr_t err) noexcept | 
| Cleanup DDL after error in online build Note: To be called if DDL must cleanup due to error in online build.  More... | |
| Static Private Member Functions | |
| static void | convert (const dict_index_t *clust_index, const dfield_t *row_field, dfield_t *field, ulint len, const page_size_t &page_size, bool is_sdi, mem_heap_t *heap) noexcept | 
| Convert the field data from compact to redundant format.  More... | |
| static void | copy_blobs (const dict_index_t *index, const mrec_t *mrec, const ulint *offsets, const page_size_t &page_size, dtuple_t *tuple, bool is_sdi, mem_heap_t *heap) noexcept | 
| Copy externally stored columns to the data tuple.  More... | |
| Private Attributes | |
| size_t | m_id {} | 
| Buffer ID.  More... | |
| std::atomic< State > | m_state {State::INIT} | 
| Initial phase.  More... | |
| ddl::Context & | m_ctx | 
| DDL Context.  More... | |
| Loader & | m_loader | 
| Loader that owns the instance.  More... | |
| dict_index_t * | m_index {} | 
| Index to create (if not FTS index).  More... | |
| const char * | m_tmpdir {} | 
| Temporary file path.  More... | |
| Thread_ctxs | m_thread_ctxs {} | 
| Per thread context.  More... | |
| dfield_t * | m_prev_fields {} | 
| For tracking duplicates.  More... | |
| Dup | m_clust_dup {} | 
| For collecting duplicate entries (error reporting).  More... | |
| Scoped_heap | m_v_heap {} | 
| Scoped virtual column heap.  More... | |
| Scoped_heap | m_conv_heap {} | 
| Scoped conversion heap.  More... | |
| dict_index_t * | m_sort_index {} | 
| The index to be built, FTS or non-FTS.  More... | |
| std::atomic< size_t > | m_n_sort_tasks {} | 
| Number of active sort tasks.  More... | |
| Btree_load * | m_btr_load {} | 
| Cluster index bulk load instance to use, direct insert without a file sort.  More... | |
| Alter_stage * | m_local_stage {} | 
| Stage per builder.  More... | |
For loading indexes.
| 
 | private | 
| 
 | private | 
| 
 | strong | 
Build phase/states.
| 
 | noexcept | 
Constructor.
| [in,out] | ctx | DDL context. | 
| [in,out] | loader | Owner of the instance. | 
| [in] | i | Index ordinal value. | 
| 
 | noexcept | 
Destructor/.
| 
 | noexcept | 
Add a row to the merge buffer.
| [in,out] | cursor | Current scan cursor. | 
| [in,out] | row | Row to add. | 
| [in] | thread_id | ID of current thread. | 
| [in,out] | latch_release | Called when a log free check is required. | 
Add row to the key buffer.
| [in,out] | ctx | Copy context. | 
| [in,out] | mv_rows_added | Number of multi-value index rows added. | 
| 
 | noexcept | 
Write data to disk - in append mode.
Increment the file size.
| [in,out] | file | File handle. | 
| [in] | file_buffer | Write the buffer contents to disk. | 
Cache a row for batch inserts.
Currently used by spatial indexes.
| [in,out] | row | Row to add. | 
| [in] | thread_id | ID of current thread. | 
| 
 | noexcept | 
Insert cached rows.
| [in] | thread_id | Insert cached rows for this thread ID. | 
| [in,out] | latch_release | Called when a log free check is required. | 
| 
 | noexcept | 
Note that the latches are going to be released.
Do a deep copy of the tuples that are being inserted in batches by batch_insert
| [in] | thread_id | Deep copy cached rows for this thread ID. | 
| 
 | noexcept | 
Load the sorted data into the B+Tree.
| 
 | privatenoexcept | 
Add a row to the merge buffer.
| [in,out] | cursor | Current scan cursor. | 
| [in,out] | row | Row to add. | 
| [in] | thread_id | ID of current thread. | 
| [in,out] | latch_release | Called when a log free check is required. | 
| 
 | privatenoexcept | 
Check for duplicates in the first block.
| [in] | dupcheck | Files to check for duplicates. | 
| [in,out] | dup | For collecting duplicate key information. | 
| 
 | noexcept | 
Check the state of the online build log for the index.
| 
 | inlineprivatenoexcept | 
Clear the heap used for virtual columns.
| 
 | staticprivatenoexcept | 
Convert the field data from compact to redundant format.
| [in] | clust_index | Clustered index being built | 
| [in] | row_field | Field to copy from | 
| [out] | field | Field to copy to | 
| [in] | len | Length of the field data | 
| [in] | page_size | Compressed BLOB page size | 
| [in] | is_sdi | true for SDI Indexes | 
| [in,out] | heap | Memory heap where to allocate data when converting to ROW_FORMAT=REDUNDANT, or nullptr | 
| 
 | staticprivatenoexcept | 
Copy externally stored columns to the data tuple.
| [in] | index | Index dictionary object. | 
| [in] | mrec | Record containing BLOB pointers, or nullptr to use tuple instead. | 
| [in] | offsets | Offsets of mrec. | 
| [in] | page_size | Compressed page size in bytes, or 0 | 
| [in,out] | tuple | Data tuple. | 
| [in] | is_sdi | True for SDI Indexes | 
| [in,out] | heap | Memory heap | 
| 
 | privatenoexcept | 
Copy the columns to the temporary file buffer.
| [in,out] | ctx | Copy context. | 
| [in,out] | mv_rows_added | Multi value rows added. | 
| [in,out] | write_doc_id | Buffer for storing the FTS doc ID. | 
Copy the FTS columns.
| [in,out] | ctx | Copy context. | 
| [in,out] | field | Field to write to. | 
Add a row to the write buffer.
| [in,out] | ctx | Copy context. | 
| [in,out] | mv_rows_added | Number of multi-value rows added. | 
| 
 | privatenoexcept | 
Create the merge file, if needed.
| [in,out] | file | File handle. | 
| 
 | privatenoexcept | 
Create the tasks to merge Sort the file before we load the file into the Btree index.
| 
 | inlinenoexcept | 
| 
 | noexcept | 
Copy blobs to the tuple.
| [out] | dtuple | Tuple to copy to. | 
| [in,out] | offsets | Column offsets in the row. | 
| [in] | mrec | Current row. | 
| [in,out] | heap | Heap for the allocating tuple memory. | 
| 
 | noexcept | 
Parallel scan thread spawn failed, release the extra thread states.
| 
 | privatenoexcept | 
Flush all dirty pages, apply the row log and write the redo log record.
| 
 | noexcept | 
Close temporary files, Flush all dirty pages, apply the row log and write the redo log record.
| 
 | privatenoexcept | 
Add the FTS document ID to the destination field.
| [in,out] | dst | Field to write to. | 
| [in] | src | Field to copy meta data from. | 
| [out] | write_doc_id | Buffer for copying the doc id. | 
| 
 | noexcept | 
FTS: Sort and insert the rows read.
| 
 | privatenoexcept | 
Wait for FTS completion.
| [in] | index | Index being built. | 
| 
 | inlinenoexcept | 
| 
 | inlinenoexcept | 
| 
 | privatenoexcept | 
Setup the virtual column src column.
| [in,out] | ctx | Copy context. | 
| [in] | ifield | Index field. | 
| [in] | col | Table column. | 
| [out] | src_field | Computed value. | 
| [in,out] | mv_rows_added | Number of multi-value rows added. | 
Cleanup DDL after error in online build Note: To be called if DDL must cleanup due to error in online build.
Pages which are buffer-fixed (in Page_load::release) until the next iteration, must be unfixed (with Page_load::latch) before returning the error.
| [in] | err | Error hit in online build | 
| 
 | inlinenoexcept | 
| 
 | inlinenoexcept | 
Initialize the cursor.
| [in,out] | cursor | Cursor to initialize. | 
| [in] | n_threads | Number of threads used for reading. | 
Sort the buffer in memory and insert directly in the BTree loader, don't write to a temporary file.
| [in,out] | cursor | Current scan cursor. | 
| [in] | thread_id | ID of current thread. | 
| 
 | inlinenoexcept | 
| 
 | inlinenoexcept | 
| 
 | inlinenoexcept | 
| 
 | inlinenoexcept | 
| 
 | privatenoexcept | 
Sort the data in the key buffer.
| [in] | thread_id | Thread ID of current thread. | 
| 
 | noexcept | 
Non-FTS: Sort the rows read.
| [in] | thread_id | Thread state ID. | 
| 
 | inlinenoexcept | 
Set the error code.
| [in] | err | Error code to set. | 
| 
 | noexcept | 
Set the next state.
| 
 | inlinenoexcept | 
Set the next state.
| [in] | state | State to set. | 
| 
 | noexcept | 
Non-FTS: Sort the rows read.
| 
 | inlinenoexcept | 
| 
 | inlinenoexcept | 
| 
 | staticnoexcept | 
Write an MLOG_INDEX_LOAD record to indicate in the redo-log that redo-logging of individual index pages was disabled, and the flushing of such pages to the data files was completed.
| [in] | index | Index on which redo logging was disabled | 
| 
 | private | 
Cluster index bulk load instance to use, direct insert without a file sort.
| 
 | private | 
For collecting duplicate entries (error reporting).
| 
 | private | 
Scoped conversion heap.
| 
 | private | 
DDL Context.
| 
 | private | 
Buffer ID.
| 
 | private | 
Index to create (if not FTS index).
| 
 | private | 
Loader that owns the instance.
| 
 | private | 
Stage per builder.
| 
 | private | 
Number of active sort tasks.
| 
 | private | 
For tracking duplicates.
| 
 | private | 
The index to be built, FTS or non-FTS.
| 
 | private | 
Initial phase.
| 
 | private | 
Per thread context.
| 
 | private | 
Temporary file path.
| 
 | private | 
Scoped virtual column heap.