#include "univ.i"
#include "data0data.h"
#include "dict0types.h"
#include "trx0types.h"
#include "que0types.h"
#include "mtr0mtr.h"
#include "rem0types.h"
#include "rem0rec.h"
#include "read0types.h"
#include "btr0types.h"
#include "row0mysql.h"
#include "lock0types.h"
Go to the source code of this file.
Classes | |
struct | merge_index_field_struct |
struct | merge_index_def_struct |
Typedefs | |
typedef struct merge_index_field_struct | merge_index_field_t |
typedef struct merge_index_def_struct | merge_index_def_t |
Functions | |
UNIV_INTERN ulint | row_merge_lock_table (trx_t *trx, dict_table_t *table, enum lock_mode mode) |
UNIV_INTERN void | row_merge_drop_index (dict_index_t *index, dict_table_t *table, trx_t *trx) |
UNIV_INTERN void | row_merge_drop_indexes (trx_t *trx, dict_table_t *table, dict_index_t **index, ulint num_created) |
UNIV_INTERN void | row_merge_drop_temp_indexes (void) |
UNIV_INTERN ulint | row_merge_rename_tables (dict_table_t *old_table, dict_table_t *new_table, const char *tmp_name, trx_t *trx) |
UNIV_INTERN dict_table_t * | row_merge_create_temporary_table (const char *table_name, const merge_index_def_t *index_def, const dict_table_t *table, trx_t *trx) |
UNIV_INTERN ulint | row_merge_rename_indexes (trx_t *trx, dict_table_t *table) |
UNIV_INTERN dict_index_t * | row_merge_create_index (trx_t *trx, dict_table_t *table, const merge_index_def_t *index_def) |
UNIV_INTERN ibool | row_merge_is_index_usable (const trx_t *trx, const dict_index_t *index) |
UNIV_INTERN ulint | row_merge_drop_table (trx_t *trx, dict_table_t *table) |
UNIV_INTERN ulint | row_merge_build_indexes (trx_t *trx, dict_table_t *old_table, dict_table_t *new_table, dict_index_t **indexes, ulint n_indexes, TABLE *table) |
Index build routines using a merge sort
Created 13/06/2005 Jan Lindstrom
Definition in file row0merge.h.
typedef struct merge_index_def_struct merge_index_def_t |
Definition of an index being created
Definition at line 64 of file row0merge.h.
typedef struct merge_index_field_struct merge_index_field_t |
Index field definition
Definition at line 51 of file row0merge.h.
UNIV_INTERN ulint row_merge_build_indexes | ( | trx_t * | trx, |
dict_table_t * | old_table, | ||
dict_table_t * | new_table, | ||
dict_index_t ** | indexes, | ||
ulint | n_indexes, | ||
TABLE * | table | ||
) |
Build indexes on a table by reading a clustered index, creating a temporary file containing index entries, merge sorting these index entries and inserting sorted index entries to indexes.
Build indexes on a table by reading a clustered index, creating a temporary file containing index entries, merge sorting these index entries and inserting sorted index entries to indexes.
trx | in: transaction |
old_table | in: table where rows are read from |
new_table | in: table where indexes are created; identical to old_table unless creating a PRIMARY KEY |
indexes | in: indexes to be created |
n_indexes | in: size of indexes[] |
table | in/out: MySQL table, for reporting erroneous key value if applicable |
Definition at line 2608 of file row0merge.cc.
References dict_table_zip_size(), trx_struct::error_key_num, innobase_mysql_tmpfile(), innobase_rec_reset(), mem_free, os_mem_alloc_large(), os_mem_free_large(), row_merge_build_indexes(), trx_start_if_not_started(), and ut_ad.
Referenced by row_merge_build_indexes().
UNIV_INTERN dict_index_t* row_merge_create_index | ( | trx_t * | trx, |
dict_table_t * | table, | ||
const merge_index_def_t * | index_def | ||
) |
Create the index and load in to the dictionary.
Create the index and load in to the dictionary.
trx | in/out: trx (sets error_state) |
table | in: the index is on this table |
index_def | in: the index definition |
Definition at line 2523 of file row0merge.cc.
References merge_index_field_struct::field_name, merge_index_def_struct::fields, trx_struct::id, merge_index_def_struct::ind_type, merge_index_def_struct::n_fields, merge_index_def_struct::name, dict_table_struct::name, merge_index_field_struct::prefix_len, row_merge_create_index(), dict_index_struct::trx_id, and ut_a.
Referenced by row_merge_create_index().
UNIV_INTERN dict_table_t* row_merge_create_temporary_table | ( | const char * | table_name, |
const merge_index_def_t * | index_def, | ||
const dict_table_t * | table, | ||
trx_t * | trx | ||
) |
Create a temporary table for creating a primary key, using the definition of an existing table.
Create a temporary table for creating a primary key, using the definition of an existing table.
table_name | in: new table name |
index_def | in: the index definition of the primary key |
table | in: old table definition |
trx | in/out: transaction (sets error_state) |
Definition at line 2287 of file row0merge.cc.
References dict_table_get_n_user_cols(), trx_struct::error_state, dict_table_struct::flags, dict_col_struct::len, mem_heap_create, mem_heap_free, dict_col_struct::mtype, dict_sys_struct::mutex, row_create_table_for_mysql(), row_merge_create_temporary_table(), and ut_ad.
Referenced by row_merge_create_temporary_table().
UNIV_INTERN void row_merge_drop_index | ( | dict_index_t * | index, |
dict_table_t * | table, | ||
trx_t * | trx | ||
) |
Drop an index from the InnoDB system tables. The data dictionary must have been locked exclusively by the caller, because the transaction will not be committed. in: transaction handle
Drop an index from the InnoDB system tables. The data dictionary must have been locked exclusively by the caller, because the transaction will not be committed.
index | in: index to be removed |
table | in: table |
trx | in: transaction handle |
Definition at line 2034 of file row0merge.cc.
References trx_struct::dict_operation_lock_mode, dict_index_struct::id, trx_struct::op_info, pars_info_add_ull_literal(), pars_info_create(), que_eval_sql(), row_merge_drop_index(), TEMP_INDEX_PREFIX_STR, trx_start_if_not_started(), ut_a, and ut_ad.
Referenced by row_merge_drop_index(), row_merge_drop_indexes(), and row_merge_drop_temp_indexes().
UNIV_INTERN void row_merge_drop_indexes | ( | trx_t * | trx, |
dict_table_t * | table, | ||
dict_index_t ** | index, | ||
ulint | num_created | ||
) |
Drop those indexes which were created before an error occurred when building an index. The data dictionary must have been locked exclusively by the caller, because the transaction will not be committed. in: number of elements in index[]
Drop those indexes which were created before an error occurred when building an index. The data dictionary must have been locked exclusively by the caller, because the transaction will not be committed.
trx | in: transaction |
table | in: table containing the indexes |
index | in: indexes to drop |
num_created | in: number of elements in index[] |
Definition at line 2092 of file row0merge.cc.
References row_merge_drop_index(), and row_merge_drop_indexes().
Referenced by row_merge_drop_indexes().
UNIV_INTERN ulint row_merge_drop_table | ( | trx_t * | trx, |
dict_table_t * | table | ||
) |
If there are views that refer to the old table name then we "attach" to the new instance of the table else we drop it immediately.
Drop the old table.
trx | in: transaction |
table | in: table to drop |
Definition at line 2590 of file row0merge.cc.
References dict_table_struct::n_mysql_handles_opened, dict_table_struct::name, row_drop_table_for_mysql(), row_merge_drop_table(), and ut_a.
Referenced by row_merge_drop_table().
UNIV_INTERN void row_merge_drop_temp_indexes | ( | void | ) |
Drop all partially created indexes during crash recovery.
Definition at line 2110 of file row0merge.cc.
References btr_pcur_close(), btr_pcur_commit_specify_mtr(), btr_pcur_get_rec(), btr_pcur_is_on_user_rec(), btr_pcur_move_to_next_user_rec(), btr_pcur_open_at_index_side(), BTR_SEARCH_LEAF, dict_table_get_on_id_low(), row_merge_dup_struct::index, mach_read_from_8(), mtr_commit(), mtr_start(), dict_index_struct::name, trx_struct::op_info, row_merge_drop_index(), row_merge_drop_temp_indexes(), row_mysql_unlock_data_dictionary(), dict_sys_struct::sys_indexes, row_merge_dup_struct::table, TEMP_INDEX_PREFIX, trx_allocate_for_background(), trx_commit_for_mysql(), and trx_free_for_background().
Referenced by recv_recovery_rollback_active(), and row_merge_drop_temp_indexes().
UNIV_INTERN ibool row_merge_is_index_usable | ( | const trx_t * | trx, |
const dict_index_t * | index | ||
) |
Check if a transaction can use an index.
Check if a transaction can use an index.
trx | in: transaction |
index | in: index to check |
Definition at line 2576 of file row0merge.cc.
References trx_struct::read_view, read_view_sees_trx_id(), row_merge_is_index_usable(), and dict_index_struct::trx_id.
Referenced by ha_innobase::change_active_index(), ha_innobase::check(), ha_innobase::records_in_range(), and row_merge_is_index_usable().
UNIV_INTERN ulint row_merge_lock_table | ( | trx_t * | trx, |
dict_table_t * | table, | ||
enum lock_mode | mode | ||
) |
Sets an exclusive lock on a table, for the duration of creating indexes.
Sets an exclusive lock on a table, for the duration of creating indexes.
trx | in/out: transaction |
table | in: table to lock |
mode | in: LOCK_X or LOCK_S |
Definition at line 1954 of file row0merge.cc.
References que_thr_struct::common, trx_struct::error_state, que_thr_struct::graph, lock_table(), mem_heap_create, trx_struct::op_info, os_thread_get_curr_id(), que_common_struct::parent, pars_complete_graph_for_exec(), que_thr_struct::prev_node, que_fork_get_first_thr(), que_fork_start_command(), que_graph_free(), que_node_get_parent(), que_thr_move_to_run_state_for_mysql(), que_thr_stop_for_mysql(), que_thr_stop_for_mysql_no_error(), row_merge_lock_table(), row_mysql_handle_errors(), que_thr_struct::run_node, sel_node_create(), que_fork_struct::state, ut_a, and ut_ad.
Referenced by row_merge_lock_table().
UNIV_INTERN ulint row_merge_rename_indexes | ( | trx_t * | trx, |
dict_table_t * | table | ||
) |
Rename the temporary indexes in the dictionary to permanent ones. The data dictionary must have been locked exclusively by the caller, because the transaction will not be committed.
Rename the temporary indexes in the dictionary to permanent ones. The data dictionary must have been locked exclusively by the caller, because the transaction will not be committed.
trx | in/out: transaction |
table | in/out: table with new indexes |
Definition at line 2340 of file row0merge.cc.
References trx_struct::dict_operation_lock_mode, dict_table_struct::id, dict_index_struct::name, trx_struct::op_info, pars_info_add_ull_literal(), pars_info_create(), que_eval_sql(), row_merge_rename_indexes(), TEMP_INDEX_PREFIX, TEMP_INDEX_PREFIX_STR, ut_a, and ut_ad.
Referenced by row_merge_rename_indexes().
UNIV_INTERN ulint row_merge_rename_tables | ( | dict_table_t * | old_table, |
dict_table_t * | new_table, | ||
const char * | tmp_name, | ||
trx_t * | trx | ||
) |
Rename the tables in the data dictionary. The data dictionary must have been locked exclusively by the caller, because the transaction will not be committed.
Rename the tables in the data dictionary. The data dictionary must have been locked exclusively by the caller, because the transaction will not be committed.
old_table | in/out: old table, renamed to tmp_name |
new_table | in/out: new table, renamed to old_table->name |
tmp_name | in: new name for old_table |
trx | in: transaction handle |
Definition at line 2391 of file row0merge.cc.
References trx_struct::dict_operation_lock_mode, trx_struct::error_state, dict_sys_struct::mutex, dict_table_struct::name, trx_struct::op_info, os_thread_get_curr_id(), pars_info_add_str_literal(), pars_info_create(), que_eval_sql(), row_merge_rename_tables(), trx_general_rollback_for_mysql(), ut_a, ut_ad, ut_error, and ut_print_timestamp().
Referenced by row_merge_rename_tables().