summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <tsmith/tim@siva.hindu.god>2006-09-21 01:39:09 -0600
committerunknown <tsmith/tim@siva.hindu.god>2006-09-21 01:39:09 -0600
commitbf2f50d3454587f23cf8fc71d2bdf888677468ea (patch)
tree33b29ebb973c8a17a4e2a4663d478600fa9e0864
parente40ba8e52359834c313cb58963f167ce624d12ea (diff)
downloadmariadb-git-bf2f50d3454587f23cf8fc71d2bdf888677468ea.tar.gz
Applied innodb-5.1 snapshots ss799 and ss854
Bugs fixed: - Bug #20877: InnoDB data dictionary memory footprint is too big - Bug #13544: Second delete of same row in transaction illustrates non-optimal locking - Bug #20791: valgrind errors in InnoDB storage/innobase/btr/btr0btr.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r823: Minor cleanup related to Bug #20877. btr_print_recursive(): Replace tree->tree_indexes with tree->index. This should have been done in r453. univ.i: Add UNIV_BTR_PRINT. rw_lock_t: Reduce writer_is_wait_ex to a bit and move it close to other bitfields. Change the types to unsigned, in case ulint or ibool bitfields will not work. Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r837: page_offset(): New function to replace many ut_align_offset(., UNIV_PAGE_SIZE) calls. dict_index_build_node_ptr(): Correct a typo in a comment. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/btr/btr0cur.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r816: Remove more remnants of mixed indexes. Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". Revision r830: page_align(ptr): New utility function to replace ut_align_down(ptr, UNIV_PAGE_SIZE) calls. Revision r837: page_offset(): New function to replace many ut_align_offset(., UNIV_PAGE_SIZE) calls. dict_index_build_node_ptr(): Correct a typo in a comment. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/btr/btr0pcur.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". Revision r830: page_align(ptr): New utility function to replace ut_align_down(ptr, UNIV_PAGE_SIZE) calls. Revision r837: page_offset(): New function to replace many ut_align_offset(., UNIV_PAGE_SIZE) calls. dict_index_build_node_ptr(): Correct a typo in a comment. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/btr/btr0sea.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r816: Remove more remnants of mixed indexes. Revision r824: Reduce the size of btr_search_t from 13 machine words to 7. This structure is reserved for every index in the data dictionary cache. (Bug #20877) We could shrink the structure further to three 32-bit words or two 64-bit words by turning the remaining fields to bit-fields. Unfortunately, the fields are not protected by any mutex, and thus we would better keep each field aligned to a machine word. btr_search_t, buf_block_t: Rename "ulint side" to "ibool left_side". Remove BTR_SEARCH_LEFT_SIDE and BTR_SEARCH_RIGHT_SIDE, and also rename some local variables and function parameters from "ulint side" to "ibool left_side". btr_search_t: Remove the unused fields last_search, n_direction, direction, and modify_clock. Remove the unused constants BTR_SEA_NO_DIRECTION, BTR_SEA_LEFT, BTR_SEA_RIGHT, and BTR_SEA_SAME_REC. btr_search_t: Remove magic_n unless #defined UNIV_DEBUG. Turn an assertion about the magic number into a debug assertion. Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/buf/buf0buf.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r824: Reduce the size of btr_search_t from 13 machine words to 7. This structure is reserved for every index in the data dictionary cache. (Bug #20877) We could shrink the structure further to three 32-bit words or two 64-bit words by turning the remaining fields to bit-fields. Unfortunately, the fields are not protected by any mutex, and thus we would better keep each field aligned to a machine word. btr_search_t, buf_block_t: Rename "ulint side" to "ibool left_side". Remove BTR_SEARCH_LEFT_SIDE and BTR_SEARCH_RIGHT_SIDE, and also rename some local variables and function parameters from "ulint side" to "ibool left_side". btr_search_t: Remove the unused fields last_search, n_direction, direction, and modify_clock. Remove the unused constants BTR_SEA_NO_DIRECTION, BTR_SEA_LEFT, BTR_SEA_RIGHT, and BTR_SEA_SAME_REC. btr_search_t: Remove magic_n unless #defined UNIV_DEBUG. Turn an assertion about the magic number into a debug assertion. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/buf/buf0flu.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/buf/buf0lru.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/buf/buf0rea.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/data/data0data.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/data/data0type.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r816: Remove more remnants of mixed indexes. Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. storage/innobase/dict/dict0boot.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r816: Remove more remnants of mixed indexes. Revision r827: Make dict_index_find_cols() always succeed. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/dict/dict0crea.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r816: Remove more remnants of mixed indexes. Revision r827: Make dict_index_find_cols() always succeed. Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". Revision r832: Add dict_table_get_col_name() in preparation for getting rid of dict_col_t::name, and use it instead of col->name everywhere. Revision r833: Tweak the bit-field definitions introduced since r813 to address Bug #20877. rw_lock_t: Do not make writer_is_wait_ex a bit-field. There are no fields yet that could be fused to the same machine word, but we play it safe, because the field writer_is_wait_ex may be modified by several threads simultaneously. Such fields should always be allocated an own machine word. dict_table_t: Change the type of all bit-fields to "unsigned". Make "space" a bit-field of 32 bits. Move name_hash and id_hash after all bit-fields, so that the bit-fields can be allocated together. Do not make autoinc_inited a bit-field, as we cannot allocate any field from the same machine word. dict_build_table_def_step(): Pass a local variable to fil_create_new_single_table_tablespace() and initialize table->space from it after the call, now that table->space is a bit-field. Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/dict/dict0dict.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r816: Remove more remnants of mixed indexes. Revision r818: Remove dict_col_t::hash, dict_col_t::table, dict_sys->col_hash, and DICT_POOL_PER_COL_HASH. (Bug #20877) The col->table pointer was only needed for maintaining a hash table of all defined columns in all tables. The hash table was only looked up in dict_index_find_cols(). Removing the col->hash and col->table pointers reduces the size of a table column by two machine words (usually 8 or 16 bytes). dict_col_add_to_cache(), dict_col_reposition_in_cache(), dict_col_remove_from_cache(): Remove. These only updated dict_sys->col_hash. dict_index_find_cols(): Use a linear search instead of the hash table. The time complexity is affected, but this function is only invoked by dict_index_add_to_cache(), and we only search the columns of a single table (typically at most a few dozen) as opposed to all columns of all tables. Revision r819: dict_col_t: Reduce ord_part to one bit. dict_index_add_to_cache(): Instead of incrementing ord_part, set it. dict_index_remove_from_cache(): Do not touch ord_part. dtype_t: Reduce mbminlen from 3 to 2 bits. row_upd(): Add a UNIV_LIKELY hint around node->in_mysql_interface. Revision r820: Remove dict_col_t::clust_pos. dict_col_get_clust_pos(): Add parameter clust_index. Replace the look-up with a linear search of all columns in the clustered index. row_upd_index_replace_new_col_vals(): Compute clust_index outside the loops. Compute clust_pos outside the inner loop. row_upd_changes_ord_field_binary(), row_upd_changes_first_fields_binary(): Compute clust_index outside the loops. Declare the auxiliary variables inside the loop scope. Revision r821: dict_table_t: Rename the integer field max_row_size to the Boolean field big_rows. (Bug #20877) BIG_ROW_SIZE: Move the definition from row0sel.c to dict_table_add_to_cache(). Revision r826: The code base was reindented in r763 and automatic .emacs indentation settings introduced. Some problems were found, so from this commit on one additional indentation rule is introduced: (add-to-list 'c-offsets-alist '(arglist-intro . +)) Note that fixing some of the unfortunate line-splits done in r764 will be done in a future change. Revision r827: Make dict_index_find_cols() always succeed. Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". Revision r831: Add dict_col_get_clust_pos_noninline(), which was forgotten from r820. Revision r832: Add dict_table_get_col_name() in preparation for getting rid of dict_col_t::name, and use it instead of col->name everywhere. Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r836: Remove dict_col_t::name, replace it with a packed array of column names in dict_table_t. This saves 8-15+ bytes of memory per column on 64-bit machines. Revision r837: page_offset(): New function to replace many ut_align_offset(., UNIV_PAGE_SIZE) calls. dict_index_build_node_ptr(): Correct a typo in a comment. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. Revision r845: Split long lines with [] operators better. storage/innobase/dict/dict0load.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r832: Add dict_table_get_col_name() in preparation for getting rid of dict_col_t::name, and use it instead of col->name everywhere. Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/dict/dict0mem.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r818: Remove dict_col_t::hash, dict_col_t::table, dict_sys->col_hash, and DICT_POOL_PER_COL_HASH. (Bug #20877) The col->table pointer was only needed for maintaining a hash table of all defined columns in all tables. The hash table was only looked up in dict_index_find_cols(). Removing the col->hash and col->table pointers reduces the size of a table column by two machine words (usually 8 or 16 bytes). dict_col_add_to_cache(), dict_col_reposition_in_cache(), dict_col_remove_from_cache(): Remove. These only updated dict_sys->col_hash. dict_index_find_cols(): Use a linear search instead of the hash table. The time complexity is affected, but this function is only invoked by dict_index_add_to_cache(), and we only search the columns of a single table (typically at most a few dozen) as opposed to all columns of all tables. Revision r820: Remove dict_col_t::clust_pos. dict_col_get_clust_pos(): Add parameter clust_index. Replace the look-up with a linear search of all columns in the clustered index. row_upd_index_replace_new_col_vals(): Compute clust_index outside the loops. Compute clust_pos outside the inner loop. row_upd_changes_ord_field_binary(), row_upd_changes_first_fields_binary(): Compute clust_index outside the loops. Declare the auxiliary variables inside the loop scope. Revision r821: dict_table_t: Rename the integer field max_row_size to the Boolean field big_rows. (Bug #20877) BIG_ROW_SIZE: Move the definition from row0sel.c to dict_table_add_to_cache(). Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r836: Remove dict_col_t::name, replace it with a packed array of column names in dict_table_t. This saves 8-15+ bytes of memory per column on 64-bit machines. storage/innobase/eval/eval0eval.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r826: The code base was reindented in r763 and automatic .emacs indentation settings introduced. Some problems were found, so from this commit on one additional indentation rule is introduced: (add-to-list 'c-offsets-alist '(arglist-intro . +)) Note that fixing some of the unfortunate line-splits done in r764 will be done in a future change. storage/innobase/eval/eval0proc.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/fil/fil0fil.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/fsp/fsp0fsp.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. Revision r845: Split long lines with [] operators better. storage/innobase/handler/ha_innodb.cc: Applied innodb-5.1 snapshots ss799 and ss854 storage/innobase/handler/ha_innodb.h: Applied innodb-5.1 snapshots ss799 and ss854 storage/innobase/ibuf/ibuf0ibuf.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". Revision r832: Add dict_table_get_col_name() in preparation for getting rid of dict_col_t::name, and use it instead of col->name everywhere. Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/include/btr0btr.h: Applied innodb-5.1 snapshots ss799 and ss854 Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". storage/innobase/include/btr0btr.ic: Applied innodb-5.1 snapshots ss799 and ss854 Revision r837: page_offset(): New function to replace many ut_align_offset(., UNIV_PAGE_SIZE) calls. dict_index_build_node_ptr(): Correct a typo in a comment. storage/innobase/include/btr0cur.h: Applied innodb-5.1 snapshots ss799 and ss854 Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". storage/innobase/include/btr0cur.ic: Applied innodb-5.1 snapshots ss799 and ss854 Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". storage/innobase/include/btr0pcur.h: Applied innodb-5.1 snapshots ss799 and ss854 Revision r817: btr0pcur.h: Change FIXME to TODO. storage/innobase/include/btr0sea.h: Applied innodb-5.1 snapshots ss799 and ss854 Revision r824: Reduce the size of btr_search_t from 13 machine words to 7. This structure is reserved for every index in the data dictionary cache. (Bug #20877) We could shrink the structure further to three 32-bit words or two 64-bit words by turning the remaining fields to bit-fields. Unfortunately, the fields are not protected by any mutex, and thus we would better keep each field aligned to a machine word. btr_search_t, buf_block_t: Rename "ulint side" to "ibool left_side". Remove BTR_SEARCH_LEFT_SIDE and BTR_SEARCH_RIGHT_SIDE, and also rename some local variables and function parameters from "ulint side" to "ibool left_side". btr_search_t: Remove the unused fields last_search, n_direction, direction, and modify_clock. Remove the unused constants BTR_SEA_NO_DIRECTION, BTR_SEA_LEFT, BTR_SEA_RIGHT, and BTR_SEA_SAME_REC. btr_search_t: Remove magic_n unless #defined UNIV_DEBUG. Turn an assertion about the magic number into a debug assertion. storage/innobase/include/buf0buf.h: Applied innodb-5.1 snapshots ss799 and ss854 Revision r824: Reduce the size of btr_search_t from 13 machine words to 7. This structure is reserved for every index in the data dictionary cache. (Bug #20877) We could shrink the structure further to three 32-bit words or two 64-bit words by turning the remaining fields to bit-fields. Unfortunately, the fields are not protected by any mutex, and thus we would better keep each field aligned to a machine word. btr_search_t, buf_block_t: Rename "ulint side" to "ibool left_side". Remove BTR_SEARCH_LEFT_SIDE and BTR_SEARCH_RIGHT_SIDE, and also rename some local variables and function parameters from "ulint side" to "ibool left_side". btr_search_t: Remove the unused fields last_search, n_direction, direction, and modify_clock. Remove the unused constants BTR_SEA_NO_DIRECTION, BTR_SEA_LEFT, BTR_SEA_RIGHT, and BTR_SEA_SAME_REC. btr_search_t: Remove magic_n unless #defined UNIV_DEBUG. Turn an assertion about the magic number into a debug assertion. storage/innobase/include/data0data.ic: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. storage/innobase/include/data0type.h: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r816: Remove more remnants of mixed indexes. Revision r819: dict_col_t: Reduce ord_part to one bit. dict_index_add_to_cache(): Instead of incrementing ord_part, set it. dict_index_remove_from_cache(): Do not touch ord_part. dtype_t: Reduce mbminlen from 3 to 2 bits. row_upd(): Add a UNIV_LIKELY hint around node->in_mysql_interface. Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. storage/innobase/include/data0type.ic: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r816: Remove more remnants of mixed indexes. Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/include/dict0boot.h: Applied innodb-5.1 snapshots ss799 and ss854 Revision r816: Remove more remnants of mixed indexes. storage/innobase/include/dict0dict.h: Applied innodb-5.1 snapshots ss799 and ss854 Revision r816: Remove more remnants of mixed indexes. Revision r818: Remove dict_col_t::hash, dict_col_t::table, dict_sys->col_hash, and DICT_POOL_PER_COL_HASH. (Bug #20877) The col->table pointer was only needed for maintaining a hash table of all defined columns in all tables. The hash table was only looked up in dict_index_find_cols(). Removing the col->hash and col->table pointers reduces the size of a table column by two machine words (usually 8 or 16 bytes). dict_col_add_to_cache(), dict_col_reposition_in_cache(), dict_col_remove_from_cache(): Remove. These only updated dict_sys->col_hash. dict_index_find_cols(): Use a linear search instead of the hash table. The time complexity is affected, but this function is only invoked by dict_index_add_to_cache(), and we only search the columns of a single table (typically at most a few dozen) as opposed to all columns of all tables. Revision r820: Remove dict_col_t::clust_pos. dict_col_get_clust_pos(): Add parameter clust_index. Replace the look-up with a linear search of all columns in the clustered index. row_upd_index_replace_new_col_vals(): Compute clust_index outside the loops. Compute clust_pos outside the inner loop. row_upd_changes_ord_field_binary(), row_upd_changes_first_fields_binary(): Compute clust_index outside the loops. Declare the auxiliary variables inside the loop scope. Revision r827: Make dict_index_find_cols() always succeed. Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". Revision r831: Add dict_col_get_clust_pos_noninline(), which was forgotten from r820. Revision r832: Add dict_table_get_col_name() in preparation for getting rid of dict_col_t::name, and use it instead of col->name everywhere. Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r836: Remove dict_col_t::name, replace it with a packed array of column names in dict_table_t. This saves 8-15+ bytes of memory per column on 64-bit machines. storage/innobase/include/dict0dict.ic: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r820: Remove dict_col_t::clust_pos. dict_col_get_clust_pos(): Add parameter clust_index. Replace the look-up with a linear search of all columns in the clustered index. row_upd_index_replace_new_col_vals(): Compute clust_index outside the loops. Compute clust_pos outside the inner loop. row_upd_changes_ord_field_binary(), row_upd_changes_first_fields_binary(): Compute clust_index outside the loops. Declare the auxiliary variables inside the loop scope. Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. storage/innobase/include/dict0mem.h: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r815: dict_index_t: Remove tree_indexes. It should have been removed in r453 when the list in dict_tree_t was replaced with the pointer tree_index. Revision r818: Remove dict_col_t::hash, dict_col_t::table, dict_sys->col_hash, and DICT_POOL_PER_COL_HASH. (Bug #20877) The col->table pointer was only needed for maintaining a hash table of all defined columns in all tables. The hash table was only looked up in dict_index_find_cols(). Removing the col->hash and col->table pointers reduces the size of a table column by two machine words (usually 8 or 16 bytes). dict_col_add_to_cache(), dict_col_reposition_in_cache(), dict_col_remove_from_cache(): Remove. These only updated dict_sys->col_hash. dict_index_find_cols(): Use a linear search instead of the hash table. The time complexity is affected, but this function is only invoked by dict_index_add_to_cache(), and we only search the columns of a single table (typically at most a few dozen) as opposed to all columns of all tables. Revision r819: dict_col_t: Reduce ord_part to one bit. dict_index_add_to_cache(): Instead of incrementing ord_part, set it. dict_index_remove_from_cache(): Do not touch ord_part. dtype_t: Reduce mbminlen from 3 to 2 bits. row_upd(): Add a UNIV_LIKELY hint around node->in_mysql_interface. Revision r820: Remove dict_col_t::clust_pos. dict_col_get_clust_pos(): Add parameter clust_index. Replace the look-up with a linear search of all columns in the clustered index. row_upd_index_replace_new_col_vals(): Compute clust_index outside the loops. Compute clust_pos outside the inner loop. row_upd_changes_ord_field_binary(), row_upd_changes_first_fields_binary(): Compute clust_index outside the loops. Declare the auxiliary variables inside the loop scope. Revision r821: dict_table_t: Rename the integer field max_row_size to the Boolean field big_rows. (Bug #20877) BIG_ROW_SIZE: Move the definition from row0sel.c to dict_table_add_to_cache(). Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". Revision r833: Tweak the bit-field definitions introduced since r813 to address Bug #20877. rw_lock_t: Do not make writer_is_wait_ex a bit-field. There are no fields yet that could be fused to the same machine word, but we play it safe, because the field writer_is_wait_ex may be modified by several threads simultaneously. Such fields should always be allocated an own machine word. dict_table_t: Change the type of all bit-fields to "unsigned". Make "space" a bit-field of 32 bits. Move name_hash and id_hash after all bit-fields, so that the bit-fields can be allocated together. Do not make autoinc_inited a bit-field, as we cannot allocate any field from the same machine word. dict_build_table_def_step(): Pass a local variable to fil_create_new_single_table_tablespace() and initialize table->space from it after the call, now that table->space is a bit-field. Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r835: Change the recently introduced ulint bit-fields to unsigned. Revision r836: Remove dict_col_t::name, replace it with a packed array of column names in dict_table_t. This saves 8-15+ bytes of memory per column on 64-bit machines. storage/innobase/include/dict0types.h: Applied innodb-5.1 snapshots ss799 and ss854 Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". storage/innobase/include/ibuf0ibuf.ic: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/include/page0page.h: Applied innodb-5.1 snapshots ss799 and ss854 Revision r830: page_align(ptr): New utility function to replace ut_align_down(ptr, UNIV_PAGE_SIZE) calls. Revision r837: page_offset(): New function to replace many ut_align_offset(., UNIV_PAGE_SIZE) calls. dict_index_build_node_ptr(): Correct a typo in a comment. storage/innobase/include/page0page.ic: Applied innodb-5.1 snapshots ss799 and ss854 Revision r830: page_align(ptr): New utility function to replace ut_align_down(ptr, UNIV_PAGE_SIZE) calls. Revision r837: page_offset(): New function to replace many ut_align_offset(., UNIV_PAGE_SIZE) calls. dict_index_build_node_ptr(): Correct a typo in a comment. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/include/read0read.ic: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/include/rem0cmp.h: Applied innodb-5.1 snapshots ss799 and ss854 Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. storage/innobase/include/rem0cmp.ic: Applied innodb-5.1 snapshots ss799 and ss854 Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. storage/innobase/include/rem0rec.h: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. storage/innobase/include/rem0rec.ic: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/include/rem0types.h: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. storage/innobase/include/row0upd.ic: Applied innodb-5.1 snapshots ss799 and ss854 Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. storage/innobase/include/sync0rw.h: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r823: Minor cleanup related to Bug #20877. btr_print_recursive(): Replace tree->tree_indexes with tree->index. This should have been done in r453. univ.i: Add UNIV_BTR_PRINT. rw_lock_t: Reduce writer_is_wait_ex to a bit and move it close to other bitfields. Change the types to unsigned, in case ulint or ibool bitfields will not work. Revision r833: Tweak the bit-field definitions introduced since r813 to address Bug #20877. rw_lock_t: Do not make writer_is_wait_ex a bit-field. There are no fields yet that could be fused to the same machine word, but we play it safe, because the field writer_is_wait_ex may be modified by several threads simultaneously. Such fields should always be allocated an own machine word. dict_table_t: Change the type of all bit-fields to "unsigned". Make "space" a bit-field of 32 bits. Move name_hash and id_hash after all bit-fields, so that the bit-fields can be allocated together. Do not make autoinc_inited a bit-field, as we cannot allocate any field from the same machine word. dict_build_table_def_step(): Pass a local variable to fil_create_new_single_table_tablespace() and initialize table->space from it after the call, now that table->space is a bit-field. storage/innobase/include/univ.i: Applied innodb-5.1 snapshots ss799 and ss854 Revision r823: Minor cleanup related to Bug #20877. btr_print_recursive(): Replace tree->tree_indexes with tree->index. This should have been done in r453. univ.i: Add UNIV_BTR_PRINT. rw_lock_t: Reduce writer_is_wait_ex to a bit and move it close to other bitfields. Change the types to unsigned, in case ulint or ibool bitfields will not work. storage/innobase/lock/lock0lock.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/log/log0log.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/log/log0recv.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/mem/mem0dbg.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/mem/mem0pool.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/mtr/mtr0log.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r832: Add dict_table_get_col_name() in preparation for getting rid of dict_col_t::name, and use it instead of col->name everywhere. Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/mtr/mtr0mtr.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/os/os0file.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/os/os0thread.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/page/page0cur.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r837: page_offset(): New function to replace many ut_align_offset(., UNIV_PAGE_SIZE) calls. dict_index_build_node_ptr(): Correct a typo in a comment. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/page/page0page.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r837: page_offset(): New function to replace many ut_align_offset(., UNIV_PAGE_SIZE) calls. dict_index_build_node_ptr(): Correct a typo in a comment. storage/innobase/pars/pars0opt.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/pars/pars0pars.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r832: Add dict_table_get_col_name() in preparation for getting rid of dict_col_t::name, and use it instead of col->name everywhere. Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/pars/pars0sym.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. storage/innobase/read/read0read.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/rem/rem0cmp.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/rem/rem0rec.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/row/row0ins.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/row/row0mysql.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". Revision r832: Add dict_table_get_col_name() in preparation for getting rid of dict_col_t::name, and use it instead of col->name everywhere. Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/row/row0purge.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r828: Remove dict_tree_t, which should have been removed in r453. There always was a one-to-one mapping between dict_tree_t and dict_index_t. This saves 6 machine words per B-tree index in the data dictionary cache plus the memory allocation overhead. We save one mem_heap_t object per index (15 machine words). Considering the internal fragmentation of the buddy allocator in mem_area_alloc(), this should save 32 machine words per index (128 bytes on 32-bit systems and 256 bytes on 64-bit systems). (Bug #20877) struct dict_tree_struct, dict_tree_t: Remove. struct dict_index_struct: Add page and lock. dict_tree_create(): Remove. Replace the invocation with assignment to index->page and a call to rw_lock_create(&index->lock). dict_tree_free(): Remove. Replace the invocation wtih a call to rw_lock_free(&index->lock). dict_index_get_tree(): Remove. dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve() and remove the parameter, which was unused. btr_level_list_remove(): Remove the unused parameter "tree". Replace the occurrences of "tree" with "index" in names of variables, functions and data types, e.g. "dict_tree_t tree" becomes "dict_index_t index". Remove local variables "tree" or "index" of functions that needed both "tree" and "index". Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/row/row0row.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/row/row0sel.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r820: Remove dict_col_t::clust_pos. dict_col_get_clust_pos(): Add parameter clust_index. Replace the look-up with a linear search of all columns in the clustered index. row_upd_index_replace_new_col_vals(): Compute clust_index outside the loops. Compute clust_pos outside the inner loop. row_upd_changes_ord_field_binary(), row_upd_changes_first_fields_binary(): Compute clust_index outside the loops. Declare the auxiliary variables inside the loop scope. Revision r821: dict_table_t: Rename the integer field max_row_size to the Boolean field big_rows. (Bug #20877) BIG_ROW_SIZE: Move the definition from row0sel.c to dict_table_add_to_cache(). Revision r825: row_search_for_mysql(): Skip setting the next-key lock on an already delete-marked record in a clustered index where the search criteria is unique, within the same transaction (Bug #13544). Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r837: page_offset(): New function to replace many ut_align_offset(., UNIV_PAGE_SIZE) calls. dict_index_build_node_ptr(): Correct a typo in a comment. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. Revision r845: Split long lines with [] operators better. storage/innobase/row/row0uins.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/row/row0umod.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/row/row0upd.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r819: dict_col_t: Reduce ord_part to one bit. dict_index_add_to_cache(): Instead of incrementing ord_part, set it. dict_index_remove_from_cache(): Do not touch ord_part. dtype_t: Reduce mbminlen from 3 to 2 bits. row_upd(): Add a UNIV_LIKELY hint around node->in_mysql_interface. Revision r820: Remove dict_col_t::clust_pos. dict_col_get_clust_pos(): Add parameter clust_index. Replace the look-up with a linear search of all columns in the clustered index. row_upd_index_replace_new_col_vals(): Compute clust_index outside the loops. Compute clust_pos outside the inner loop. row_upd_changes_ord_field_binary(), row_upd_changes_first_fields_binary(): Compute clust_index outside the loops. Declare the auxiliary variables inside the loop scope. Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. Revision r851: row_upd_sec_step(): Fix false comment. storage/innobase/row/row0vers.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/srv/srv0srv.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. Revision r832: Add dict_table_get_col_name() in preparation for getting rid of dict_col_t::name, and use it instead of col->name everywhere. Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/srv/srv0start.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/sync/sync0arr.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/sync/sync0rw.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r813: Reduce the size of the data dictionary cache. (Bug #20877) dtype_t: Remove unused field "prec", which was supposed to be used for the precision of decimal columns in stand-alone InnoDB. dtype_get_prec(): Remove. dtype_set(), dict_mem_table_add_col(): Remove parameter "prec". dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len) into bit-fields. dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds. dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields. Replace the default clust_pos value ULINT_UNDEFINED with REC_MAX_N_FIELDS and replace all references to clust_pos with calls to the accessor function dict_col_get_clust_pos(). dict_field_t: Turn prefix_len and fixed_len into bit-fields. dict_tree_t: Remove pad[64]. dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded, cached, flags, stat_initialized, and autoinc_inited into bit-fields. Remove does_not_fit_in_memory from non-debug builds. dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols, n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields. dict_foreign_struct: Turn n_fields and type into bit-fields. rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields. Omit level unless #defined UNIV_SYNC_DEBUG. Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED) from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic. dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED. storage/innobase/sync/sync0sync.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/trx/trx0purge.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/trx/trx0rec.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r834: dict_col_t: Copy the fields of "dtype_t type" directly to this structure, so that all integer fields can be packed into 64 bits. (Bug #20877) dtype_t: Change the type of all bit-fields to unsigned. dict_table_get_nth_col(), dict_table_get_sys_col_noninline(), dict_table_get_sys_col(), dict_field_get_col(): Return const dict_col_t*, so that changes to dict_col_t can be detected more easily. Add const to many dict_col_t* declarations. dict_index_get_nth_type(): Replace with dict_index_get_nth_col(). dict_col_get_type(): Replace with dict_col_copy_type(). dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(), dict_col_get_sql_null_size(): New functions. dtype_get_at_most_n_mbchars(): Replace the parameter dtype with the parameters prtype, mbminlen, mbmaxlen. dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(), cmp_whole_field(): Replace the dtype_t* parameter with the ulint parameters mtype, prtype. dtype_copy(): Add a const qualifier to type2 (the one being copied from). dtype_set_mblen(): Replaced with dtype_get_mblen(). dtype_get_fixed_size_low(), dtype_get_min_size_low(), dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(), dtype_get_min_size(), and dtype_get_max_size(). These are used by the dict_col_get_{fixed,min,max}_size() functions. cmp_types_are_equal(): Replace with cmp_cols_are_equal(). dict_table_get_col_name(): Add a const qualifier parameter to the parameter "table". dtype_binary, dtype_binary_val: Remove. dtype_is_fixed_size(): Remove. Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/trx/trx0rseg.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/trx/trx0sys.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r829: Erase the magic number in the trx sys header using a redo-logged write; it should be redo-logged because the data structure is file-based; this patch does not fix any bug; the original erase operation was added in r781 to fix Valgrind Bug #20791 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/trx/trx0trx.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826. storage/innobase/trx/trx0undo.c: Applied innodb-5.1 snapshots ss799 and ss854 Revision r838: Revamp the line splits done in r763 and r764 that can now be done better, thanks to r826.
-rw-r--r--storage/innobase/btr/btr0btr.c443
-rw-r--r--storage/innobase/btr/btr0cur.c194
-rw-r--r--storage/innobase/btr/btr0pcur.c81
-rw-r--r--storage/innobase/btr/btr0sea.c171
-rw-r--r--storage/innobase/buf/buf0buf.c61
-rw-r--r--storage/innobase/buf/buf0flu.c4
-rw-r--r--storage/innobase/buf/buf0lru.c8
-rw-r--r--storage/innobase/buf/buf0rea.c16
-rw-r--r--storage/innobase/data/data0data.c8
-rw-r--r--storage/innobase/data/data0type.c56
-rw-r--r--storage/innobase/dict/dict0boot.c105
-rw-r--r--storage/innobase/dict/dict0crea.c75
-rw-r--r--storage/innobase/dict/dict0dict.c814
-rw-r--r--storage/innobase/dict/dict0load.c108
-rw-r--r--storage/innobase/dict/dict0mem.c104
-rw-r--r--storage/innobase/eval/eval0eval.c2
-rw-r--r--storage/innobase/eval/eval0proc.c4
-rw-r--r--storage/innobase/fil/fil0fil.c61
-rw-r--r--storage/innobase/fsp/fsp0fsp.c131
-rw-r--r--storage/innobase/handler/ha_innodb.cc51
-rw-r--r--storage/innobase/handler/ha_innodb.h2
-rw-r--r--storage/innobase/ibuf/ibuf0ibuf.c140
-rw-r--r--storage/innobase/include/btr0btr.h30
-rw-r--r--storage/innobase/include/btr0btr.ic2
-rw-r--r--storage/innobase/include/btr0cur.h12
-rw-r--r--storage/innobase/include/btr0cur.ic36
-rw-r--r--storage/innobase/include/btr0pcur.h12
-rw-r--r--storage/innobase/include/btr0sea.h49
-rw-r--r--storage/innobase/include/buf0buf.h7
-rw-r--r--storage/innobase/include/data0data.ic2
-rw-r--r--storage/innobase/include/data0type.h133
-rw-r--r--storage/innobase/include/data0type.ic268
-rw-r--r--storage/innobase/include/dict0boot.h2
-rw-r--r--storage/innobase/include/dict0dict.h224
-rw-r--r--storage/innobase/include/dict0dict.ic247
-rw-r--r--storage/innobase/include/dict0mem.h168
-rw-r--r--storage/innobase/include/dict0types.h1
-rw-r--r--storage/innobase/include/ibuf0ibuf.ic4
-rw-r--r--storage/innobase/include/page0page.h18
-rw-r--r--storage/innobase/include/page0page.ic50
-rw-r--r--storage/innobase/include/read0read.ic6
-rw-r--r--storage/innobase/include/rem0cmp.h23
-rw-r--r--storage/innobase/include/rem0cmp.ic18
-rw-r--r--storage/innobase/include/rem0rec.h5
-rw-r--r--storage/innobase/include/rem0rec.ic34
-rw-r--r--storage/innobase/include/rem0types.h4
-rw-r--r--storage/innobase/include/row0upd.ic4
-rw-r--r--storage/innobase/include/sync0rw.h23
-rw-r--r--storage/innobase/include/univ.i1
-rw-r--r--storage/innobase/lock/lock0lock.c117
-rw-r--r--storage/innobase/log/log0log.c95
-rw-r--r--storage/innobase/log/log0recv.c243
-rw-r--r--storage/innobase/mem/mem0dbg.c4
-rw-r--r--storage/innobase/mem/mem0pool.c4
-rw-r--r--storage/innobase/mtr/mtr0log.c32
-rw-r--r--storage/innobase/mtr/mtr0mtr.c6
-rw-r--r--storage/innobase/os/os0file.c12
-rw-r--r--storage/innobase/os/os0thread.c5
-rw-r--r--storage/innobase/page/page0cur.c40
-rw-r--r--storage/innobase/page/page0page.c6
-rw-r--r--storage/innobase/pars/pars0opt.c25
-rw-r--r--storage/innobase/pars/pars0pars.c97
-rw-r--r--storage/innobase/pars/pars0sym.c6
-rw-r--r--storage/innobase/read/read0read.c21
-rw-r--r--storage/innobase/rem/rem0cmp.c187
-rw-r--r--storage/innobase/rem/rem0rec.c84
-rw-r--r--storage/innobase/row/row0ins.c273
-rw-r--r--storage/innobase/row/row0mysql.c256
-rw-r--r--storage/innobase/row/row0purge.c22
-rw-r--r--storage/innobase/row/row0row.c89
-rw-r--r--storage/innobase/row/row0sel.c293
-rw-r--r--storage/innobase/row/row0uins.c4
-rw-r--r--storage/innobase/row/row0umod.c50
-rw-r--r--storage/innobase/row/row0upd.c175
-rw-r--r--storage/innobase/row/row0vers.c6
-rw-r--r--storage/innobase/srv/srv0srv.c30
-rw-r--r--storage/innobase/srv/srv0start.c59
-rw-r--r--storage/innobase/sync/sync0arr.c12
-rw-r--r--storage/innobase/sync/sync0rw.c5
-rw-r--r--storage/innobase/sync/sync0sync.c14
-rw-r--r--storage/innobase/trx/trx0purge.c22
-rw-r--r--storage/innobase/trx/trx0rec.c38
-rw-r--r--storage/innobase/trx/trx0rseg.c12
-rw-r--r--storage/innobase/trx/trx0sys.c91
-rw-r--r--storage/innobase/trx/trx0trx.c40
-rw-r--r--storage/innobase/trx/trx0undo.c20
86 files changed, 3280 insertions, 3237 deletions
diff --git a/storage/innobase/btr/btr0btr.c b/storage/innobase/btr/btr0btr.c
index 095ef6f02df..ffaf2065045 100644
--- a/storage/innobase/btr/btr0btr.c
+++ b/storage/innobase/btr/btr0btr.c
@@ -77,16 +77,6 @@ make them consecutive on disk if possible. From the other file segment
we allocate pages for the non-leaf levels of the tree.
*/
-/******************************************************************
-Creates a new index page to the tree (not the root, and also not
-used in page reorganization). */
-static
-void
-btr_page_create(
-/*============*/
- page_t* page, /* in: page to be created */
- dict_tree_t* tree, /* in: index tree */
- mtr_t* mtr); /* in: mtr */
/****************************************************************
Returns the upper level node pointer to a page. It is assumed that
mtr holds an x-latch on the tree. */
@@ -95,7 +85,7 @@ rec_t*
btr_page_get_father_node_ptr(
/*=========================*/
/* out: pointer to node pointer record */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
page_t* page, /* in: page: must contain at least one
user record */
mtr_t* mtr); /* in: mtr */
@@ -132,19 +122,18 @@ page_t*
btr_root_get(
/*=========*/
/* out: root page, x-latched */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
mtr_t* mtr) /* in: mtr */
{
ulint space;
ulint root_page_no;
page_t* root;
- space = dict_tree_get_space(tree);
- root_page_no = dict_tree_get_page(tree);
+ space = dict_index_get_space(index);
+ root_page_no = dict_index_get_page(index);
root = btr_page_get(space, root_page_no, RW_X_LATCH, mtr);
- ut_a((ibool)!!page_is_comp(root)
- == dict_table_is_comp(tree->tree_index->table));
+ ut_a((ibool)!!page_is_comp(root) == dict_table_is_comp(index->table));
return(root);
}
@@ -254,23 +243,22 @@ btr_get_next_user_rec(
}
/******************************************************************
-Creates a new index page to the tree (not the root, and also not used in
-page reorganization). */
+Creates a new index page (not the root, and also not
+used in page reorganization). */
static
void
btr_page_create(
/*============*/
page_t* page, /* in: page to be created */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index */
mtr_t* mtr) /* in: mtr */
{
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
MTR_MEMO_PAGE_X_FIX));
- page_create(page, mtr,
- dict_table_is_comp(tree->tree_index->table));
+ page_create(page, mtr, dict_table_is_comp(index->table));
buf_block_align(page)->check_index_page_at_flush = TRUE;
- btr_page_set_index_id(page, tree->id, mtr);
+ btr_page_set_index_id(page, index->id, mtr);
}
/******************************************************************
@@ -281,20 +269,20 @@ page_t*
btr_page_alloc_for_ibuf(
/*====================*/
/* out: new allocated page, x-latched */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
mtr_t* mtr) /* in: mtr */
{
fil_addr_t node_addr;
page_t* root;
page_t* new_page;
- root = btr_root_get(tree, mtr);
+ root = btr_root_get(index, mtr);
node_addr = flst_get_first(root + PAGE_HEADER
+ PAGE_BTR_IBUF_FREE_LIST, mtr);
ut_a(node_addr.page != FIL_NULL);
- new_page = buf_page_get(dict_tree_get_space(tree), node_addr.page,
+ new_page = buf_page_get(dict_index_get_space(index), node_addr.page,
RW_X_LATCH, mtr);
#ifdef UNIV_SYNC_DEBUG
buf_page_dbg_add_level(new_page, SYNC_TREE_NODE_NEW);
@@ -318,7 +306,7 @@ btr_page_alloc(
/*===========*/
/* out: new allocated page, x-latched;
NULL if out of space */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index */
ulint hint_page_no, /* in: hint of a good page */
byte file_direction, /* in: direction where a possible
page split is made */
@@ -331,12 +319,12 @@ btr_page_alloc(
page_t* new_page;
ulint new_page_no;
- if (tree->type & DICT_IBUF) {
+ if (index->type & DICT_IBUF) {
- return(btr_page_alloc_for_ibuf(tree, mtr));
+ return(btr_page_alloc_for_ibuf(index, mtr));
}
- root = btr_root_get(tree, mtr);
+ root = btr_root_get(index, mtr);
if (level == 0) {
seg_header = root + PAGE_HEADER + PAGE_BTR_SEG_LEAF;
@@ -355,7 +343,7 @@ btr_page_alloc(
return(NULL);
}
- new_page = buf_page_get(dict_tree_get_space(tree), new_page_no,
+ new_page = buf_page_get(dict_index_get_space(index), new_page_no,
RW_X_LATCH, mtr);
#ifdef UNIV_SYNC_DEBUG
buf_page_dbg_add_level(new_page, SYNC_TREE_NODE_NEW);
@@ -382,9 +370,9 @@ btr_get_size(
mtr_start(&mtr);
- mtr_s_lock(dict_tree_get_lock(index->tree), &mtr);
+ mtr_s_lock(dict_index_get_lock(index), &mtr);
- root = btr_root_get(index->tree, &mtr);
+ root = btr_root_get(index, &mtr);
if (flag == BTR_N_LEAF_PAGES) {
seg_header = root + PAGE_HEADER + PAGE_BTR_SEG_LEAF;
@@ -415,7 +403,7 @@ static
void
btr_page_free_for_ibuf(
/*===================*/
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
page_t* page, /* in: page to be freed, x-latched */
mtr_t* mtr) /* in: mtr */
{
@@ -423,7 +411,7 @@ btr_page_free_for_ibuf(
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
MTR_MEMO_PAGE_X_FIX));
- root = btr_root_get(tree, mtr);
+ root = btr_root_get(index, mtr);
flst_add_first(root + PAGE_HEADER + PAGE_BTR_IBUF_FREE_LIST,
page + PAGE_HEADER + PAGE_BTR_IBUF_FREE_LIST_NODE, mtr);
@@ -440,7 +428,7 @@ argument. */
void
btr_page_free_low(
/*==============*/
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
page_t* page, /* in: page to be freed, x-latched */
ulint level, /* in: page level */
mtr_t* mtr) /* in: mtr */
@@ -457,14 +445,14 @@ btr_page_free_low(
buf_frame_modify_clock_inc(page);
- if (tree->type & DICT_IBUF) {
+ if (index->type & DICT_IBUF) {
- btr_page_free_for_ibuf(tree, page, mtr);
+ btr_page_free_for_ibuf(index, page, mtr);
return;
}
- root = btr_root_get(tree, mtr);
+ root = btr_root_get(index, mtr);
if (level == 0) {
seg_header = root + PAGE_HEADER + PAGE_BTR_SEG_LEAF;
@@ -485,7 +473,7 @@ storage pages because the page must contain info on its level. */
void
btr_page_free(
/*==========*/
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
page_t* page, /* in: page to be freed, x-latched */
mtr_t* mtr) /* in: mtr */
{
@@ -495,7 +483,7 @@ btr_page_free(
MTR_MEMO_PAGE_X_FIX));
level = btr_page_get_level(page, mtr);
- btr_page_free_low(tree, page, level, mtr);
+ btr_page_free_low(index, page, level, mtr);
}
/******************************************************************
@@ -558,7 +546,7 @@ btr_page_get_father_for_rec(
/*========================*/
/* out: pointer to node pointer record,
its page x-latched */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
page_t* page, /* in: page: must contain at least one
user record */
rec_t* user_rec,/* in: user_record on page */
@@ -568,22 +556,20 @@ btr_page_get_father_for_rec(
dtuple_t* tuple;
btr_cur_t cursor;
rec_t* node_ptr;
- dict_index_t* index;
ulint offsets_[REC_OFFS_NORMAL_SIZE];
ulint* offsets = offsets_;
*offsets_ = (sizeof offsets_) / sizeof *offsets_;
- ut_ad(mtr_memo_contains(mtr, dict_tree_get_lock(tree),
+ ut_ad(mtr_memo_contains(mtr, dict_index_get_lock(index),
MTR_MEMO_X_LOCK));
ut_a(page_rec_is_user_rec(user_rec));
- ut_ad(dict_tree_get_page(tree) != buf_frame_get_page_no(page));
+ ut_ad(dict_index_get_page(index) != buf_frame_get_page_no(page));
heap = mem_heap_create(100);
- tuple = dict_tree_build_node_ptr(tree, user_rec, 0, heap,
- btr_page_get_level(page, mtr));
- index = tree->tree_index;
+ tuple = dict_index_build_node_ptr(index, user_rec, 0, heap,
+ btr_page_get_level(page, mtr));
/* In the following, we choose just any index from the tree as the
first parameter for btr_cur_search_to_nth_level. */
@@ -647,14 +633,14 @@ rec_t*
btr_page_get_father_node_ptr(
/*=========================*/
/* out: pointer to node pointer record */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
page_t* page, /* in: page: must contain at least one
user record */
mtr_t* mtr) /* in: mtr */
{
- return(btr_page_get_father_for_rec
- (tree, page,
- page_rec_get_next(page_get_infimum_rec(page)), mtr));
+ return(btr_page_get_father_for_rec(
+ index, page,
+ page_rec_get_next(page_get_infimum_rec(page)), mtr));
}
/****************************************************************
@@ -683,8 +669,8 @@ btr_create(
if (type & DICT_IBUF) {
/* Allocate first the ibuf header page */
- ibuf_hdr_frame = fseg_create
- (space, 0, IBUF_HEADER + IBUF_TREE_SEG_HEADER, mtr);
+ ibuf_hdr_frame = fseg_create(
+ space, 0, IBUF_HEADER + IBUF_TREE_SEG_HEADER, mtr);
#ifdef UNIV_SYNC_DEBUG
buf_page_dbg_add_level(ibuf_hdr_frame, SYNC_TREE_NODE_NEW);
@@ -786,8 +772,8 @@ leaf_loop:
/* NOTE: page hash indexes are dropped when a page is freed inside
fsp0fsp. */
- finished = fseg_free_step
- (root + PAGE_HEADER + PAGE_BTR_SEG_LEAF, &mtr);
+ finished = fseg_free_step(root + PAGE_HEADER + PAGE_BTR_SEG_LEAF,
+ &mtr);
mtr_commit(&mtr);
if (!finished) {
@@ -799,8 +785,8 @@ top_loop:
root = btr_page_get(space, root_page_no, RW_X_LATCH, &mtr);
- finished = fseg_free_step_not_header
- (root + PAGE_HEADER + PAGE_BTR_SEG_TOP, &mtr);
+ finished = fseg_free_step_not_header(
+ root + PAGE_HEADER + PAGE_BTR_SEG_TOP, &mtr);
mtr_commit(&mtr);
if (!finished) {
@@ -827,8 +813,7 @@ btr_free_root(
btr_search_drop_page_hash_index(root);
top_loop:
- finished = fseg_free_step
- (root + PAGE_HEADER + PAGE_BTR_SEG_TOP, mtr);
+ finished = fseg_free_step(root + PAGE_HEADER + PAGE_BTR_SEG_TOP, mtr);
if (!finished) {
goto top_loop;
@@ -1000,7 +985,7 @@ btr_root_raise_and_insert(
dtuple_t* tuple, /* in: tuple to insert */
mtr_t* mtr) /* in: mtr */
{
- dict_tree_t* tree;
+ dict_index_t* index;
page_t* root;
page_t* new_page;
ulint new_page_no;
@@ -1012,10 +997,10 @@ btr_root_raise_and_insert(
page_cur_t* page_cursor;
root = btr_cur_get_page(cursor);
- tree = btr_cur_get_tree(cursor);
+ index = btr_cur_get_index(cursor);
- ut_ad(dict_tree_get_page(tree) == buf_frame_get_page_no(root));
- ut_ad(mtr_memo_contains(mtr, dict_tree_get_lock(tree),
+ ut_ad(dict_index_get_page(index) == buf_frame_get_page_no(root));
+ ut_ad(mtr_memo_contains(mtr, dict_index_get_lock(index),
MTR_MEMO_X_LOCK));
ut_ad(mtr_memo_contains(mtr, buf_block_align(root),
MTR_MEMO_PAGE_X_FIX));
@@ -1025,10 +1010,10 @@ btr_root_raise_and_insert(
moving the root records to the new page, emptying the root, putting
a node pointer to the new page, and then splitting the new page. */
- new_page = btr_page_alloc(tree, 0, FSP_NO_DIR,
+ new_page = btr_page_alloc(index, 0, FSP_NO_DIR,
btr_page_get_level(root, mtr), mtr);
- btr_page_create(new_page, tree, mtr);
+ btr_page_create(new_page, index, mtr);
level = btr_page_get_level(root, mtr);
@@ -1043,7 +1028,7 @@ btr_root_raise_and_insert(
/* Move the records from root to the new page */
page_move_rec_list_end(new_page, root, page_get_infimum_rec(root),
- cursor->index, mtr);
+ index, mtr);
/* If this is a pessimistic insert which is actually done to
perform a pessimistic update then we have stored the lock
information of the record to be inserted on the infimum of the
@@ -1060,10 +1045,10 @@ btr_root_raise_and_insert(
/* Build the node pointer (= node key and page address) for the
child */
- node_ptr = dict_tree_build_node_ptr(tree, rec, new_page_no, heap,
- level);
+ node_ptr = dict_index_build_node_ptr(index, rec, new_page_no, heap,
+ level);
/* Reorganize the root to get free space */
- btr_page_reorganize(root, cursor->index, mtr);
+ btr_page_reorganize(root, index, mtr);
page_cursor = btr_cur_get_page_cur(cursor);
@@ -1072,7 +1057,7 @@ btr_root_raise_and_insert(
page_cur_set_before_first(root, page_cursor);
node_ptr_rec = page_cur_tuple_insert(page_cursor, node_ptr,
- cursor->index, mtr);
+ index, mtr);
ut_ad(node_ptr_rec);
@@ -1092,9 +1077,9 @@ btr_root_raise_and_insert(
buf_frame_get_page_no(new_page));
#endif
- ibuf_reset_free_bits(tree->tree_index, new_page);
+ ibuf_reset_free_bits(index, new_page);
/* Reposition the cursor to the child node */
- page_cur_search(new_page, cursor->index, tuple,
+ page_cur_search(new_page, index, tuple,
PAGE_CUR_LE, page_cursor);
/* Split the child and insert tuple */
@@ -1419,7 +1404,7 @@ that mtr holds an x-latch on the tree. */
void
btr_insert_on_non_leaf_level(
/*=========================*/
- dict_tree_t* tree, /* in: tree */
+ dict_index_t* index, /* in: index */
ulint level, /* in: level, must be > 0 */
dtuple_t* tuple, /* in: the record to be inserted */
mtr_t* mtr) /* in: mtr */
@@ -1431,11 +1416,7 @@ btr_insert_on_non_leaf_level(
ut_ad(level > 0);
- /* In the following, choose just any index from the tree as the
- first parameter for btr_cur_search_to_nth_level. */
-
- btr_cur_search_to_nth_level(tree->tree_index,
- level, tuple, PAGE_CUR_LE,
+ btr_cur_search_to_nth_level(index, level, tuple, PAGE_CUR_LE,
BTR_CONT_MODIFY_TREE,
&cursor, 0, mtr);
@@ -1454,7 +1435,7 @@ static
void
btr_attach_half_pages(
/*==================*/
- dict_tree_t* tree, /* in: the index tree */
+ dict_index_t* index, /* in: the index tree */
page_t* page, /* in: page to be split */
rec_t* split_rec, /* in: first record on upper
half page */
@@ -1493,15 +1474,17 @@ btr_attach_half_pages(
lower_page = new_page;
upper_page = page;
- /* Look from the tree for the node pointer to page */
- node_ptr = btr_page_get_father_node_ptr(tree, page, mtr);
+ /* Look up the index for the node pointer to page */
+ node_ptr = btr_page_get_father_node_ptr(index, page, mtr);
/* Replace the address of the old child node (= page) with the
address of the new lower half */
- btr_node_ptr_set_child_page_no(node_ptr, rec_get_offsets
- (node_ptr, tree->tree_index,
- NULL, ULINT_UNDEFINED, &heap),
+ btr_node_ptr_set_child_page_no(node_ptr,
+ rec_get_offsets(
+ node_ptr, index,
+ NULL, ULINT_UNDEFINED,
+ &heap),
lower_page_no, mtr);
mem_heap_empty(heap);
} else {
@@ -1517,13 +1500,13 @@ btr_attach_half_pages(
/* Build the node pointer (= node key and page address) for the upper
half */
- node_ptr_upper = dict_tree_build_node_ptr(tree, split_rec,
- upper_page_no, heap, level);
+ node_ptr_upper = dict_index_build_node_ptr(index, split_rec,
+ upper_page_no, heap, level);
/* Insert it next to the pointer to the lower half. Note that this
may generate recursion leading to a split on the higher level. */
- btr_insert_on_non_leaf_level(tree, level + 1, node_ptr_upper, mtr);
+ btr_insert_on_non_leaf_level(index, level + 1, node_ptr_upper, mtr);
/* Free the memory heap */
mem_heap_free(heap);
@@ -1585,7 +1568,6 @@ btr_page_split_and_insert(
dtuple_t* tuple, /* in: tuple to insert */
mtr_t* mtr) /* in: mtr */
{
- dict_tree_t* tree;
page_t* page;
ulint page_no;
byte direction;
@@ -1611,12 +1593,11 @@ btr_page_split_and_insert(
func_start:
mem_heap_empty(heap);
offsets = NULL;
- tree = btr_cur_get_tree(cursor);
- ut_ad(mtr_memo_contains(mtr, dict_tree_get_lock(tree),
+ ut_ad(mtr_memo_contains(mtr, dict_index_get_lock(cursor->index),
MTR_MEMO_X_LOCK));
#ifdef UNIV_SYNC_DEBUG
- ut_ad(rw_lock_own(dict_tree_get_lock(tree), RW_LOCK_EX));
+ ut_ad(rw_lock_own(dict_index_get_lock(cursor->index), RW_LOCK_EX));
#endif /* UNIV_SYNC_DEBUG */
page = btr_cur_get_page(cursor);
@@ -1649,10 +1630,10 @@ func_start:
split_rec = page_get_middle_rec(page);
}
- /* 2. Allocate a new page to the tree */
- new_page = btr_page_alloc(tree, hint_page_no, direction,
+ /* 2. Allocate a new page to the index */
+ new_page = btr_page_alloc(cursor->index, hint_page_no, direction,
btr_page_get_level(page, mtr), mtr);
- btr_page_create(new_page, tree, mtr);
+ btr_page_create(new_page, cursor->index, mtr);
/* 3. Calculate the first record on the upper half-page, and the
first record (move_limit) on original page which ends up on the
@@ -1671,7 +1652,8 @@ func_start:
/* 4. Do first the modifications in the tree structure */
- btr_attach_half_pages(tree, page, first_rec, new_page, direction, mtr);
+ btr_attach_half_pages(cursor->index, page, first_rec,
+ new_page, direction, mtr);
if (split_rec == NULL) {
mem_free(buf);
@@ -1697,7 +1679,7 @@ func_start:
if (insert_will_fit && (btr_page_get_level(page, mtr) == 0)) {
- mtr_memo_release(mtr, dict_tree_get_lock(tree),
+ mtr_memo_release(mtr, dict_index_get_lock(cursor->index),
MTR_MEMO_X_LOCK);
}
@@ -1797,8 +1779,8 @@ func_start:
buf_frame_get_page_no(right_page));
#endif
- ut_ad(page_validate(left_page, tree->tree_index));
- ut_ad(page_validate(right_page, tree->tree_index));
+ ut_ad(page_validate(left_page, cursor->index));
+ ut_ad(page_validate(right_page, cursor->index));
mem_heap_free(heap);
return(rec);
@@ -1810,7 +1792,6 @@ static
void
btr_level_list_remove(
/*==================*/
- dict_tree_t* tree __attribute__((unused)), /* in: index tree */
page_t* page, /* in: page to remove */
mtr_t* mtr) /* in: mtr */
{
@@ -1820,7 +1801,7 @@ btr_level_list_remove(
ulint next_page_no;
page_t* next_page;
- ut_ad(tree && page && mtr);
+ ut_ad(page && mtr);
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
MTR_MEMO_PAGE_X_FIX));
/* Get the previous and next page numbers of page */
@@ -1867,12 +1848,11 @@ btr_set_min_rec_mark_log(
ulint comp, /* nonzero=compact record format */
mtr_t* mtr) /* in: mtr */
{
- mlog_write_initial_log_record
- (rec, comp ? MLOG_COMP_REC_MIN_MARK : MLOG_REC_MIN_MARK, mtr);
+ mlog_write_initial_log_record(
+ rec, comp ? MLOG_COMP_REC_MIN_MARK : MLOG_REC_MIN_MARK, mtr);
/* Write rec offset as a 2-byte ulint */
- mlog_catenate_ulint(mtr, ut_align_offset(rec, UNIV_PAGE_SIZE),
- MLOG_2BYTES);
+ mlog_catenate_ulint(mtr, page_offset(rec), MLOG_2BYTES);
}
/********************************************************************
@@ -1932,7 +1912,7 @@ Deletes on the upper level the node pointer to a page. */
void
btr_node_ptr_delete(
/*================*/
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
page_t* page, /* in: page whose node pointer is deleted */
mtr_t* mtr) /* in: mtr */
{
@@ -1945,9 +1925,9 @@ btr_node_ptr_delete(
MTR_MEMO_PAGE_X_FIX));
/* Delete node pointer on father page */
- node_ptr = btr_page_get_father_node_ptr(tree, page, mtr);
+ node_ptr = btr_page_get_father_node_ptr(index, page, mtr);
- btr_cur_position(tree->tree_index, node_ptr, &cursor);
+ btr_cur_position(index, node_ptr, &cursor);
compressed = btr_cur_pessimistic_delete(&err, TRUE, &cursor, FALSE,
mtr);
ut_a(err == DB_SUCCESS);
@@ -1964,7 +1944,7 @@ static
void
btr_lift_page_up(
/*=============*/
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
page_t* page, /* in: page which is the only on its level;
must not be empty: use
btr_discard_only_page_on_level if the last
@@ -1973,17 +1953,15 @@ btr_lift_page_up(
{
page_t* father_page;
ulint page_level;
- dict_index_t* index;
ut_ad(btr_page_get_prev(page, mtr) == FIL_NULL);
ut_ad(btr_page_get_next(page, mtr) == FIL_NULL);
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
MTR_MEMO_PAGE_X_FIX));
- father_page = buf_frame_align
- (btr_page_get_father_node_ptr(tree, page, mtr));
+ father_page = buf_frame_align(
+ btr_page_get_father_node_ptr(index, page, mtr));
page_level = btr_page_get_level(page, mtr);
- index = tree->tree_index;
btr_search_drop_page_hash_index(page);
@@ -1998,12 +1976,12 @@ btr_lift_page_up(
btr_page_set_level(father_page, page_level, mtr);
/* Free the file page */
- btr_page_free(tree, page, mtr);
+ btr_page_free(index, page, mtr);
/* We play safe and reset the free bits for the father */
ibuf_reset_free_bits(index, father_page);
ut_ad(page_validate(father_page, index));
- ut_ad(btr_check_node_ptr(tree, father_page, mtr));
+ ut_ad(btr_check_node_ptr(index, father_page, mtr));
}
/*****************************************************************
@@ -2026,7 +2004,7 @@ btr_compress(
empty */
mtr_t* mtr) /* in: mtr */
{
- dict_tree_t* tree;
+ dict_index_t* index;
ulint space;
ulint left_page_no;
ulint right_page_no;
@@ -2045,16 +2023,16 @@ btr_compress(
ulint comp;
page = btr_cur_get_page(cursor);
- tree = btr_cur_get_tree(cursor);
+ index = btr_cur_get_index(cursor);
comp = page_is_comp(page);
- ut_a((ibool)!!comp == dict_table_is_comp(cursor->index->table));
+ ut_a((ibool)!!comp == dict_table_is_comp(index->table));
- ut_ad(mtr_memo_contains(mtr, dict_tree_get_lock(tree),
+ ut_ad(mtr_memo_contains(mtr, dict_index_get_lock(index),
MTR_MEMO_X_LOCK));
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
MTR_MEMO_PAGE_X_FIX));
level = btr_page_get_level(page, mtr);
- space = dict_tree_get_space(tree);
+ space = dict_index_get_space(index);
left_page_no = btr_page_get_prev(page, mtr);
right_page_no = btr_page_get_next(page, mtr);
@@ -2064,7 +2042,7 @@ btr_compress(
left_page_no, right_page_no);
#endif
- node_ptr = btr_page_get_father_node_ptr(tree, page, mtr);
+ node_ptr = btr_page_get_father_node_ptr(index, page, mtr);
ut_ad(!comp || rec_get_status(node_ptr) == REC_STATUS_NODE_PTR);
father_page = buf_frame_align(node_ptr);
ut_a(comp == page_is_comp(father_page));
@@ -2093,7 +2071,7 @@ btr_compress(
} else {
/* The page is the only one on the level, lift the records
to the father */
- btr_lift_page_up(tree, page, mtr);
+ btr_lift_page_up(index, page, mtr);
return;
}
@@ -2102,8 +2080,8 @@ btr_compress(
data_size = page_get_data_size(page);
ut_a(page_is_comp(merge_page) == comp);
- max_ins_size_reorg = page_get_max_insert_size_after_reorganize
- (merge_page, n_recs);
+ max_ins_size_reorg = page_get_max_insert_size_after_reorganize(
+ merge_page, n_recs);
if (data_size > max_ins_size_reorg) {
/* No space for merge */
@@ -2111,7 +2089,7 @@ btr_compress(
return;
}
- ut_ad(page_validate(merge_page, cursor->index));
+ ut_ad(page_validate(merge_page, index));
max_ins_size = page_get_max_insert_size(merge_page, n_recs);
@@ -2119,11 +2097,11 @@ btr_compress(
/* We have to reorganize merge_page */
- btr_page_reorganize(merge_page, cursor->index, mtr);
+ btr_page_reorganize(merge_page, index, mtr);
max_ins_size = page_get_max_insert_size(merge_page, n_recs);
- ut_ad(page_validate(merge_page, cursor->index));
+ ut_ad(page_validate(merge_page, index));
ut_ad(page_get_max_insert_size(merge_page, n_recs)
== max_ins_size_reorg);
}
@@ -2138,10 +2116,10 @@ btr_compress(
btr_search_drop_page_hash_index(page);
/* Remove the page from the level list */
- btr_level_list_remove(tree, page, mtr);
+ btr_level_list_remove(page, mtr);
if (is_left) {
- btr_node_ptr_delete(tree, page, mtr);
+ btr_node_ptr_delete(index, page, mtr);
} else {
mem_heap_t* heap = NULL;
ulint offsets_[REC_OFFS_NORMAL_SIZE];
@@ -2149,46 +2127,48 @@ btr_compress(
/* Replace the address of the old child node (= page) with the
address of the merge page to the right */
- btr_node_ptr_set_child_page_no(node_ptr, rec_get_offsets
- (node_ptr, cursor->index,
- offsets_, ULINT_UNDEFINED,
- &heap),
+ btr_node_ptr_set_child_page_no(node_ptr,
+ rec_get_offsets(
+ node_ptr, index,
+ offsets_,
+ ULINT_UNDEFINED,
+ &heap),
right_page_no, mtr);
if (UNIV_LIKELY_NULL(heap)) {
mem_heap_free(heap);
}
- btr_node_ptr_delete(tree, merge_page, mtr);
+ btr_node_ptr_delete(index, merge_page, mtr);
}
/* Move records to the merge page */
if (is_left) {
- orig_pred = page_rec_get_prev
- (page_get_supremum_rec(merge_page));
+ orig_pred = page_rec_get_prev(
+ page_get_supremum_rec(merge_page));
page_copy_rec_list_start(merge_page, page,
page_get_supremum_rec(page),
- cursor->index, mtr);
+ index, mtr);
lock_update_merge_left(merge_page, orig_pred, page);
} else {
- orig_succ = page_rec_get_next
- (page_get_infimum_rec(merge_page));
+ orig_succ = page_rec_get_next(
+ page_get_infimum_rec(merge_page));
page_copy_rec_list_end(merge_page, page,
page_get_infimum_rec(page),
- cursor->index, mtr);
+ index, mtr);
lock_update_merge_right(orig_succ, page);
}
/* We have added new records to merge_page: update its free bits */
- ibuf_update_free_bits_if_full(cursor->index, merge_page,
+ ibuf_update_free_bits_if_full(index, merge_page,
UNIV_PAGE_SIZE, ULINT_UNDEFINED);
- ut_ad(page_validate(merge_page, cursor->index));
+ ut_ad(page_validate(merge_page, index));
/* Free the file page */
- btr_page_free(tree, page, mtr);
+ btr_page_free(index, page, mtr);
- ut_ad(btr_check_node_ptr(tree, merge_page, mtr));
+ ut_ad(btr_check_node_ptr(index, merge_page, mtr));
}
/*****************************************************************
@@ -2197,7 +2177,7 @@ static
void
btr_discard_only_page_on_level(
/*===========================*/
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
page_t* page, /* in: page which is the only on its level */
mtr_t* mtr) /* in: mtr */
{
@@ -2211,7 +2191,7 @@ btr_discard_only_page_on_level(
MTR_MEMO_PAGE_X_FIX));
btr_search_drop_page_hash_index(page);
- node_ptr = btr_page_get_father_node_ptr(tree, page, mtr);
+ node_ptr = btr_page_get_father_node_ptr(index, page, mtr);
father_page = buf_frame_align(node_ptr);
page_level = btr_page_get_level(page, mtr);
@@ -2221,19 +2201,19 @@ btr_discard_only_page_on_level(
btr_page_set_level(father_page, page_level, mtr);
/* Free the file page */
- btr_page_free(tree, page, mtr);
+ btr_page_free(index, page, mtr);
- if (buf_frame_get_page_no(father_page) == dict_tree_get_page(tree)) {
+ if (buf_frame_get_page_no(father_page) == dict_index_get_page(index)) {
/* The father is the root page */
btr_page_empty(father_page, mtr);
/* We play safe and reset the free bits for the father */
- ibuf_reset_free_bits(tree->tree_index, father_page);
+ ibuf_reset_free_bits(index, father_page);
} else {
ut_ad(page_get_n_recs(father_page) == 1);
- btr_discard_only_page_on_level(tree, father_page, mtr);
+ btr_discard_only_page_on_level(index, father_page, mtr);
}
}
@@ -2249,7 +2229,7 @@ btr_discard_page(
the root page */
mtr_t* mtr) /* in: mtr */
{
- dict_tree_t* tree;
+ dict_index_t* index;
ulint space;
ulint left_page_no;
ulint right_page_no;
@@ -2258,14 +2238,14 @@ btr_discard_page(
rec_t* node_ptr;
page = btr_cur_get_page(cursor);
- tree = btr_cur_get_tree(cursor);
+ index = btr_cur_get_index(cursor);
- ut_ad(dict_tree_get_page(tree) != buf_frame_get_page_no(page));
- ut_ad(mtr_memo_contains(mtr, dict_tree_get_lock(tree),
+ ut_ad(dict_index_get_page(index) != buf_frame_get_page_no(page));
+ ut_ad(mtr_memo_contains(mtr, dict_index_get_lock(index),
MTR_MEMO_X_LOCK));
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
MTR_MEMO_PAGE_X_FIX));
- space = dict_tree_get_space(tree);
+ space = dict_index_get_space(index);
/* Decide the page which will inherit the locks */
@@ -2287,7 +2267,7 @@ btr_discard_page(
== buf_frame_get_page_no(page));
#endif /* UNIV_BTR_DEBUG */
} else {
- btr_discard_only_page_on_level(tree, page, mtr);
+ btr_discard_only_page_on_level(index, page, mtr);
return;
}
@@ -2307,22 +2287,23 @@ btr_discard_page(
btr_set_min_rec_mark(node_ptr, page_is_comp(merge_page), mtr);
}
- btr_node_ptr_delete(tree, page, mtr);
+ btr_node_ptr_delete(index, page, mtr);
/* Remove the page from the level list */
- btr_level_list_remove(tree, page, mtr);
+ btr_level_list_remove(page, mtr);
if (left_page_no != FIL_NULL) {
lock_update_discard(page_get_supremum_rec(merge_page), page);
} else {
- lock_update_discard(page_rec_get_next
- (page_get_infimum_rec(merge_page)), page);
+ lock_update_discard(page_rec_get_next(
+ page_get_infimum_rec(merge_page)),
+ page);
}
/* Free the file page */
- btr_page_free(tree, page, mtr);
+ btr_page_free(index, page, mtr);
- ut_ad(btr_check_node_ptr(tree, merge_page, mtr));
+ ut_ad(btr_check_node_ptr(index, merge_page, mtr));
}
#ifdef UNIV_BTR_PRINT
@@ -2332,13 +2313,13 @@ Prints size info of a B-tree. */
void
btr_print_size(
/*===========*/
- dict_tree_t* tree) /* in: index tree */
+ dict_index_t* index) /* in: index tree */
{
page_t* root;
fseg_header_t* seg;
mtr_t mtr;
- if (tree->type & DICT_IBUF) {
+ if (index->type & DICT_IBUF) {
fputs("Sorry, cannot print info of an ibuf tree:"
" use ibuf functions\n", stderr);
@@ -2347,14 +2328,14 @@ btr_print_size(
mtr_start(&mtr);
- root = btr_root_get(tree, &mtr);
+ root = btr_root_get(index, &mtr);
seg = root + PAGE_HEADER + PAGE_BTR_SEG_TOP;
fputs("INFO OF THE NON-LEAF PAGE SEGMENT\n", stderr);
fseg_print(seg, &mtr);
- if (!(tree->type & DICT_UNIVERSAL)) {
+ if (!(index->type & DICT_UNIVERSAL)) {
seg = root + PAGE_HEADER + PAGE_BTR_SEG_LEAF;
@@ -2371,7 +2352,7 @@ static
void
btr_print_recursive(
/*================*/
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
page_t* page, /* in: index page */
ulint width, /* in: print this many entries from start
and end */
@@ -2385,7 +2366,6 @@ btr_print_recursive(
mtr_t mtr2;
rec_t* node_ptr;
page_t* child;
- dict_index_t* index;
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
MTR_MEMO_PAGE_X_FIX));
@@ -2393,7 +2373,6 @@ btr_print_recursive(
(ulong) btr_page_get_level(page, mtr),
(ulong) buf_frame_get_page_no(page));
- index = UT_LIST_GET_FIRST(tree->tree_indexes);
page_print(page, index, width, width);
n_recs = page_get_n_recs(page);
@@ -2417,7 +2396,7 @@ btr_print_recursive(
ULINT_UNDEFINED, heap);
child = btr_node_ptr_get_child(node_ptr,
*offsets, &mtr2);
- btr_print_recursive(tree, child, width,
+ btr_print_recursive(index, child, width,
heap, offsets, &mtr2);
mtr_commit(&mtr2);
}
@@ -2431,9 +2410,9 @@ btr_print_recursive(
Prints directories and other info of all nodes in the tree. */
void
-btr_print_tree(
-/*===========*/
- dict_tree_t* tree, /* in: tree */
+btr_print_index(
+/*============*/
+ dict_index_t* index, /* in: index */
ulint width) /* in: print this many entries from start
and end */
{
@@ -2449,16 +2428,16 @@ btr_print_tree(
mtr_start(&mtr);
- root = btr_root_get(tree, &mtr);
+ root = btr_root_get(index, &mtr);
- btr_print_recursive(tree, root, width, &heap, &offsets, &mtr);
+ btr_print_recursive(index, root, width, &heap, &offsets, &mtr);
if (UNIV_LIKELY_NULL(heap)) {
mem_heap_free(heap);
}
mtr_commit(&mtr);
- btr_validate_tree(tree, NULL);
+ btr_validate_index(index, NULL);
}
#endif /* UNIV_BTR_PRINT */
@@ -2470,7 +2449,7 @@ ibool
btr_check_node_ptr(
/*===============*/
/* out: TRUE */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
page_t* page, /* in: index page */
mtr_t* mtr) /* in: mtr */
{
@@ -2480,12 +2459,12 @@ btr_check_node_ptr(
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
MTR_MEMO_PAGE_X_FIX));
- if (dict_tree_get_page(tree) == buf_frame_get_page_no(page)) {
+ if (dict_index_get_page(index) == buf_frame_get_page_no(page)) {
return(TRUE);
}
- node_ptr = btr_page_get_father_node_ptr(tree, page, mtr);
+ node_ptr = btr_page_get_father_node_ptr(index, page, mtr);
if (btr_page_get_level(page, mtr) == 0) {
@@ -2494,12 +2473,12 @@ btr_check_node_ptr(
heap = mem_heap_create(256);
- node_ptr_tuple = dict_tree_build_node_ptr
- (tree, page_rec_get_next(page_get_infimum_rec(page)),
- 0, heap, btr_page_get_level(page, mtr));
+ node_ptr_tuple = dict_index_build_node_ptr(
+ index, page_rec_get_next(page_get_infimum_rec(page)), 0, heap,
+ btr_page_get_level(page, mtr));
ut_a(!cmp_dtuple_rec(node_ptr_tuple, node_ptr,
- rec_get_offsets(node_ptr, tree->tree_index,
+ rec_get_offsets(node_ptr, index,
NULL, ULINT_UNDEFINED, &heap)));
mem_heap_free(heap);
@@ -2588,8 +2567,8 @@ btr_index_rec_validate(
offsets = rec_get_offsets(rec, index, offsets, ULINT_UNDEFINED, &heap);
for (i = 0; i < n; i++) {
- dtype_t* type = dict_index_get_nth_type(index, i);
- ulint fixed_size = dtype_get_fixed_size(type);
+ ulint fixed_size = dict_col_get_fixed_size(
+ dict_index_get_nth_col(index, i));
rec_get_nth_field(rec, offsets, i, &len);
@@ -2608,8 +2587,7 @@ btr_index_rec_validate(
fprintf(stderr,
"InnoDB: field %lu len is %lu,"
" should be %lu\n",
- (ulong) i, (ulong) len,
- (ulong) dtype_get_fixed_size(type));
+ (ulong) i, (ulong) len, (ulong) fixed_size);
if (dump_on_error) {
buf_page_print(page);
@@ -2670,6 +2648,7 @@ Report an error on one page of an index tree. */
static
void
btr_validate_report1(
+/*=================*/
/* out: TRUE if ok */
dict_index_t* index, /* in: index */
ulint level, /* in: B-tree level */
@@ -2689,6 +2668,7 @@ Report an error on two pages of an index tree. */
static
void
btr_validate_report2(
+/*=================*/
/* out: TRUE if ok */
dict_index_t* index, /* in: index */
ulint level, /* in: B-tree level */
@@ -2712,7 +2692,7 @@ ibool
btr_validate_level(
/*===============*/
/* out: TRUE if ok */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
trx_t* trx, /* in: transaction or NULL */
ulint level) /* in: level number */
{
@@ -2729,7 +2709,6 @@ btr_validate_level(
page_cur_t cursor;
dtuple_t* node_ptr_tuple;
ibool ret = TRUE;
- dict_index_t* index;
mtr_t mtr;
mem_heap_t* heap = mem_heap_create(256);
ulint* offsets = NULL;
@@ -2737,14 +2716,12 @@ btr_validate_level(
mtr_start(&mtr);
- mtr_x_lock(dict_tree_get_lock(tree), &mtr);
+ mtr_x_lock(dict_index_get_lock(index), &mtr);
- page = btr_root_get(tree, &mtr);
+ page = btr_root_get(index, &mtr);
space = buf_frame_get_space_id(page);
- index = tree->tree_index;
-
while (level != btr_page_get_level(page, &mtr)) {
ut_a(btr_page_get_level(page, &mtr) > 0);
@@ -2768,7 +2745,7 @@ loop:
}
mem_heap_empty(heap);
offsets = offsets2 = NULL;
- mtr_x_lock(dict_tree_get_lock(tree), &mtr);
+ mtr_x_lock(dict_index_get_lock(index), &mtr);
/* Check ordering etc. of records */
@@ -2794,7 +2771,7 @@ loop:
ut_a((page_get_n_recs(page) > 0)
|| ((level == 0)
&& (buf_frame_get_page_no(page)
- == dict_tree_get_page(tree))));
+ == dict_index_get_page(index))));
if (right_page_no != FIL_NULL) {
rec_t* right_rec;
@@ -2824,8 +2801,8 @@ loop:
}
rec = page_rec_get_prev(page_get_supremum_rec(page));
- right_rec = page_rec_get_next(page_get_infimum_rec
- (right_page));
+ right_rec = page_rec_get_next(page_get_infimum_rec(
+ right_page));
offsets = rec_get_offsets(rec, index,
offsets, ULINT_UNDEFINED, &heap);
offsets2 = rec_get_offsets(right_rec, index,
@@ -2847,8 +2824,8 @@ loop:
rec_print(stderr, rec, index);
putc('\n', stderr);
fputs("InnoDB: record ", stderr);
- rec = page_rec_get_next
- (page_get_infimum_rec(right_page));
+ rec = page_rec_get_next(
+ page_get_infimum_rec(right_page));
rec_print(stderr, rec, index);
putc('\n', stderr);
@@ -2857,25 +2834,26 @@ loop:
}
if (level > 0 && left_page_no == FIL_NULL) {
- ut_a(REC_INFO_MIN_REC_FLAG & rec_get_info_bits
- (page_rec_get_next(page_get_infimum_rec(page)),
- page_is_comp(page)));
+ ut_a(REC_INFO_MIN_REC_FLAG & rec_get_info_bits(
+ page_rec_get_next(page_get_infimum_rec(page)),
+ page_is_comp(page)));
}
- if (buf_frame_get_page_no(page) != dict_tree_get_page(tree)) {
+ if (buf_frame_get_page_no(page) != dict_index_get_page(index)) {
/* Check father node pointers */
- node_ptr = btr_page_get_father_node_ptr(tree, page, &mtr);
+ node_ptr = btr_page_get_father_node_ptr(index, page, &mtr);
father_page = buf_frame_align(node_ptr);
offsets = rec_get_offsets(node_ptr, index,
offsets, ULINT_UNDEFINED, &heap);
if (btr_node_ptr_get_child_page_no(node_ptr, offsets)
!= buf_frame_get_page_no(page)
- || node_ptr != btr_page_get_father_for_rec
- (tree, page,
- page_rec_get_prev(page_get_supremum_rec(page)), &mtr)) {
+ || node_ptr != btr_page_get_father_for_rec(
+ index, page,
+ page_rec_get_prev(page_get_supremum_rec(page)),
+ &mtr)) {
btr_validate_report1(index, level, page);
fputs("InnoDB: node pointer to the page is wrong\n",
@@ -2893,9 +2871,10 @@ loop:
(node_ptr, offsets));
fputs("InnoDB: record on page ", stderr);
- rec = btr_page_get_father_for_rec
- (tree, page, page_rec_get_prev
- (page_get_supremum_rec(page)), &mtr);
+ rec = btr_page_get_father_for_rec(
+ index, page,
+ page_rec_get_prev(page_get_supremum_rec(page)),
+ &mtr);
rec_print(stderr, rec, index);
putc('\n', stderr);
ret = FALSE;
@@ -2908,15 +2887,15 @@ loop:
offsets, ULINT_UNDEFINED,
&heap);
- node_ptr_tuple = dict_tree_build_node_ptr
- (tree,
- page_rec_get_next(page_get_infimum_rec(page)),
- 0, heap, btr_page_get_level(page, &mtr));
+ node_ptr_tuple = dict_index_build_node_ptr(
+ index,
+ page_rec_get_next(page_get_infimum_rec(page)),
+ 0, heap, btr_page_get_level(page, &mtr));
if (cmp_dtuple_rec(node_ptr_tuple, node_ptr,
offsets)) {
- rec_t* first_rec = page_rec_get_next
- (page_get_infimum_rec(page));
+ rec_t* first_rec = page_rec_get_next(
+ page_get_infimum_rec(page));
btr_validate_report1(index, level, page);
@@ -2937,18 +2916,18 @@ loop:
}
if (left_page_no == FIL_NULL) {
- ut_a(node_ptr == page_rec_get_next
- (page_get_infimum_rec(father_page)));
+ ut_a(node_ptr == page_rec_get_next(
+ page_get_infimum_rec(father_page)));
ut_a(btr_page_get_prev(father_page, &mtr) == FIL_NULL);
}
if (right_page_no == FIL_NULL) {
- ut_a(node_ptr == page_rec_get_prev
- (page_get_supremum_rec(father_page)));
+ ut_a(node_ptr == page_rec_get_prev(
+ page_get_supremum_rec(father_page)));
ut_a(btr_page_get_next(father_page, &mtr) == FIL_NULL);
} else {
- right_node_ptr = btr_page_get_father_node_ptr
- (tree, right_page, &mtr);
+ right_node_ptr = btr_page_get_father_node_ptr(
+ index, right_page, &mtr);
if (page_rec_get_next(node_ptr)
!= page_get_supremum_rec(father_page)) {
@@ -2967,12 +2946,12 @@ loop:
buf_page_print(right_page);
}
} else {
- right_father_page = buf_frame_align
- (right_node_ptr);
+ right_father_page = buf_frame_align(
+ right_node_ptr);
- if (right_node_ptr != page_rec_get_next
- (page_get_infimum_rec
- (right_father_page))) {
+ if (right_node_ptr != page_rec_get_next(
+ page_get_infimum_rec(
+ right_father_page))) {
ret = FALSE;
fputs("InnoDB: node pointer 2 to"
" the right page is wrong\n",
@@ -3029,10 +3008,10 @@ node_ptr_fails:
Checks the consistency of an index tree. */
ibool
-btr_validate_tree(
-/*==============*/
+btr_validate_index(
+/*===============*/
/* out: TRUE if ok */
- dict_tree_t* tree, /* in: tree */
+ dict_index_t* index, /* in: index */
trx_t* trx) /* in: transaction or NULL */
{
mtr_t mtr;
@@ -3041,13 +3020,13 @@ btr_validate_tree(
ulint n;
mtr_start(&mtr);
- mtr_x_lock(dict_tree_get_lock(tree), &mtr);
+ mtr_x_lock(dict_index_get_lock(index), &mtr);
- root = btr_root_get(tree, &mtr);
+ root = btr_root_get(index, &mtr);
n = btr_page_get_level(root, &mtr);
for (i = 0; i <= n && !trx_is_interrupted(trx); i++) {
- if (!btr_validate_level(tree, trx, n - i)) {
+ if (!btr_validate_level(index, trx, n - i)) {
mtr_commit(&mtr);
diff --git a/storage/innobase/btr/btr0cur.c b/storage/innobase/btr/btr0cur.c
index 8fbc25c9e79..975d5252a2f 100644
--- a/storage/innobase/btr/btr0cur.c
+++ b/storage/innobase/btr/btr0cur.c
@@ -272,7 +272,6 @@ btr_cur_search_to_nth_level(
RW_S_LATCH, or 0 */
mtr_t* mtr) /* in: mtr */
{
- dict_tree_t* tree;
page_cur_t* page_cursor;
page_t* page;
page_t* guess;
@@ -303,7 +302,7 @@ btr_cur_search_to_nth_level(
ending to upper levels */
ut_ad(level == 0 || mode == PAGE_CUR_LE);
- ut_ad(dict_tree_check_search_tuple(index->tree, tuple));
+ ut_ad(dict_index_check_search_tuple(index, tuple));
ut_ad(!(index->type & DICT_IBUF) || ibuf_inside());
ut_ad(dtuple_check_typed(tuple));
@@ -374,23 +373,21 @@ btr_cur_search_to_nth_level(
savepoint = mtr_set_savepoint(mtr);
- tree = index->tree;
-
if (latch_mode == BTR_MODIFY_TREE) {
- mtr_x_lock(dict_tree_get_lock(tree), mtr);
+ mtr_x_lock(dict_index_get_lock(index), mtr);
} else if (latch_mode == BTR_CONT_MODIFY_TREE) {
/* Do nothing */
- ut_ad(mtr_memo_contains(mtr, dict_tree_get_lock(tree),
+ ut_ad(mtr_memo_contains(mtr, dict_index_get_lock(index),
MTR_MEMO_X_LOCK));
} else {
- mtr_s_lock(dict_tree_get_lock(tree), mtr);
+ mtr_s_lock(dict_index_get_lock(index), mtr);
}
page_cursor = btr_cur_get_page_cur(cursor);
- space = dict_tree_get_space(tree);
- page_no = dict_tree_get_page(tree);
+ space = dict_index_get_space(index);
+ page_no = dict_index_get_page(index);
up_match = 0;
up_bytes = 0;
@@ -478,7 +475,7 @@ retry_page_get:
buf_page_dbg_add_level(page, SYNC_TREE_NODE);
}
#endif
- ut_ad(0 == ut_dulint_cmp(tree->id,
+ ut_ad(0 == ut_dulint_cmp(index->id,
btr_page_get_index_id(page)));
if (height == ULINT_UNDEFINED) {
@@ -507,9 +504,9 @@ retry_page_get:
/* Release the tree s-latch */
- mtr_release_s_latch_at_savepoint
- (mtr, savepoint,
- dict_tree_get_lock(tree));
+ mtr_release_s_latch_at_savepoint(
+ mtr, savepoint,
+ dict_index_get_lock(index));
}
page_mode = mode;
@@ -525,8 +522,8 @@ retry_page_get:
/* If this is the desired level, leave the loop */
- ut_ad(height == btr_page_get_level
- (page_cur_get_page(page_cursor), mtr));
+ ut_ad(height == btr_page_get_level(
+ page_cur_get_page(page_cursor), mtr));
if (level == height) {
@@ -598,7 +595,6 @@ btr_cur_open_at_index_side(
mtr_t* mtr) /* in: mtr */
{
page_cur_t* page_cursor;
- dict_tree_t* tree;
page_t* page;
ulint page_no;
ulint space;
@@ -615,24 +611,22 @@ btr_cur_open_at_index_side(
estimate = latch_mode & BTR_ESTIMATE;
latch_mode = latch_mode & ~BTR_ESTIMATE;
- tree = index->tree;
-
/* Store the position of the tree latch we push to mtr so that we
know how to release it when we have latched the leaf node */
savepoint = mtr_set_savepoint(mtr);
if (latch_mode == BTR_MODIFY_TREE) {
- mtr_x_lock(dict_tree_get_lock(tree), mtr);
+ mtr_x_lock(dict_index_get_lock(index), mtr);
} else {
- mtr_s_lock(dict_tree_get_lock(tree), mtr);
+ mtr_s_lock(dict_index_get_lock(index), mtr);
}
page_cursor = btr_cur_get_page_cur(cursor);
cursor->index = index;
- space = dict_tree_get_space(tree);
- page_no = dict_tree_get_page(tree);
+ space = dict_index_get_space(index);
+ page_no = dict_index_get_page(index);
height = ULINT_UNDEFINED;
@@ -641,7 +635,7 @@ btr_cur_open_at_index_side(
BUF_GET,
__FILE__, __LINE__,
mtr);
- ut_ad(0 == ut_dulint_cmp(tree->id,
+ ut_ad(0 == ut_dulint_cmp(index->id,
btr_page_get_index_id(page)));
buf_block_align(page)->check_index_page_at_flush = TRUE;
@@ -668,9 +662,9 @@ btr_cur_open_at_index_side(
/* Release the tree s-latch */
- mtr_release_s_latch_at_savepoint
- (mtr, savepoint,
- dict_tree_get_lock(tree));
+ mtr_release_s_latch_at_savepoint(
+ mtr, savepoint,
+ dict_index_get_lock(index));
}
}
@@ -727,7 +721,6 @@ btr_cur_open_at_rnd_pos(
mtr_t* mtr) /* in: mtr */
{
page_cur_t* page_cursor;
- dict_tree_t* tree;
page_t* page;
ulint page_no;
ulint space;
@@ -738,19 +731,17 @@ btr_cur_open_at_rnd_pos(
ulint* offsets = offsets_;
*offsets_ = (sizeof offsets_) / sizeof *offsets_;
- tree = index->tree;
-
if (latch_mode == BTR_MODIFY_TREE) {
- mtr_x_lock(dict_tree_get_lock(tree), mtr);
+ mtr_x_lock(dict_index_get_lock(index), mtr);
} else {
- mtr_s_lock(dict_tree_get_lock(tree), mtr);
+ mtr_s_lock(dict_index_get_lock(index), mtr);
}
page_cursor = btr_cur_get_page_cur(cursor);
cursor->index = index;
- space = dict_tree_get_space(tree);
- page_no = dict_tree_get_page(tree);
+ space = dict_index_get_space(index);
+ page_no = dict_index_get_page(index);
height = ULINT_UNDEFINED;
@@ -759,7 +750,7 @@ btr_cur_open_at_rnd_pos(
BUF_GET,
__FILE__, __LINE__,
mtr);
- ut_ad(0 == ut_dulint_cmp(tree->id,
+ ut_ad(0 == ut_dulint_cmp(index->id,
btr_page_get_index_id(page)));
if (height == ULINT_UNDEFINED) {
@@ -1017,7 +1008,7 @@ calculate_sizes_again:
type = index->type;
if ((type & DICT_CLUSTERED)
- && (dict_tree_get_space_reserve(index->tree) + rec_size > max_size)
+ && (dict_index_get_space_reserve() + rec_size > max_size)
&& (page_get_n_recs(page) >= 2)
&& (0 == level)
&& (btr_page_get_split_rec_to_right(cursor, &dummy_rec)
@@ -1156,7 +1147,7 @@ btr_cur_pessimistic_insert(
page = btr_cur_get_page(cursor);
ut_ad(mtr_memo_contains(mtr,
- dict_tree_get_lock(btr_cur_get_tree(cursor)),
+ dict_index_get_lock(btr_cur_get_index(cursor)),
MTR_MEMO_X_LOCK));
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
MTR_MEMO_PAGE_X_FIX));
@@ -1218,8 +1209,7 @@ btr_cur_pessimistic_insert(
}
}
- if (dict_tree_get_page(index->tree)
- == buf_frame_get_page_no(page)) {
+ if (dict_index_get_page(index) == buf_frame_get_page_no(page)) {
/* The page is the root page */
*rec = btr_root_raise_and_insert(cursor, entry, mtr);
@@ -1292,10 +1282,10 @@ btr_cur_upd_lock_and_undo(
ulint offsets_[REC_OFFS_NORMAL_SIZE];
*offsets_ = (sizeof offsets_) / sizeof *offsets_;
- err = lock_clust_rec_modify_check_and_lock
- (flags, rec, index,
- rec_get_offsets(rec, index, offsets_,
- ULINT_UNDEFINED, &heap), thr);
+ err = lock_clust_rec_modify_check_and_lock(
+ flags, rec, index,
+ rec_get_offsets(rec, index, offsets_,
+ ULINT_UNDEFINED, &heap), thr);
if (UNIV_LIKELY_NULL(heap)) {
mem_heap_free(heap);
}
@@ -1328,7 +1318,7 @@ btr_cur_update_in_place_log(
mtr_t* mtr) /* in: mtr */
{
byte* log_ptr;
- page_t* page = ut_align_down(rec, UNIV_PAGE_SIZE);
+ page_t* page = page_align(rec);
ut_ad(flags < 256);
ut_ad(!!page_is_comp(page) == dict_table_is_comp(index->table));
@@ -1355,7 +1345,7 @@ btr_cur_update_in_place_log(
log_ptr = row_upd_write_sys_vals_to_log(index, trx, roll_ptr, log_ptr,
mtr);
- mach_write_to_2(log_ptr, ut_align_offset(rec, UNIV_PAGE_SIZE));
+ mach_write_to_2(log_ptr, page_offset(rec));
log_ptr += 2;
row_upd_index_write_log(update, log_ptr, mtr);
@@ -1514,11 +1504,8 @@ btr_cur_update_in_place(
row_upd_rec_sys_fields(rec, index, offsets, trx, roll_ptr);
}
- /* FIXME: in a mixed tree, all records may not have enough ordering
- fields for btr search: */
-
- was_delete_marked = rec_get_deleted_flag
- (rec, page_is_comp(buf_block_get_frame(block)));
+ was_delete_marked = rec_get_deleted_flag(
+ rec, page_is_comp(buf_block_get_frame(block)));
row_upd_rec_in_place(rec, offsets, update);
@@ -1529,8 +1516,8 @@ btr_cur_update_in_place(
btr_cur_update_in_place_log(flags, rec, index, update, trx, roll_ptr,
mtr);
if (was_delete_marked
- && !rec_get_deleted_flag(rec, page_is_comp
- (buf_block_get_frame(block)))) {
+ && !rec_get_deleted_flag(rec, page_is_comp(
+ buf_block_get_frame(block)))) {
/* The new updated record owns its possible externally
stored fields */
@@ -1801,7 +1788,6 @@ btr_cur_pessimistic_update(
big_rec_t* dummy_big_rec;
dict_index_t* index;
page_t* page;
- dict_tree_t* tree;
rec_t* rec;
page_cur_t* page_cursor;
dtuple_t* new_entry;
@@ -1825,9 +1811,8 @@ btr_cur_pessimistic_update(
page = btr_cur_get_page(cursor);
rec = btr_cur_get_rec(cursor);
index = cursor->index;
- tree = index->tree;
- ut_ad(mtr_memo_contains(mtr, dict_tree_get_lock(tree),
+ ut_ad(mtr_memo_contains(mtr, dict_index_get_lock(index),
MTR_MEMO_X_LOCK));
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
MTR_MEMO_PAGE_X_FIX));
@@ -1912,8 +1897,8 @@ btr_cur_pessimistic_update(
n_ext_vect = btr_push_update_extern_fields(ext_vect, offsets, update);
if (UNIV_UNLIKELY(rec_get_converted_size(index, new_entry)
- >= ut_min(page_get_free_space_of_empty
- (page_is_comp(page)) / 2,
+ >= ut_min(page_get_free_space_of_empty(
+ page_is_comp(page)) / 2,
REC_MAX_DATA_SIZE))) {
big_rec_vec = dtuple_convert_big_rec(index, new_entry,
@@ -2064,7 +2049,7 @@ btr_cur_del_mark_set_clust_rec_log(
log_ptr = row_upd_write_sys_vals_to_log(index, trx, roll_ptr, log_ptr,
mtr);
- mach_write_to_2(log_ptr, ut_align_offset(rec, UNIV_PAGE_SIZE));
+ mach_write_to_2(log_ptr, page_offset(rec));
log_ptr += 2;
mlog_close(mtr, log_ptr);
@@ -2129,10 +2114,10 @@ btr_cur_parse_del_mark_set_clust_rec(
ulint offsets_[REC_OFFS_NORMAL_SIZE];
*offsets_ = (sizeof offsets_) / sizeof *offsets_;
- row_upd_rec_sys_fields_in_recovery
- (rec, rec_get_offsets(rec, index, offsets_,
- ULINT_UNDEFINED, &heap),
- pos, trx_id, roll_ptr);
+ row_upd_rec_sys_fields_in_recovery(
+ rec, rec_get_offsets(rec, index, offsets_,
+ ULINT_UNDEFINED, &heap),
+ pos, trx_id, roll_ptr);
if (UNIV_LIKELY_NULL(heap)) {
mem_heap_free(heap);
}
@@ -2261,12 +2246,12 @@ btr_cur_del_mark_set_sec_rec_log(
return;
}
- log_ptr = mlog_write_initial_log_record_fast
- (rec, MLOG_REC_SEC_DELETE_MARK, log_ptr, mtr);
+ log_ptr = mlog_write_initial_log_record_fast(
+ rec, MLOG_REC_SEC_DELETE_MARK, log_ptr, mtr);
mach_write_to_1(log_ptr, val);
log_ptr++;
- mach_write_to_2(log_ptr, ut_align_offset(rec, UNIV_PAGE_SIZE));
+ mach_write_to_2(log_ptr, page_offset(rec));
log_ptr += 2;
mlog_close(mtr, log_ptr);
@@ -2404,7 +2389,7 @@ btr_cur_compress(
mtr_t* mtr) /* in: mtr */
{
ut_ad(mtr_memo_contains(mtr,
- dict_tree_get_lock(btr_cur_get_tree(cursor)),
+ dict_index_get_lock(btr_cur_get_index(cursor)),
MTR_MEMO_X_LOCK));
ut_ad(mtr_memo_contains(mtr, buf_block_align(btr_cur_get_rec(cursor)),
MTR_MEMO_PAGE_X_FIX));
@@ -2430,7 +2415,7 @@ btr_cur_compress_if_useful(
mtr_t* mtr) /* in: mtr */
{
ut_ad(mtr_memo_contains(mtr,
- dict_tree_get_lock(btr_cur_get_tree(cursor)),
+ dict_index_get_lock(btr_cur_get_index(cursor)),
MTR_MEMO_X_LOCK));
ut_ad(mtr_memo_contains(mtr, buf_block_align(btr_cur_get_rec(cursor)),
MTR_MEMO_PAGE_X_FIX));
@@ -2483,8 +2468,8 @@ btr_cur_optimistic_delete(
ULINT_UNDEFINED, &heap);
no_compress_needed = !rec_offs_any_extern(offsets)
- && btr_cur_can_delete_without_compress
- (cursor, rec_offs_size(offsets), mtr);
+ && btr_cur_can_delete_without_compress(
+ cursor, rec_offs_size(offsets), mtr);
if (no_compress_needed) {
@@ -2492,8 +2477,8 @@ btr_cur_optimistic_delete(
btr_search_update_hash_on_delete(cursor);
- max_ins_size = page_get_max_insert_size_after_reorganize
- (page, 1);
+ max_ins_size = page_get_max_insert_size_after_reorganize(
+ page, 1);
page_cur_delete_rec(btr_cur_get_page_cur(cursor),
cursor->index, offsets, mtr);
@@ -2537,7 +2522,7 @@ btr_cur_pessimistic_delete(
mtr_t* mtr) /* in: mtr */
{
page_t* page;
- dict_tree_t* tree;
+ dict_index_t* index;
rec_t* rec;
dtuple_t* node_ptr;
ulint n_extents = 0;
@@ -2549,9 +2534,9 @@ btr_cur_pessimistic_delete(
ulint* offsets;
page = btr_cur_get_page(cursor);
- tree = btr_cur_get_tree(cursor);
+ index = btr_cur_get_index(cursor);
- ut_ad(mtr_memo_contains(mtr, dict_tree_get_lock(tree),
+ ut_ad(mtr_memo_contains(mtr, dict_index_get_lock(index),
MTR_MEMO_X_LOCK));
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
MTR_MEMO_PAGE_X_FIX));
@@ -2563,7 +2548,7 @@ btr_cur_pessimistic_delete(
n_extents = cursor->tree_height / 32 + 1;
success = fsp_reserve_free_extents(&n_reserved,
- cursor->index->space,
+ index->space,
n_extents,
FSP_CLEANING, mtr);
if (!success) {
@@ -2576,8 +2561,7 @@ btr_cur_pessimistic_delete(
heap = mem_heap_create(1024);
rec = btr_cur_get_rec(cursor);
- offsets = rec_get_offsets(rec, cursor->index,
- NULL, ULINT_UNDEFINED, &heap);
+ offsets = rec_get_offsets(rec, index, NULL, ULINT_UNDEFINED, &heap);
/* Free externally stored fields if the record is neither
a node pointer nor in two-byte format.
@@ -2585,13 +2569,13 @@ btr_cur_pessimistic_delete(
if (page_is_comp(page)
? !rec_get_node_ptr_flag(rec)
: !rec_get_1byte_offs_flag(rec)) {
- btr_rec_free_externally_stored_fields(cursor->index,
+ btr_rec_free_externally_stored_fields(index,
rec, offsets,
in_rollback, mtr);
}
if (UNIV_UNLIKELY(page_get_n_recs(page) < 2)
- && UNIV_UNLIKELY(dict_tree_get_page(btr_cur_get_tree(cursor))
+ && UNIV_UNLIKELY(dict_index_get_page(btr_cur_get_index(cursor))
!= buf_frame_get_page_no(page))) {
/* If there is only one record, drop the whole page in
@@ -2609,8 +2593,8 @@ btr_cur_pessimistic_delete(
level = btr_page_get_level(page, mtr);
if (level > 0
- && UNIV_UNLIKELY(rec == page_rec_get_next
- (page_get_infimum_rec(page)))) {
+ && UNIV_UNLIKELY(rec == page_rec_get_next(
+ page_get_infimum_rec(page)))) {
rec_t* next_rec = page_rec_get_next(rec);
@@ -2628,23 +2612,22 @@ btr_cur_pessimistic_delete(
so that it is equal to the new leftmost node pointer
on the page */
- btr_node_ptr_delete(tree, page, mtr);
+ btr_node_ptr_delete(index, page, mtr);
- node_ptr = dict_tree_build_node_ptr
- (tree, next_rec, buf_frame_get_page_no(page),
- heap, level);
+ node_ptr = dict_index_build_node_ptr(
+ index, next_rec, buf_frame_get_page_no(page),
+ heap, level);
- btr_insert_on_non_leaf_level(tree,
+ btr_insert_on_non_leaf_level(index,
level + 1, node_ptr, mtr);
}
}
btr_search_update_hash_on_delete(cursor);
- page_cur_delete_rec(btr_cur_get_page_cur(cursor), cursor->index,
- offsets, mtr);
+ page_cur_delete_rec(btr_cur_get_page_cur(cursor), index, offsets, mtr);
- ut_ad(btr_check_node_ptr(tree, page, mtr));
+ ut_ad(btr_check_node_ptr(index, page, mtr));
*err = DB_SUCCESS;
@@ -2656,8 +2639,7 @@ return_after_reservations:
}
if (n_extents > 0) {
- fil_space_release_free_extents(cursor->index->space,
- n_reserved);
+ fil_space_release_free_extents(index->space, n_reserved);
}
return(ret);
@@ -2939,8 +2921,8 @@ btr_estimate_number_of_different_key_vals(
}
total_external_size
- += btr_rec_get_externally_stored_len
- (rec, offsets_rec);
+ += btr_rec_get_externally_stored_len(
+ rec, offsets_rec);
rec = next_rec;
/* Initialize offsets_rec for the next round
@@ -2974,8 +2956,8 @@ btr_estimate_number_of_different_key_vals(
offsets_rec = rec_get_offsets(rec, index, offsets_rec,
ULINT_UNDEFINED, &heap);
- total_external_size += btr_rec_get_externally_stored_len
- (rec, offsets_rec);
+ total_external_size += btr_rec_get_externally_stored_len(
+ rec, offsets_rec);
mtr_commit(&mtr);
}
@@ -3137,8 +3119,8 @@ btr_cur_mark_extern_inherited_fields(
}
if (!is_updated) {
- btr_cur_set_ownership_of_extern_field
- (rec, offsets, i, FALSE, mtr);
+ btr_cur_set_ownership_of_extern_field(
+ rec, offsets, i, FALSE, mtr);
}
}
}
@@ -3291,8 +3273,8 @@ btr_push_update_extern_fields(
if (upd_get_nth_field(update, i)->extern_storage) {
- ext_vect[n_pushed] = upd_get_nth_field
- (update, i)->field_no;
+ ext_vect[n_pushed] = upd_get_nth_field(
+ update, i)->field_no;
n_pushed++;
}
@@ -3389,7 +3371,7 @@ btr_store_big_rec_extern_fields(
mtr_t mtr;
ut_ad(rec_offs_validate(rec, index, offsets));
- ut_ad(mtr_memo_contains(local_mtr, dict_tree_get_lock(index->tree),
+ ut_ad(mtr_memo_contains(local_mtr, dict_index_get_lock(index),
MTR_MEMO_X_LOCK));
ut_ad(mtr_memo_contains(local_mtr, buf_block_align(rec),
MTR_MEMO_PAGE_X_FIX));
@@ -3422,7 +3404,7 @@ btr_store_big_rec_extern_fields(
hint_page_no = prev_page_no + 1;
}
- page = btr_page_alloc(index->tree, hint_page_no,
+ page = btr_page_alloc(index, hint_page_no,
FSP_NO_DIR, 0, &mtr);
if (page == NULL) {
@@ -3509,10 +3491,10 @@ btr_store_big_rec_extern_fields(
/* Set the bit denoting that this field
in rec is stored externally */
- rec_set_nth_field_extern_bit
- (rec, index,
- big_rec_vec->fields[i].field_no,
- TRUE, &mtr);
+ rec_set_nth_field_extern_bit(
+ rec, index,
+ big_rec_vec->fields[i].field_no,
+ TRUE, &mtr);
}
prev_page_no = page_no;
@@ -3563,7 +3545,7 @@ btr_free_externally_stored_field(
mtr_t mtr;
ut_a(local_len >= BTR_EXTERN_FIELD_REF_SIZE);
- ut_ad(mtr_memo_contains(local_mtr, dict_tree_get_lock(index->tree),
+ ut_ad(mtr_memo_contains(local_mtr, dict_index_get_lock(index),
MTR_MEMO_X_LOCK));
ut_ad(mtr_memo_contains(local_mtr, buf_block_align(data),
MTR_MEMO_PAGE_X_FIX));
@@ -3635,7 +3617,7 @@ btr_free_externally_stored_field(
because we did not store it on the page (we save the space
overhead from an index page header. */
- btr_page_free_low(index->tree, page, 0, &mtr);
+ btr_page_free_low(index, page, 0, &mtr);
mlog_write_ulint(data + local_len + BTR_EXTERN_PAGE_NO,
next_page_no,
diff --git a/storage/innobase/btr/btr0pcur.c b/storage/innobase/btr/btr0pcur.c
index a8d8b2f072a..65b3c90c809 100644
--- a/storage/innobase/btr/btr0pcur.c
+++ b/storage/innobase/btr/btr0pcur.c
@@ -76,20 +76,20 @@ btr_pcur_store_position(
{
page_cur_t* page_cursor;
rec_t* rec;
- dict_tree_t* tree;
+ dict_index_t* index;
page_t* page;
ulint offs;
ut_a(cursor->pos_state == BTR_PCUR_IS_POSITIONED);
ut_ad(cursor->latch_mode != BTR_NO_LATCHES);
- tree = btr_cur_get_tree(btr_pcur_get_btr_cur(cursor));
+ index = btr_cur_get_index(btr_pcur_get_btr_cur(cursor));
page_cursor = btr_pcur_get_page_cur(cursor);
rec = page_cur_get_rec(page_cursor);
- page = ut_align_down(rec, UNIV_PAGE_SIZE);
- offs = ut_align_offset(rec, UNIV_PAGE_SIZE);
+ page = page_align(rec);
+ offs = page_offset(rec);
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
MTR_MEMO_PAGE_S_FIX)
@@ -133,13 +133,13 @@ btr_pcur_store_position(
}
cursor->old_stored = BTR_PCUR_OLD_STORED;
- cursor->old_rec = dict_tree_copy_rec_order_prefix
- (tree, rec, &cursor->old_n_fields,
- &cursor->old_rec_buf, &cursor->buf_size);
+ cursor->old_rec = dict_index_copy_rec_order_prefix(
+ index, rec, &cursor->old_n_fields,
+ &cursor->old_rec_buf, &cursor->buf_size);
cursor->block_when_stored = buf_block_align(page);
- cursor->modify_clock = buf_block_get_modify_clock
- (cursor->block_when_stored);
+ cursor->modify_clock = buf_block_get_modify_clock(
+ cursor->block_when_stored);
}
/******************************************************************
@@ -197,13 +197,15 @@ btr_pcur_restore_position(
btr_pcur_t* cursor, /* in: detached persistent cursor */
mtr_t* mtr) /* in: mtr */
{
- dict_tree_t* tree;
+ dict_index_t* index;
page_t* page;
dtuple_t* tuple;
ulint mode;
ulint old_mode;
mem_heap_t* heap;
+ index = btr_cur_get_index(btr_pcur_get_btr_cur(cursor));
+
if (UNIV_UNLIKELY(cursor->old_stored != BTR_PCUR_OLD_STORED)
|| UNIV_UNLIKELY(cursor->pos_state != BTR_PCUR_WAS_POSITIONED
&& cursor->pos_state != BTR_PCUR_IS_POSITIONED)) {
@@ -215,17 +217,16 @@ btr_pcur_restore_position(
ut_error;
}
- if (UNIV_UNLIKELY
- (cursor->rel_pos == BTR_PCUR_AFTER_LAST_IN_TREE
- || cursor->rel_pos == BTR_PCUR_BEFORE_FIRST_IN_TREE)) {
+ if (UNIV_UNLIKELY(
+ cursor->rel_pos == BTR_PCUR_AFTER_LAST_IN_TREE
+ || cursor->rel_pos == BTR_PCUR_BEFORE_FIRST_IN_TREE)) {
/* In these cases we do not try an optimistic restoration,
but always do a search */
- btr_cur_open_at_index_side
- (cursor->rel_pos == BTR_PCUR_BEFORE_FIRST_IN_TREE,
- btr_pcur_get_btr_cur(cursor)->index, latch_mode,
- btr_pcur_get_btr_cur(cursor), mtr);
+ btr_cur_open_at_index_side(
+ cursor->rel_pos == BTR_PCUR_BEFORE_FIRST_IN_TREE,
+ index, latch_mode, btr_pcur_get_btr_cur(cursor), mtr);
cursor->block_when_stored
= buf_block_align(btr_pcur_get_page(cursor));
@@ -242,10 +243,10 @@ btr_pcur_restore_position(
|| UNIV_LIKELY(latch_mode == BTR_MODIFY_LEAF)) {
/* Try optimistic restoration */
- if (UNIV_LIKELY
- (buf_page_optimistic_get(latch_mode,
- cursor->block_when_stored, page,
- cursor->modify_clock, mtr))) {
+ if (UNIV_LIKELY(buf_page_optimistic_get(
+ latch_mode,
+ cursor->block_when_stored, page,
+ cursor->modify_clock, mtr))) {
cursor->pos_state = BTR_PCUR_IS_POSITIONED;
#ifdef UNIV_SYNC_DEBUG
buf_page_dbg_add_level(page, SYNC_TREE_NODE);
@@ -255,20 +256,18 @@ btr_pcur_restore_position(
rec_t* rec;
ulint* offsets1;
ulint* offsets2;
- dict_index_t* index;
#endif /* UNIV_DEBUG */
cursor->latch_mode = latch_mode;
#ifdef UNIV_DEBUG
rec = btr_pcur_get_rec(cursor);
- index = btr_pcur_get_btr_cur(cursor)->index;
heap = mem_heap_create(256);
- offsets1 = rec_get_offsets
- (cursor->old_rec, index, NULL,
- cursor->old_n_fields, &heap);
- offsets2 = rec_get_offsets
- (rec, index, NULL,
- cursor->old_n_fields, &heap);
+ offsets1 = rec_get_offsets(
+ cursor->old_rec, index, NULL,
+ cursor->old_n_fields, &heap);
+ offsets2 = rec_get_offsets(
+ rec, index, NULL,
+ cursor->old_n_fields, &heap);
ut_ad(!cmp_rec_rec(cursor->old_rec,
rec, offsets1, offsets2,
@@ -286,9 +285,8 @@ btr_pcur_restore_position(
heap = mem_heap_create(256);
- tree = btr_cur_get_tree(btr_pcur_get_btr_cur(cursor));
- tuple = dict_tree_build_data_tuple(tree, cursor->old_rec,
- cursor->old_n_fields, heap);
+ tuple = dict_index_build_data_tuple(index, cursor->old_rec,
+ cursor->old_n_fields, heap);
/* Save the old search mode of the cursor */
old_mode = cursor->search_mode;
@@ -302,8 +300,8 @@ btr_pcur_restore_position(
mode = PAGE_CUR_L;
}
- btr_pcur_open_with_no_init(btr_pcur_get_btr_cur(cursor)->index, tuple,
- mode, latch_mode, cursor, 0, mtr);
+ btr_pcur_open_with_no_init(index, tuple, mode, latch_mode,
+ cursor, 0, mtr);
/* Restore the old search mode */
cursor->search_mode = old_mode;
@@ -311,19 +309,18 @@ btr_pcur_restore_position(
if (cursor->rel_pos == BTR_PCUR_ON
&& btr_pcur_is_on_user_rec(cursor, mtr)
&& 0 == cmp_dtuple_rec(tuple, btr_pcur_get_rec(cursor),
- rec_get_offsets
- (btr_pcur_get_rec(cursor),
- btr_pcur_get_btr_cur(cursor)->index,
- NULL, ULINT_UNDEFINED, &heap))) {
+ rec_get_offsets(
+ btr_pcur_get_rec(cursor), index,
+ NULL, ULINT_UNDEFINED, &heap))) {
/* We have to store the NEW value for the modify clock, since
the cursor can now be on a different page! But we can retain
the value of old_rec */
- cursor->block_when_stored = buf_block_align
- (btr_pcur_get_page(cursor));
- cursor->modify_clock = buf_block_get_modify_clock
- (cursor->block_when_stored);
+ cursor->block_when_stored = buf_block_align(
+ btr_pcur_get_page(cursor));
+ cursor->modify_clock = buf_block_get_modify_clock(
+ cursor->block_when_stored);
cursor->old_stored = BTR_PCUR_OLD_STORED;
mem_heap_free(heap);
diff --git a/storage/innobase/btr/btr0sea.c b/storage/innobase/btr/btr0sea.c
index bb089c4c417..2fe3606a390 100644
--- a/storage/innobase/btr/btr0sea.c
+++ b/storage/innobase/btr/btr0sea.c
@@ -74,7 +74,7 @@ btr_search_build_page_hash_index(
ulint n_fields,/* in: hash this many full fields */
ulint n_bytes,/* in: hash this many bytes from the next
field */
- ulint side); /* in: hash for searches from this side */
+ ibool left_side);/* in: hash for searches from left side? */
/*********************************************************************
This function should be called before reserving any btr search mutex, if
@@ -157,10 +157,10 @@ btr_search_info_create(
info = mem_heap_alloc(heap, sizeof(btr_search_t));
+#ifdef UNIV_DEBUG
info->magic_n = BTR_SEARCH_MAGIC_N;
+#endif /* UNIV_DEBUG */
- info->last_search = NULL;
- info->n_direction = 0;
info->root_guess = NULL;
info->hash_analysis = 0;
@@ -179,7 +179,7 @@ btr_search_info_create(
info->n_fields = 1;
info->n_bytes = 0;
- info->side = BTR_SEARCH_LEFT_SIDE;
+ info->left_side = TRUE;
return(info);
}
@@ -224,7 +224,7 @@ btr_search_info_update_hash(
hash prefix */
if (info->n_fields >= n_unique && cursor->up_match >= n_unique) {
-
+increment_potential:
info->n_hash_potential++;
return;
@@ -233,8 +233,7 @@ btr_search_info_update_hash(
cmp = ut_pair_cmp(info->n_fields, info->n_bytes,
cursor->low_match, cursor->low_bytes);
- if ((info->side == BTR_SEARCH_LEFT_SIDE && cmp <= 0)
- || (info->side == BTR_SEARCH_RIGHT_SIDE && cmp > 0)) {
+ if (info->left_side ? cmp <= 0 : cmp > 0) {
goto set_new_recomm;
}
@@ -242,16 +241,11 @@ btr_search_info_update_hash(
cmp = ut_pair_cmp(info->n_fields, info->n_bytes,
cursor->up_match, cursor->up_bytes);
- if ((info->side == BTR_SEARCH_LEFT_SIDE && cmp > 0)
- || (info->side == BTR_SEARCH_RIGHT_SIDE && cmp <= 0)) {
+ if (info->left_side ? cmp <= 0 : cmp > 0) {
- goto set_new_recomm;
+ goto increment_potential;
}
- info->n_hash_potential++;
-
- return;
-
set_new_recomm:
/* We have to set a new recommendation; skip the hash analysis
for a while to avoid unnecessary CPU time usage when there is no
@@ -269,7 +263,7 @@ set_new_recomm:
info->n_fields = 1;
info->n_bytes = 0;
- info->side = BTR_SEARCH_LEFT_SIDE;
+ info->left_side = TRUE;
} else if (cmp > 0) {
info->n_hash_potential = 1;
@@ -288,7 +282,7 @@ set_new_recomm:
info->n_bytes = cursor->low_bytes + 1;
}
- info->side = BTR_SEARCH_LEFT_SIDE;
+ info->left_side = TRUE;
} else {
info->n_hash_potential = 1;
@@ -306,7 +300,7 @@ set_new_recomm:
info->n_bytes = cursor->up_bytes + 1;
}
- info->side = BTR_SEARCH_RIGHT_SIDE;
+ info->left_side = FALSE;
}
}
@@ -322,7 +316,8 @@ btr_search_update_block_hash_info(
the block is recommended */
btr_search_t* info, /* in: search info */
buf_block_t* block, /* in: buffer block */
- btr_cur_t* cursor) /* in: cursor */
+ btr_cur_t* cursor __attribute__((unused)))
+ /* in: cursor */
{
#ifdef UNIV_SYNC_DEBUG
ut_ad(!rw_lock_own(&btr_search_latch, RW_LOCK_SHARED));
@@ -335,18 +330,18 @@ btr_search_update_block_hash_info(
info->last_hash_succ = FALSE;
ut_a(block->magic_n == BUF_BLOCK_MAGIC_N);
- ut_a(info->magic_n == BTR_SEARCH_MAGIC_N);
+ ut_ad(info->magic_n == BTR_SEARCH_MAGIC_N);
if ((block->n_hash_helps > 0)
&& (info->n_hash_potential > 0)
&& (block->n_fields == info->n_fields)
&& (block->n_bytes == info->n_bytes)
- && (block->side == info->side)) {
+ && (block->left_side == info->left_side)) {
if ((block->is_hashed)
&& (block->curr_n_fields == info->n_fields)
&& (block->curr_n_bytes == info->n_bytes)
- && (block->curr_side == info->side)) {
+ && (block->curr_left_side == info->left_side)) {
/* The search would presumably have succeeded using
the hash index */
@@ -359,12 +354,14 @@ btr_search_update_block_hash_info(
block->n_hash_helps = 1;
block->n_fields = info->n_fields;
block->n_bytes = info->n_bytes;
- block->side = info->side;
+ block->left_side = info->left_side;
}
+#ifdef UNIV_DEBUG
if (cursor->index->table->does_not_fit_in_memory) {
block->n_hash_helps = 0;
}
+#endif /* UNIV_DEBUG */
if ((block->n_hash_helps > page_get_n_recs(block->frame)
/ BTR_SEARCH_PAGE_BUILD_LIMIT)
@@ -375,7 +372,7 @@ btr_search_update_block_hash_info(
> 2 * page_get_n_recs(block->frame))
|| (block->n_fields != block->curr_n_fields)
|| (block->n_bytes != block->curr_n_bytes)
- || (block->side != block->curr_side)) {
+ || (block->left_side != block->curr_left_side)) {
/* Build a new hash index on the page */
@@ -404,7 +401,7 @@ btr_search_update_hash_ref(
{
ulint fold;
rec_t* rec;
- dulint tree_id;
+ dulint index_id;
ut_ad(cursor->flag == BTR_CUR_HASH_FAIL);
#ifdef UNIV_SYNC_DEBUG
@@ -419,7 +416,7 @@ btr_search_update_hash_ref(
&& (info->n_hash_potential > 0)
&& (block->curr_n_fields == info->n_fields)
&& (block->curr_n_bytes == info->n_bytes)
- && (block->curr_side == info->side)) {
+ && (block->curr_left_side == info->left_side)) {
mem_heap_t* heap = NULL;
ulint offsets_[REC_OFFS_NORMAL_SIZE];
*offsets_ = (sizeof offsets_) / sizeof *offsets_;
@@ -431,12 +428,12 @@ btr_search_update_hash_ref(
return;
}
- tree_id = ((cursor->index)->tree)->id;
+ index_id = cursor->index->id;
fold = rec_fold(rec,
rec_get_offsets(rec, cursor->index, offsets_,
ULINT_UNDEFINED, &heap),
block->curr_n_fields,
- block->curr_n_bytes, tree_id);
+ block->curr_n_bytes, index_id);
if (UNIV_LIKELY_NULL(heap)) {
mem_heap_free(heap);
}
@@ -509,7 +506,7 @@ btr_search_info_update_slow(
params = mem_alloc(3 * sizeof(ulint));
params[0] = block->n_fields;
params[1] = block->n_bytes;
- params[2] = block->side;
+ params[2] = block->left_side;
/* Make sure the compiler cannot deduce the values and do
optimizations */
@@ -618,8 +615,8 @@ btr_search_check_guess(
prev_rec = page_rec_get_prev(rec);
if (page_rec_is_infimum(prev_rec)) {
- success = btr_page_get_prev
- (buf_frame_align(prev_rec), mtr) == FIL_NULL;
+ success = btr_page_get_prev(
+ buf_frame_align(prev_rec), mtr) == FIL_NULL;
goto exit_func;
}
@@ -643,8 +640,9 @@ btr_search_check_guess(
next_rec = page_rec_get_next(rec);
if (page_rec_is_supremum(next_rec)) {
- if (btr_page_get_next
- (buf_frame_align(next_rec), mtr) == FIL_NULL) {
+ if (btr_page_get_next(
+ buf_frame_align(next_rec), mtr)
+ == FIL_NULL) {
cursor->up_match = 0;
success = TRUE;
@@ -702,7 +700,7 @@ btr_search_guess_on_hash(
page_t* page;
ulint fold;
ulint tuple_n_fields;
- dulint tree_id;
+ dulint index_id;
ibool can_only_compare_to_cursor_rec = TRUE;
#ifdef notdefined
btr_cur_t cursor2;
@@ -736,12 +734,12 @@ btr_search_guess_on_hash(
return(FALSE);
}
- tree_id = (index->tree)->id;
+ index_id = index->id;
#ifdef UNIV_SEARCH_PERF_STAT
info->n_hash_succ++;
#endif
- fold = dtuple_fold(tuple, cursor->n_fields, cursor->n_bytes, tree_id);
+ fold = dtuple_fold(tuple, cursor->n_fields, cursor->n_bytes, index_id);
cursor->fold = fold;
cursor->flag = BTR_CUR_HASH;
@@ -763,10 +761,11 @@ btr_search_guess_on_hash(
if (UNIV_LIKELY(!has_search_latch)) {
- if (UNIV_UNLIKELY
- (!buf_page_get_known_nowait(latch_mode, page,
- BUF_MAKE_YOUNG,
- __FILE__, __LINE__, mtr))) {
+ if (UNIV_UNLIKELY(
+ !buf_page_get_known_nowait(latch_mode, page,
+ BUF_MAKE_YOUNG,
+ __FILE__, __LINE__,
+ mtr))) {
goto failure_unlock;
}
@@ -801,7 +800,8 @@ btr_search_guess_on_hash(
is positioned on. We cannot look at the next of the previous
record to determine if our guess for the cursor position is
right. */
- if (UNIV_EXPECT(ut_dulint_cmp(tree_id, btr_page_get_index_id(page)), 0)
+ if (UNIV_EXPECT(
+ ut_dulint_cmp(index_id, btr_page_get_index_id(page)), 0)
|| !btr_search_check_guess(cursor,
can_only_compare_to_cursor_rec,
tuple, mode, mtr)) {
@@ -904,7 +904,7 @@ btr_search_drop_page_hash_index(
rec_t* rec;
ulint fold;
ulint prev_fold;
- dulint tree_id;
+ dulint index_id;
ulint n_cached;
ulint n_recs;
ulint* folds;
@@ -961,9 +961,9 @@ retry:
rec = page_get_infimum_rec(page);
rec = page_rec_get_next(rec);
- tree_id = btr_page_get_index_id(page);
+ index_id = btr_page_get_index_id(page);
- ut_a(0 == ut_dulint_cmp(tree_id, index->id));
+ ut_a(0 == ut_dulint_cmp(index_id, index->id));
prev_fold = 0;
@@ -971,12 +971,10 @@ retry:
offsets = NULL;
while (!page_rec_is_supremum(rec)) {
- /* FIXME: in a mixed tree, not all records may have enough
- ordering fields: */
offsets = rec_get_offsets(rec, index, offsets,
n_fields + (n_bytes > 0), &heap);
ut_a(rec_offs_n_fields(offsets) == n_fields + (n_bytes > 0));
- fold = rec_fold(rec, offsets, n_fields, n_bytes, tree_id);
+ fold = rec_fold(rec, offsets, n_fields, n_bytes, index_id);
if (fold == prev_fold && prev_fold != 0) {
@@ -1101,7 +1099,7 @@ btr_search_build_page_hash_index(
ulint n_fields,/* in: hash this many full fields */
ulint n_bytes,/* in: hash this many bytes from the next
field */
- ulint side) /* in: hash for searches from this side */
+ ibool left_side)/* in: hash for searches from left side? */
{
hash_table_t* table;
buf_block_t* block;
@@ -1109,7 +1107,7 @@ btr_search_build_page_hash_index(
rec_t* next_rec;
ulint fold;
ulint next_fold;
- dulint tree_id;
+ dulint index_id;
ulint n_cached;
ulint n_recs;
ulint* folds;
@@ -1135,7 +1133,7 @@ btr_search_build_page_hash_index(
if (block->is_hashed && ((block->curr_n_fields != n_fields)
|| (block->curr_n_bytes != n_bytes)
- || (block->curr_side != side))) {
+ || (block->curr_left_side != left_side))) {
rw_lock_s_unlock(&btr_search_latch);
@@ -1172,7 +1170,7 @@ btr_search_build_page_hash_index(
n_cached = 0;
- tree_id = btr_page_get_index_id(page);
+ index_id = btr_page_get_index_id(page);
rec = page_get_infimum_rec(page);
rec = page_rec_get_next(rec);
@@ -1188,11 +1186,9 @@ btr_search_build_page_hash_index(
}
}
- /* FIXME: in a mixed tree, all records may not have enough ordering
- fields: */
- fold = rec_fold(rec, offsets, n_fields, n_bytes, tree_id);
+ fold = rec_fold(rec, offsets, n_fields, n_bytes, index_id);
- if (side == BTR_SEARCH_LEFT_SIDE) {
+ if (left_side) {
folds[n_cached] = fold;
recs[n_cached] = rec;
@@ -1204,7 +1200,7 @@ btr_search_build_page_hash_index(
if (page_rec_is_supremum(next_rec)) {
- if (side == BTR_SEARCH_RIGHT_SIDE) {
+ if (!left_side) {
folds[n_cached] = fold;
recs[n_cached] = rec;
@@ -1217,12 +1213,12 @@ btr_search_build_page_hash_index(
offsets = rec_get_offsets(next_rec, index, offsets,
n_fields + (n_bytes > 0), &heap);
next_fold = rec_fold(next_rec, offsets, n_fields,
- n_bytes, tree_id);
+ n_bytes, index_id);
if (fold != next_fold) {
/* Insert an entry into the hash index */
- if (side == BTR_SEARCH_LEFT_SIDE) {
+ if (left_side) {
folds[n_cached] = next_fold;
recs[n_cached] = next_rec;
@@ -1244,7 +1240,7 @@ btr_search_build_page_hash_index(
if (block->is_hashed && ((block->curr_n_fields != n_fields)
|| (block->curr_n_bytes != n_bytes)
- || (block->curr_side != side))) {
+ || (block->curr_left_side != left_side))) {
goto exit_func;
}
@@ -1253,7 +1249,7 @@ btr_search_build_page_hash_index(
block->curr_n_fields = n_fields;
block->curr_n_bytes = n_bytes;
- block->curr_side = side;
+ block->curr_left_side = left_side;
block->index = index;
for (i = 0; i < n_cached; i++) {
@@ -1292,7 +1288,7 @@ btr_search_move_or_delete_hash_entries(
buf_block_t* new_block;
ulint n_fields;
ulint n_bytes;
- ulint side;
+ ibool left_side;
block = buf_block_align(page);
new_block = buf_block_align(new_page);
@@ -1320,22 +1316,23 @@ btr_search_move_or_delete_hash_entries(
n_fields = block->curr_n_fields;
n_bytes = block->curr_n_bytes;
- side = block->curr_side;
+ left_side = block->curr_left_side;
new_block->n_fields = block->curr_n_fields;
new_block->n_bytes = block->curr_n_bytes;
- new_block->side = block->curr_side;
+ new_block->left_side = left_side;
rw_lock_s_unlock(&btr_search_latch);
ut_a(n_fields + n_bytes > 0);
btr_search_build_page_hash_index(index, new_page, n_fields,
- n_bytes, side);
+ n_bytes, left_side);
+#if 1 /* TODO: safe to remove? */
ut_a(n_fields == block->curr_n_fields);
ut_a(n_bytes == block->curr_n_bytes);
- ut_a(side == block->curr_side);
-
+ ut_a(left_side == block->curr_left_side);
+#endif
return;
}
@@ -1356,7 +1353,7 @@ btr_search_update_hash_on_delete(
buf_block_t* block;
rec_t* rec;
ulint fold;
- dulint tree_id;
+ dulint index_id;
ibool found;
ulint offsets_[REC_OFFS_NORMAL_SIZE];
mem_heap_t* heap = NULL;
@@ -1380,10 +1377,10 @@ btr_search_update_hash_on_delete(
table = btr_search_sys->hash_index;
- tree_id = cursor->index->tree->id;
+ index_id = cursor->index->id;
fold = rec_fold(rec, rec_get_offsets(rec, cursor->index, offsets_,
ULINT_UNDEFINED, &heap),
- block->curr_n_fields, block->curr_n_bytes, tree_id);
+ block->curr_n_fields, block->curr_n_bytes, index_id);
if (UNIV_LIKELY_NULL(heap)) {
mem_heap_free(heap);
}
@@ -1429,7 +1426,7 @@ btr_search_update_hash_node_on_insert(
if ((cursor->flag == BTR_CUR_HASH)
&& (cursor->n_fields == block->curr_n_fields)
&& (cursor->n_bytes == block->curr_n_bytes)
- && (block->curr_side == BTR_SEARCH_RIGHT_SIDE)) {
+ && !block->curr_left_side) {
table = btr_search_sys->hash_index;
@@ -1460,13 +1457,13 @@ btr_search_update_hash_on_insert(
rec_t* rec;
rec_t* ins_rec;
rec_t* next_rec;
- dulint tree_id;
+ dulint index_id;
ulint fold;
ulint ins_fold;
ulint next_fold = 0; /* remove warning (??? bug ???) */
ulint n_fields;
ulint n_bytes;
- ulint side;
+ ibool left_side;
ibool locked = FALSE;
mem_heap_t* heap = NULL;
ulint offsets_[REC_OFFS_NORMAL_SIZE];
@@ -1492,32 +1489,32 @@ btr_search_update_hash_on_insert(
ut_a(block->index == cursor->index);
- tree_id = ((cursor->index)->tree)->id;
+ index_id = cursor->index->id;
n_fields = block->curr_n_fields;
n_bytes = block->curr_n_bytes;
- side = block->curr_side;
+ left_side = block->curr_left_side;
ins_rec = page_rec_get_next(rec);
next_rec = page_rec_get_next(ins_rec);
offsets = rec_get_offsets(ins_rec, cursor->index, offsets,
ULINT_UNDEFINED, &heap);
- ins_fold = rec_fold(ins_rec, offsets, n_fields, n_bytes, tree_id);
+ ins_fold = rec_fold(ins_rec, offsets, n_fields, n_bytes, index_id);
if (!page_rec_is_supremum(next_rec)) {
offsets = rec_get_offsets(next_rec, cursor->index, offsets,
n_fields + (n_bytes > 0), &heap);
next_fold = rec_fold(next_rec, offsets, n_fields,
- n_bytes, tree_id);
+ n_bytes, index_id);
}
if (!page_rec_is_infimum(rec)) {
offsets = rec_get_offsets(rec, cursor->index, offsets,
n_fields + (n_bytes > 0), &heap);
- fold = rec_fold(rec, offsets, n_fields, n_bytes, tree_id);
+ fold = rec_fold(rec, offsets, n_fields, n_bytes, index_id);
} else {
- if (side == BTR_SEARCH_LEFT_SIDE) {
+ if (left_side) {
rw_lock_x_lock(&btr_search_latch);
@@ -1538,7 +1535,7 @@ btr_search_update_hash_on_insert(
locked = TRUE;
}
- if (side == BTR_SEARCH_RIGHT_SIDE) {
+ if (!left_side) {
ha_insert_for_fold(table, fold, rec);
} else {
ha_insert_for_fold(table, ins_fold, ins_rec);
@@ -1548,7 +1545,7 @@ btr_search_update_hash_on_insert(
check_next_rec:
if (page_rec_is_supremum(next_rec)) {
- if (side == BTR_SEARCH_RIGHT_SIDE) {
+ if (!left_side) {
if (!locked) {
rw_lock_x_lock(&btr_search_latch);
@@ -1571,7 +1568,7 @@ check_next_rec:
locked = TRUE;
}
- if (side == BTR_SEARCH_RIGHT_SIDE) {
+ if (!left_side) {
ha_insert_for_fold(table, ins_fold, ins_rec);
/*
@@ -1659,17 +1656,17 @@ btr_search_validate(void)
" node fold %lu, rec fold %lu\n",
(ulong) buf_frame_get_page_no(page),
node->data,
- (ulong) ut_dulint_get_high
- (btr_page_get_index_id(page)),
- (ulong) ut_dulint_get_low
- (btr_page_get_index_id(page)),
+ (ulong) ut_dulint_get_high(
+ btr_page_get_index_id(page)),
+ (ulong) ut_dulint_get_low(
+ btr_page_get_index_id(page)),
(ulong) node->fold,
(ulong) rec_fold((rec_t*)(node->data),
offsets,
block->curr_n_fields,
block->curr_n_bytes,
- btr_page_get_index_id
- (page)));
+ btr_page_get_index_id(
+ page)));
fputs("InnoDB: Record ", stderr);
rec_print_new(stderr, (rec_t*)node->data,
@@ -1681,7 +1678,7 @@ btr_search_validate(void)
(void*) page, (ulong) block->is_hashed,
(ulong) block->curr_n_fields,
(ulong) block->curr_n_bytes,
- (ulong) block->curr_side);
+ (ulong) block->curr_left_side);
if (n_page_dumps < 20) {
buf_page_print(page);
diff --git a/storage/innobase/buf/buf0buf.c b/storage/innobase/buf/buf0buf.c
index 4e8cd97c9a8..222acc015a6 100644
--- a/storage/innobase/buf/buf0buf.c
+++ b/storage/innobase/buf/buf0buf.c
@@ -350,9 +350,9 @@ buf_page_is_corrupted(
if (srv_use_checksums) {
old_checksum = buf_calc_page_old_checksum(read_buf);
- old_checksum_field = mach_read_from_4
- (read_buf + UNIV_PAGE_SIZE
- - FIL_PAGE_END_LSN_OLD_CHKSUM);
+ old_checksum_field = mach_read_from_4(
+ read_buf + UNIV_PAGE_SIZE
+ - FIL_PAGE_END_LSN_OLD_CHKSUM);
/* There are 2 valid formulas for old_checksum_field:
@@ -459,8 +459,8 @@ buf_page_print(
if (dict_sys != NULL) {
- index = dict_index_find_on_id_low
- (btr_page_get_index_id(read_buf));
+ index = dict_index_find_on_id_low(
+ btr_page_get_index_id(read_buf));
if (index) {
fputs("InnoDB: (", stderr);
dict_index_name_print(stderr, NULL, index);
@@ -598,8 +598,8 @@ buf_pool_init(
/* Allocate the virtual address space window, i.e., the
buffer pool frames */
- buf_pool->frame_mem = os_awe_allocate_virtual_mem_window
- (UNIV_PAGE_SIZE * (n_frames + 1));
+ buf_pool->frame_mem = os_awe_allocate_virtual_mem_window(
+ UNIV_PAGE_SIZE * (n_frames + 1));
/* Allocate the physical memory for AWE and the AWE info array
for buf_pool */
@@ -625,8 +625,8 @@ buf_pool_init(
}
/*----------------------------------------*/
} else {
- buf_pool->frame_mem = os_mem_alloc_large
- (UNIV_PAGE_SIZE * (n_frames + 1), TRUE, FALSE);
+ buf_pool->frame_mem = os_mem_alloc_large(
+ UNIV_PAGE_SIZE * (n_frames + 1), TRUE, FALSE);
}
if (buf_pool->frame_mem == NULL) {
@@ -821,10 +821,10 @@ buf_awe_map_page_to_frame(
} else {
/* We can map block to the frame of bck */
- os_awe_map_physical_mem_to_window
- (bck->frame,
- UNIV_PAGE_SIZE / OS_AWE_X86_PAGE_SIZE,
- block->awe_info);
+ os_awe_map_physical_mem_to_window(
+ bck->frame,
+ UNIV_PAGE_SIZE / OS_AWE_X86_PAGE_SIZE,
+ block->awe_info);
block->frame = bck->frame;
@@ -840,10 +840,10 @@ buf_awe_map_page_to_frame(
bck);
if (add_to_mapped_list) {
- UT_LIST_ADD_FIRST
- (awe_LRU_free_mapped,
- buf_pool->awe_LRU_free_mapped,
- block);
+ UT_LIST_ADD_FIRST(
+ awe_LRU_free_mapped,
+ buf_pool->awe_LRU_free_mapped,
+ block);
}
buf_pool->n_pages_awe_remapped++;
@@ -1583,7 +1583,7 @@ buf_page_init_for_backup_restore(
block->is_hashed = FALSE;
block->n_fields = 1;
block->n_bytes = 0;
- block->side = BTR_SEARCH_LEFT_SIDE;
+ block->left_side = TRUE;
block->file_page_was_freed = FALSE;
}
@@ -1650,7 +1650,7 @@ buf_page_init(
block->is_hashed = FALSE;
block->n_fields = 1;
block->n_bytes = 0;
- block->side = BTR_SEARCH_LEFT_SIDE;
+ block->left_side = TRUE;
block->file_page_was_freed = FALSE;
}
@@ -1710,8 +1710,8 @@ buf_page_init_for_read(
mutex_enter(&(buf_pool->mutex));
- if (fil_tablespace_deleted_or_being_deleted_in_mem
- (space, tablespace_version)) {
+ if (fil_tablespace_deleted_or_being_deleted_in_mem(
+ space, tablespace_version)) {
*err = DB_TABLESPACE_DELETED;
}
@@ -1891,10 +1891,10 @@ buf_page_io_complete(
/* If this page is not uninitialized and not in the
doublewrite buffer, then the page number and space id
should be the same as in block. */
- ulint read_page_no = mach_read_from_4
- (block->frame + FIL_PAGE_OFFSET);
- ulint read_space_id = mach_read_from_4
- (block->frame + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
+ ulint read_page_no = mach_read_from_4(
+ block->frame + FIL_PAGE_OFFSET);
+ ulint read_space_id = mach_read_from_4(
+ block->frame + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
if (!block->space
&& trx_doublewrite_page_inside(block->offset)) {
@@ -1980,9 +1980,9 @@ buf_page_io_complete(
}
if (!recv_no_ibuf_operations) {
- ibuf_merge_or_delete_for_page
- (block->frame, block->space,
- block->offset, TRUE);
+ ibuf_merge_or_delete_for_page(
+ block->frame, block->space, block->offset,
+ TRUE);
}
}
@@ -2110,8 +2110,9 @@ buf_validate(void)
if (block->flush_type == BUF_FLUSH_LRU) {
n_lru_flush++;
- ut_a(rw_lock_is_locked
- (&block->lock, RW_LOCK_SHARED));
+ ut_a(rw_lock_is_locked(
+ &block->lock,
+ RW_LOCK_SHARED));
} else if (block->flush_type
== BUF_FLUSH_LIST) {
n_list_flush++;
diff --git a/storage/innobase/buf/buf0flu.c b/storage/innobase/buf/buf0flu.c
index 9274b67a555..8ef8c3b9358 100644
--- a/storage/innobase/buf/buf0flu.c
+++ b/storage/innobase/buf/buf0flu.c
@@ -890,8 +890,8 @@ buf_flush_batch(
old_page_count = page_count;
/* Try to flush also all the neighbors */
- page_count += buf_flush_try_neighbors
- (space, offset, flush_type);
+ page_count += buf_flush_try_neighbors(
+ space, offset, flush_type);
/* fprintf(stderr,
"Flush type %lu, page no %lu, neighb %lu\n",
flush_type, offset,
diff --git a/storage/innobase/buf/buf0lru.c b/storage/innobase/buf/buf0lru.c
index f0264f2e323..4ebe94c40ec 100644
--- a/storage/innobase/buf/buf0lru.c
+++ b/storage/innobase/buf/buf0lru.c
@@ -542,16 +542,16 @@ buf_LRU_old_adjust_len(void)
if (old_len < new_len - BUF_LRU_OLD_TOLERANCE) {
- buf_pool->LRU_old = UT_LIST_GET_PREV
- (LRU, buf_pool->LRU_old);
+ buf_pool->LRU_old = UT_LIST_GET_PREV(
+ LRU, buf_pool->LRU_old);
(buf_pool->LRU_old)->old = TRUE;
buf_pool->LRU_old_len++;
} else if (old_len > new_len + BUF_LRU_OLD_TOLERANCE) {
(buf_pool->LRU_old)->old = FALSE;
- buf_pool->LRU_old = UT_LIST_GET_NEXT
- (LRU, buf_pool->LRU_old);
+ buf_pool->LRU_old = UT_LIST_GET_NEXT(
+ LRU, buf_pool->LRU_old);
buf_pool->LRU_old_len--;
} else {
ut_a(buf_pool->LRU_old); /* Check that we did not
diff --git a/storage/innobase/buf/buf0rea.c b/storage/innobase/buf/buf0rea.c
index cf7aa97191f..fdec0206990 100644
--- a/storage/innobase/buf/buf0rea.c
+++ b/storage/innobase/buf/buf0rea.c
@@ -257,10 +257,10 @@ buf_read_ahead_random(
mode: hence FALSE as the first parameter */
if (!ibuf_bitmap_page(i)) {
- count += buf_read_page_low
- (&err, FALSE,
- ibuf_mode | OS_AIO_SIMULATED_WAKE_LATER,
- space, tablespace_version, i);
+ count += buf_read_page_low(
+ &err, FALSE,
+ ibuf_mode | OS_AIO_SIMULATED_WAKE_LATER,
+ space, tablespace_version, i);
if (err == DB_TABLESPACE_DELETED) {
ut_print_timestamp(stderr);
fprintf(stderr,
@@ -549,10 +549,10 @@ buf_read_ahead_linear(
aio mode: hence FALSE as the first parameter */
if (!ibuf_bitmap_page(i)) {
- count += buf_read_page_low
- (&err, FALSE,
- ibuf_mode | OS_AIO_SIMULATED_WAKE_LATER,
- space, tablespace_version, i);
+ count += buf_read_page_low(
+ &err, FALSE,
+ ibuf_mode | OS_AIO_SIMULATED_WAKE_LATER,
+ space, tablespace_version, i);
if (err == DB_TABLESPACE_DELETED) {
ut_print_timestamp(stderr);
fprintf(stderr,
diff --git a/storage/innobase/data/data0data.c b/storage/innobase/data/data0data.c
index 804d02e8f59..fc4494d991a 100644
--- a/storage/innobase/data/data0data.c
+++ b/storage/innobase/data/data0data.c
@@ -540,8 +540,8 @@ dtuple_convert_big_rec(
n_fields = 0;
while (rec_get_converted_size(index, entry)
- >= ut_min(page_get_free_space_of_empty
- (dict_table_is_comp(index->table)) / 2,
+ >= ut_min(page_get_free_space_of_empty(
+ dict_table_is_comp(index->table)) / 2,
REC_MAX_DATA_SIZE)) {
longest = 0;
@@ -610,8 +610,8 @@ dtuple_convert_big_rec(
vector->fields[n_fields].len = dfield->len
- DICT_MAX_INDEX_COL_LEN;
- vector->fields[n_fields].data = mem_heap_alloc
- (heap, vector->fields[n_fields].len);
+ vector->fields[n_fields].data = mem_heap_alloc(
+ heap, vector->fields[n_fields].len);
/* Copy data (from the end of field) to big rec vector */
diff --git a/storage/innobase/data/data0type.c b/storage/innobase/data/data0type.c
index 43fc8c55e35..77779d185cf 100644
--- a/storage/innobase/data/data0type.c
+++ b/storage/innobase/data/data0type.c
@@ -40,9 +40,6 @@ charset-collation code for them. */
ulint data_mysql_default_charset_coll = 99999999;
-dtype_t dtype_binary_val = {DATA_BINARY, 0, 0, 0, 0, 0};
-dtype_t* dtype_binary = &dtype_binary_val;
-
/*************************************************************************
Determine how many bytes the first n characters of the given string occupy.
If the string is shorter than n characters, returns the number of bytes
@@ -53,7 +50,11 @@ dtype_get_at_most_n_mbchars(
/*========================*/
/* out: length of the prefix,
in bytes */
- const dtype_t* dtype, /* in: data type */
+ ulint prtype, /* in: precise type */
+ ulint mbminlen, /* in: minimum length of a
+ multi-byte character */
+ ulint mbmaxlen, /* in: maximum length of a
+ multi-byte character */
ulint prefix_len, /* in: length of the requested
prefix, in characters, multiplied by
dtype_get_mbmaxlen(dtype) */
@@ -63,12 +64,12 @@ dtype_get_at_most_n_mbchars(
{
#ifndef UNIV_HOTBACKUP
ut_a(data_len != UNIV_SQL_NULL);
- ut_ad(!dtype->mbmaxlen || !(prefix_len % dtype->mbmaxlen));
+ ut_ad(!mbmaxlen || !(prefix_len % mbmaxlen));
- if (dtype->mbminlen != dtype->mbmaxlen) {
- ut_a(!(prefix_len % dtype->mbmaxlen));
- return(innobase_get_at_most_n_mbchars
- (dtype_get_charset_coll(dtype->prtype),
+ if (mbminlen != mbmaxlen) {
+ ut_a(!(prefix_len % mbmaxlen));
+ return(innobase_get_at_most_n_mbchars(
+ dtype_get_charset_coll(prtype),
prefix_len, data_len, str));
}
@@ -270,8 +271,6 @@ dtype_print(
} else if (prtype == DATA_TRX_ID) {
fputs("DATA_TRX_ID", stderr);
len = DATA_TRX_ID_LEN;
- } else if (prtype == DATA_MIX_ID) {
- fputs("DATA_MIX_ID", stderr);
} else if (prtype == DATA_ENGLISH) {
fputs("DATA_ENGLISH", stderr);
} else {
@@ -291,38 +290,5 @@ dtype_print(
}
}
- fprintf(stderr, " len %lu prec %lu", (ulong) len, (ulong) type->prec);
-}
-
-/***************************************************************************
-Returns the maximum size of a data type. Note: types in system tables may be
-incomplete and return incorrect information. */
-
-ulint
-dtype_get_max_size(
-/*===============*/
- /* out: maximum size (ULINT_MAX for
- unbounded types) */
- const dtype_t* type) /* in: type */
-{
- switch (type->mtype) {
- case DATA_SYS:
- case DATA_CHAR:
- case DATA_FIXBINARY:
- case DATA_INT:
- case DATA_FLOAT:
- case DATA_DOUBLE:
- case DATA_MYSQL:
- case DATA_VARCHAR:
- case DATA_BINARY:
- case DATA_DECIMAL:
- case DATA_VARMYSQL:
- return(type->len);
- case DATA_BLOB:
- return(ULINT_MAX);
- default:
- ut_error;
- }
-
- return(ULINT_MAX);
+ fprintf(stderr, " len %lu", (ulong) len);
}
diff --git a/storage/innobase/dict/dict0boot.c b/storage/innobase/dict/dict0boot.c
index 0515adb9a8f..08515d8fb13 100644
--- a/storage/innobase/dict/dict0boot.c
+++ b/storage/innobase/dict/dict0boot.c
@@ -58,8 +58,7 @@ dict_hdr_get_new_id(
dulint id;
mtr_t mtr;
- ut_ad((type == DICT_HDR_TABLE_ID) || (type == DICT_HDR_INDEX_ID)
- || (type == DICT_HDR_MIX_ID));
+ ut_ad((type == DICT_HDR_TABLE_ID) || (type == DICT_HDR_INDEX_ID));
mtr_start(&mtr);
@@ -141,6 +140,7 @@ dict_hdr_create(
mlog_write_dulint(dict_header + DICT_HDR_INDEX_ID,
ut_dulint_create(0, DICT_HDR_FIRST_ID), mtr);
+ /* Obsolete, but we must initialize it to 0 anyway. */
mlog_write_dulint(dict_header + DICT_HDR_MIX_ID,
ut_dulint_create(0, DICT_HDR_FIRST_ID), mtr);
@@ -214,7 +214,6 @@ dict_boot(void)
dict_index_t* index;
dict_hdr_t* dict_hdr;
mtr_t mtr;
- ibool success;
mtr_start(&mtr);
@@ -236,25 +235,25 @@ dict_boot(void)
..._MARGIN, it will immediately be updated to the disk-based
header. */
- dict_sys->row_id = ut_dulint_add
- (ut_dulint_align_up(mtr_read_dulint
- (dict_hdr + DICT_HDR_ROW_ID, &mtr),
- DICT_HDR_ROW_ID_WRITE_MARGIN),
- DICT_HDR_ROW_ID_WRITE_MARGIN);
+ dict_sys->row_id = ut_dulint_add(
+ ut_dulint_align_up(mtr_read_dulint(dict_hdr + DICT_HDR_ROW_ID,
+ &mtr),
+ DICT_HDR_ROW_ID_WRITE_MARGIN),
+ DICT_HDR_ROW_ID_WRITE_MARGIN);
/* Insert into the dictionary cache the descriptions of the basic
system tables */
/*-------------------------*/
table = dict_mem_table_create("SYS_TABLES", DICT_HDR_SPACE, 8, 0);
- dict_mem_table_add_col(table, "NAME", DATA_BINARY, 0, 0, 0);
- dict_mem_table_add_col(table, "ID", DATA_BINARY, 0, 0, 0);
- dict_mem_table_add_col(table, "N_COLS", DATA_INT, 0, 4, 0);
- dict_mem_table_add_col(table, "TYPE", DATA_INT, 0, 4, 0);
- dict_mem_table_add_col(table, "MIX_ID", DATA_BINARY, 0, 0, 0);
- dict_mem_table_add_col(table, "MIX_LEN", DATA_INT, 0, 4, 0);
- dict_mem_table_add_col(table, "CLUSTER_NAME", DATA_BINARY, 0, 0, 0);
- dict_mem_table_add_col(table, "SPACE", DATA_INT, 0, 4, 0);
+ dict_mem_table_add_col(table, "NAME", DATA_BINARY, 0, 0);
+ dict_mem_table_add_col(table, "ID", DATA_BINARY, 0, 0);
+ dict_mem_table_add_col(table, "N_COLS", DATA_INT, 0, 4);
+ dict_mem_table_add_col(table, "TYPE", DATA_INT, 0, 4);
+ dict_mem_table_add_col(table, "MIX_ID", DATA_BINARY, 0, 0);
+ dict_mem_table_add_col(table, "MIX_LEN", DATA_INT, 0, 4);
+ dict_mem_table_add_col(table, "CLUSTER_NAME", DATA_BINARY, 0, 0);
+ dict_mem_table_add_col(table, "SPACE", DATA_INT, 0, 4);
table->id = DICT_TABLES_ID;
@@ -269,31 +268,30 @@ dict_boot(void)
index->id = DICT_TABLES_ID;
- success = dict_index_add_to_cache(table, index, mtr_read_ulint
- (dict_hdr + DICT_HDR_TABLES,
- MLOG_4BYTES, &mtr));
- ut_a(success);
+ dict_index_add_to_cache(table, index,
+ mtr_read_ulint(dict_hdr + DICT_HDR_TABLES,
+ MLOG_4BYTES, &mtr));
+
/*-------------------------*/
index = dict_mem_index_create("SYS_TABLES", "ID_IND",
DICT_HDR_SPACE, DICT_UNIQUE, 1);
dict_mem_index_add_field(index, "ID", 0);
index->id = DICT_TABLE_IDS_ID;
- success = dict_index_add_to_cache(table, index,
- mtr_read_ulint
- (dict_hdr + DICT_HDR_TABLE_IDS,
- MLOG_4BYTES, &mtr));
- ut_a(success);
+ dict_index_add_to_cache(table, index,
+ mtr_read_ulint(dict_hdr + DICT_HDR_TABLE_IDS,
+ MLOG_4BYTES, &mtr));
+
/*-------------------------*/
table = dict_mem_table_create("SYS_COLUMNS", DICT_HDR_SPACE, 7, 0);
- dict_mem_table_add_col(table, "TABLE_ID", DATA_BINARY,0,0,0);
- dict_mem_table_add_col(table, "POS", DATA_INT, 0, 4, 0);
- dict_mem_table_add_col(table, "NAME", DATA_BINARY, 0, 0, 0);
- dict_mem_table_add_col(table, "MTYPE", DATA_INT, 0, 4, 0);
- dict_mem_table_add_col(table, "PRTYPE", DATA_INT, 0, 4, 0);
- dict_mem_table_add_col(table, "LEN", DATA_INT, 0, 4, 0);
- dict_mem_table_add_col(table, "PREC", DATA_INT, 0, 4, 0);
+ dict_mem_table_add_col(table, "TABLE_ID", DATA_BINARY, 0, 0);
+ dict_mem_table_add_col(table, "POS", DATA_INT, 0, 4);
+ dict_mem_table_add_col(table, "NAME", DATA_BINARY, 0, 0);
+ dict_mem_table_add_col(table, "MTYPE", DATA_INT, 0, 4);
+ dict_mem_table_add_col(table, "PRTYPE", DATA_INT, 0, 4);
+ dict_mem_table_add_col(table, "LEN", DATA_INT, 0, 4);
+ dict_mem_table_add_col(table, "PREC", DATA_INT, 0, 4);
table->id = DICT_COLUMNS_ID;
@@ -308,20 +306,20 @@ dict_boot(void)
dict_mem_index_add_field(index, "POS", 0);
index->id = DICT_COLUMNS_ID;
- success = dict_index_add_to_cache(table, index, mtr_read_ulint
- (dict_hdr + DICT_HDR_COLUMNS,
- MLOG_4BYTES, &mtr));
- ut_a(success);
+ dict_index_add_to_cache(table, index,
+ mtr_read_ulint(dict_hdr + DICT_HDR_COLUMNS,
+ MLOG_4BYTES, &mtr));
+
/*-------------------------*/
table = dict_mem_table_create("SYS_INDEXES", DICT_HDR_SPACE, 7, 0);
- dict_mem_table_add_col(table, "TABLE_ID", DATA_BINARY, 0,0,0);
- dict_mem_table_add_col(table, "ID", DATA_BINARY, 0, 0, 0);
- dict_mem_table_add_col(table, "NAME", DATA_BINARY, 0, 0, 0);
- dict_mem_table_add_col(table, "N_FIELDS", DATA_INT, 0, 4, 0);
- dict_mem_table_add_col(table, "TYPE", DATA_INT, 0, 4, 0);
- dict_mem_table_add_col(table, "SPACE", DATA_INT, 0, 4, 0);
- dict_mem_table_add_col(table, "PAGE_NO", DATA_INT, 0, 4, 0);
+ dict_mem_table_add_col(table, "TABLE_ID", DATA_BINARY, 0, 0);
+ dict_mem_table_add_col(table, "ID", DATA_BINARY, 0, 0);
+ dict_mem_table_add_col(table, "NAME", DATA_BINARY, 0, 0);
+ dict_mem_table_add_col(table, "N_FIELDS", DATA_INT, 0, 4);
+ dict_mem_table_add_col(table, "TYPE", DATA_INT, 0, 4);
+ dict_mem_table_add_col(table, "SPACE", DATA_INT, 0, 4);
+ dict_mem_table_add_col(table, "PAGE_NO", DATA_INT, 0, 4);
/* The '+ 2' below comes from the 2 system fields */
#if DICT_SYS_INDEXES_PAGE_NO_FIELD != 6 + 2
@@ -346,16 +344,16 @@ dict_boot(void)
dict_mem_index_add_field(index, "ID", 0);
index->id = DICT_INDEXES_ID;
- success = dict_index_add_to_cache(table, index, mtr_read_ulint
- (dict_hdr + DICT_HDR_INDEXES,
- MLOG_4BYTES, &mtr));
- ut_a(success);
+ dict_index_add_to_cache(table, index,
+ mtr_read_ulint(dict_hdr + DICT_HDR_INDEXES,
+ MLOG_4BYTES, &mtr));
+
/*-------------------------*/
table = dict_mem_table_create("SYS_FIELDS", DICT_HDR_SPACE, 3, 0);
- dict_mem_table_add_col(table, "INDEX_ID", DATA_BINARY, 0,0,0);
- dict_mem_table_add_col(table, "POS", DATA_INT, 0, 4, 0);
- dict_mem_table_add_col(table, "COL_NAME", DATA_BINARY, 0,0,0);
+ dict_mem_table_add_col(table, "INDEX_ID", DATA_BINARY, 0, 0);
+ dict_mem_table_add_col(table, "POS", DATA_INT, 0, 4);
+ dict_mem_table_add_col(table, "COL_NAME", DATA_BINARY, 0, 0);
table->id = DICT_FIELDS_ID;
dict_table_add_to_cache(table);
@@ -369,10 +367,9 @@ dict_boot(void)
dict_mem_index_add_field(index, "POS", 0);
index->id = DICT_FIELDS_ID;
- success = dict_index_add_to_cache(table, index, mtr_read_ulint
- (dict_hdr + DICT_HDR_FIELDS,
- MLOG_4BYTES, &mtr));
- ut_a(success);
+ dict_index_add_to_cache(table, index,
+ mtr_read_ulint(dict_hdr + DICT_HDR_FIELDS,
+ MLOG_4BYTES, &mtr));
mtr_commit(&mtr);
/*-------------------------*/
diff --git a/storage/innobase/dict/dict0crea.c b/storage/innobase/dict/dict0crea.c
index c912ea0fd1a..75422b929b1 100644
--- a/storage/innobase/dict/dict0crea.c
+++ b/storage/innobase/dict/dict0crea.c
@@ -78,14 +78,14 @@ dict_create_sys_tables_tuple(
mach_write_to_4(ptr, DICT_TABLE_ORDINARY);
dfield_set_data(dfield, ptr, 4);
- /* 6: MIX_ID ---------------------------*/
+ /* 6: MIX_ID (obsolete) ---------------------------*/
dfield = dtuple_get_nth_field(entry, 4);
ptr = mem_heap_alloc(heap, 8);
memset(ptr, 0, 8);
dfield_set_data(dfield, ptr, 8);
- /* 7: MIX_LEN --------------------------*/
+ /* 7: MIX_LEN (obsolete) --------------------------*/
dfield = dtuple_get_nth_field(entry, 5);
@@ -124,11 +124,12 @@ dict_create_sys_columns_tuple(
mem_heap_t* heap) /* in: memory heap from which the memory for
the built tuple is allocated */
{
- dict_table_t* sys_columns;
- dtuple_t* entry;
- dict_col_t* column;
- dfield_t* dfield;
- byte* ptr;
+ dict_table_t* sys_columns;
+ dtuple_t* entry;
+ const dict_col_t* column;
+ dfield_t* dfield;
+ byte* ptr;
+ const char* col_name;
ut_ad(table && heap);
@@ -155,33 +156,34 @@ dict_create_sys_columns_tuple(
/* 4: NAME ---------------------------*/
dfield = dtuple_get_nth_field(entry, 2);
- dfield_set_data(dfield, column->name, ut_strlen(column->name));
+ col_name = dict_table_get_col_name(table, i);
+ dfield_set_data(dfield, col_name, ut_strlen(col_name));
/* 5: MTYPE --------------------------*/
dfield = dtuple_get_nth_field(entry, 3);
ptr = mem_heap_alloc(heap, 4);
- mach_write_to_4(ptr, (column->type).mtype);
+ mach_write_to_4(ptr, column->mtype);
dfield_set_data(dfield, ptr, 4);
/* 6: PRTYPE -------------------------*/
dfield = dtuple_get_nth_field(entry, 4);
ptr = mem_heap_alloc(heap, 4);
- mach_write_to_4(ptr, (column->type).prtype);
+ mach_write_to_4(ptr, column->prtype);
dfield_set_data(dfield, ptr, 4);
/* 7: LEN ----------------------------*/
dfield = dtuple_get_nth_field(entry, 5);
ptr = mem_heap_alloc(heap, 4);
- mach_write_to_4(ptr, (column->type).len);
+ mach_write_to_4(ptr, column->len);
dfield_set_data(dfield, ptr, 4);
/* 8: PREC ---------------------------*/
dfield = dtuple_get_nth_field(entry, 6);
ptr = mem_heap_alloc(heap, 4);
- mach_write_to_4(ptr, (column->type).prec);
+ mach_write_to_4(ptr, 0/* unused */);
dfield_set_data(dfield, ptr, 4);
/*---------------------------------*/
@@ -222,8 +224,7 @@ dict_build_table_def_step(
row_len = 0;
for (i = 0; i < table->n_def; i++) {
- row_len += dtype_get_min_size(dict_col_get_type
- (&table->cols[i]));
+ row_len += dict_col_get_min_size(&table->cols[i]);
}
if (row_len > BTR_PAGE_MAX_REC_SIZE) {
return(DB_TOO_BIG_RECORD);
@@ -238,7 +239,7 @@ dict_build_table_def_step(
- page 3 will contain the root of the clustered index of the
table we create here. */
- table->space = 0; /* reset to zero for the call below */
+ ulint space = 0; /* reset to zero for the call below */
if (table->dir_path_of_temp_table) {
/* We place tables created with CREATE TEMPORARY
@@ -251,9 +252,11 @@ dict_build_table_def_step(
is_path = FALSE;
}
- error = fil_create_new_single_table_tablespace
- (&table->space, path_or_name, is_path,
- FIL_IBD_FILE_INITIAL_SIZE);
+ error = fil_create_new_single_table_tablespace(
+ &space, path_or_name, is_path,
+ FIL_IBD_FILE_INITIAL_SIZE);
+ table->space = space;
+
if (error != DB_SUCCESS) {
return(error);
@@ -768,8 +771,8 @@ dict_truncate_index_tree(
appropriate field in the SYS_INDEXES record: this mini-transaction
marks the B-tree totally truncated */
- comp = page_is_comp(btr_page_get
- (space, root_page_no, RW_X_LATCH, mtr));
+ comp = page_is_comp(btr_page_get(space, root_page_no, RW_X_LATCH,
+ mtr));
btr_free_root(space, root_page_no, mtr);
/* We will temporarily write FIL_NULL to the PAGE_NO field
@@ -798,7 +801,7 @@ dict_truncate_index_tree(
root_page_no = btr_create(type, space, index_id, comp, mtr);
if (index) {
- index->tree->page = root_page_no;
+ index->page = root_page_no;
} else {
ut_print_timestamp(stderr);
fprintf(stderr,
@@ -1004,7 +1007,6 @@ dict_create_index_step(
que_thr_t* thr) /* in: query thread */
{
ind_node_t* node;
- ibool success;
ulint err = DB_ERROR;
trx_t* trx;
@@ -1088,10 +1090,8 @@ dict_create_index_step(
if (node->state == INDEX_ADD_TO_CACHE) {
- success = dict_index_add_to_cache(node->table, node->index,
- node->page_no);
-
- ut_a(success);
+ dict_index_add_to_cache(node->table, node->index,
+ node->page_no);
err = DB_SUCCESS;
}
@@ -1328,13 +1328,14 @@ dict_create_add_foreign_field_to_dictionary(
pars_info_add_str_literal(info, "ref_col_name",
foreign->referenced_col_names[field_nr]);
- return(dict_foreign_eval_sql
- (info, "PROCEDURE P () IS\n"
- "BEGIN\n"
- "INSERT INTO SYS_FOREIGN_COLS VALUES"
- "(:id, :pos, :for_col_name, :ref_col_name);\n"
- "END;\n",
- table, foreign, trx));
+ return(dict_foreign_eval_sql(
+ info,
+ "PROCEDURE P () IS\n"
+ "BEGIN\n"
+ "INSERT INTO SYS_FOREIGN_COLS VALUES"
+ "(:id, :pos, :for_col_name, :ref_col_name);\n"
+ "END;\n",
+ table, foreign, trx));
}
/************************************************************************
@@ -1393,8 +1394,8 @@ dict_create_add_foreign_to_dictionary(
}
for (i = 0; i < foreign->n_fields; i++) {
- error = dict_create_add_foreign_field_to_dictionary
- (i, table, foreign, trx);
+ error = dict_create_add_foreign_field_to_dictionary(
+ i, table, foreign, trx);
if (error != DB_SUCCESS) {
@@ -1450,8 +1451,8 @@ dict_create_add_foreigns_to_dictionary(
foreign;
foreign = UT_LIST_GET_NEXT(foreign_list, foreign)) {
- error = dict_create_add_foreign_to_dictionary
- (&number, table, foreign, trx);
+ error = dict_create_add_foreign_to_dictionary(&number, table,
+ foreign, trx);
if (error != DB_SUCCESS) {
diff --git a/storage/innobase/dict/dict0dict.c b/storage/innobase/dict/dict0dict.c
index f98898a44a0..209054151f4 100644
--- a/storage/innobase/dict/dict0dict.c
+++ b/storage/innobase/dict/dict0dict.c
@@ -48,8 +48,6 @@ rw_lock_t dict_operation_lock; /* table create, drop, etc. reserve
creating a table or index object */
#define DICT_POOL_PER_TABLE_HASH 512 /* buffer pool max size per table
hash table fixed size in bytes */
-#define DICT_POOL_PER_COL_HASH 128 /* buffer pool max size per column
- hash table fixed size in bytes */
#define DICT_POOL_PER_VARYING 4 /* buffer pool max size per data
dictionary varying size in bytes */
@@ -130,32 +128,6 @@ innobase_get_charset(
#endif /* !UNIV_HOTBACKUP */
/**************************************************************************
-Adds a column to the data dictionary hash table. */
-static
-void
-dict_col_add_to_cache(
-/*==================*/
- dict_table_t* table, /* in: table */
- dict_col_t* col); /* in: column */
-/**************************************************************************
-Repositions a column in the data dictionary hash table when the table name
-changes. */
-static
-void
-dict_col_reposition_in_cache(
-/*=========================*/
- dict_table_t* table, /* in: table */
- dict_col_t* col, /* in: column */
- const char* new_name); /* in: new table name */
-/**************************************************************************
-Removes a column from the data dictionary hash table. */
-static
-void
-dict_col_remove_from_cache(
-/*=======================*/
- dict_table_t* table, /* in: table */
- dict_col_t* col); /* in: column */
-/**************************************************************************
Removes an index from the dictionary cache. */
static
void
@@ -171,16 +143,16 @@ dict_index_copy(
/*============*/
dict_index_t* index1, /* in: index to copy to */
dict_index_t* index2, /* in: index to copy from */
+ dict_table_t* table, /* in: table */
ulint start, /* in: first position to copy */
ulint end); /* in: last position to copy */
/***********************************************************************
-Tries to find column names for the index in the column hash table and
-sets the col field of the index. */
+Tries to find column names for the index and sets the col field of the
+index. */
static
-ibool
+void
dict_index_find_cols(
/*=================*/
- /* out: TRUE if success */
dict_table_t* table, /* in: table */
dict_index_t* index); /* in: index */
/***********************************************************************
@@ -220,7 +192,8 @@ static
void
dict_col_print_low(
/*===============*/
- dict_col_t* col); /* in: column */
+ const dict_table_t* table, /* in: table */
+ const dict_col_t* col); /* in: column */
/**************************************************************************
Prints an index data. */
static
@@ -352,15 +325,27 @@ dict_table_decrement_handle_count(
mutex_exit(&(dict_sys->mutex));
}
+/*************************************************************************
+Gets the column data type. */
+
+void
+dict_col_copy_type_noninline(
+/*=========================*/
+ const dict_col_t* col, /* in: column */
+ dtype_t* type) /* out: data type */
+{
+ return(dict_col_copy_type(col, type));
+}
+
/************************************************************************
Gets the nth column of a table. */
-dict_col_t*
+const dict_col_t*
dict_table_get_nth_col_noninline(
/*=============================*/
- /* out: pointer to column object */
- dict_table_t* table, /* in: table */
- ulint pos) /* in: position of column */
+ /* out: pointer to column object */
+ const dict_table_t* table, /* in: table */
+ ulint pos) /* in: position of column */
{
return(dict_table_get_nth_col(table, pos));
}
@@ -402,6 +387,35 @@ dict_table_get_index_noninline(
return(dict_table_get_index(table, name));
}
+/**************************************************************************
+Returns a column's name. */
+
+const char*
+dict_table_get_col_name(
+/*====================*/
+ /* out: column name. NOTE: not
+ guaranteed to stay valid if table is
+ modified in any way (columns added,
+ etc.). */
+ const dict_table_t* table, /* in: table */
+ ulint col_nr) /* in: column number */
+{
+ ulint i;
+ const char* s;
+
+ ut_ad(table);
+ ut_ad(col_nr < table->n_def);
+ ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
+
+ s = table->col_names;
+
+ for (i = 0; i < col_nr; i++) {
+ s += strlen(s) + 1;
+ }
+
+ return(s);
+}
+
/************************************************************************
Initializes the autoinc counter. It is not an error to initialize an already
initialized counter. */
@@ -544,10 +558,10 @@ dict_index_get_nth_col_pos(
dict_index_t* index, /* in: index */
ulint n) /* in: column number */
{
- dict_field_t* field;
- dict_col_t* col;
- ulint pos;
- ulint n_fields;
+ const dict_field_t* field;
+ const dict_col_t* col;
+ ulint pos;
+ ulint n_fields;
ut_ad(index);
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
@@ -556,7 +570,7 @@ dict_index_get_nth_col_pos(
if (index->type & DICT_CLUSTERED) {
- return(col->clust_pos);
+ return(dict_col_get_clust_pos(col, index));
}
n_fields = dict_index_get_n_fields(index);
@@ -584,10 +598,10 @@ dict_index_contains_col_or_prefix(
dict_index_t* index, /* in: index */
ulint n) /* in: column number */
{
- dict_field_t* field;
- dict_col_t* col;
- ulint pos;
- ulint n_fields;
+ const dict_field_t* field;
+ const dict_col_t* col;
+ ulint pos;
+ ulint n_fields;
ut_ad(index);
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
@@ -731,11 +745,11 @@ dict_table_col_in_clustered_key(
dict_table_t* table, /* in: table */
ulint n) /* in: column number */
{
- dict_index_t* index;
- dict_field_t* field;
- dict_col_t* col;
- ulint pos;
- ulint n_fields;
+ dict_index_t* index;
+ const dict_field_t* field;
+ const dict_col_t* col;
+ ulint pos;
+ ulint n_fields;
ut_ad(table);
@@ -774,9 +788,6 @@ dict_init(void)
dict_sys->table_id_hash = hash_create(buf_pool_get_max_size()
/ (DICT_POOL_PER_TABLE_HASH
* UNIV_WORD_SIZE));
- dict_sys->col_hash = hash_create(buf_pool_get_max_size()
- / (DICT_POOL_PER_COL_HASH
- * UNIV_WORD_SIZE));
dict_sys->size = 0;
UT_LIST_INIT(dict_sys->table_LRU);
@@ -884,52 +895,49 @@ dict_table_add_to_cache(
dict_mem_table_add_col(table, "DB_ROW_ID", DATA_SYS,
DATA_ROW_ID | DATA_NOT_NULL,
- DATA_ROW_ID_LEN, 0);
+ DATA_ROW_ID_LEN);
#if DATA_ROW_ID != 0
#error "DATA_ROW_ID != 0"
#endif
dict_mem_table_add_col(table, "DB_TRX_ID", DATA_SYS,
DATA_TRX_ID | DATA_NOT_NULL,
- DATA_TRX_ID_LEN, 0);
+ DATA_TRX_ID_LEN);
#if DATA_TRX_ID != 1
#error "DATA_TRX_ID != 1"
#endif
dict_mem_table_add_col(table, "DB_ROLL_PTR", DATA_SYS,
DATA_ROLL_PTR | DATA_NOT_NULL,
- DATA_ROLL_PTR_LEN, 0);
+ DATA_ROLL_PTR_LEN);
#if DATA_ROLL_PTR != 2
#error "DATA_ROLL_PTR != 2"
#endif
- dict_mem_table_add_col(table, "DB_MIX_ID", DATA_SYS,
- DATA_MIX_ID | DATA_NOT_NULL,
- DATA_MIX_ID_LEN, 0);
-#if DATA_MIX_ID != 3
-#error "DATA_MIX_ID != 3"
-#endif
/* This check reminds that if a new system column is added to
the program, it should be dealt with here */
-#if DATA_N_SYS_COLS != 4
-#error "DATA_N_SYS_COLS != 4"
+#if DATA_N_SYS_COLS != 3
+#error "DATA_N_SYS_COLS != 3"
#endif
+ /* The lower limit for what we consider a "big" row */
+#define BIG_ROW_SIZE 1024
+
row_len = 0;
for (i = 0; i < table->n_def; i++) {
- ulint col_len = dtype_get_max_size
- (dict_col_get_type(dict_table_get_nth_col(table, i)));
+ ulint col_len = dict_col_get_max_size(
+ dict_table_get_nth_col(table, i));
+
+ row_len += col_len;
/* If we have a single unbounded field, or several gigantic
- fields, mark the maximum row size as ULINT_MAX. */
- if (ut_max(col_len, row_len) >= (ULINT_MAX / 2)) {
- row_len = ULINT_MAX;
+ fields, mark the maximum row size as BIG_ROW_SIZE. */
+ if (row_len >= BIG_ROW_SIZE || col_len >= BIG_ROW_SIZE) {
+ row_len = BIG_ROW_SIZE;
break;
}
-
- row_len += col_len;
}
- table->max_row_size = row_len;
+ table->big_rows = row_len >= BIG_ROW_SIZE;
/* Look for a table with the same name: error if such exists */
{
@@ -947,11 +955,6 @@ dict_table_add_to_cache(
ut_a(table2 == NULL);
}
- /* Add the columns to the column hash table */
- for (i = 0; i < table->n_cols; i++) {
- dict_col_add_to_cache(table, dict_table_get_nth_col(table, i));
- }
-
/* Add table to hash table of tables */
HASH_INSERT(dict_table_t, name_hash, dict_sys->table_hash, fold,
table);
@@ -985,7 +988,7 @@ dict_index_find_on_id_low(
index = dict_table_get_first_index(table);
while (index) {
- if (0 == ut_dulint_cmp(id, index->tree->id)) {
+ if (0 == ut_dulint_cmp(id, index->id)) {
/* Found */
return(index);
@@ -1019,7 +1022,6 @@ dict_table_rename_in_cache(
ulint old_size;
char* old_name;
ibool success;
- ulint i;
ut_ad(table);
#ifdef UNIV_SYNC_DEBUG
@@ -1056,8 +1058,8 @@ dict_table_rename_in_cache(
table->name, table->dir_path_of_temp_table);
success = FALSE;
} else {
- success = fil_rename_tablespace
- (table->name, table->space, new_name);
+ success = fil_rename_tablespace(
+ table->name, table->space, new_name);
}
if (!success) {
@@ -1066,15 +1068,6 @@ dict_table_rename_in_cache(
}
}
- /* Reposition the columns in the column hash table; they are hashed
- according to the pair (table name, column name) */
-
- for (i = 0; i < table->n_cols; i++) {
- dict_col_reposition_in_cache(table,
- dict_table_get_nth_col(table, i),
- new_name);
- }
-
/* Remove table from the hash tables of tables */
HASH_DELETE(dict_table_t, name_hash, dict_sys->table_hash,
ut_fold_string(table->name), table);
@@ -1167,10 +1160,10 @@ dict_table_rename_in_cache(
/* This is a generated >= 4.0.18 format id */
if (strlen(table->name) > strlen(old_name)) {
- foreign->id = mem_heap_alloc
- (foreign->heap,
- strlen(table->name)
- + strlen(old_id) + 1);
+ foreign->id = mem_heap_alloc(
+ foreign->heap,
+ strlen(table->name)
+ + strlen(old_id) + 1);
}
/* Replace the prefix 'databasename/tablename'
@@ -1186,9 +1179,9 @@ dict_table_rename_in_cache(
if (dict_get_db_name_len(table->name)
> dict_get_db_name_len(foreign->id)) {
- foreign->id = mem_heap_alloc
- (foreign->heap,
- db_len + strlen(old_id) + 1);
+ foreign->id = mem_heap_alloc(
+ foreign->heap,
+ db_len + strlen(old_id) + 1);
}
/* Replace the database prefix in id with the
@@ -1214,8 +1207,8 @@ dict_table_rename_in_cache(
/* Allocate a longer name buffer;
TODO: store buf len to save memory */
- foreign->referenced_table_name = mem_heap_alloc
- (foreign->heap, strlen(table->name) + 1);
+ foreign->referenced_table_name = mem_heap_alloc(
+ foreign->heap, strlen(table->name) + 1);
}
strcpy(foreign->referenced_table_name, table->name);
@@ -1264,7 +1257,6 @@ dict_table_remove_from_cache(
dict_foreign_t* foreign;
dict_index_t* index;
ulint size;
- ulint i;
ut_ad(table);
#ifdef UNIV_SYNC_DEBUG
@@ -1305,12 +1297,6 @@ dict_table_remove_from_cache(
index = UT_LIST_GET_LAST(table->indexes);
}
- /* Remove the columns of the table from the cache */
- for (i = 0; i < table->n_cols; i++) {
- dict_col_remove_from_cache(table,
- dict_table_get_nth_col(table, i));
- }
-
/* Remove table from the hash tables of tables */
HASH_DELETE(dict_table_t, name_hash, dict_sys->table_hash,
ut_fold_string(table->name), table);
@@ -1329,90 +1315,16 @@ dict_table_remove_from_cache(
dict_mem_table_free(table);
}
-/**************************************************************************
-Adds a column to the data dictionary hash table. */
-static
-void
-dict_col_add_to_cache(
-/*==================*/
- dict_table_t* table, /* in: table */
- dict_col_t* col) /* in: column */
-{
- ulint fold;
-
- ut_ad(table && col);
-#ifdef UNIV_SYNC_DEBUG
- ut_ad(mutex_own(&(dict_sys->mutex)));
-#endif /* UNIV_SYNC_DEBUG */
- ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
-
- fold = ut_fold_ulint_pair(ut_fold_string(table->name),
- ut_fold_string(col->name));
-
- /* Look for a column with same table name and column name: error */
- {
- dict_col_t* col2;
- HASH_SEARCH(hash, dict_sys->col_hash, fold, col2,
- (ut_strcmp(col->name, col2->name) == 0)
- && (ut_strcmp((col2->table)->name, table->name)
- == 0));
- ut_a(col2 == NULL);
- }
-
- HASH_INSERT(dict_col_t, hash, dict_sys->col_hash, fold, col);
-}
-
-/**************************************************************************
-Removes a column from the data dictionary hash table. */
-static
-void
-dict_col_remove_from_cache(
-/*=======================*/
- dict_table_t* table, /* in: table */
- dict_col_t* col) /* in: column */
-{
- ulint fold;
-
- ut_ad(table && col);
-#ifdef UNIV_SYNC_DEBUG
- ut_ad(mutex_own(&(dict_sys->mutex)));
-#endif /* UNIV_SYNC_DEBUG */
- ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
-
- fold = ut_fold_ulint_pair(ut_fold_string(table->name),
- ut_fold_string(col->name));
-
- HASH_DELETE(dict_col_t, hash, dict_sys->col_hash, fold, col);
-}
+/*************************************************************************
+Gets the column position in the clustered index. */
-/**************************************************************************
-Repositions a column in the data dictionary hash table when the table name
-changes. */
-static
-void
-dict_col_reposition_in_cache(
-/*=========================*/
- dict_table_t* table, /* in: table */
- dict_col_t* col, /* in: column */
- const char* new_name) /* in: new table name */
+ulint
+dict_col_get_clust_pos_noninline(
+/*=============================*/
+ const dict_col_t* col, /* in: table column */
+ const dict_index_t* clust_index) /* in: clustered index */
{
- ulint fold;
-
- ut_ad(table && col);
-#ifdef UNIV_SYNC_DEBUG
- ut_ad(mutex_own(&(dict_sys->mutex)));
-#endif /* UNIV_SYNC_DEBUG */
- ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
-
- fold = ut_fold_ulint_pair(ut_fold_string(table->name),
- ut_fold_string(col->name));
-
- HASH_DELETE(dict_col_t, hash, dict_sys->col_hash, fold, col);
-
- fold = ut_fold_ulint_pair(ut_fold_string(new_name),
- ut_fold_string(col->name));
-
- HASH_INSERT(dict_col_t, hash, dict_sys->col_hash, fold, col);
+ return(dict_col_get_clust_pos(col, clust_index));
}
/********************************************************************
@@ -1427,12 +1339,12 @@ dict_col_name_is_reserved(
{
/* This check reminds that if a new system column is added to
the program, it should be dealt with here. */
-#if DATA_N_SYS_COLS != 4
-#error "DATA_N_SYS_COLS != 4"
+#if DATA_N_SYS_COLS != 3
+#error "DATA_N_SYS_COLS != 3"
#endif
static const char* reserved_names[] = {
- "DB_ROW_ID", "DB_TRX_ID", "DB_ROLL_PTR", "DB_MIX_ID"
+ "DB_ROW_ID", "DB_TRX_ID", "DB_ROLL_PTR"
};
ulint i;
@@ -1450,20 +1362,16 @@ dict_col_name_is_reserved(
/**************************************************************************
Adds an index to the dictionary cache. */
-ibool
+void
dict_index_add_to_cache(
/*====================*/
- /* out: TRUE if success */
dict_table_t* table, /* in: table on which the index is */
dict_index_t* index, /* in, own: index; NOTE! The index memory
object is freed in this function! */
ulint page_no)/* in: root page number of the index */
{
dict_index_t* new_index;
- dict_tree_t* tree;
- dict_field_t* field;
ulint n_ord;
- ibool success;
ulint i;
ut_ad(index);
@@ -1491,13 +1399,7 @@ dict_index_add_to_cache(
ut_a(!(index->type & DICT_CLUSTERED)
|| UT_LIST_GET_LEN(table->indexes) == 0);
- success = dict_index_find_cols(table, index);
-
- if (!success) {
- dict_mem_index_free(index);
-
- return(FALSE);
- }
+ dict_index_find_cols(table, index);
/* Build the cache internal representation of the index,
containing also the added system fields */
@@ -1531,23 +1433,18 @@ dict_index_add_to_cache(
for (i = 0; i < n_ord; i++) {
- field = dict_index_get_nth_field(new_index, i);
-
- dict_field_get_col(field)->ord_part++;
+ dict_index_get_nth_field(new_index, i)->col->ord_part = 1;
}
- /* Create an index tree memory object for the index */
- tree = dict_tree_create(new_index, page_no);
- ut_ad(tree);
-
- new_index->tree = tree;
+ new_index->page = page_no;
+ rw_lock_create(&new_index->lock, SYNC_INDEX_TREE);
if (!UNIV_UNLIKELY(new_index->type & DICT_UNIVERSAL)) {
- new_index->stat_n_diff_key_vals = mem_heap_alloc
- (new_index->heap,
- (1 + dict_index_get_n_unique(new_index))
- * sizeof(ib_longlong));
+ new_index->stat_n_diff_key_vals = mem_heap_alloc(
+ new_index->heap,
+ (1 + dict_index_get_n_unique(new_index))
+ * sizeof(ib_longlong));
/* Give some sensible values to stat_n_... in case we do
not calculate statistics quickly enough */
@@ -1557,14 +1454,9 @@ dict_index_add_to_cache(
}
}
- /* Add the index to the list of indexes stored in the tree */
- tree->tree_index = new_index;
-
dict_sys->size += mem_heap_get_size(new_index->heap);
dict_mem_index_free(index);
-
- return(TRUE);
}
/**************************************************************************
@@ -1576,9 +1468,7 @@ dict_index_remove_from_cache(
dict_table_t* table, /* in: table */
dict_index_t* index) /* in, own: index */
{
- dict_field_t* field;
ulint size;
- ulint i;
ut_ad(table && index);
ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
@@ -1587,17 +1477,7 @@ dict_index_remove_from_cache(
ut_ad(mutex_own(&(dict_sys->mutex)));
#endif /* UNIV_SYNC_DEBUG */
- ut_ad(index->tree->tree_index);
- dict_tree_free(index->tree);
-
- /* Decrement the ord_part counts in columns which are ordering */
- for (i = 0; i < dict_index_get_n_unique(index); i++) {
-
- field = dict_index_get_nth_field(index, i);
-
- ut_ad(dict_field_get_col(field)->ord_part > 0);
- (dict_field_get_col(field)->ord_part)--;
- }
+ rw_lock_free(&index->lock);
/* Remove the index from the list of indexes of the table */
UT_LIST_REMOVE(indexes, table->indexes, index);
@@ -1612,19 +1492,15 @@ dict_index_remove_from_cache(
}
/***********************************************************************
-Tries to find column names for the index in the column hash table and
-sets the col field of the index. */
+Tries to find column names for the index and sets the col field of the
+index. */
static
-ibool
+void
dict_index_find_cols(
/*=================*/
- /* out: TRUE if success */
dict_table_t* table, /* in: table */
dict_index_t* index) /* in: index */
{
- dict_col_t* col;
- dict_field_t* field;
- ulint fold;
ulint i;
ut_ad(table && index);
@@ -1634,24 +1510,25 @@ dict_index_find_cols(
#endif /* UNIV_SYNC_DEBUG */
for (i = 0; i < index->n_fields; i++) {
- field = dict_index_get_nth_field(index, i);
+ ulint j;
+ dict_field_t* field = dict_index_get_nth_field(index, i);
- fold = ut_fold_ulint_pair(ut_fold_string(table->name),
- ut_fold_string(field->name));
+ for (j = 0; j < table->n_cols; j++) {
+ if (!strcmp(dict_table_get_col_name(table, j),
+ field->name)) {
+ field->col = (dict_col_t*)
+ dict_table_get_nth_col(table, j);
- HASH_SEARCH(hash, dict_sys->col_hash, fold, col,
- (ut_strcmp(col->name, field->name) == 0)
- && (ut_strcmp((col->table)->name, table->name)
- == 0));
- if (col == NULL) {
-
- return(FALSE);
- } else {
- field->col = col;
+ goto found;
+ }
}
- }
- return(TRUE);
+ /* It is an error not to find a matching column. */
+ ut_error;
+
+ found:
+ ;
+ }
}
/***********************************************************************
@@ -1661,17 +1538,21 @@ void
dict_index_add_col(
/*===============*/
dict_index_t* index, /* in: index */
+ dict_table_t* table, /* in: table */
dict_col_t* col, /* in: column */
ulint prefix_len) /* in: column prefix length */
{
dict_field_t* field;
+ const char* col_name;
- dict_mem_index_add_field(index, col->name, prefix_len);
+ col_name = dict_table_get_col_name(table, dict_col_get_no(col));
+
+ dict_mem_index_add_field(index, col_name, prefix_len);
field = dict_index_get_nth_field(index, index->n_def - 1);
field->col = col;
- field->fixed_len = dtype_get_fixed_size(&col->type);
+ field->fixed_len = dict_col_get_fixed_size(col);
if (prefix_len && field->fixed_len > prefix_len) {
field->fixed_len = prefix_len;
@@ -1685,7 +1566,7 @@ dict_index_add_col(
field->fixed_len = 0;
}
- if (!(dtype_get_prtype(&col->type) & DATA_NOT_NULL)) {
+ if (!(col->prtype & DATA_NOT_NULL)) {
index->n_nullable++;
}
}
@@ -1698,6 +1579,7 @@ dict_index_copy(
/*============*/
dict_index_t* index1, /* in: index to copy to */
dict_index_t* index2, /* in: index to copy from */
+ dict_table_t* table, /* in: table */
ulint start, /* in: first position to copy */
ulint end) /* in: last position to copy */
{
@@ -1709,7 +1591,8 @@ dict_index_copy(
for (i = start; i < end; i++) {
field = dict_index_get_nth_field(index2, i);
- dict_index_add_col(index1, field->col, field->prefix_len);
+ dict_index_add_col(index1, table, field->col,
+ field->prefix_len);
}
}
@@ -1723,8 +1606,6 @@ dict_index_copy_types(
dict_index_t* index, /* in: index */
ulint n_fields) /* in: number of field types to copy */
{
- dtype_t* dfield_type;
- dtype_t* type;
ulint i;
if (UNIV_UNLIKELY(index->type & DICT_UNIVERSAL)) {
@@ -1734,10 +1615,15 @@ dict_index_copy_types(
}
for (i = 0; i < n_fields; i++) {
+ dict_field_t* ifield;
+ dtype_t* dfield_type;
+
+ ifield = dict_index_get_nth_field(index, i);
dfield_type = dfield_get_type(dtuple_get_nth_field(tuple, i));
- type = dict_col_get_type(dict_field_get_col
- (dict_index_get_nth_field(index, i)));
- *dfield_type = *type;
+ dict_col_copy_type(dict_field_get_col(ifield), dfield_type);
+ if (UNIV_UNLIKELY(ifield->prefix_len)) {
+ dfield_type->len = ifield->prefix_len;
+ }
}
}
@@ -1751,15 +1637,13 @@ dict_table_copy_types(
dict_table_t* table) /* in: index */
{
dtype_t* dfield_type;
- dtype_t* type;
ulint i;
for (i = 0; i < dtuple_get_n_fields(tuple); i++) {
dfield_type = dfield_get_type(dtuple_get_nth_field(tuple, i));
- type = dict_col_get_type(dict_table_get_nth_col(table, i));
-
- *dfield_type = *type;
+ dict_col_copy_type(dict_table_get_nth_col(table, i),
+ dfield_type);
}
}
@@ -1778,7 +1662,6 @@ dict_index_build_internal_clust(
{
dict_index_t* new_index;
dict_field_t* field;
- dict_col_t* col;
ulint fixed_size;
ulint trx_id_pos;
ulint i;
@@ -1805,12 +1688,12 @@ dict_index_build_internal_clust(
new_index->id = index->id;
/* Copy the fields of index */
- dict_index_copy(new_index, index, 0, index->n_fields);
+ dict_index_copy(new_index, index, table, 0, index->n_fields);
if (UNIV_UNLIKELY(index->type & DICT_UNIVERSAL)) {
/* No fixed number of fields determines an entry uniquely */
- new_index->n_uniq = ULINT_MAX;
+ new_index->n_uniq = REC_MAX_N_FIELDS;
} else if (index->type & DICT_UNIQUE) {
/* Only the fields defined so far are needed to identify
@@ -1840,24 +1723,26 @@ dict_index_build_internal_clust(
#endif
if (!(index->type & DICT_UNIQUE)) {
- dict_index_add_col(new_index,
- dict_table_get_sys_col
- (table, DATA_ROW_ID), 0);
+ dict_index_add_col(new_index, table, (dict_col_t*)
+ dict_table_get_sys_col(
+ table, DATA_ROW_ID),
+ 0);
trx_id_pos++;
}
- dict_index_add_col(new_index,
- dict_table_get_sys_col
- (table, DATA_TRX_ID), 0);
+ dict_index_add_col(new_index, table, (dict_col_t*)
+ dict_table_get_sys_col(table, DATA_TRX_ID),
+ 0);
- dict_index_add_col(new_index,
- dict_table_get_sys_col
- (table, DATA_ROLL_PTR), 0);
+ dict_index_add_col(new_index, table, (dict_col_t*)
+ dict_table_get_sys_col(table,
+ DATA_ROLL_PTR),
+ 0);
for (i = 0; i < trx_id_pos; i++) {
- fixed_size = dtype_get_fixed_size
- (dict_index_get_nth_type(new_index, i));
+ fixed_size = dict_col_get_fixed_size(
+ dict_index_get_nth_col(new_index, i));
if (fixed_size == 0) {
new_index->trx_id_offset = 0;
@@ -1897,13 +1782,14 @@ dict_index_build_internal_clust(
/* Add to new_index non-system columns of table not yet included
there */
- for (i = 0; i < table->n_cols - DATA_N_SYS_COLS; i++) {
+ for (i = 0; i + DATA_N_SYS_COLS < (ulint) table->n_cols; i++) {
- col = dict_table_get_nth_col(table, i);
- ut_ad(col->type.mtype != DATA_SYS);
+ dict_col_t* col = (dict_col_t*)
+ dict_table_get_nth_col(table, i);
+ ut_ad(col->mtype != DATA_SYS);
if (!indexed[col->ind]) {
- dict_index_add_col(new_index, col, 0);
+ dict_index_add_col(new_index, table, col, 0);
}
}
@@ -1912,18 +1798,6 @@ dict_index_build_internal_clust(
ut_ad((index->type & DICT_IBUF)
|| (UT_LIST_GET_LEN(table->indexes) == 0));
- /* Store to the column structs the position of the table columns
- in the clustered index */
-
- for (i = 0; i < new_index->n_def; i++) {
- field = dict_index_get_nth_field(new_index, i);
-
- if (field->prefix_len == 0) {
-
- field->col->clust_pos = i;
- }
- }
-
new_index->cached = TRUE;
return(new_index);
@@ -1963,9 +1837,9 @@ dict_index_build_internal_non_clust(
ut_ad(!(clust_index->type & DICT_UNIVERSAL));
/* Create a new index */
- new_index = dict_mem_index_create
- (table->name, index->name, index->space, index->type,
- index->n_fields + 1 + clust_index->n_uniq);
+ new_index = dict_mem_index_create(
+ table->name, index->name, index->space, index->type,
+ index->n_fields + 1 + clust_index->n_uniq);
/* Copy other relevant data from the old index
struct to the new struct: it inherits the values */
@@ -1975,7 +1849,7 @@ dict_index_build_internal_non_clust(
new_index->id = index->id;
/* Copy fields from index to new_index */
- dict_index_copy(new_index, index, 0, index->n_fields);
+ dict_index_copy(new_index, index, table, 0, index->n_fields);
/* Remember the table columns already contained in new_index */
indexed = mem_alloc(table->n_cols * sizeof *indexed);
@@ -2003,7 +1877,7 @@ dict_index_build_internal_non_clust(
field = dict_index_get_nth_field(clust_index, i);
if (!indexed[field->col->ind]) {
- dict_index_add_col(new_index, field->col,
+ dict_index_add_col(new_index, table, field->col,
field->prefix_len);
}
}
@@ -2146,6 +2020,7 @@ dict_foreign_find_index(
only has an effect if types_idx != NULL */
{
dict_index_t* index;
+ dict_field_t* field;
const char* col_name;
ulint i;
@@ -2155,10 +2030,12 @@ dict_foreign_find_index(
if (dict_index_get_n_fields(index) >= n_cols) {
for (i = 0; i < n_cols; i++) {
- col_name = dict_index_get_nth_field(index, i)
- ->col->name;
- if (dict_index_get_nth_field(index, i)
- ->prefix_len != 0) {
+ field = dict_index_get_nth_field(index, i);
+
+ col_name = dict_table_get_col_name(
+ table, dict_col_get_no(field->col));
+
+ if (field->prefix_len != 0) {
/* We do not accept column prefix
indexes here */
@@ -2170,10 +2047,11 @@ dict_foreign_find_index(
break;
}
- if (types_idx && !cmp_types_are_equal
- (dict_index_get_nth_type(index, i),
- dict_index_get_nth_type(types_idx, i),
- check_charsets)) {
+ if (types_idx && !cmp_cols_are_equal(
+ dict_index_get_nth_col(index, i),
+ dict_index_get_nth_col(types_idx,
+ i),
+ check_charsets)) {
break;
}
@@ -2260,11 +2138,11 @@ dict_foreign_add_to_cache(
ut_ad(mutex_own(&(dict_sys->mutex)));
#endif /* UNIV_SYNC_DEBUG */
- for_table = dict_table_check_if_in_cache_low
- (foreign->foreign_table_name);
+ for_table = dict_table_check_if_in_cache_low(
+ foreign->foreign_table_name);
- ref_table = dict_table_check_if_in_cache_low
- (foreign->referenced_table_name);
+ ref_table = dict_table_check_if_in_cache_low(
+ foreign->referenced_table_name);
ut_a(for_table || ref_table);
if (for_table) {
@@ -2283,21 +2161,21 @@ dict_foreign_add_to_cache(
}
if (for_in_cache->referenced_table == NULL && ref_table) {
- index = dict_foreign_find_index
- (ref_table,
- (const char**) for_in_cache->referenced_col_names,
- for_in_cache->n_fields,
- for_in_cache->foreign_index, check_charsets);
+ index = dict_foreign_find_index(
+ ref_table,
+ (const char**) for_in_cache->referenced_col_names,
+ for_in_cache->n_fields, for_in_cache->foreign_index,
+ check_charsets);
if (index == NULL) {
- dict_foreign_error_report
- (ef, for_in_cache,
- "there is no index in referenced table"
- " which would contain\n"
- "the columns as the first columns,"
- " or the data types in the\n"
- "referenced table do not match"
- " the ones in table.");
+ dict_foreign_error_report(
+ ef, for_in_cache,
+ "there is no index in referenced table"
+ " which would contain\n"
+ "the columns as the first columns,"
+ " or the data types in the\n"
+ "referenced table do not match"
+ " the ones in table.");
if (for_in_cache == foreign) {
mem_heap_free(foreign->heap);
@@ -2315,28 +2193,28 @@ dict_foreign_add_to_cache(
}
if (for_in_cache->foreign_table == NULL && for_table) {
- index = dict_foreign_find_index
- (for_table,
- (const char**) for_in_cache->foreign_col_names,
- for_in_cache->n_fields,
- for_in_cache->referenced_index, check_charsets);
+ index = dict_foreign_find_index(
+ for_table,
+ (const char**) for_in_cache->foreign_col_names,
+ for_in_cache->n_fields,
+ for_in_cache->referenced_index, check_charsets);
if (index == NULL) {
- dict_foreign_error_report
- (ef, for_in_cache,
- "there is no index in the table"
- " which would contain\n"
- "the columns as the first columns,"
- " or the data types in the\n"
- "table do not match"
- " the ones in the referenced table.");
+ dict_foreign_error_report(
+ ef, for_in_cache,
+ "there is no index in the table"
+ " which would contain\n"
+ "the columns as the first columns,"
+ " or the data types in the\n"
+ "table do not match"
+ " the ones in the referenced table.");
if (for_in_cache == foreign) {
if (added_to_referenced_list) {
- UT_LIST_REMOVE
- (referenced_list,
- ref_table->referenced_list,
- for_in_cache);
+ UT_LIST_REMOVE(
+ referenced_list,
+ ref_table->referenced_list,
+ for_in_cache);
}
mem_heap_free(foreign->heap);
@@ -2560,17 +2438,16 @@ static
const char*
dict_scan_col(
/*==========*/
- /* out: scanned to */
- struct charset_info_st* cs,/* in: the character set of ptr */
- const char* ptr, /* in: scanned to */
- ibool* success,/* out: TRUE if success */
- dict_table_t* table, /* in: table in which the column is */
- dict_col_t** column, /* out: pointer to column if success */
- mem_heap_t* heap, /* in: heap where to allocate the name */
- const char** name) /* out,own: the column name; NULL if no name
- was scannable */
+ /* out: scanned to */
+ struct charset_info_st* cs, /* in: the character set of ptr */
+ const char* ptr, /* in: scanned to */
+ ibool* success,/* out: TRUE if success */
+ dict_table_t* table, /* in: table in which the column is */
+ const dict_col_t** column, /* out: pointer to column if success */
+ mem_heap_t* heap, /* in: heap where to allocate */
+ const char** name) /* out,own: the column name;
+ NULL if no name was scannable */
{
- dict_col_t* col;
ulint i;
*success = FALSE;
@@ -2588,14 +2465,15 @@ dict_scan_col(
} else {
for (i = 0; i < dict_table_get_n_cols(table); i++) {
- col = dict_table_get_nth_col(table, i);
+ const char* col_name = dict_table_get_col_name(
+ table, i);
- if (0 == innobase_strcasecmp(col->name, *name)) {
+ if (0 == innobase_strcasecmp(col_name, *name)) {
/* Found */
*success = TRUE;
- *column = col;
- strcpy((char*) *name, col->name);
+ *column = dict_table_get_nth_col(table, i);
+ strcpy((char*) *name, col_name);
break;
}
@@ -2933,7 +2811,7 @@ dict_create_foreign_constraints_low(
ibool is_on_delete;
ulint n_on_deletes;
ulint n_on_updates;
- dict_col_t* columns[500];
+ const dict_col_t*columns[500];
const char* column_names[500];
const char* referenced_table_name;
@@ -2997,8 +2875,8 @@ dict_create_foreign_constraints_low(
if (table_to_alter == NULL) {
highest_id_so_far = 0;
} else {
- highest_id_so_far = dict_table_get_highest_foreign_id
- (table_to_alter);
+ highest_id_so_far = dict_table_get_highest_foreign_id(
+ table_to_alter);
}
/* Scan for foreign key declarations in a loop */
@@ -3054,8 +2932,8 @@ loop:
/* The following call adds the foreign key constraints
to the data dictionary system tables on disk */
- error = dict_create_add_foreigns_to_dictionary
- (highest_id_so_far, table, trx);
+ error = dict_create_add_foreigns_to_dictionary(
+ highest_id_so_far, table, trx);
return(error);
}
@@ -3085,8 +2963,8 @@ loop:
ptr = dict_skip_word(cs, ptr, &success);
if (!success) {
- dict_foreign_report_syntax_err
- (name, start_of_latest_foreign, ptr);
+ dict_foreign_report_syntax_err(
+ name, start_of_latest_foreign, ptr);
return(DB_CANNOT_ADD_CONSTRAINT);
}
@@ -3129,8 +3007,8 @@ col_loop1:
ptr = dict_accept(cs, ptr, ")", &success);
if (!success) {
- dict_foreign_report_syntax_err
- (name, start_of_latest_foreign, ptr);
+ dict_foreign_report_syntax_err(
+ name, start_of_latest_foreign, ptr);
return(DB_CANNOT_ADD_CONSTRAINT);
}
@@ -3157,8 +3035,8 @@ col_loop1:
ptr = dict_accept(cs, ptr, "REFERENCES", &success);
if (!success || !my_isspace(cs, *ptr)) {
- dict_foreign_report_syntax_err
- (name, start_of_latest_foreign, ptr);
+ dict_foreign_report_syntax_err(
+ name, start_of_latest_foreign, ptr);
return(DB_CANNOT_ADD_CONSTRAINT);
}
@@ -3176,8 +3054,8 @@ col_loop1:
db_len = dict_get_db_name_len(table->name);
- foreign->id = mem_heap_alloc
- (foreign->heap, db_len + strlen(constraint_name) + 2);
+ foreign->id = mem_heap_alloc(
+ foreign->heap, db_len + strlen(constraint_name) + 2);
ut_memcpy(foreign->id, table->name, db_len);
foreign->id[db_len] = '/';
@@ -3192,8 +3070,10 @@ col_loop1:
foreign->foreign_col_names = mem_heap_alloc(foreign->heap,
i * sizeof(void*));
for (i = 0; i < foreign->n_fields; i++) {
- foreign->foreign_col_names[i] = mem_heap_strdup
- (foreign->heap, columns[i]->name);
+ foreign->foreign_col_names[i] = mem_heap_strdup(
+ foreign->heap,
+ dict_table_get_col_name(table,
+ dict_col_get_no(columns[i])));
}
ptr = dict_scan_table_name(cs, ptr, &referenced_table, name,
@@ -3282,8 +3162,8 @@ scan_on_conditions:
if (!success) {
dict_foreign_free(foreign);
- dict_foreign_report_syntax_err
- (name, start_of_latest_foreign, ptr);
+ dict_foreign_report_syntax_err(
+ name, start_of_latest_foreign, ptr);
return(DB_CANNOT_ADD_CONSTRAINT);
}
@@ -3319,8 +3199,8 @@ scan_on_conditions:
if (!success) {
dict_foreign_free(foreign);
- dict_foreign_report_syntax_err
- (name, start_of_latest_foreign, ptr);
+ dict_foreign_report_syntax_err(
+ name, start_of_latest_foreign, ptr);
return(DB_CANNOT_ADD_CONSTRAINT);
}
@@ -3353,8 +3233,7 @@ scan_on_conditions:
}
for (j = 0; j < foreign->n_fields; j++) {
- if ((dict_index_get_nth_type
- (foreign->foreign_index, j)->prtype)
+ if ((dict_index_get_nth_col(foreign->foreign_index, j)->prtype)
& DATA_NOT_NULL) {
/* It is not sensible to define SET NULL
@@ -3519,9 +3398,9 @@ dict_create_foreign_constraints(
str = dict_strip_comments(sql_string);
heap = mem_heap_create(10000);
- err = dict_create_foreign_constraints_low
- (trx, heap, innobase_get_charset(trx->mysql_thd),
- str, name, reject_fks);
+ err = dict_create_foreign_constraints_low(
+ trx, heap, innobase_get_charset(trx->mysql_thd), str, name,
+ reject_fks);
mem_heap_free(heap);
mem_free(str);
@@ -3710,68 +3589,18 @@ found:
return(index);
}
-/**************************************************************************
-Creates an index tree struct. */
-
-dict_tree_t*
-dict_tree_create(
-/*=============*/
- /* out, own: created tree */
- dict_index_t* index, /* in: the index for which to create: in the
- case of a mixed tree, this should be the
- index of the cluster object */
- ulint page_no)/* in: root page number of the index */
-{
- dict_tree_t* tree;
-
- tree = mem_alloc(sizeof(dict_tree_t));
-
- /* Inherit info from the index */
-
- tree->type = index->type;
- tree->space = index->space;
- tree->page = page_no;
-
- tree->id = index->id;
-
- tree->tree_index = NULL;
-
- tree->magic_n = DICT_TREE_MAGIC_N;
-
- rw_lock_create(&tree->lock, SYNC_INDEX_TREE);
-
- return(tree);
-}
-
-/**************************************************************************
-Frees an index tree struct. */
-
-void
-dict_tree_free(
-/*===========*/
- dict_tree_t* tree) /* in, own: index tree */
-{
- ut_a(tree);
- ut_ad(tree->magic_n == DICT_TREE_MAGIC_N);
-
- rw_lock_free(&(tree->lock));
- mem_free(tree);
-}
-
#ifdef UNIV_DEBUG
/**************************************************************************
Checks that a tuple has n_fields_cmp value in a sensible range, so that
no comparison can occur with the page number field in a node pointer. */
ibool
-dict_tree_check_search_tuple(
-/*=========================*/
+dict_index_check_search_tuple(
+/*==========================*/
/* out: TRUE if ok */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
dtuple_t* tuple) /* in: tuple used in a search */
{
- dict_index_t* index = tree->tree_index;
-
ut_a(index);
ut_a(dtuple_get_n_fields_cmp(tuple)
<= dict_index_get_n_unique_in_tree(index));
@@ -3783,10 +3612,10 @@ dict_tree_check_search_tuple(
Builds a node pointer out of a physical record and a page number. */
dtuple_t*
-dict_tree_build_node_ptr(
-/*=====================*/
+dict_index_build_node_ptr(
+/*======================*/
/* out, own: node pointer */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
rec_t* rec, /* in: record for which to build node
pointer */
ulint page_no,/* in: page number to put in node pointer */
@@ -3795,20 +3624,17 @@ dict_tree_build_node_ptr(
level */
{
dtuple_t* tuple;
- dict_index_t* ind;
dfield_t* field;
byte* buf;
ulint n_unique;
- ind = tree->tree_index;
-
- if (UNIV_UNLIKELY(tree->type & DICT_UNIVERSAL)) {
+ if (UNIV_UNLIKELY(index->type & DICT_UNIVERSAL)) {
/* In a universal index tree, we take the whole record as
- the node pointer if the reord is on the leaf level,
+ the node pointer if the record is on the leaf level,
on non-leaf levels we remove the last field, which
contains the page number of the child page */
- ut_a(!dict_table_is_comp(ind->table));
+ ut_a(!dict_table_is_comp(index->table));
n_unique = rec_get_n_fields_old(rec);
if (level > 0) {
@@ -3816,7 +3642,7 @@ dict_tree_build_node_ptr(
n_unique--;
}
} else {
- n_unique = dict_index_get_n_unique_in_tree(ind);
+ n_unique = dict_index_get_n_unique_in_tree(index);
}
tuple = dtuple_create(heap, n_unique + 1);
@@ -3829,7 +3655,7 @@ dict_tree_build_node_ptr(
dtuple_set_n_fields_cmp(tuple, n_unique);
- dict_index_copy_types(tuple, ind, n_unique);
+ dict_index_copy_types(tuple, index, n_unique);
buf = mem_heap_alloc(heap, 4);
@@ -3838,9 +3664,9 @@ dict_tree_build_node_ptr(
field = dtuple_get_nth_field(tuple, n_unique);
dfield_set_data(field, buf, 4);
- dtype_set(dfield_get_type(field), DATA_SYS_CHILD, DATA_NOT_NULL, 4, 0);
+ dtype_set(dfield_get_type(field), DATA_SYS_CHILD, DATA_NOT_NULL, 4);
- rec_copy_prefix_to_dtuple(tuple, rec, ind, n_unique, heap);
+ rec_copy_prefix_to_dtuple(tuple, rec, index, n_unique, heap);
dtuple_set_info_bits(tuple, dtuple_get_info_bits(tuple)
| REC_STATUS_NODE_PTR);
@@ -3854,23 +3680,21 @@ Copies an initial segment of a physical record, long enough to specify an
index entry uniquely. */
rec_t*
-dict_tree_copy_rec_order_prefix(
-/*============================*/
+dict_index_copy_rec_order_prefix(
+/*=============================*/
/* out: pointer to the prefix record */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
rec_t* rec, /* in: record for which to copy prefix */
ulint* n_fields,/* out: number of fields copied */
byte** buf, /* in/out: memory buffer for the copied prefix,
or NULL */
ulint* buf_size)/* in/out: buffer size */
{
- dict_index_t* index;
ulint n;
UNIV_PREFETCH_R(rec);
- index = tree->tree_index;
- if (UNIV_UNLIKELY(tree->type & DICT_UNIVERSAL)) {
+ if (UNIV_UNLIKELY(index->type & DICT_UNIVERSAL)) {
ut_a(!dict_table_is_comp(index->table));
n = rec_get_n_fields_old(rec);
} else {
@@ -3885,27 +3709,24 @@ dict_tree_copy_rec_order_prefix(
Builds a typed data tuple out of a physical record. */
dtuple_t*
-dict_tree_build_data_tuple(
-/*=======================*/
+dict_index_build_data_tuple(
+/*========================*/
/* out, own: data tuple */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
rec_t* rec, /* in: record for which to build data tuple */
ulint n_fields,/* in: number of data fields */
mem_heap_t* heap) /* in: memory heap where tuple created */
{
dtuple_t* tuple;
- dict_index_t* ind;
-
- ind = tree->tree_index;
- ut_ad(dict_table_is_comp(ind->table)
+ ut_ad(dict_table_is_comp(index->table)
|| n_fields <= rec_get_n_fields_old(rec));
tuple = dtuple_create(heap, n_fields);
- dict_index_copy_types(tuple, ind, n_fields);
+ dict_index_copy_types(tuple, index, n_fields);
- rec_copy_prefix_to_dtuple(tuple, rec, ind, n_fields, heap);
+ rec_copy_prefix_to_dtuple(tuple, rec, index, n_fields, heap);
ut_ad(dtuple_check_typed(tuple));
@@ -3927,15 +3748,17 @@ dict_index_calc_min_rec_len(
ulint nullable = 0;
sum = REC_N_NEW_EXTRA_BYTES;
for (i = 0; i < dict_index_get_n_fields(index); i++) {
- dtype_t*t = dict_index_get_nth_type(index, i);
- ulint size = dtype_get_fixed_size(t);
+ const dict_col_t* col
+ = dict_index_get_nth_col(index, i);
+ ulint size = dict_col_get_fixed_size(col);
sum += size;
if (!size) {
- size = dtype_get_len(t);
+ size = col->len;
sum += size < 128 ? 1 : 2;
}
- if (!(dtype_get_prtype(t) & DATA_NOT_NULL))
+ if (!(col->prtype & DATA_NOT_NULL)) {
nullable++;
+ }
}
/* round the NULL flags up to full bytes */
@@ -3945,7 +3768,8 @@ dict_index_calc_min_rec_len(
}
for (i = 0; i < dict_index_get_n_fields(index); i++) {
- sum += dtype_get_fixed_size(dict_index_get_nth_type(index, i));
+ sum += dict_col_get_fixed_size(
+ dict_index_get_nth_col(index, i));
}
if (sum > 127) {
@@ -4030,8 +3854,8 @@ dict_update_statistics_low(
index = dict_table_get_first_index(table);
- table->stat_n_rows = index->stat_n_diff_key_vals
- [dict_index_get_n_unique(index)];
+ table->stat_n_rows = index->stat_n_diff_key_vals[
+ dict_index_get_n_unique(index)];
table->stat_clustered_index_size = index->stat_index_size;
@@ -4162,8 +3986,8 @@ dict_table_print_low(
(ulong) UT_LIST_GET_LEN(table->indexes),
(ulong) table->stat_n_rows);
- for (i = 0; i < table->n_cols - 1; i++) {
- dict_col_print_low(dict_table_get_nth_col(table, i));
+ for (i = 0; i + 1 < (ulint) table->n_cols; i++) {
+ dict_col_print_low(table, dict_table_get_nth_col(table, i));
fputs("; ", stderr);
}
@@ -4197,18 +4021,20 @@ static
void
dict_col_print_low(
/*===============*/
- dict_col_t* col) /* in: column */
+ const dict_table_t* table, /* in: table */
+ const dict_col_t* col) /* in: column */
{
- dtype_t* type;
+ dtype_t type;
#ifdef UNIV_SYNC_DEBUG
ut_ad(mutex_own(&(dict_sys->mutex)));
#endif /* UNIV_SYNC_DEBUG */
- type = dict_col_get_type(col);
- fprintf(stderr, "%s: ", col->name);
+ dict_col_copy_type(col, &type);
+ fprintf(stderr, "%s: ", dict_table_get_col_name(table,
+ dict_col_get_no(col)));
- dtype_print(type);
+ dtype_print(&type);
}
/**************************************************************************
@@ -4219,7 +4045,6 @@ dict_index_print_low(
/*=================*/
dict_index_t* index) /* in: index */
{
- dict_tree_t* tree;
ib_longlong n_vals;
ulint i;
@@ -4227,11 +4052,9 @@ dict_index_print_low(
ut_ad(mutex_own(&(dict_sys->mutex)));
#endif /* UNIV_SYNC_DEBUG */
- tree = index->tree;
-
if (index->n_user_defined_cols > 0) {
- n_vals = index->stat_n_diff_key_vals
- [index->n_user_defined_cols];
+ n_vals = index->stat_n_diff_key_vals[
+ index->n_user_defined_cols];
} else {
n_vals = index->stat_n_diff_key_vals[1];
}
@@ -4243,13 +4066,13 @@ dict_index_print_low(
" leaf pages %lu, size pages %lu\n"
" FIELDS: ",
index->name,
- (ulong) ut_dulint_get_high(tree->id),
- (ulong) ut_dulint_get_low(tree->id),
+ (ulong) ut_dulint_get_high(index->id),
+ (ulong) ut_dulint_get_low(index->id),
(ulong) index->n_user_defined_cols,
(ulong) index->n_fields,
(ulong) index->n_uniq,
(ulong) index->type,
- (ulong) tree->page,
+ (ulong) index->page,
(ulong) n_vals,
(ulong) index->stat_n_leaf_pages,
(ulong) index->stat_index_size);
@@ -4261,9 +4084,9 @@ dict_index_print_low(
putc('\n', stderr);
#ifdef UNIV_BTR_PRINT
- btr_print_size(tree);
+ btr_print_size(index);
- btr_print_tree(tree, 7);
+ btr_print_index(index, 7);
#endif /* UNIV_BTR_PRINT */
}
@@ -4335,8 +4158,9 @@ dict_print_info_on_foreign_key_in_create_format(
if (dict_tables_have_same_db(foreign->foreign_table_name,
foreign->referenced_table_name)) {
/* Do not print the database name of the referenced table */
- ut_print_name(file, trx, TRUE, dict_remove_db_name
- (foreign->referenced_table_name));
+ ut_print_name(file, trx, TRUE,
+ dict_remove_db_name(
+ foreign->referenced_table_name));
} else {
/* Look for the '/' in the table name */
@@ -4420,8 +4244,8 @@ dict_print_info_on_foreign_keys(
while (foreign != NULL) {
if (create_table_format) {
- dict_print_info_on_foreign_key_in_create_format
- (file, trx, foreign, TRUE);
+ dict_print_info_on_foreign_key_in_create_format(
+ file, trx, foreign, TRUE);
} else {
ulint i;
fputs("; (", file);
@@ -4444,9 +4268,9 @@ dict_print_info_on_foreign_keys(
if (i) {
putc(' ', file);
}
- ut_print_name(file, trx, FALSE,
- foreign->referenced_col_names
- [i]);
+ ut_print_name(
+ file, trx, FALSE,
+ foreign->referenced_col_names[i]);
}
putc(')', file);
diff --git a/storage/innobase/dict/dict0load.c b/storage/innobase/dict/dict0load.c
index bc393140a6f..518e32ec4dc 100644
--- a/storage/innobase/dict/dict0load.c
+++ b/storage/innobase/dict/dict0load.c
@@ -26,6 +26,25 @@ Created 4/24/1996 Heikki Tuuri
#include "srv0start.h"
#include "srv0srv.h"
+/********************************************************************
+Returns TRUE if index's i'th column's name is 'name' .*/
+static
+ibool
+name_of_col_is(
+/*===========*/
+ /* out: */
+ dict_table_t* table, /* in: table */
+ dict_index_t* index, /* in: index */
+ ulint i, /* in: */
+ const char* name) /* in: name to compare to */
+{
+ ulint tmp = dict_col_get_no(dict_field_get_col(
+ dict_index_get_nth_field(
+ index, i)));
+
+ return(strcmp(name, dict_table_get_col_name(table, tmp)) == 0);
+}
+
/************************************************************************
Finds the first table name in the given database. */
@@ -331,7 +350,6 @@ dict_load_columns(
ulint mtype;
ulint prtype;
ulint col_len;
- ulint prec;
ulint i;
mtr_t mtr;
@@ -356,7 +374,7 @@ dict_load_columns(
btr_pcur_open_on_user_rec(sys_index, tuple, PAGE_CUR_GE,
BTR_SEARCH_LEAF, &pcur, &mtr);
- for (i = 0; i < table->n_cols - DATA_N_SYS_COLS; i++) {
+ for (i = 0; i + DATA_N_SYS_COLS < (ulint) table->n_cols; i++) {
rec = btr_pcur_get_rec(&pcur);
@@ -372,8 +390,7 @@ dict_load_columns(
ut_ad(len == 4);
ut_a(i == mach_read_from_4(field));
- ut_a(!strcmp("NAME", dict_field_get_col
- (dict_index_get_nth_field(sys_index, 4))->name));
+ ut_a(name_of_col_is(sys_columns, sys_index, 4, "NAME"));
field = rec_get_nth_field_old(rec, 4, &len);
name = mem_heap_strdupl(heap, (char*) field, len);
@@ -392,30 +409,25 @@ dict_load_columns(
/* Use the binary collation for
string columns of binary type. */
- prtype = dtype_form_prtype
- (prtype,
- DATA_MYSQL_BINARY_CHARSET_COLL);
+ prtype = dtype_form_prtype(
+ prtype,
+ DATA_MYSQL_BINARY_CHARSET_COLL);
} else {
/* Use the default charset for
other than binary columns. */
- prtype = dtype_form_prtype
- (prtype,
- data_mysql_default_charset_coll);
+ prtype = dtype_form_prtype(
+ prtype,
+ data_mysql_default_charset_coll);
}
}
field = rec_get_nth_field_old(rec, 7, &len);
col_len = mach_read_from_4(field);
- ut_a(!strcmp("PREC", dict_field_get_col
- (dict_index_get_nth_field(sys_index, 8))->name));
-
- field = rec_get_nth_field_old(rec, 8, &len);
- prec = mach_read_from_4(field);
+ ut_a(name_of_col_is(sys_columns, sys_index, 8, "PREC"));
- dict_mem_table_add_col(table, name, mtype, prtype, col_len,
- prec);
+ dict_mem_table_add_col(table, name, mtype, prtype, col_len);
btr_pcur_move_to_next_user_rec(&pcur, &mtr);
}
@@ -526,13 +538,13 @@ dict_load_fields(
prefix_len = 0;
}
- ut_a(!strcmp("COL_NAME", dict_field_get_col
- (dict_index_get_nth_field(sys_index, 4))->name));
+ ut_a(name_of_col_is(sys_fields, sys_index, 4, "COL_NAME"));
field = rec_get_nth_field_old(rec, 4, &len);
- dict_mem_index_add_field(index, mem_heap_strdupl
- (heap, (char*) field, len),
+ dict_mem_index_add_field(index,
+ mem_heap_strdupl(heap,
+ (char*) field, len),
prefix_len);
btr_pcur_move_to_next_user_rec(&pcur, &mtr);
@@ -631,8 +643,7 @@ dict_load_indexes(
ut_ad(len == 8);
id = mach_read_from_8(field);
- ut_a(!strcmp("NAME", dict_field_get_col
- (dict_index_get_nth_field(sys_index, 4))->name));
+ ut_a(name_of_col_is(sys_indexes, sys_index, 4, "NAME"));
field = rec_get_nth_field_old(rec, 4, &name_len);
name_buf = mem_heap_strdupl(heap, (char*) field, name_len);
@@ -646,8 +657,7 @@ dict_load_indexes(
field = rec_get_nth_field_old(rec, 7, &len);
space = mach_read_from_4(field);
- ut_a(!strcmp("PAGE_NO", dict_field_get_col
- (dict_index_get_nth_field(sys_index, 8))->name));
+ ut_a(name_of_col_is(sys_indexes, sys_index, 8, "PAGE_NO"));
field = rec_get_nth_field_old(rec, 8, &len);
page_no = mach_read_from_4(field);
@@ -785,8 +795,7 @@ err_exit:
goto err_exit;
}
- ut_a(!strcmp("SPACE", dict_field_get_col
- (dict_index_get_nth_field(sys_index, 9))->name));
+ ut_a(name_of_col_is(sys_tables, sys_index, 9, "SPACE"));
field = rec_get_nth_field_old(rec, 9, &len);
space = mach_read_from_4(field);
@@ -819,8 +828,7 @@ err_exit:
}
}
- ut_a(!strcmp("N_COLS", dict_field_get_col
- (dict_index_get_nth_field(sys_index, 4))->name));
+ ut_a(name_of_col_is(sys_tables, sys_index, 4, "N_COLS"));
field = rec_get_nth_field_old(rec, 4, &len);
n_cols = mach_read_from_4(field);
@@ -837,8 +845,7 @@ err_exit:
table->ibd_file_missing = ibd_file_missing;
- ut_a(!strcmp("ID", dict_field_get_col
- (dict_index_get_nth_field(sys_index, 3))->name));
+ ut_a(name_of_col_is(sys_tables, sys_index, 3, "ID"));
field = rec_get_nth_field_old(rec, 3, &len);
table->id = mach_read_from_8(field);
@@ -925,8 +932,8 @@ dict_load_table_on_id(
/*---------------------------------------------------*/
/* Get the secondary index based on ID for table SYS_TABLES */
sys_tables = dict_sys->sys_tables;
- sys_table_ids = dict_table_get_next_index
- (dict_table_get_first_index(sys_tables));
+ sys_table_ids = dict_table_get_next_index(
+ dict_table_get_first_index(sys_tables));
ut_a(!dict_table_is_comp(sys_tables));
heap = mem_heap_create(256);
@@ -1032,11 +1039,11 @@ dict_load_foreign_cols(
ut_ad(mutex_own(&(dict_sys->mutex)));
#endif /* UNIV_SYNC_DEBUG */
- foreign->foreign_col_names = mem_heap_alloc
- (foreign->heap, foreign->n_fields * sizeof(void*));
+ foreign->foreign_col_names = mem_heap_alloc(
+ foreign->heap, foreign->n_fields * sizeof(void*));
- foreign->referenced_col_names = mem_heap_alloc
- (foreign->heap, foreign->n_fields * sizeof(void*));
+ foreign->referenced_col_names = mem_heap_alloc(
+ foreign->heap, foreign->n_fields * sizeof(void*));
mtr_start(&mtr);
sys_foreign_cols = dict_table_get_low("SYS_FOREIGN_COLS");
@@ -1067,12 +1074,12 @@ dict_load_foreign_cols(
ut_a(i == mach_read_from_4(field));
field = rec_get_nth_field_old(rec, 4, &len);
- foreign->foreign_col_names[i] = mem_heap_strdupl
- (foreign->heap, (char*) field, len);
+ foreign->foreign_col_names[i] = mem_heap_strdupl(
+ foreign->heap, (char*) field, len);
field = rec_get_nth_field_old(rec, 5, &len);
- foreign->referenced_col_names[i] = mem_heap_strdupl
- (foreign->heap, (char*) field, len);
+ foreign->referenced_col_names[i] = mem_heap_strdupl(
+ foreign->heap, (char*) field, len);
btr_pcur_move_to_next_user_rec(&pcur, &mtr);
}
@@ -1165,8 +1172,8 @@ dict_load_foreign(
foreign = dict_mem_foreign_create();
- foreign->n_fields = mach_read_from_4
- (rec_get_nth_field_old(rec, 5, &len));
+ foreign->n_fields = mach_read_from_4(
+ rec_get_nth_field_old(rec, 5, &len));
ut_a(len == 4);
@@ -1178,12 +1185,12 @@ dict_load_foreign(
foreign->id = mem_heap_strdup(foreign->heap, id);
field = rec_get_nth_field_old(rec, 3, &len);
- foreign->foreign_table_name = mem_heap_strdupl
- (foreign->heap, (char*) field, len);
+ foreign->foreign_table_name = mem_heap_strdupl(
+ foreign->heap, (char*) field, len);
field = rec_get_nth_field_old(rec, 4, &len);
- foreign->referenced_table_name = mem_heap_strdupl
- (foreign->heap, (char*) field, len);
+ foreign->referenced_table_name = mem_heap_strdupl(
+ foreign->heap, (char*) field, len);
btr_pcur_close(&pcur);
mtr_commit(&mtr);
@@ -1257,8 +1264,8 @@ dict_load_foreigns(
/* Get the secondary index based on FOR_NAME from table
SYS_FOREIGN */
- sec_index = dict_table_get_next_index
- (dict_table_get_first_index(sys_foreign));
+ sec_index = dict_table_get_next_index(
+ dict_table_get_first_index(sys_foreign));
start_load:
heap = mem_heap_create(256);
@@ -1289,7 +1296,8 @@ loop:
following call does the comparison in the latin1_swedish_ci
charset-collation, in a case-insensitive way. */
- if (0 != cmp_data_data(dfield_get_type(dfield),
+ if (0 != cmp_data_data(dfield_get_type(dfield)->mtype,
+ dfield_get_type(dfield)->prtype,
dfield_get_data(dfield), dfield_get_len(dfield),
field, len)) {
diff --git a/storage/innobase/dict/dict0mem.c b/storage/innobase/dict/dict0mem.c
index a6a42dd0411..cee0ffec20b 100644
--- a/storage/innobase/dict/dict0mem.c
+++ b/storage/innobase/dict/dict0mem.c
@@ -66,6 +66,7 @@ dict_mem_table_create(
table->cols = mem_heap_alloc(heap, (n_cols + DATA_N_SYS_COLS)
* sizeof(dict_col_t));
+ table->col_names = NULL;
UT_LIST_INIT(table->indexes);
table->auto_inc_lock = mem_heap_alloc(heap, lock_get_size());
@@ -76,20 +77,22 @@ dict_mem_table_create(
UT_LIST_INIT(table->foreign_list);
UT_LIST_INIT(table->referenced_list);
+#ifdef UNIV_DEBUG
table->does_not_fit_in_memory = FALSE;
+#endif /* UNIV_DEBUG */
table->stat_initialized = FALSE;
table->stat_modified_counter = 0;
- table->max_row_size = 0;
+ table->big_rows = 0;
mutex_create(&table->autoinc_mutex, SYNC_DICT_AUTOINC_MUTEX);
table->autoinc_inited = FALSE;
-
+#ifdef UNIV_DEBUG
table->magic_n = DICT_TABLE_MAGIC_N;
-
+#endif /* UNIV_DEBUG */
return(table);
}
@@ -105,9 +108,74 @@ dict_mem_table_free(
ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
mutex_free(&(table->autoinc_mutex));
+
+ if (table->col_names && (table->n_def < table->n_cols)) {
+ ut_free((void*)table->col_names);
+ }
+
mem_heap_free(table->heap);
}
+/********************************************************************
+Add 'name' to end of the col_names array (see dict_table_t::col_names). Call
+ut_free on col_names (if not NULL), allocate new array (if heap, from it,
+otherwise with ut_malloc), and copy col_names + name to it. */
+static
+const char*
+dict_add_col_name(
+/*==============*/
+ /* out: new column names array */
+ const char* col_names, /* in: existing column names, or
+ NULL */
+ ulint cols, /* in: number of existing columns */
+ const char* name, /* in: new column name */
+ mem_heap_t* heap) /* in: heap, or NULL */
+{
+ ulint i;
+ ulint old_len;
+ ulint new_len;
+ ulint total_len;
+ const char* s;
+ char* res;
+
+ ut_a(((cols == 0) && !col_names) || ((cols > 0) && col_names));
+ ut_a(*name);
+
+ /* Find out length of existing array. */
+ if (col_names) {
+ s = col_names;
+
+ for (i = 0; i < cols; i++) {
+ s += strlen(s) + 1;
+ }
+
+ old_len = s - col_names;
+ } else {
+ old_len = 0;
+ }
+
+ new_len = strlen(name) + 1;
+ total_len = old_len + new_len;
+
+ if (heap) {
+ res = mem_heap_alloc(heap, total_len);
+ } else {
+ res = ut_malloc(total_len);
+ }
+
+ if (old_len > 0) {
+ memcpy(res, col_names, old_len);
+ }
+
+ memcpy(res + old_len, name, new_len);
+
+ if (col_names) {
+ ut_free((char*)col_names);
+ }
+
+ return(res);
+}
+
/**************************************************************************
Adds a column definition to a table. */
@@ -118,29 +186,36 @@ dict_mem_table_add_col(
const char* name, /* in: column name */
ulint mtype, /* in: main datatype */
ulint prtype, /* in: precise type */
- ulint len, /* in: length */
- ulint prec) /* in: precision */
+ ulint len) /* in: precision */
{
dict_col_t* col;
- dtype_t* type;
+ ulint mbminlen;
+ ulint mbmaxlen;
+ mem_heap_t* heap;
ut_ad(table && name);
ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
table->n_def++;
- col = dict_table_get_nth_col(table, table->n_def - 1);
+ heap = table->n_def < table->n_cols ? NULL : table->heap;
+ table->col_names = dict_add_col_name(table->col_names,
+ table->n_def - 1,
+ name, heap);
+
+ col = (dict_col_t*) dict_table_get_nth_col(table, table->n_def - 1);
col->ind = table->n_def - 1;
- col->name = mem_heap_strdup(table->heap, name);
- col->table = table;
col->ord_part = 0;
- col->clust_pos = ULINT_UNDEFINED;
+ col->mtype = mtype;
+ col->prtype = prtype;
+ col->len = len;
- type = dict_col_get_type(col);
+ dtype_get_mblen(mtype, prtype, &mbminlen, &mbmaxlen);
- dtype_set(type, mtype, prtype, len, prec);
+ col->mbminlen = mbminlen;
+ col->mbmaxlen = mbmaxlen;
}
/**************************************************************************
@@ -171,6 +246,7 @@ dict_mem_index_create(
index->type = type;
index->space = space;
+ index->page = 0;
index->name = mem_heap_strdup(heap, index_name);
index->table_name = table_name;
index->table = NULL;
@@ -183,8 +259,10 @@ dict_mem_index_create(
index->stat_n_diff_key_vals = NULL;
index->cached = FALSE;
+ memset(&index->lock, 0, sizeof index->lock);
+#ifdef UNIV_DEBUG
index->magic_n = DICT_INDEX_MAGIC_N;
-
+#endif /* UNIV_DEBUG */
return(index);
}
diff --git a/storage/innobase/eval/eval0eval.c b/storage/innobase/eval/eval0eval.c
index 18408832e91..cbc47ec508f 100644
--- a/storage/innobase/eval/eval0eval.c
+++ b/storage/innobase/eval/eval0eval.c
@@ -334,7 +334,7 @@ eval_predefined_2(
if (len2 > len1) {
int_val = (lint) (len1
- + (eval_rnd % (len2 - len1 + 1)));
+ + (eval_rnd % (len2 - len1 + 1)));
} else {
int_val = (lint) len1;
}
diff --git a/storage/innobase/eval/eval0proc.c b/storage/innobase/eval/eval0proc.c
index 3b3a42d56ef..f5a9d9dc2a8 100644
--- a/storage/innobase/eval/eval0proc.c
+++ b/storage/innobase/eval/eval0proc.c
@@ -51,8 +51,8 @@ if_step(
for (;;) {
eval_exp(elsif_node->cond);
- if (eval_node_get_ibool_val
- (elsif_node->cond)) {
+ if (eval_node_get_ibool_val(
+ elsif_node->cond)) {
/* The condition evaluated to TRUE:
start execution from the first
diff --git a/storage/innobase/fil/fil0fil.c b/storage/innobase/fil/fil0fil.c
index e0a9955f8fb..1aff3739103 100644
--- a/storage/innobase/fil/fil0fil.c
+++ b/storage/innobase/fil/fil0fil.c
@@ -529,9 +529,8 @@ fil_node_open_file(
os_file_read() in Windows to read from a file opened for
async I/O! */
- node->handle = os_file_create_simple_no_error_handling
- (node->name,
- OS_FILE_OPEN, OS_FILE_READ_ONLY, &success);
+ node->handle = os_file_create_simple_no_error_handling(
+ node->name, OS_FILE_OPEN, OS_FILE_READ_ONLY, &success);
if (!success) {
/* The following call prints an error message */
os_file_get_last_error(TRUE);
@@ -1564,9 +1563,9 @@ fil_write_flushed_lsn_to_data_files(
while (node) {
mutex_exit(&(fil_system->mutex));
- err = fil_write_lsn_and_arch_no_to_file
- (space->id, sum_of_sizes,
- lsn, arch_log_no);
+ err = fil_write_lsn_and_arch_no_to_file(
+ space->id, sum_of_sizes, lsn,
+ arch_log_no);
if (err != DB_SUCCESS) {
return(err);
@@ -1936,9 +1935,9 @@ fil_op_log_parse_or_replay(
ut_a(space_id != 0);
- if (fil_create_new_single_table_tablespace
- (&space_id, name, FALSE,
- FIL_IBD_FILE_INITIAL_SIZE) != DB_SUCCESS) {
+ if (fil_create_new_single_table_tablespace(
+ &space_id, name, FALSE,
+ FIL_IBD_FILE_INITIAL_SIZE) != DB_SUCCESS) {
ut_error;
}
}
@@ -2580,8 +2579,8 @@ fil_reset_too_high_lsns(
filepath = fil_make_ibd_name(name, FALSE);
- file = os_file_create_simple_no_error_handling
- (filepath, OS_FILE_OPEN, OS_FILE_READ_WRITE, &success);
+ file = os_file_create_simple_no_error_handling(
+ filepath, OS_FILE_OPEN, OS_FILE_READ_WRITE, &success);
if (!success) {
/* The following call prints an error message */
os_file_get_last_error(TRUE);
@@ -2654,8 +2653,8 @@ fil_reset_too_high_lsns(
if (ut_dulint_cmp(mach_read_from_8(page + FIL_PAGE_LSN),
current_lsn) > 0) {
/* We have to reset the lsn */
- space_id = mach_read_from_4
- (page + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
+ space_id = mach_read_from_4(
+ page + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
page_no = mach_read_from_4(page + FIL_PAGE_OFFSET);
buf_flush_init_for_writing(page, current_lsn, space_id,
@@ -2735,8 +2734,8 @@ fil_open_single_table_tablespace(
filepath = fil_make_ibd_name(name, FALSE);
- file = os_file_create_simple_no_error_handling
- (filepath, OS_FILE_OPEN, OS_FILE_READ_ONLY, &success);
+ file = os_file_create_simple_no_error_handling(
+ filepath, OS_FILE_OPEN, OS_FILE_READ_ONLY, &success);
if (!success) {
/* The following call prints an error message */
os_file_get_last_error(TRUE);
@@ -2887,8 +2886,8 @@ fil_load_single_table_tablespace(
dict_casedn_str(filepath);
# endif /* !UNIV_HOTBACKUP */
#endif
- file = os_file_create_simple_no_error_handling
- (filepath, OS_FILE_OPEN, OS_FILE_READ_ONLY, &success);
+ file = os_file_create_simple_no_error_handling(
+ filepath, OS_FILE_OPEN, OS_FILE_READ_ONLY, &success);
if (!success) {
/* The following call prints an error message */
os_file_get_last_error(TRUE);
@@ -3242,8 +3241,8 @@ fil_load_single_table_tablespaces(void)
".ibd")) {
/* The name ends in .ibd; try opening
the file */
- fil_load_single_table_tablespace
- (dbinfo.name, fileinfo.name);
+ fil_load_single_table_tablespace(
+ dbinfo.name, fileinfo.name);
}
next_file_item:
ret = fil_file_readdir_next_file(&err,
@@ -3736,8 +3735,8 @@ fil_extend_tablespaces_to_stored_len(void)
size_in_header = fsp_get_size_low(buf);
- success = fil_extend_space_to_desired_size
- (&actual_size, space->id, size_in_header);
+ success = fil_extend_space_to_desired_size(
+ &actual_size, space->id, size_in_header);
if (!success) {
fprintf(stderr,
"InnoDB: Error: could not extend the"
@@ -4082,9 +4081,9 @@ fil_io(
for (;;) {
if (node == NULL) {
- fil_report_invalid_page_access
- (block_offset, space_id,
- space->name, byte_offset, len, type);
+ fil_report_invalid_page_access(
+ block_offset, space_id, space->name,
+ byte_offset, len, type);
ut_error;
}
@@ -4113,9 +4112,9 @@ fil_io(
if (space->purpose == FIL_TABLESPACE && space->id != 0
&& node->size <= block_offset) {
- fil_report_invalid_page_access
- (block_offset, space_id,
- space->name, byte_offset, len, type);
+ fil_report_invalid_page_access(
+ block_offset, space_id, space->name, byte_offset,
+ len, type);
ut_error;
}
@@ -4384,10 +4383,10 @@ skip_flush:
space->is_in_unflushed_spaces = FALSE;
- UT_LIST_REMOVE
- (unflushed_spaces,
- system->unflushed_spaces,
- space);
+ UT_LIST_REMOVE(
+ unflushed_spaces,
+ system->unflushed_spaces,
+ space);
}
}
diff --git a/storage/innobase/fsp/fsp0fsp.c b/storage/innobase/fsp/fsp0fsp.c
index 4da25f4d479..00c5e582b3e 100644
--- a/storage/innobase/fsp/fsp0fsp.c
+++ b/storage/innobase/fsp/fsp0fsp.c
@@ -768,8 +768,9 @@ xdes_lst_get_next(
space = buf_frame_get_space_id(descr);
- return(xdes_lst_get_descriptor
- (space, flst_get_next_addr(descr + XDES_FLST_NODE, mtr), mtr));
+ return(xdes_lst_get_descriptor(
+ space,
+ flst_get_next_addr(descr + XDES_FLST_NODE, mtr), mtr));
}
/************************************************************************
@@ -1116,8 +1117,8 @@ fsp_try_extend_data_file(
fprintf(stderr,
"InnoDB: Error: Last data file size is %lu,"
" max size allowed %lu\n",
- (ulong) srv_data_file_sizes
- [srv_n_data_files - 1],
+ (ulong) srv_data_file_sizes[
+ srv_n_data_files - 1],
(ulong) srv_last_file_size_max);
}
@@ -1137,13 +1138,13 @@ fsp_try_extend_data_file(
if (size < FSP_EXTENT_SIZE) {
/* Let us first extend the file to 64 pages */
- success = fsp_try_extend_data_file_with_pages
- (space, FSP_EXTENT_SIZE - 1,
- header, mtr);
+ success = fsp_try_extend_data_file_with_pages(
+ space, FSP_EXTENT_SIZE - 1,
+ header, mtr);
if (!success) {
- new_size = mtr_read_ulint
- (header + FSP_SIZE,
- MLOG_4BYTES, mtr);
+ new_size = mtr_read_ulint(
+ header + FSP_SIZE,
+ MLOG_4BYTES, mtr);
*actual_increase = new_size - old_size;
@@ -1246,9 +1247,9 @@ fsp_fill_free_list(
/* Update the free limit info in the log system and make
a checkpoint */
if (space == 0) {
- log_fsp_current_free_limit_set_and_checkpoint
- ((i + FSP_EXTENT_SIZE)
- / ((1024 * 1024) / UNIV_PAGE_SIZE));
+ log_fsp_current_free_limit_set_and_checkpoint(
+ (i + FSP_EXTENT_SIZE)
+ / ((1024 * 1024) / UNIV_PAGE_SIZE));
}
if (0 == i % XDES_DESCRIBED_PER_PAGE) {
@@ -1967,8 +1968,8 @@ fseg_find_last_used_frag_page_slot(
ut_ad(inode && mtr);
for (i = 0; i < FSEG_FRAG_ARR_N_SLOTS; i++) {
- page_no = fseg_get_nth_frag_page_no
- (inode, FSEG_FRAG_ARR_N_SLOTS - i - 1, mtr);
+ page_no = fseg_get_nth_frag_page_no(
+ inode, FSEG_FRAG_ARR_N_SLOTS - i - 1, mtr);
if (page_no != FIL_NULL) {
@@ -2526,8 +2527,8 @@ fseg_alloc_free_page_low(
return(FIL_NULL);
}
- success = fsp_try_extend_data_file_with_pages
- (space, ret_page, space_header, mtr);
+ success = fsp_try_extend_data_file_with_pages(
+ space, ret_page, space_header, mtr);
if (!success) {
/* No disk space left */
return(FIL_NULL);
@@ -3161,8 +3162,8 @@ fseg_free_extent(
/* Drop search system page hash index if the page is
found in the pool and is hashed */
- btr_search_drop_page_hash_when_freed
- (space, first_page_in_extent + i);
+ btr_search_drop_page_hash_when_freed(
+ space, first_page_in_extent + i);
}
}
@@ -3176,8 +3177,8 @@ fseg_free_extent(
flst_remove(seg_inode + FSEG_NOT_FULL,
descr + XDES_FLST_NODE, mtr);
- not_full_n_used = mtr_read_ulint
- (seg_inode + FSEG_NOT_FULL_N_USED, MLOG_4BYTES, mtr);
+ not_full_n_used = mtr_read_ulint(
+ seg_inode + FSEG_NOT_FULL_N_USED, MLOG_4BYTES, mtr);
descr_n_used = xdes_get_n_used(descr, mtr);
ut_a(not_full_n_used >= descr_n_used);
@@ -3758,15 +3759,15 @@ fsp_validate(
mtr_start(&mtr);
mtr_x_lock(fil_space_get_latch(space), &mtr);
- seg_inode_page = fut_get_ptr
- (space, node_addr, RW_X_LATCH, &mtr)
+ seg_inode_page = fut_get_ptr(
+ space, node_addr, RW_X_LATCH, &mtr)
- FSEG_INODE_PAGE_NODE;
- seg_inode = fsp_seg_inode_page_get_nth_inode
- (seg_inode_page, n, &mtr);
- ut_a(ut_dulint_cmp
- (mach_read_from_8(seg_inode + FSEG_ID),
- ut_dulint_zero) != 0);
+ seg_inode = fsp_seg_inode_page_get_nth_inode(
+ seg_inode_page, n, &mtr);
+ ut_a(ut_dulint_cmp(
+ mach_read_from_8(seg_inode + FSEG_ID),
+ ut_dulint_zero) != 0);
fseg_validate_low(seg_inode, &mtr);
descr_count += flst_get_len(seg_inode + FSEG_FREE,
@@ -3778,8 +3779,8 @@ fsp_validate(
n_used2 += fseg_get_n_frag_pages(seg_inode, &mtr);
- next_node_addr = flst_get_next_addr
- (seg_inode_page + FSEG_INODE_PAGE_NODE, &mtr);
+ next_node_addr = flst_get_next_addr(
+ seg_inode_page + FSEG_INODE_PAGE_NODE, &mtr);
mtr_commit(&mtr);
}
@@ -3804,29 +3805,29 @@ fsp_validate(
mtr_start(&mtr);
mtr_x_lock(fil_space_get_latch(space), &mtr);
- seg_inode_page = fut_get_ptr
- (space, node_addr, RW_X_LATCH, &mtr)
+ seg_inode_page = fut_get_ptr(
+ space, node_addr, RW_X_LATCH, &mtr)
- FSEG_INODE_PAGE_NODE;
- seg_inode = fsp_seg_inode_page_get_nth_inode
- (seg_inode_page, n, &mtr);
- if (ut_dulint_cmp
- (mach_read_from_8(seg_inode + FSEG_ID),
- ut_dulint_zero) != 0) {
+ seg_inode = fsp_seg_inode_page_get_nth_inode(
+ seg_inode_page, n, &mtr);
+ if (ut_dulint_cmp(
+ mach_read_from_8(seg_inode + FSEG_ID),
+ ut_dulint_zero) != 0) {
fseg_validate_low(seg_inode, &mtr);
- descr_count += flst_get_len
- (seg_inode + FSEG_FREE, &mtr);
- descr_count += flst_get_len
- (seg_inode + FSEG_FULL, &mtr);
- descr_count += flst_get_len
- (seg_inode + FSEG_NOT_FULL, &mtr);
- n_used2 += fseg_get_n_frag_pages
- (seg_inode, &mtr);
+ descr_count += flst_get_len(
+ seg_inode + FSEG_FREE, &mtr);
+ descr_count += flst_get_len(
+ seg_inode + FSEG_FULL, &mtr);
+ descr_count += flst_get_len(
+ seg_inode + FSEG_NOT_FULL, &mtr);
+ n_used2 += fseg_get_n_frag_pages(
+ seg_inode, &mtr);
}
- next_node_addr = flst_get_next_addr
- (seg_inode_page + FSEG_INODE_PAGE_NODE, &mtr);
+ next_node_addr = flst_get_next_addr(
+ seg_inode_page + FSEG_INODE_PAGE_NODE, &mtr);
mtr_commit(&mtr);
}
@@ -3931,21 +3932,21 @@ fsp_print(
mtr_start(&mtr);
mtr_x_lock(fil_space_get_latch(space), &mtr);
- seg_inode_page = fut_get_ptr
- (space, node_addr, RW_X_LATCH, &mtr)
+ seg_inode_page = fut_get_ptr(
+ space, node_addr, RW_X_LATCH, &mtr)
- FSEG_INODE_PAGE_NODE;
- seg_inode = fsp_seg_inode_page_get_nth_inode
- (seg_inode_page, n, &mtr);
- ut_a(ut_dulint_cmp
- (mach_read_from_8(seg_inode + FSEG_ID),
- ut_dulint_zero) != 0);
+ seg_inode = fsp_seg_inode_page_get_nth_inode(
+ seg_inode_page, n, &mtr);
+ ut_a(ut_dulint_cmp(
+ mach_read_from_8(seg_inode + FSEG_ID),
+ ut_dulint_zero) != 0);
fseg_print_low(seg_inode, &mtr);
n_segs++;
- next_node_addr = flst_get_next_addr
- (seg_inode_page + FSEG_INODE_PAGE_NODE, &mtr);
+ next_node_addr = flst_get_next_addr(
+ seg_inode_page + FSEG_INODE_PAGE_NODE, &mtr);
mtr_commit(&mtr);
}
@@ -3968,22 +3969,22 @@ fsp_print(
mtr_start(&mtr);
mtr_x_lock(fil_space_get_latch(space), &mtr);
- seg_inode_page = fut_get_ptr
- (space, node_addr, RW_X_LATCH, &mtr)
+ seg_inode_page = fut_get_ptr(
+ space, node_addr, RW_X_LATCH, &mtr)
- FSEG_INODE_PAGE_NODE;
- seg_inode = fsp_seg_inode_page_get_nth_inode
- (seg_inode_page, n, &mtr);
- if (ut_dulint_cmp
- (mach_read_from_8(seg_inode + FSEG_ID),
- ut_dulint_zero) != 0) {
+ seg_inode = fsp_seg_inode_page_get_nth_inode(
+ seg_inode_page, n, &mtr);
+ if (ut_dulint_cmp(
+ mach_read_from_8(seg_inode + FSEG_ID),
+ ut_dulint_zero) != 0) {
fseg_print_low(seg_inode, &mtr);
n_segs++;
}
- next_node_addr = flst_get_next_addr
- (seg_inode_page + FSEG_INODE_PAGE_NODE, &mtr);
+ next_node_addr = flst_get_next_addr(
+ seg_inode_page + FSEG_INODE_PAGE_NODE, &mtr);
mtr_commit(&mtr);
}
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 539bd06be37..1fc3f2c7a82 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -3025,8 +3025,9 @@ ha_innobase::store_key_val_for_row(
/******************************************************************
Builds a 'template' to the prebuilt struct. The template is used in fast
retrieval of just those column values MySQL needs in its processing. */
+static
void
-ha_innobase::build_template(
+build_template(
/*===========*/
row_prebuilt_t* prebuilt, /* in: prebuilt struct */
THD* thd, /* in: current user thread, used
@@ -3167,8 +3168,8 @@ include_field:
templ->col_no = i;
if (index == clust_index) {
- templ->rec_field_no = (index->table->cols + i)
- ->clust_pos;
+ templ->rec_field_no = dict_col_get_clust_pos_noninline(
+ &index->table->cols[i], index);
} else {
templ->rec_field_no = dict_index_get_nth_col_pos(
index, i);
@@ -3197,7 +3198,7 @@ include_field:
mysql_prefix_len = templ->mysql_col_offset
+ templ->mysql_col_len;
}
- templ->type = index->table->cols[i].type.mtype;
+ templ->type = index->table->cols[i].mtype;
templ->mysql_type = (ulint)field->type();
if (templ->mysql_type == DATA_MYSQL_TRUE_VARCHAR) {
@@ -3206,10 +3207,10 @@ include_field:
}
templ->charset = dtype_get_charset_coll_noninline(
- index->table->cols[i].type.prtype);
- templ->mbminlen = index->table->cols[i].type.mbminlen;
- templ->mbmaxlen = index->table->cols[i].type.mbmaxlen;
- templ->is_unsigned = index->table->cols[i].type.prtype
+ index->table->cols[i].prtype);
+ templ->mbminlen = index->table->cols[i].mbminlen;
+ templ->mbmaxlen = index->table->cols[i].mbmaxlen;
+ templ->is_unsigned = index->table->cols[i].prtype
& DATA_UNSIGNED;
if (templ->type == DATA_BLOB) {
prebuilt->templ_contains_blob = TRUE;
@@ -3227,8 +3228,9 @@ skip_field:
for (i = 0; i < n_requested_fields; i++) {
templ = prebuilt->mysql_template + i;
- templ->rec_field_no =
- (index->table->cols + templ->col_no)->clust_pos;
+ templ->rec_field_no = dict_col_get_clust_pos_noninline(
+ &index->table->cols[templ->col_no],
+ clust_index);
}
}
}
@@ -3494,9 +3496,11 @@ calc_row_difference(
ulint col_type;
ulint n_changed = 0;
dfield_t dfield;
+ dict_index_t* clust_index;
uint i;
n_fields = table->s->fields;
+ clust_index = dict_table_get_first_index_noninline(prebuilt->table);
/* We use upd_buff to convert changed fields */
buf = (byte*) upd_buff;
@@ -3527,7 +3531,7 @@ calc_row_difference(
field_mysql_type = field->type();
- col_type = prebuilt->table->cols[i].type.mtype;
+ col_type = prebuilt->table->cols[i].mtype;
switch (col_type) {
@@ -3582,7 +3586,8 @@ calc_row_difference(
/* Let us use a dummy dfield to make the conversion
from the MySQL column format to the InnoDB format */
- dfield.type = (prebuilt->table->cols + i)->type;
+ dict_col_copy_type_noninline(prebuilt->table->cols + i,
+ &dfield.type);
if (n_len != UNIV_SQL_NULL) {
buf = row_mysql_store_col_in_innobase_format(
@@ -3601,7 +3606,8 @@ calc_row_difference(
}
ufield->exp = NULL;
- ufield->field_no = prebuilt->table->cols[i].clust_pos;
+ ufield->field_no = dict_col_get_clust_pos_noninline(
+ &prebuilt->table->cols[i], clust_index);
n_changed++;
}
}
@@ -4581,8 +4587,7 @@ create_table_def(
| nulls_allowed | unsigned_type
| binary_type | long_true_varchar,
charset_no),
- col_len,
- 0);
+ col_len);
}
error = row_create_table_for_mysql(table, trx);
@@ -6175,25 +6180,11 @@ ha_innobase::start_stmt(
1) ::store_lock(),
2) ::external_lock(),
3) ::init_table_handle_for_HANDLER(), and
- 4) :.transactional_table_lock(). */
+ 4) ::transactional_table_lock(). */
prebuilt->select_lock_type =
prebuilt->stored_select_lock_type;
}
-
- if (prebuilt->stored_select_lock_type != LOCK_S
- && prebuilt->stored_select_lock_type != LOCK_X) {
- sql_print_error(
- "stored_select_lock_type is %lu inside "
- "::start_stmt()!",
- prebuilt->stored_select_lock_type);
-
- /* Set the value to LOCK_X: this is just fault
- tolerance, we do not know what the correct value
- should be! */
-
- prebuilt->select_lock_type = LOCK_X;
- }
}
trx->detailed_error[0] = '\0';
diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h
index 4d5dc6b52d6..8c1ab56295d 100644
--- a/storage/innobase/handler/ha_innodb.h
+++ b/storage/innobase/handler/ha_innodb.h
@@ -201,8 +201,6 @@ class ha_innobase: public handler
int cmp_ref(const byte *ref1, const byte *ref2);
bool check_if_incompatible_data(HA_CREATE_INFO *info,
uint table_changes);
- void build_template(struct row_prebuilt_struct *prebuilt, THD *thd,
- TABLE *table, uint templ_type);
};
extern SHOW_VAR innodb_status_variables[];
diff --git a/storage/innobase/ibuf/ibuf0ibuf.c b/storage/innobase/ibuf/ibuf0ibuf.c
index 2f4d0ae1009..96ab928a436 100644
--- a/storage/innobase/ibuf/ibuf0ibuf.c
+++ b/storage/innobase/ibuf/ibuf0ibuf.c
@@ -305,7 +305,7 @@ ibuf_tree_root_get(
ut_a(space == 0);
ut_ad(ibuf_inside());
- mtr_x_lock(dict_tree_get_lock((data->index)->tree), mtr);
+ mtr_x_lock(dict_index_get_lock(data->index), mtr);
page = buf_page_get(space, FSP_IBUF_TREE_ROOT_PAGE_NO, RW_X_LATCH,
mtr);
@@ -524,16 +524,16 @@ ibuf_data_init_for_space(
/* use old-style record format for the insert buffer */
table = dict_mem_table_create(buf, space, 2, 0);
- dict_mem_table_add_col(table, "PAGE_NO", DATA_BINARY, 0, 0, 0);
- dict_mem_table_add_col(table, "TYPES", DATA_BINARY, 0, 0, 0);
+ dict_mem_table_add_col(table, "PAGE_NO", DATA_BINARY, 0, 0);
+ dict_mem_table_add_col(table, "TYPES", DATA_BINARY, 0, 0);
table->id = ut_dulint_add(DICT_IBUF_ID_MIN, space);
dict_table_add_to_cache(table);
- index = dict_mem_index_create
- (buf, "CLUST_IND", space,
- DICT_CLUSTERED | DICT_UNIVERSAL | DICT_IBUF, 2);
+ index = dict_mem_index_create(
+ buf, "CLUST_IND", space,
+ DICT_CLUSTERED | DICT_UNIVERSAL | DICT_IBUF, 2);
dict_mem_index_add_field(index, "PAGE_NO", 0);
dict_mem_index_add_field(index, "TYPES", 0);
@@ -768,9 +768,9 @@ ibuf_set_free_bits_low(
return;
}
- bitmap_page = ibuf_bitmap_get_map_page
- (buf_frame_get_space_id(page),
- buf_frame_get_page_no(page), mtr);
+ bitmap_page = ibuf_bitmap_get_map_page(
+ buf_frame_get_space_id(page),
+ buf_frame_get_page_no(page), mtr);
#ifdef UNIV_IBUF_DEBUG
# if 0
fprintf(stderr,
@@ -818,17 +818,17 @@ ibuf_set_free_bits(
mtr_start(&mtr);
- bitmap_page = ibuf_bitmap_get_map_page
- (buf_frame_get_space_id(page),
- buf_frame_get_page_no(page), &mtr);
+ bitmap_page = ibuf_bitmap_get_map_page(
+ buf_frame_get_space_id(page), buf_frame_get_page_no(page),
+ &mtr);
if (max_val != ULINT_UNDEFINED) {
#ifdef UNIV_IBUF_DEBUG
ulint old_val;
- old_val = ibuf_bitmap_page_get_bits
- (bitmap_page, buf_frame_get_page_no(page),
- IBUF_BITMAP_FREE, &mtr);
+ old_val = ibuf_bitmap_page_get_bits(
+ bitmap_page, buf_frame_get_page_no(page),
+ IBUF_BITMAP_FREE, &mtr);
# if 0
if (old_val != max_val) {
fprintf(stderr,
@@ -1145,9 +1145,8 @@ ibuf_dummy_index_add_col(
dict_mem_table_add_col(index->table, "DUMMY",
dtype_get_mtype(type),
dtype_get_prtype(type),
- dtype_get_len(type),
- dtype_get_prec(type));
- dict_index_add_col(index,
+ dtype_get_len(type));
+ dict_index_add_col(index, index->table, (dict_col_t*)
dict_table_get_nth_col(index->table, i), len);
}
/************************************************************************
@@ -1165,6 +1164,11 @@ ibuf_dummy_index_free(
dict_mem_table_free(table);
}
+void
+dict_index_print_low(
+/*=================*/
+ dict_index_t* index); /* in: index */
+
/*************************************************************************
Builds the entry to insert into a non-clustered index when we have the
corresponding record in an ibuf index. */
@@ -1213,9 +1217,9 @@ ibuf_build_entry_from_ibuf_rec(
dfield_set_data(field, data, len);
- dtype_read_for_order_and_null_size
- (dfield_get_type(field),
- types + i * DATA_ORDER_NULL_TYPE_BUF_SIZE);
+ dtype_read_for_order_and_null_size(
+ dfield_get_type(field),
+ types + i * DATA_ORDER_NULL_TYPE_BUF_SIZE);
}
*pindex = ibuf_dummy_index_create(n_fields, FALSE);
@@ -1235,8 +1239,8 @@ ibuf_build_entry_from_ibuf_rec(
types = rec_get_nth_field_old(ibuf_rec, 3, &len);
ut_a(len % DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE <= 1);
- index = ibuf_dummy_index_create
- (n_fields, len % DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE);
+ index = ibuf_dummy_index_create(
+ n_fields, len % DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE);
if (len % DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE) {
/* compact record format */
@@ -1254,9 +1258,9 @@ ibuf_build_entry_from_ibuf_rec(
dfield_set_data(field, data, len);
- dtype_new_read_for_order_and_null_size
- (dfield_get_type(field),
- types + i * DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE);
+ dtype_new_read_for_order_and_null_size(
+ dfield_get_type(field),
+ types + i * DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE);
ibuf_dummy_index_add_col(index, dfield_get_type(field), len);
}
@@ -1315,8 +1319,8 @@ ibuf_rec_get_volume(
ulint volume;
dict_index_t* dummy_index;
mem_heap_t* heap = mem_heap_create(500);
- dtuple_t* entry = ibuf_build_entry_from_ibuf_rec
- (ibuf_rec, heap, &dummy_index);
+ dtuple_t* entry = ibuf_build_entry_from_ibuf_rec(
+ ibuf_rec, heap, &dummy_index);
volume = rec_get_converted_size(dummy_index, entry);
ibuf_dummy_index_free(dummy_index);
mem_heap_free(heap);
@@ -1332,15 +1336,15 @@ ibuf_rec_get_volume(
if (new_format) {
data = rec_get_nth_field_old(ibuf_rec, i + 4, &len);
- dtype_new_read_for_order_and_null_size
- (&dtype, types + i
- * DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE);
+ dtype_new_read_for_order_and_null_size(
+ &dtype, types + i
+ * DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE);
} else {
data = rec_get_nth_field_old(ibuf_rec, i + 2, &len);
- dtype_read_for_order_and_null_size
- (&dtype, types + i
- * DATA_ORDER_NULL_TYPE_BUF_SIZE);
+ dtype_read_for_order_and_null_size(
+ &dtype, types + i
+ * DATA_ORDER_NULL_TYPE_BUF_SIZE);
}
if (len == UNIV_SQL_NULL) {
@@ -1365,8 +1369,8 @@ ibuf_entry_build(
index tree; NOTE that the original entry
must be kept because we copy pointers to its
fields */
+ dict_index_t* index, /* in: non-clustered index */
dtuple_t* entry, /* in: entry for a non-clustered index */
- ibool comp, /* in: flag: TRUE=compact record format */
ulint space, /* in: space id */
ulint page_no,/* in: index page number where entry should
be inserted */
@@ -1430,13 +1434,12 @@ ibuf_entry_build(
dfield_set_data(field, buf, 4);
- ut_ad(comp == 0 || comp == 1);
/* Store the type info in buf2, and add the fields from entry to
tuple */
buf2 = mem_heap_alloc(heap, n_fields
* DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE
- + comp);
- if (comp) {
+ + dict_table_is_comp(index->table));
+ if (dict_table_is_comp(index->table)) {
*buf2++ = 0; /* write the compact format indicator */
}
for (i = 0; i < n_fields; i++) {
@@ -1447,22 +1450,23 @@ ibuf_entry_build(
entry_field = dtuple_get_nth_field(entry, i);
dfield_copy(field, entry_field);
- dtype_new_store_for_order_and_null_size
- (buf2 + i * DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE,
- dfield_get_type(entry_field));
+ dtype_new_store_for_order_and_null_size(
+ buf2 + i * DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE,
+ dfield_get_type(entry_field),
+ dict_index_get_nth_field(index, i)->prefix_len);
}
/* Store the type info in buf2 to field 3 of tuple */
field = dtuple_get_nth_field(tuple, 3);
- if (comp) {
+ if (dict_table_is_comp(index->table)) {
buf2--;
}
dfield_set_data(field, buf2, n_fields
* DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE
- + comp);
+ + dict_table_is_comp(index->table));
/* Set all the types in the new tuple binary */
dtuple_set_types_binary(tuple, n_fields + 4);
@@ -2605,8 +2609,7 @@ ibuf_insert_low(
the first fields and the type information for other fields, and which
will be inserted to the insert buffer. */
- ibuf_entry = ibuf_entry_build(entry, dict_table_is_comp(index->table),
- space, page_no, heap);
+ ibuf_entry = ibuf_entry_build(index, entry, space, page_no, heap);
/* Open a cursor to the insert buffer tree to calculate if we can add
the new entry to it without exceeding the free space limit for the
@@ -2879,8 +2882,9 @@ dump:
PAGE_CUR_LE, &page_cur);
/* This time the record must fit */
- if (UNIV_UNLIKELY(!page_cur_tuple_insert
- (&page_cur, entry, index, mtr))) {
+ if (UNIV_UNLIKELY(!page_cur_tuple_insert(
+ &page_cur, entry, index,
+ mtr))) {
ut_print_timestamp(stderr);
@@ -2888,10 +2892,10 @@ dump:
"InnoDB: Error: Insert buffer insert"
" fails; page free %lu,"
" dtuple size %lu\n",
- (ulong) page_get_max_insert_size
- (page, 1),
- (ulong) rec_get_converted_size
- (index, entry));
+ (ulong) page_get_max_insert_size(
+ page, 1),
+ (ulong) rec_get_converted_size(
+ index, entry));
fputs("InnoDB: Cannot insert index record ",
stderr);
dtuple_print(stderr, entry);
@@ -2901,14 +2905,14 @@ dump:
" Please run CHECK TABLE on\n"
"InnoDB: that table.\n", stderr);
- bitmap_page = ibuf_bitmap_get_map_page
- (buf_frame_get_space_id(page),
- buf_frame_get_page_no(page),
- mtr);
- old_bits = ibuf_bitmap_page_get_bits
- (bitmap_page,
- buf_frame_get_page_no(page),
- IBUF_BITMAP_FREE, mtr);
+ bitmap_page = ibuf_bitmap_get_map_page(
+ buf_frame_get_space_id(page),
+ buf_frame_get_page_no(page),
+ mtr);
+ old_bits = ibuf_bitmap_page_get_bits(
+ bitmap_page,
+ buf_frame_get_page_no(page),
+ IBUF_BITMAP_FREE, mtr);
fprintf(stderr, "Bitmap bits %lu\n",
(ulong) old_bits);
@@ -2996,7 +3000,7 @@ ibuf_delete_rec(
btr_pcur_commit_specify_mtr(pcur, mtr);
fputs("InnoDB: Validating insert buffer tree:\n", stderr);
- if (!btr_validate_tree(ibuf_data->index->tree, NULL)) {
+ if (!btr_validate_index(ibuf_data->index, NULL)) {
ut_error;
}
@@ -3235,12 +3239,12 @@ loop:
keep the latch to the ibuf_rec page until the
insertion is finished! */
dict_index_t* dummy_index;
- dulint max_trx_id = page_get_max_trx_id
- (buf_frame_align(ibuf_rec));
+ dulint max_trx_id = page_get_max_trx_id(
+ buf_frame_align(ibuf_rec));
page_update_max_trx_id(page, max_trx_id);
- entry = ibuf_build_entry_from_ibuf_rec
- (ibuf_rec, heap, &dummy_index);
+ entry = ibuf_build_entry_from_ibuf_rec(
+ ibuf_rec, heap, &dummy_index);
#ifdef UNIV_IBUF_DEBUG
volume += rec_get_converted_size(dummy_index, entry)
+ page_dir_calc_reserved_space(1);
@@ -3283,15 +3287,15 @@ reset_bit:
ibuf_bitmap_page_set_bits(bitmap_page, page_no,
IBUF_BITMAP_BUFFERED, FALSE, &mtr);
if (page) {
- ulint old_bits = ibuf_bitmap_page_get_bits
- (bitmap_page, page_no, IBUF_BITMAP_FREE, &mtr);
+ ulint old_bits = ibuf_bitmap_page_get_bits(
+ bitmap_page, page_no, IBUF_BITMAP_FREE, &mtr);
ulint new_bits = ibuf_index_page_calc_free(page);
#if 0 /* defined UNIV_IBUF_DEBUG */
fprintf(stderr, "Old bits %lu new bits %lu"
" max size %lu\n",
old_bits, new_bits,
- page_get_max_insert_size_after_reorganize
- (page, 1));
+ page_get_max_insert_size_after_reorganize(
+ page, 1));
#endif
if (old_bits != new_bits) {
ibuf_bitmap_page_set_bits(bitmap_page, page_no,
diff --git a/storage/innobase/include/btr0btr.h b/storage/innobase/include/btr0btr.h
index 288b0459b13..664607a26aa 100644
--- a/storage/innobase/include/btr0btr.h
+++ b/storage/innobase/include/btr0btr.h
@@ -52,7 +52,7 @@ page_t*
btr_root_get(
/*=========*/
/* out: root page, x-latched */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
mtr_t* mtr); /* in: mtr */
/******************************************************************
Gets a buffer page and declares its latching order level. */
@@ -255,7 +255,7 @@ that mtr holds an x-latch on the tree. */
void
btr_insert_on_non_leaf_level(
/*=========================*/
- dict_tree_t* tree, /* in: tree */
+ dict_index_t* index, /* in: index */
ulint level, /* in: level, must be > 0 */
dtuple_t* tuple, /* in: the record to be inserted */
mtr_t* mtr); /* in: mtr */
@@ -274,7 +274,7 @@ Deletes on the upper level the node pointer to a page. */
void
btr_node_ptr_delete(
/*================*/
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
page_t* page, /* in: page whose node pointer is deleted */
mtr_t* mtr); /* in: mtr */
#ifdef UNIV_DEBUG
@@ -285,7 +285,7 @@ ibool
btr_check_node_ptr(
/*===============*/
/* out: TRUE */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
page_t* page, /* in: index page */
mtr_t* mtr); /* in: mtr */
#endif /* UNIV_DEBUG */
@@ -361,7 +361,7 @@ btr_page_alloc(
/*===========*/
/* out: new allocated page, x-latched;
NULL if out of space */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
ulint hint_page_no, /* in: hint of a good page */
byte file_direction, /* in: direction where a possible
page split is made */
@@ -375,7 +375,7 @@ storage pages because the page must contain info on its level. */
void
btr_page_free(
/*==========*/
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
page_t* page, /* in: page to be freed, x-latched */
mtr_t* mtr); /* in: mtr */
/******************************************************************
@@ -386,7 +386,7 @@ argument. */
void
btr_page_free_low(
/*==============*/
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index tree */
page_t* page, /* in: page to be freed, x-latched */
ulint level, /* in: page level */
mtr_t* mtr); /* in: mtr */
@@ -397,14 +397,14 @@ Prints size info of a B-tree. */
void
btr_print_size(
/*===========*/
- dict_tree_t* tree); /* in: index tree */
+ dict_index_t* index); /* in: index tree */
/******************************************************************
-Prints directories and other info of all nodes in the tree. */
+Prints directories and other info of all nodes in the index. */
void
-btr_print_tree(
-/*===========*/
- dict_tree_t* tree, /* in: tree */
+btr_print_index(
+/*============*/
+ dict_index_t* index, /* in: index */
ulint width); /* in: print this many entries from start
and end */
#endif /* UNIV_BTR_PRINT */
@@ -425,10 +425,10 @@ btr_index_rec_validate(
Checks the consistency of an index tree. */
ibool
-btr_validate_tree(
-/*==============*/
+btr_validate_index(
+/*===============*/
/* out: TRUE if ok */
- dict_tree_t* tree, /* in: tree */
+ dict_index_t* index, /* in: index */
trx_t* trx); /* in: transaction or NULL */
#define BTR_N_LEAF_PAGES 1
diff --git a/storage/innobase/include/btr0btr.ic b/storage/innobase/include/btr0btr.ic
index 1f39b52f3c8..4a88f58b318 100644
--- a/storage/innobase/include/btr0btr.ic
+++ b/storage/innobase/include/btr0btr.ic
@@ -204,7 +204,7 @@ btr_node_ptr_get_child_page_no(
fprintf(stderr,
"InnoDB: a nonsensical page number 0"
" in a node ptr record at offset %lu\n",
- (ulong) ut_align_offset(rec, UNIV_PAGE_SIZE));
+ (ulong) page_offset(rec));
buf_page_print(buf_frame_align(rec));
}
diff --git a/storage/innobase/include/btr0cur.h b/storage/innobase/include/btr0cur.h
index 1d41a345699..213dcb7f568 100644
--- a/storage/innobase/include/btr0cur.h
+++ b/storage/innobase/include/btr0cur.h
@@ -59,13 +59,13 @@ btr_cur_get_page(
/* out: pointer to page */
btr_cur_t* cursor);/* in: tree cursor */
/*************************************************************
-Returns the tree of a cursor. */
+Returns the index of a cursor. */
UNIV_INLINE
-dict_tree_t*
-btr_cur_get_tree(
-/*=============*/
- /* out: tree */
- btr_cur_t* cursor);/* in: tree cursor */
+dict_index_t*
+btr_cur_get_index(
+/*==============*/
+ /* out: index */
+ btr_cur_t* cursor);/* in: B-tree cursor */
/*************************************************************
Positions a tree cursor at a given record. */
UNIV_INLINE
diff --git a/storage/innobase/include/btr0cur.ic b/storage/innobase/include/btr0cur.ic
index 76a4ff938a2..bd2c46eb734 100644
--- a/storage/innobase/include/btr0cur.ic
+++ b/storage/innobase/include/btr0cur.ic
@@ -56,15 +56,15 @@ btr_cur_get_page(
}
/*************************************************************
-Returns the tree of a cursor. */
+Returns the index of a cursor. */
UNIV_INLINE
-dict_tree_t*
-btr_cur_get_tree(
-/*=============*/
- /* out: tree */
- btr_cur_t* cursor) /* in: tree cursor */
+dict_index_t*
+btr_cur_get_index(
+/*==============*/
+ /* out: index */
+ btr_cur_t* cursor) /* in: B-tree cursor */
{
- return((cursor->index)->tree);
+ return(cursor->index);
}
/*************************************************************
@@ -109,15 +109,8 @@ btr_cur_compress_recommendation(
one page: we recommend compression if this is not the
root page. */
- if (dict_tree_get_page((cursor->index)->tree)
- == buf_frame_get_page_no(page)) {
-
- /* It is the root page */
-
- return(FALSE);
- }
-
- return(TRUE);
+ return(dict_index_get_page(cursor->index)
+ != buf_frame_get_page_no(page));
}
return(FALSE);
@@ -153,15 +146,8 @@ btr_cur_can_delete_without_compress(
one page, OR the page will become empty: we recommend
compression if this is not the root page. */
- if (dict_tree_get_page((cursor->index)->tree)
- == buf_frame_get_page_no(page)) {
-
- /* It is the root page */
-
- return(TRUE);
- }
-
- return(FALSE);
+ return(dict_index_get_page(cursor->index)
+ == buf_frame_get_page_no(page));
}
return(TRUE);
diff --git a/storage/innobase/include/btr0pcur.h b/storage/innobase/include/btr0pcur.h
index 0276fe45922..ee40e905544 100644
--- a/storage/innobase/include/btr0pcur.h
+++ b/storage/innobase/include/btr0pcur.h
@@ -445,7 +445,7 @@ selects, updates, and deletes. */
struct btr_pcur_struct{
btr_cur_t btr_cur; /* a B-tree cursor */
- ulint latch_mode; /* see FIXME note below!
+ ulint latch_mode; /* see TODO note below!
BTR_SEARCH_LEAF, BTR_MODIFY_LEAF,
BTR_MODIFY_TREE, or BTR_NO_LATCHES,
depending on the latching state of
@@ -473,7 +473,7 @@ struct btr_pcur_struct{
dulint modify_clock; /* the modify clock value of the
buffer block when the cursor position
was stored */
- ulint pos_state; /* see FIXME note below!
+ ulint pos_state; /* see TODO note below!
BTR_PCUR_IS_POSITIONED,
BTR_PCUR_WAS_POSITIONED,
BTR_PCUR_NOT_POSITIONED */
@@ -495,14 +495,18 @@ struct btr_pcur_struct{
is not NULL */
};
-#define BTR_PCUR_IS_POSITIONED 1997660512 /* FIXME: currently, the state
+#define BTR_PCUR_IS_POSITIONED 1997660512 /* TODO: currently, the state
can be BTR_PCUR_IS_POSITIONED,
though it really should be
BTR_PCUR_WAS_POSITIONED,
because we have no obligation
to commit the cursor with
mtr; similarly latch_mode may
- be out of date */
+ be out of date. This can
+ lead to problems if btr_pcur
+ is not used the right way;
+ all current code should be
+ ok. */
#define BTR_PCUR_WAS_POSITIONED 1187549791
#define BTR_PCUR_NOT_POSITIONED 1328997689
diff --git a/storage/innobase/include/btr0sea.h b/storage/innobase/include/btr0sea.h
index 62b1d2db559..8b4408ef852 100644
--- a/storage/innobase/include/btr0sea.h
+++ b/storage/innobase/include/btr0sea.h
@@ -134,48 +134,34 @@ btr_search_validate(void);
/*======================*/
/* out: TRUE if ok */
-/* Search info directions */
-#define BTR_SEA_NO_DIRECTION 1
-#define BTR_SEA_LEFT 2
-#define BTR_SEA_RIGHT 3
-#define BTR_SEA_SAME_REC 4
-
/* The search info struct in an index */
struct btr_search_struct{
- ulint magic_n; /* magic number */
- /* The following 4 fields are currently not used: */
- rec_t* last_search; /* pointer to the lower limit record of the
- previous search; NULL if not known */
- ulint n_direction; /* number of consecutive searches in the
- same direction */
- ulint direction; /* BTR_SEA_NO_DIRECTION, BTR_SEA_LEFT,
- BTR_SEA_RIGHT, BTR_SEA_SAME_REC,
- or BTR_SEA_SAME_PAGE */
- dulint modify_clock; /* value of modify clock at the time
- last_search was stored */
- /*----------------------*/
- /* The following 4 fields are not protected by any latch: */
+ /* The following fields are not protected by any latch.
+ Unfortunately, this means that they must be aligned to
+ the machine word, i.e., they cannot be turned into bit-fields. */
page_t* root_guess; /* the root page frame when it was last time
fetched, or NULL */
- ulint hash_analysis; /* when this exceeds a certain value, the
- hash analysis starts; this is reset if no
+ ulint hash_analysis; /* when this exceeds BTR_SEARCH_HASH_ANALYSIS,
+ the hash analysis starts; this is reset if no
success noticed */
ibool last_hash_succ; /* TRUE if the last search would have
succeeded, or did succeed, using the hash
index; NOTE that the value here is not exact:
it is not calculated for every search, and the
calculation itself is not always accurate! */
- ulint n_hash_potential;/* number of consecutive searches which would
- have succeeded, or did succeed, using the hash
- index */
+ ulint n_hash_potential;
+ /* number of consecutive searches
+ which would have succeeded, or did succeed,
+ using the hash index;
+ the range is 0 .. BTR_SEARCH_BUILD_LIMIT + 5 */
/*----------------------*/
ulint n_fields; /* recommended prefix length for hash search:
number of full fields */
ulint n_bytes; /* recommended prefix: number of bytes in
- an incomplete field */
- ulint side; /* BTR_SEARCH_LEFT_SIDE or
- BTR_SEARCH_RIGHT_SIDE, depending on whether
+ an incomplete field;
+ cf. BTR_PAGE_MAX_REC_SIZE */
+ ibool left_side; /* TRUE or FALSE, depending on whether
the leftmost record of several records with
the same prefix should be indexed in the
hash index */
@@ -188,10 +174,12 @@ struct btr_search_struct{
far */
ulint n_searches; /* number of searches */
#endif /* UNIV_SEARCH_PERF_STAT */
+#ifdef UNIV_DEBUG
+ ulint magic_n; /* magic number */
+# define BTR_SEARCH_MAGIC_N 1112765
+#endif /* UNIV_DEBUG */
};
-#define BTR_SEARCH_MAGIC_N 1112765
-
/* The hash index system */
typedef struct btr_search_sys_struct btr_search_sys_t;
@@ -229,9 +217,6 @@ is no hope in building a hash index. */
#define BTR_SEARCH_HASH_ANALYSIS 17
-#define BTR_SEARCH_LEFT_SIDE 1
-#define BTR_SEARCH_RIGHT_SIDE 2
-
/* Limit of consecutive searches for trying a search shortcut on the search
pattern */
diff --git a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
index 110ef36a296..2fc6bf4bcb9 100644
--- a/storage/innobase/include/buf0buf.h
+++ b/storage/innobase/include/buf0buf.h
@@ -825,8 +825,7 @@ struct buf_block_struct{
search: number of full fields */
ulint n_bytes; /* recommended prefix: number of bytes
in an incomplete field */
- ulint side; /* BTR_SEARCH_LEFT_SIDE or
- BTR_SEARCH_RIGHT_SIDE, depending on
+ ibool left_side; /* TRUE or FALSE, depending on
whether the leftmost record of several
records with the same prefix should be
indexed in the hash index */
@@ -851,9 +850,7 @@ struct buf_block_struct{
ulint curr_n_fields; /* prefix length for hash indexing:
number of full fields */
ulint curr_n_bytes; /* number of bytes in hash indexing */
- ulint curr_side; /* BTR_SEARCH_LEFT_SIDE or
- BTR_SEARCH_RIGHT_SIDE in hash
- indexing */
+ ibool curr_left_side; /* TRUE or FALSE in hash indexing */
dict_index_t* index; /* Index for which the adaptive
hash index has been created. */
/* 6. Debug fields */
diff --git a/storage/innobase/include/data0data.ic b/storage/innobase/include/data0data.ic
index 77fce029851..753fa9ba45f 100644
--- a/storage/innobase/include/data0data.ic
+++ b/storage/innobase/include/data0data.ic
@@ -334,7 +334,7 @@ dtuple_set_types_binary(
for (i = 0; i < n; i++) {
dfield_type = dfield_get_type(dtuple_get_nth_field(tuple, i));
- dtype_set(dfield_type, DATA_BINARY, 0, 0, 0);
+ dtype_set(dfield_type, DATA_BINARY, 0, 0);
}
}
diff --git a/storage/innobase/include/data0type.h b/storage/innobase/include/data0type.h
index 7a9456637d6..e5e9c5076be 100644
--- a/storage/innobase/include/data0type.h
+++ b/storage/innobase/include/data0type.h
@@ -18,10 +18,6 @@ extern ulint data_mysql_default_charset_coll;
/* SQL data type struct */
typedef struct dtype_struct dtype_t;
-/* This variable is initialized as the standard binary variable length
-data type */
-extern dtype_t* dtype_binary;
-
/*-------------------------------------------*/
/* The 'MAIN TYPE' of a column */
#define DATA_VARCHAR 1 /* character varying of the
@@ -124,11 +120,7 @@ be less than 256 */
#define DATA_ROLL_PTR 2 /* rollback data pointer: 7 bytes */
#define DATA_ROLL_PTR_LEN 7
-#define DATA_MIX_ID 3 /* mixed index label: a dulint, stored in
- a row in a compressed form */
-#define DATA_MIX_ID_LEN 9 /* maximum stored length for mix id (in a
- compressed dulint form) */
-#define DATA_N_SYS_COLS 4 /* number of system columns defined above */
+#define DATA_N_SYS_COLS 3 /* number of system columns defined above */
/* Flags ORed to the precise data type */
#define DATA_NOT_NULL 256 /* this is ORed to the precise type when
@@ -176,7 +168,11 @@ dtype_get_at_most_n_mbchars(
/*========================*/
/* out: length of the prefix,
in bytes */
- const dtype_t* dtype, /* in: data type */
+ ulint prtype, /* in: precise type */
+ ulint mbminlen, /* in: minimum length of a
+ multi-byte character */
+ ulint mbmaxlen, /* in: maximum length of a
+ multi-byte character */
ulint prefix_len, /* in: length of the requested
prefix, in characters, multiplied by
dtype_get_mbmaxlen(dtype) */
@@ -224,8 +220,7 @@ dtype_set(
dtype_t* type, /* in: type struct to init */
ulint mtype, /* in: main data type */
ulint prtype, /* in: precise type */
- ulint len, /* in: length of type */
- ulint prec); /* in: precision of type */
+ ulint len); /* in: precision of type */
/*************************************************************************
Copies a data type structure. */
UNIV_INLINE
@@ -233,7 +228,7 @@ void
dtype_copy(
/*=======*/
dtype_t* type1, /* in: type struct to copy to */
- dtype_t* type2); /* in: type struct to copy from */
+ const dtype_t* type2); /* in: type struct to copy from */
/*************************************************************************
Gets the SQL main data type. */
UNIV_INLINE
@@ -249,6 +244,18 @@ dtype_get_prtype(
/*=============*/
dtype_t* type);
/*************************************************************************
+Compute the mbminlen and mbmaxlen members of a data type structure. */
+UNIV_INLINE
+void
+dtype_get_mblen(
+/*============*/
+ ulint mtype, /* in: main type */
+ ulint prtype, /* in: precise type (and collation) */
+ ulint* mbminlen, /* out: minimum length of a
+ multi-byte character */
+ ulint* mbmaxlen); /* out: maximum length of a
+ multi-byte character */
+/*************************************************************************
Gets the MySQL charset-collation code for MySQL string types. */
ulint
@@ -280,13 +287,6 @@ dtype_get_len(
/*==========*/
dtype_t* type);
/*************************************************************************
-Gets the type precision. */
-UNIV_INLINE
-ulint
-dtype_get_prec(
-/*===========*/
- dtype_t* type);
-/*************************************************************************
Gets the minimum length of a character, in bytes. */
UNIV_INLINE
ulint
@@ -312,50 +312,52 @@ dtype_get_pad_char(
/*===============*/
/* out: padding character code, or
ULINT_UNDEFINED if no padding specified */
- const dtype_t* type); /* in: type */
+ ulint mtype, /* in: main type */
+ ulint prtype); /* in: precise type */
/***************************************************************************
Returns the size of a fixed size data type, 0 if not a fixed size type. */
UNIV_INLINE
ulint
-dtype_get_fixed_size(
-/*=================*/
+dtype_get_fixed_size_low(
+/*=====================*/
/* out: fixed size, or 0 */
- dtype_t* type); /* in: type */
+ ulint mtype, /* in: main type */
+ ulint prtype, /* in: precise type */
+ ulint len, /* in: length */
+ ulint mbminlen, /* in: minimum length of a multibyte char */
+ ulint mbmaxlen); /* in: maximum length of a multibyte char */
/***************************************************************************
Returns the minimum size of a data type. */
UNIV_INLINE
ulint
-dtype_get_min_size(
-/*===============*/
+dtype_get_min_size_low(
+/*===================*/
/* out: minimum size */
- const dtype_t* type); /* in: type */
+ ulint mtype, /* in: main type */
+ ulint prtype, /* in: precise type */
+ ulint len, /* in: length */
+ ulint mbminlen, /* in: minimum length of a multibyte char */
+ ulint mbmaxlen); /* in: maximum length of a multibyte char */
/***************************************************************************
Returns the maximum size of a data type. Note: types in system tables may be
incomplete and return incorrect information. */
-
+UNIV_INLINE
ulint
-dtype_get_max_size(
-/*===============*/
- /* out: maximum size (ULINT_MAX for
- unbounded types) */
- const dtype_t* type); /* in: type */
+dtype_get_max_size_low(
+/*===================*/
+ /* out: maximum size */
+ ulint mtype, /* in: main type */
+ ulint len); /* in: length */
/***************************************************************************
-Returns a stored SQL NULL size for a type. For fixed length types it is
-the fixed length of the type, otherwise 0. */
+Returns the ROW_FORMAT=REDUNDANT stored SQL NULL size of a type.
+For fixed length types it is the fixed length of the type, otherwise 0. */
UNIV_INLINE
ulint
dtype_get_sql_null_size(
/*====================*/
- /* out: SQL null storage size */
- dtype_t* type); /* in: type */
-/***************************************************************************
-Returns TRUE if a type is of a fixed size. */
-UNIV_INLINE
-ibool
-dtype_is_fixed_size(
-/*================*/
- /* out: TRUE if fixed size */
- dtype_t* type); /* in: type */
+ /* out: SQL null storage size
+ in ROW_FORMAT=REDUNDANT */
+ const dtype_t* type); /* in: type */
/**************************************************************************
Reads to a type the stored information which determines its alphabetical
ordering and the storage size of an SQL NULL value. */
@@ -376,7 +378,9 @@ dtype_new_store_for_order_and_null_size(
byte* buf, /* in: buffer for
DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE
bytes where we store the info */
- dtype_t* type); /* in: type struct */
+ dtype_t* type, /* in: type struct */
+ ulint prefix_len);/* in: prefix length to
+ replace type->len, or 0 */
/**************************************************************************
Reads to a type the stored information which determines its alphabetical
ordering and the storage size of an SQL NULL value. This is the 4.1.x storage
@@ -413,25 +417,30 @@ dtype_new_read_for_order_and_null_size()
sym_tab_add_null_lit() */
struct dtype_struct{
- ulint mtype; /* main data type */
- ulint prtype; /* precise type; MySQL data type, charset code,
- flags to indicate nullability, signedness,
- whether this is a binary string, whether this
- is a true VARCHAR where MySQL uses 2 bytes to
- store the length */
+ unsigned mtype:8; /* main data type */
+ unsigned prtype:24; /* precise type; MySQL data
+ type, charset code, flags to
+ indicate nullability,
+ signedness, whether this is a
+ binary string, whether this is
+ a true VARCHAR where MySQL
+ uses 2 bytes to store the length */
/* the remaining fields do not affect alphabetical ordering: */
- ulint len; /* length; for MySQL data this is
- field->pack_length(), except that for a
- >= 5.0.3 type true VARCHAR this is the
- maximum byte length of the string data
- (in addition to the string, MySQL uses 1 or
- 2 bytes to store the string length) */
- ulint prec; /* precision */
-
- ulint mbminlen; /* minimum length of a character, in bytes */
- ulint mbmaxlen; /* maximum length of a character, in bytes */
+ unsigned len:16; /* length; for MySQL data this
+ is field->pack_length(),
+ except that for a >= 5.0.3
+ type true VARCHAR this is the
+ maximum byte length of the
+ string data (in addition to
+ the string, MySQL uses 1 or 2
+ bytes to store the string length) */
+
+ unsigned mbminlen:2; /* minimum length of a
+ character, in bytes */
+ unsigned mbmaxlen:3; /* maximum length of a
+ character, in bytes */
};
#ifndef UNIV_NONINL
diff --git a/storage/innobase/include/data0type.ic b/storage/innobase/include/data0type.ic
index d2027592c09..b447c9c39c2 100644
--- a/storage/innobase/include/data0type.ic
+++ b/storage/innobase/include/data0type.ic
@@ -48,36 +48,53 @@ dtype_get_mysql_type(
}
/*************************************************************************
-Sets the mbminlen and mbmaxlen members of a data type structure. */
+Compute the mbminlen and mbmaxlen members of a data type structure. */
UNIV_INLINE
void
-dtype_set_mblen(
+dtype_get_mblen(
/*============*/
- dtype_t* type) /* in/out: type struct */
+ ulint mtype, /* in: main type */
+ ulint prtype, /* in: precise type (and collation) */
+ ulint* mbminlen, /* out: minimum length of a
+ multi-byte character */
+ ulint* mbmaxlen) /* out: maximum length of a
+ multi-byte character */
{
- ut_ad(type);
- if (dtype_is_string_type(type->mtype)) {
+ if (dtype_is_string_type(mtype)) {
#ifndef UNIV_HOTBACKUP
- innobase_get_cset_width(dtype_get_charset_coll(type->prtype),
- &type->mbminlen, &type->mbmaxlen);
- ut_ad(type->mbminlen <= type->mbmaxlen);
+ innobase_get_cset_width(dtype_get_charset_coll(prtype),
+ mbminlen, mbmaxlen);
+ ut_ad(*mbminlen <= *mbmaxlen);
+ ut_ad(*mbminlen <= 2); /* cf. the bit-field in dtype_t */
+ ut_ad(*mbmaxlen < 1 << 3); /* cf. the bit-field in dtype_t */
#else /* !UNIV_HOTBACKUP */
-#ifdef notdefined
- printf("ibbackup: DEBUG: type->mtype=%lu, type->prtype=%lu\n",
- type->mtype, type->prtype);
-#endif
- ut_a(type->mtype <= DATA_BINARY);
-#ifdef notdefined
- ut_a(type->prtype == (DATA_BINARY | DATA_NOT_NULL));
-#endif
- type->mbminlen = type->mbmaxlen = 1;
+ ut_a(mtype <= DATA_BINARY);
+ *mbminlen = *mbmaxlen = 1;
#endif /* !UNIV_HOTBACKUP */
} else {
- type->mbminlen = type->mbmaxlen = 0;
+ *mbminlen = *mbmaxlen = 0;
}
}
/*************************************************************************
+Compute the mbminlen and mbmaxlen members of a data type structure. */
+UNIV_INLINE
+void
+dtype_set_mblen(
+/*============*/
+ dtype_t* type) /* in/out: type */
+{
+ ulint mbminlen;
+ ulint mbmaxlen;
+
+ dtype_get_mblen(type->mtype, type->prtype, &mbminlen, &mbmaxlen);
+ type->mbminlen = mbminlen;
+ type->mbmaxlen = mbmaxlen;
+
+ ut_ad(dtype_validate(type));
+}
+
+/*************************************************************************
Sets a data type structure. */
UNIV_INLINE
void
@@ -86,8 +103,7 @@ dtype_set(
dtype_t* type, /* in: type struct to init */
ulint mtype, /* in: main data type */
ulint prtype, /* in: precise type */
- ulint len, /* in: length of type */
- ulint prec) /* in: precision of type */
+ ulint len) /* in: precision of type */
{
ut_ad(type);
ut_ad(mtype <= DATA_MTYPE_MAX);
@@ -95,10 +111,8 @@ dtype_set(
type->mtype = mtype;
type->prtype = prtype;
type->len = len;
- type->prec = prec;
dtype_set_mblen(type);
- ut_ad(dtype_validate(type));
}
/*************************************************************************
@@ -108,7 +122,7 @@ void
dtype_copy(
/*=======*/
dtype_t* type1, /* in: type struct to copy to */
- dtype_t* type2) /* in: type struct to copy from */
+ const dtype_t* type2) /* in: type struct to copy from */
{
*type1 = *type2;
@@ -155,19 +169,6 @@ dtype_get_len(
}
/*************************************************************************
-Gets the type precision. */
-UNIV_INLINE
-ulint
-dtype_get_prec(
-/*===========*/
- dtype_t* type)
-{
- ut_ad(type);
-
- return(type->prec);
-}
-
-/*************************************************************************
Gets the minimum length of a character, in bytes. */
UNIV_INLINE
ulint
@@ -195,19 +196,20 @@ dtype_get_mbmaxlen(
}
/*************************************************************************
-Gets the padding character code for the type. */
+Gets the padding character code for a type. */
UNIV_INLINE
ulint
dtype_get_pad_char(
/*===============*/
/* out: padding character code, or
ULINT_UNDEFINED if no padding specified */
- const dtype_t* type) /* in: type */
+ ulint mtype, /* in: main type */
+ ulint prtype) /* in: precise type */
{
- switch (type->mtype) {
+ switch (mtype) {
case DATA_FIXBINARY:
case DATA_BINARY:
- if (UNIV_UNLIKELY(dtype_get_charset_coll(type->prtype)
+ if (UNIV_UNLIKELY(dtype_get_charset_coll(prtype)
== DATA_MYSQL_BINARY_CHARSET_COLL)) {
/* Starting from 5.0.18, do not pad
VARBINARY or BINARY columns. */
@@ -223,7 +225,7 @@ dtype_get_pad_char(
return(0x20);
case DATA_BLOB:
- if ((type->prtype & DATA_BINARY_TYPE) == 0) {
+ if (!(prtype & DATA_BINARY_TYPE)) {
return(0x20);
}
/* Fall through */
@@ -244,11 +246,14 @@ dtype_new_store_for_order_and_null_size(
byte* buf, /* in: buffer for
DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE
bytes where we store the info */
- dtype_t* type) /* in: type struct */
+ dtype_t* type, /* in: type struct */
+ ulint prefix_len)/* in: prefix length to
+ replace type->len, or 0 */
{
#if 6 != DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE
#error "6 != DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE"
#endif
+ ulint len;
buf[0] = (byte)(type->mtype & 0xFFUL);
@@ -263,7 +268,9 @@ dtype_new_store_for_order_and_null_size(
buf[1] = (byte)(type->prtype & 0xFFUL);
- mach_write_to_2(buf + 2, type->len & 0xFFFFUL);
+ len = prefix_len ? prefix_len : type->len;
+
+ mach_write_to_2(buf + 2, len & 0xFFFFUL);
ut_ad(dtype_get_charset_coll(type->prtype) < 256);
mach_write_to_2(buf + 4, dtype_get_charset_coll(type->prtype));
@@ -284,7 +291,9 @@ dtype_read_for_order_and_null_size(
dtype_t* type, /* in: type struct */
byte* buf) /* in: buffer for stored type order info */
{
- ut_ad(4 == DATA_ORDER_NULL_TYPE_BUF_SIZE);
+#if 4 != DATA_ORDER_NULL_TYPE_BUF_SIZE
+# error "4 != DATA_ORDER_NULL_TYPE_BUF_SIZE"
+#endif
type->mtype = buf[0] & 63;
type->prtype = buf[1];
@@ -356,34 +365,31 @@ dtype_new_read_for_order_and_null_size(
Returns the size of a fixed size data type, 0 if not a fixed size type. */
UNIV_INLINE
ulint
-dtype_get_fixed_size(
-/*=================*/
+dtype_get_fixed_size_low(
+/*=====================*/
/* out: fixed size, or 0 */
- dtype_t* type) /* in: type */
+ ulint mtype, /* in: main type */
+ ulint prtype, /* in: precise type */
+ ulint len, /* in: length */
+ ulint mbminlen, /* in: minimum length of a multibyte char */
+ ulint mbmaxlen) /* in: maximum length of a multibyte char */
{
- ulint mtype;
-
- mtype = dtype_get_mtype(type);
-
switch (mtype) {
case DATA_SYS:
#ifdef UNIV_DEBUG
- switch (type->prtype & DATA_MYSQL_TYPE_MASK) {
- default:
- ut_ad(0);
- return(0);
+ switch (prtype & DATA_MYSQL_TYPE_MASK) {
case DATA_ROW_ID:
- ut_ad(type->len == DATA_ROW_ID_LEN);
+ ut_ad(len == DATA_ROW_ID_LEN);
break;
case DATA_TRX_ID:
- ut_ad(type->len == DATA_TRX_ID_LEN);
+ ut_ad(len == DATA_TRX_ID_LEN);
break;
case DATA_ROLL_PTR:
- ut_ad(type->len == DATA_ROLL_PTR_LEN);
- break;
- case DATA_MIX_ID:
- ut_ad(type->len == DATA_MIX_ID_LEN);
+ ut_ad(len == DATA_ROLL_PTR_LEN);
break;
+ default:
+ ut_ad(0);
+ return(0);
}
#endif /* UNIV_DEBUG */
case DATA_CHAR:
@@ -391,32 +397,32 @@ dtype_get_fixed_size(
case DATA_INT:
case DATA_FLOAT:
case DATA_DOUBLE:
- return(dtype_get_len(type));
+ return(len);
case DATA_MYSQL:
- if (type->prtype & DATA_BINARY_TYPE) {
- return(dtype_get_len(type));
+ if (prtype & DATA_BINARY_TYPE) {
+ return(len);
} else {
#ifdef UNIV_HOTBACKUP
- if (type->mbminlen == type->mbmaxlen) {
- return(dtype_get_len(type));
+ if (mbminlen == mbmaxlen) {
+ return(len);
}
#else /* UNIV_HOTBACKUP */
/* We play it safe here and ask MySQL for
mbminlen and mbmaxlen. Although
- type->mbminlen and type->mbmaxlen are
- initialized if and only if type->prtype
+ mbminlen and mbmaxlen are
+ initialized if and only if prtype
is (in one of the 3 functions in this file),
it could be that none of these functions
has been called. */
- ulint mbminlen, mbmaxlen;
+ ulint i_mbminlen, i_mbmaxlen;
- innobase_get_cset_width
- (dtype_get_charset_coll(type->prtype),
- &mbminlen, &mbmaxlen);
+ innobase_get_cset_width(
+ dtype_get_charset_coll(prtype),
+ &i_mbminlen, &i_mbmaxlen);
- if (UNIV_UNLIKELY(type->mbminlen != mbminlen)
- || UNIV_UNLIKELY(type->mbmaxlen != mbmaxlen)) {
+ if (UNIV_UNLIKELY(mbminlen != i_mbminlen)
+ || UNIV_UNLIKELY(mbmaxlen != i_mbmaxlen)) {
ut_print_timestamp(stderr);
fprintf(stderr, " InnoDB: "
@@ -424,13 +430,13 @@ dtype_get_fixed_size(
"mbmaxlen=%lu, "
"type->mbminlen=%lu, "
"type->mbmaxlen=%lu\n",
+ (ulong) i_mbminlen,
+ (ulong) i_mbmaxlen,
(ulong) mbminlen,
- (ulong) mbmaxlen,
- (ulong) type->mbminlen,
- (ulong) type->mbmaxlen);
+ (ulong) mbmaxlen);
}
if (mbminlen == mbmaxlen) {
- return(dtype_get_len(type));
+ return(len);
}
#endif /* !UNIV_HOTBACKUP */
}
@@ -452,30 +458,31 @@ dtype_get_fixed_size(
Returns the minimum size of a data type. */
UNIV_INLINE
ulint
-dtype_get_min_size(
-/*===============*/
+dtype_get_min_size_low(
+/*===================*/
/* out: minimum size */
- const dtype_t* type) /* in: type */
+ ulint mtype, /* in: main type */
+ ulint prtype, /* in: precise type */
+ ulint len, /* in: length */
+ ulint mbminlen, /* in: minimum length of a multibyte char */
+ ulint mbmaxlen) /* in: maximum length of a multibyte char */
{
- switch (type->mtype) {
+ switch (mtype) {
case DATA_SYS:
#ifdef UNIV_DEBUG
- switch (type->prtype & DATA_MYSQL_TYPE_MASK) {
- default:
- ut_ad(0);
- return(0);
+ switch (prtype & DATA_MYSQL_TYPE_MASK) {
case DATA_ROW_ID:
- ut_ad(type->len == DATA_ROW_ID_LEN);
+ ut_ad(len == DATA_ROW_ID_LEN);
break;
case DATA_TRX_ID:
- ut_ad(type->len == DATA_TRX_ID_LEN);
+ ut_ad(len == DATA_TRX_ID_LEN);
break;
case DATA_ROLL_PTR:
- ut_ad(type->len == DATA_ROLL_PTR_LEN);
- break;
- case DATA_MIX_ID:
- ut_ad(type->len == DATA_MIX_ID_LEN);
+ ut_ad(len == DATA_ROLL_PTR_LEN);
break;
+ default:
+ ut_ad(0);
+ return(0);
}
#endif /* UNIV_DEBUG */
case DATA_CHAR:
@@ -483,58 +490,73 @@ dtype_get_min_size(
case DATA_INT:
case DATA_FLOAT:
case DATA_DOUBLE:
- return(type->len);
+ return(len);
case DATA_MYSQL:
- if ((type->prtype & DATA_BINARY_TYPE)
- || type->mbminlen == type->mbmaxlen) {
- return(type->len);
+ if ((prtype & DATA_BINARY_TYPE) || mbminlen == mbmaxlen) {
+ return(len);
}
/* this is a variable-length character set */
- ut_a(type->mbminlen > 0);
- ut_a(type->mbmaxlen > type->mbminlen);
- ut_a(type->len % type->mbmaxlen == 0);
- return(type->len * type->mbminlen / type->mbmaxlen);
+ ut_a(mbminlen > 0);
+ ut_a(mbmaxlen > mbminlen);
+ ut_a(len % mbmaxlen == 0);
+ return(len * mbminlen / mbmaxlen);
case DATA_VARCHAR:
case DATA_BINARY:
case DATA_DECIMAL:
case DATA_VARMYSQL:
case DATA_BLOB:
return(0);
- default: ut_error;
+ default:
+ ut_error;
}
return(0);
}
/***************************************************************************
-Returns a stored SQL NULL size for a type. For fixed length types it is
-the fixed length of the type, otherwise 0. */
+Returns the maximum size of a data type. Note: types in system tables may be
+incomplete and return incorrect information. */
UNIV_INLINE
ulint
-dtype_get_sql_null_size(
-/*====================*/
- /* out: SQL null storage size */
- dtype_t* type) /* in: type */
+dtype_get_max_size_low(
+/*===================*/
+ /* out: maximum size */
+ ulint mtype, /* in: main type */
+ ulint len) /* in: length */
{
- return(dtype_get_fixed_size(type));
+ switch (mtype) {
+ case DATA_SYS:
+ case DATA_CHAR:
+ case DATA_FIXBINARY:
+ case DATA_INT:
+ case DATA_FLOAT:
+ case DATA_DOUBLE:
+ case DATA_MYSQL:
+ case DATA_VARCHAR:
+ case DATA_BINARY:
+ case DATA_DECIMAL:
+ case DATA_VARMYSQL:
+ return(len);
+ case DATA_BLOB:
+ break;
+ default:
+ ut_error;
+ }
+
+ return(ULINT_MAX);
}
/***************************************************************************
-Returns TRUE if a type is of a fixed size. */
+Returns the ROW_FORMAT=REDUNDANT stored SQL NULL size of a type.
+For fixed length types it is the fixed length of the type, otherwise 0. */
UNIV_INLINE
-ibool
-dtype_is_fixed_size(
-/*================*/
- /* out: TRUE if fixed size */
- dtype_t* type) /* in: type */
+ulint
+dtype_get_sql_null_size(
+/*====================*/
+ /* out: SQL null storage size
+ in ROW_FORMAT=REDUNDANT */
+ const dtype_t* type) /* in: type */
{
- ulint size;
-
- size = dtype_get_fixed_size(type);
-
- if (size) {
- return(TRUE);
- }
-
- return(FALSE);
+ return(dtype_get_fixed_size_low(type->mtype, type->prtype, type->len,
+ type->mbminlen, type->mbmaxlen) > 0);
}
diff --git a/storage/innobase/include/dict0boot.h b/storage/innobase/include/dict0boot.h
index 41ce0ac059a..cac79410b24 100644
--- a/storage/innobase/include/dict0boot.h
+++ b/storage/innobase/include/dict0boot.h
@@ -103,7 +103,7 @@ dict_create(void);
#define DICT_HDR_ROW_ID 0 /* The latest assigned row id */
#define DICT_HDR_TABLE_ID 8 /* The latest assigned table id */
#define DICT_HDR_INDEX_ID 16 /* The latest assigned index id */
-#define DICT_HDR_MIX_ID 24 /* The latest assigned mix id */
+#define DICT_HDR_MIX_ID 24 /* Obsolete, always 0. */
#define DICT_HDR_TABLES 32 /* Root of the table index tree */
#define DICT_HDR_TABLE_IDS 36 /* Root of the table index tree */
#define DICT_HDR_COLUMNS 40 /* Root of the column index tree */
diff --git a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h
index b30aebe5ff6..a9775ab3d40 100644
--- a/storage/innobase/include/dict0dict.h
+++ b/storage/innobase/include/dict0dict.h
@@ -79,24 +79,77 @@ dict_load_space_id_list(void);
/*************************************************************************
Gets the column data type. */
UNIV_INLINE
-dtype_t*
-dict_col_get_type(
-/*==============*/
- dict_col_t* col);
+void
+dict_col_copy_type(
+/*===============*/
+ const dict_col_t* col, /* in: column */
+ dtype_t* type); /* out: data type */
+/*************************************************************************
+Gets the column data type. */
+
+void
+dict_col_copy_type_noninline(
+/*=========================*/
+ const dict_col_t* col, /* in: column */
+ dtype_t* type); /* out: data type */
+/***************************************************************************
+Returns the minimum size of the column. */
+UNIV_INLINE
+ulint
+dict_col_get_min_size(
+/*==================*/
+ /* out: minimum size */
+ const dict_col_t* col); /* in: column */
+/***************************************************************************
+Returns the maximum size of the column. */
+UNIV_INLINE
+ulint
+dict_col_get_max_size(
+/*==================*/
+ /* out: maximum size */
+ const dict_col_t* col); /* in: column */
+/***************************************************************************
+Returns the size of a fixed size column, 0 if not a fixed size column. */
+UNIV_INLINE
+ulint
+dict_col_get_fixed_size(
+/*====================*/
+ /* out: fixed size, or 0 */
+ const dict_col_t* col); /* in: column */
+/***************************************************************************
+Returns the ROW_FORMAT=REDUNDANT stored SQL NULL size of a column.
+For fixed length types it is the fixed length of the type, otherwise 0. */
+UNIV_INLINE
+ulint
+dict_col_get_sql_null_size(
+/*=======================*/
+ /* out: SQL null storage size
+ in ROW_FORMAT=REDUNDANT */
+ const dict_col_t* col); /* in: column */
+
/*************************************************************************
Gets the column number. */
UNIV_INLINE
ulint
dict_col_get_no(
/*============*/
- dict_col_t* col);
+ const dict_col_t* col);
/*************************************************************************
Gets the column position in the clustered index. */
UNIV_INLINE
ulint
dict_col_get_clust_pos(
/*===================*/
- dict_col_t* col);
+ const dict_col_t* col, /* in: table column */
+ const dict_index_t* clust_index); /* in: clustered index */
+/*************************************************************************
+Gets the column position in the clustered index. */
+
+ulint
+dict_col_get_clust_pos_noninline(
+/*=============================*/
+ const dict_col_t* col, /* in: table column */
+ const dict_index_t* clust_index); /* in: clustered index */
/********************************************************************
If the given column name is reserved for InnoDB system columns, return
TRUE. */
@@ -354,6 +407,19 @@ dict_table_get_index_noninline(
dict_table_t* table, /* in: table */
const char* name); /* in: index name */
/**************************************************************************
+Returns a column's name. */
+
+const char*
+dict_table_get_col_name(
+/*====================*/
+ /* out: column name. NOTE: not
+ guaranteed to stay valid if table is
+ modified in any way (columns added,
+ etc.). */
+ const dict_table_t* table, /* in: table */
+ ulint col_nr);/* in: column number */
+
+/**************************************************************************
Prints a table definition. */
void
@@ -468,30 +534,30 @@ dict_table_get_n_cols(
/************************************************************************
Gets the nth column of a table. */
UNIV_INLINE
-dict_col_t*
+const dict_col_t*
dict_table_get_nth_col(
/*===================*/
- /* out: pointer to column object */
- dict_table_t* table, /* in: table */
- ulint pos); /* in: position of column */
+ /* out: pointer to column object */
+ const dict_table_t* table, /* in: table */
+ ulint pos); /* in: position of column */
/************************************************************************
Gets the nth column of a table. */
-dict_col_t*
+const dict_col_t*
dict_table_get_nth_col_noninline(
/*=============================*/
- /* out: pointer to column object */
- dict_table_t* table, /* in: table */
- ulint pos); /* in: position of column */
+ /* out: pointer to column object */
+ const dict_table_t* table, /* in: table */
+ ulint pos); /* in: position of column */
/************************************************************************
Gets the given system column of a table. */
UNIV_INLINE
-dict_col_t*
+const dict_col_t*
dict_table_get_sys_col(
/*===================*/
- /* out: pointer to column object */
- dict_table_t* table, /* in: table */
- ulint sys); /* in: DATA_ROW_ID, ... */
+ /* out: pointer to column object */
+ const dict_table_t* table, /* in: table */
+ ulint sys); /* in: DATA_ROW_ID, ... */
/************************************************************************
Gets the given system column number of a table. */
UNIV_INLINE
@@ -549,12 +615,11 @@ dict_index_find_on_id_low(
/* out: index or NULL if not found from cache */
dulint id); /* in: index id */
/**************************************************************************
-Adds an index to dictionary cache. */
+Adds an index to the dictionary cache. */
-ibool
+void
dict_index_add_to_cache(
/*====================*/
- /* out: TRUE if success */
dict_table_t* table, /* in: table on which the index is */
dict_index_t* index, /* in, own: index; NOTE! The index memory
object is freed in this function! */
@@ -614,23 +679,23 @@ dict_index_get_nth_field(
dict_index_t* index, /* in: index */
ulint pos); /* in: position of field */
/************************************************************************
-Gets pointer to the nth field data type in an index. */
+Gets pointer to the nth column in an index. */
UNIV_INLINE
-dtype_t*
-dict_index_get_nth_type(
-/*====================*/
- /* out: data type */
- dict_index_t* index, /* in: index */
- ulint pos); /* in: position of the field */
+const dict_col_t*
+dict_index_get_nth_col(
+/*===================*/
+ /* out: column */
+ const dict_index_t* index, /* in: index */
+ ulint pos); /* in: position of the field */
/************************************************************************
Gets the column number of the nth field in an index. */
UNIV_INLINE
ulint
dict_index_get_nth_col_no(
/*======================*/
- /* out: column number */
- dict_index_t* index, /* in: index */
- ulint pos); /* in: position of the field */
+ /* out: column number */
+ const dict_index_t* index, /* in: index */
+ ulint pos); /* in: position of the field */
/************************************************************************
Looks for column n in an index. */
@@ -694,6 +759,7 @@ void
dict_index_add_col(
/*===============*/
dict_index_t* index, /* in: index */
+ dict_table_t* table, /* in: table */
dict_col_t* col, /* in: column */
ulint prefix_len); /* in: column prefix length */
/***********************************************************************
@@ -706,38 +772,12 @@ dict_index_copy_types(
dict_index_t* index, /* in: index */
ulint n_fields); /* in: number of field types to copy */
/*************************************************************************
-Gets the index tree where the index is stored. */
-UNIV_INLINE
-dict_tree_t*
-dict_index_get_tree(
-/*================*/
- /* out: index tree */
- dict_index_t* index); /* in: index */
-/*************************************************************************
Gets the field column. */
UNIV_INLINE
-dict_col_t*
+const dict_col_t*
dict_field_get_col(
/*===============*/
- dict_field_t* field);
-/**************************************************************************
-Creates an index tree struct. */
-
-dict_tree_t*
-dict_tree_create(
-/*=============*/
- /* out, own: created tree */
- dict_index_t* index, /* in: the index for which to create: in the
- case of a mixed tree, this should be the
- index of the cluster object */
- ulint page_no);/* in: root page number of the index */
-/**************************************************************************
-Frees an index tree struct. */
-
-void
-dict_tree_free(
-/*===========*/
- dict_tree_t* tree); /* in, own: index tree */
+ const dict_field_t* field);
/**************************************************************************
In an index tree, finds the index corresponding to a record in the tree. */
@@ -755,20 +795,20 @@ Checks that a tuple has n_fields_cmp value in a sensible range, so that
no comparison can occur with the page number field in a node pointer. */
ibool
-dict_tree_check_search_tuple(
-/*=========================*/
+dict_index_check_search_tuple(
+/*==========================*/
/* out: TRUE if ok */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index */
dtuple_t* tuple); /* in: tuple used in a search */
#endif /* UNIV_DEBUG */
/**************************************************************************
Builds a node pointer out of a physical record and a page number. */
dtuple_t*
-dict_tree_build_node_ptr(
-/*=====================*/
+dict_index_build_node_ptr(
+/*======================*/
/* out, own: node pointer */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index */
rec_t* rec, /* in: record for which to build node
pointer */
ulint page_no,/* in: page number to put in node pointer */
@@ -780,10 +820,10 @@ Copies an initial segment of a physical record, long enough to specify an
index entry uniquely. */
rec_t*
-dict_tree_copy_rec_order_prefix(
-/*============================*/
+dict_index_copy_rec_order_prefix(
+/*=============================*/
/* out: pointer to the prefix record */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index */
rec_t* rec, /* in: record for which to copy prefix */
ulint* n_fields,/* out: number of fields copied */
byte** buf, /* in/out: memory buffer for the copied prefix,
@@ -793,10 +833,10 @@ dict_tree_copy_rec_order_prefix(
Builds a typed data tuple out of a physical record. */
dtuple_t*
-dict_tree_build_data_tuple(
-/*=======================*/
+dict_index_build_data_tuple(
+/*========================*/
/* out, own: data tuple */
- dict_tree_t* tree, /* in: index tree */
+ dict_index_t* index, /* in: index */
rec_t* rec, /* in: record for which to build data tuple */
ulint n_fields,/* in: number of data fields */
mem_heap_t* heap); /* in: memory heap where tuple created */
@@ -804,61 +844,60 @@ dict_tree_build_data_tuple(
Gets the space id of the root of the index tree. */
UNIV_INLINE
ulint
-dict_tree_get_space(
-/*================*/
+dict_index_get_space(
+/*=================*/
/* out: space id */
- dict_tree_t* tree); /* in: tree */
+ dict_index_t* index); /* in: index */
/*************************************************************************
Sets the space id of the root of the index tree. */
UNIV_INLINE
void
-dict_tree_set_space(
-/*================*/
- dict_tree_t* tree, /* in: tree */
+dict_index_set_space(
+/*=================*/
+ dict_index_t* index, /* in: index */
ulint space); /* in: space id */
/*************************************************************************
Gets the page number of the root of the index tree. */
UNIV_INLINE
ulint
-dict_tree_get_page(
-/*===============*/
+dict_index_get_page(
+/*================*/
/* out: page number */
- dict_tree_t* tree); /* in: tree */
+ dict_index_t* tree); /* in: index */
/*************************************************************************
Sets the page number of the root of index tree. */
UNIV_INLINE
void
-dict_tree_set_page(
-/*===============*/
- dict_tree_t* tree, /* in: tree */
+dict_index_set_page(
+/*================*/
+ dict_index_t* index, /* in: index */
ulint page); /* in: page number */
/*************************************************************************
Gets the type of the index tree. */
UNIV_INLINE
ulint
-dict_tree_get_type(
-/*===============*/
+dict_index_get_type(
+/*================*/
/* out: type */
- dict_tree_t* tree); /* in: tree */
+ dict_index_t* index); /* in: index */
/*************************************************************************
Gets the read-write lock of the index tree. */
UNIV_INLINE
rw_lock_t*
-dict_tree_get_lock(
-/*===============*/
+dict_index_get_lock(
+/*================*/
/* out: read-write lock */
- dict_tree_t* tree); /* in: tree */
+ dict_index_t* index); /* in: index */
/************************************************************************
Returns free space reserved for future updates of records. This is
relevant only in the case of many consecutive inserts, as updates
which make the records bigger might fragment the index. */
UNIV_INLINE
ulint
-dict_tree_get_space_reserve(
-/*========================*/
+dict_index_get_space_reserve(void);
+/*==============================*/
/* out: number of free bytes on page,
reserved for updates */
- dict_tree_t* tree); /* in: a tree */
/*************************************************************************
Calculates the minimum record length in an index. */
@@ -945,7 +984,6 @@ struct dict_sys_struct{
on name */
hash_table_t* table_id_hash; /* hash table of the tables, based
on id */
- hash_table_t* col_hash; /* hash table of the columns */
UT_LIST_BASE_NODE_T(dict_table_t)
table_LRU; /* LRU list of tables */
ulint size; /* varying space in bytes occupied
diff --git a/storage/innobase/include/dict0dict.ic b/storage/innobase/include/dict0dict.ic
index de00148535f..d59e99277da 100644
--- a/storage/innobase/include/dict0dict.ic
+++ b/storage/innobase/include/dict0dict.ic
@@ -9,18 +9,74 @@ Created 1/8/1996 Heikki Tuuri
#include "dict0load.h"
#include "trx0undo.h"
#include "trx0sys.h"
+#include "rem0types.h"
+#include "data0type.h"
/*************************************************************************
Gets the column data type. */
UNIV_INLINE
-dtype_t*
-dict_col_get_type(
-/*==============*/
- dict_col_t* col)
+void
+dict_col_copy_type(
+/*===============*/
+ const dict_col_t* col, /* in: column */
+ dtype_t* type) /* out: data type */
{
- ut_ad(col);
+ ut_ad(col && type);
- return(&col->type);
+ type->mtype = col->mtype;
+ type->prtype = col->prtype;
+ type->len = col->len;
+ type->mbminlen = col->mbminlen;
+ type->mbmaxlen = col->mbmaxlen;
+}
+
+/***************************************************************************
+Returns the minimum size of the column. */
+UNIV_INLINE
+ulint
+dict_col_get_min_size(
+/*==================*/
+ /* out: minimum size */
+ const dict_col_t* col) /* in: column */
+{
+ return(dtype_get_min_size_low(col->mtype, col->prtype, col->len,
+ col->mbminlen, col->mbmaxlen));
+}
+/***************************************************************************
+Returns the maximum size of the column. */
+UNIV_INLINE
+ulint
+dict_col_get_max_size(
+/*==================*/
+ /* out: maximum size */
+ const dict_col_t* col) /* in: column */
+{
+ return(dtype_get_max_size_low(col->mtype, col->len));
+}
+/***************************************************************************
+Returns the size of a fixed size column, 0 if not a fixed size column. */
+UNIV_INLINE
+ulint
+dict_col_get_fixed_size(
+/*====================*/
+ /* out: fixed size, or 0 */
+ const dict_col_t* col) /* in: column */
+{
+ return(dtype_get_fixed_size_low(col->mtype, col->prtype, col->len,
+ col->mbminlen, col->mbmaxlen));
+}
+/***************************************************************************
+Returns the ROW_FORMAT=REDUNDANT stored SQL NULL size of a column.
+For fixed length types it is the fixed length of the type, otherwise 0. */
+UNIV_INLINE
+ulint
+dict_col_get_sql_null_size(
+/*=======================*/
+ /* out: SQL null storage size
+ in ROW_FORMAT=REDUNDANT */
+ const dict_col_t* col) /* in: column */
+{
+ return(dict_col_get_fixed_size(col));
}
/*************************************************************************
@@ -29,7 +85,7 @@ UNIV_INLINE
ulint
dict_col_get_no(
/*============*/
- dict_col_t* col)
+ const dict_col_t* col)
{
ut_ad(col);
@@ -42,11 +98,23 @@ UNIV_INLINE
ulint
dict_col_get_clust_pos(
/*===================*/
- dict_col_t* col)
+ const dict_col_t* col, /* in: table column */
+ const dict_index_t* clust_index) /* in: clustered index */
{
+ ulint i;
+
ut_ad(col);
+ ut_ad(clust_index && clust_index->type & DICT_CLUSTERED);
+
+ for (i = 0; i < clust_index->n_def; i++) {
+ const dict_field_t* field = &clust_index->fields[i];
- return(col->clust_pos);
+ if (!field->prefix_len && field->col == col) {
+ return(i);
+ }
+ }
+
+ return(ULINT_UNDEFINED);
}
/************************************************************************
@@ -132,12 +200,12 @@ dict_table_get_n_cols(
/************************************************************************
Gets the nth column of a table. */
UNIV_INLINE
-dict_col_t*
+const dict_col_t*
dict_table_get_nth_col(
/*===================*/
- /* out: pointer to column object */
- dict_table_t* table, /* in: table */
- ulint pos) /* in: position of column */
+ /* out: pointer to column object */
+ const dict_table_t* table, /* in: table */
+ ulint pos) /* in: position of column */
{
ut_ad(table);
ut_ad(pos < table->n_def);
@@ -149,14 +217,14 @@ dict_table_get_nth_col(
/************************************************************************
Gets the given system column of a table. */
UNIV_INLINE
-dict_col_t*
+const dict_col_t*
dict_table_get_sys_col(
/*===================*/
- /* out: pointer to column object */
- dict_table_t* table, /* in: table */
- ulint sys) /* in: DATA_ROW_ID, ... */
+ /* out: pointer to column object */
+ const dict_table_t* table, /* in: table */
+ ulint sys) /* in: DATA_ROW_ID, ... */
{
- dict_col_t* col;
+ const dict_col_t* col;
ut_ad(table);
ut_ad(sys < DATA_N_SYS_COLS);
@@ -164,8 +232,8 @@ dict_table_get_sys_col(
col = dict_table_get_nth_col(table, table->n_cols
- DATA_N_SYS_COLS + sys);
- ut_ad(col->type.mtype == DATA_SYS);
- ut_ad(col->type.prtype == (sys | DATA_NOT_NULL));
+ ut_ad(col->mtype == DATA_SYS);
+ ut_ad(col->prtype == (sys | DATA_NOT_NULL));
return(col);
}
@@ -311,45 +379,28 @@ dict_index_get_sys_col_pos(
dict_index_t* index, /* in: index */
ulint type) /* in: DATA_ROW_ID, ... */
{
- dict_col_t* col;
-
ut_ad(index);
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
ut_ad(!(index->type & DICT_UNIVERSAL));
- col = dict_table_get_sys_col(index->table, type);
-
if (index->type & DICT_CLUSTERED) {
- return(col->clust_pos);
+ return(dict_col_get_clust_pos(
+ dict_table_get_sys_col(index->table, type),
+ index));
}
- return(dict_index_get_nth_col_pos
- (index, dict_table_get_sys_col_no(index->table, type)));
-}
-
-/*************************************************************************
-Gets the index tree where the index is stored. */
-UNIV_INLINE
-dict_tree_t*
-dict_index_get_tree(
-/*================*/
- /* out: index tree */
- dict_index_t* index) /* in: index */
-{
- ut_ad(index);
- ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
-
- return(index->tree);
+ return(dict_index_get_nth_col_pos(
+ index, dict_table_get_sys_col_no(index->table, type)));
}
/*************************************************************************
Gets the field column. */
UNIV_INLINE
-dict_col_t*
+const dict_col_t*
dict_field_get_col(
/*===============*/
- dict_field_t* field)
+ const dict_field_t* field)
{
ut_ad(field);
@@ -357,17 +408,17 @@ dict_field_get_col(
}
/************************************************************************
-Gets pointer to the nth field data type in an index. */
+Gets pointer to the nth column in an index. */
UNIV_INLINE
-dtype_t*
-dict_index_get_nth_type(
-/*====================*/
- /* out: data type */
- dict_index_t* index, /* in: index */
- ulint pos) /* in: position of the field */
+const dict_col_t*
+dict_index_get_nth_col(
+/*===================*/
+ /* out: column */
+ const dict_index_t* index, /* in: index */
+ ulint pos) /* in: position of the field */
{
- return(dict_col_get_type(dict_field_get_col
- (dict_index_get_nth_field(index, pos))));
+ return(dict_field_get_col(dict_index_get_nth_field((dict_index_t*)
+ index, pos)));
}
/************************************************************************
@@ -376,102 +427,101 @@ UNIV_INLINE
ulint
dict_index_get_nth_col_no(
/*======================*/
- /* out: column number */
- dict_index_t* index, /* in: index */
- ulint pos) /* in: position of the field */
+ /* out: column number */
+ const dict_index_t* index, /* in: index */
+ ulint pos) /* in: position of the field */
{
- return(dict_col_get_no(dict_field_get_col
- (dict_index_get_nth_field(index, pos))));
+ return(dict_col_get_no(dict_index_get_nth_col(index, pos)));
}
/*************************************************************************
Gets the space id of the root of the index tree. */
UNIV_INLINE
ulint
-dict_tree_get_space(
-/*================*/
+dict_index_get_space(
+/*=================*/
/* out: space id */
- dict_tree_t* tree) /* in: tree */
+ dict_index_t* index) /* in: index */
{
- ut_ad(tree);
- ut_ad(tree->magic_n == DICT_TREE_MAGIC_N);
+ ut_ad(index);
+ ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
- return(tree->space);
+ return(index->space);
}
/*************************************************************************
Sets the space id of the root of the index tree. */
UNIV_INLINE
void
-dict_tree_set_space(
-/*================*/
- dict_tree_t* tree, /* in: tree */
+dict_index_set_space(
+/*=================*/
+ dict_index_t* index, /* in: index */
ulint space) /* in: space id */
{
- ut_ad(tree);
- ut_ad(tree->magic_n == DICT_TREE_MAGIC_N);
+ ut_ad(index);
+ ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
- tree->space = space;
+ index->space = space;
}
/*************************************************************************
Gets the page number of the root of the index tree. */
UNIV_INLINE
ulint
-dict_tree_get_page(
-/*===============*/
+dict_index_get_page(
+/*================*/
/* out: page number */
- dict_tree_t* tree) /* in: tree */
+ dict_index_t* index) /* in: index */
{
- ut_ad(tree);
- ut_ad(tree->magic_n == DICT_TREE_MAGIC_N);
+ ut_ad(index);
+ ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
- return(tree->page);
+ return(index->page);
}
/*************************************************************************
Sets the page number of the root of index tree. */
UNIV_INLINE
void
-dict_tree_set_page(
-/*===============*/
- dict_tree_t* tree, /* in: tree */
+dict_index_set_page(
+/*================*/
+ dict_index_t* index, /* in: index */
ulint page) /* in: page number */
{
- ut_ad(tree);
- ut_ad(tree->magic_n == DICT_TREE_MAGIC_N);
+ ut_ad(index);
+ ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
- tree->page = page;
+ index->page = page;
}
/*************************************************************************
Gets the type of the index tree. */
UNIV_INLINE
ulint
-dict_tree_get_type(
-/*===============*/
+dict_index_get_type(
+/*================*/
/* out: type */
- dict_tree_t* tree) /* in: tree */
+ dict_index_t* index) /* in: index */
{
- ut_ad(tree);
- ut_ad(tree->magic_n == DICT_TREE_MAGIC_N);
+ ut_ad(index);
+ ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
- return(tree->type);
+ return(index->type);
}
/*************************************************************************
Gets the read-write lock of the index tree. */
UNIV_INLINE
rw_lock_t*
-dict_tree_get_lock(
-/*===============*/
+dict_index_get_lock(
+/*================*/
/* out: read-write lock */
- dict_tree_t* tree) /* in: tree */
+ dict_index_t* index) /* in: index */
{
- ut_ad(tree);
- ut_ad(tree->magic_n == DICT_TREE_MAGIC_N);
+ ut_ad(index);
+ ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
- return(&(tree->lock));
+ return(&(index->lock));
}
/************************************************************************
@@ -480,16 +530,11 @@ relevant only in the case of many consecutive inserts, as updates
which make the records bigger might fragment the index. */
UNIV_INLINE
ulint
-dict_tree_get_space_reserve(
-/*========================*/
+dict_index_get_space_reserve(void)
+/*==============================*/
/* out: number of free bytes on page,
reserved for updates */
- dict_tree_t* tree) /* in: a tree */
{
- ut_ad(tree);
-
- UT_NOT_USED(tree);
-
return(UNIV_PAGE_SIZE / 16);
}
diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h
index e8682b79387..a23f89954a4 100644
--- a/storage/innobase/include/dict0mem.h
+++ b/storage/innobase/include/dict0mem.h
@@ -75,8 +75,7 @@ dict_mem_table_add_col(
const char* name, /* in: column name */
ulint mtype, /* in: main datatype */
ulint prtype, /* in: precise type */
- ulint len, /* in: length */
- ulint prec); /* in: precision */
+ ulint len); /* in: precision */
/**************************************************************************
Creates an index memory object. */
@@ -122,16 +121,41 @@ dict_mem_foreign_create(void);
/* Data structure for a column in a table */
struct dict_col_struct{
- hash_node_t hash; /* hash chain node */
- ulint ind; /* table column position (they are numbered
- starting from 0) */
- ulint clust_pos;/* position of the column in the
- clustered index */
- ulint ord_part;/* count of how many times this column
- appears in ordering fields of an index */
- const char* name; /* name */
- dtype_t type; /* data type */
- dict_table_t* table; /* back pointer to table of this column */
+ /*----------------------*/
+ /* The following are copied from dtype_t,
+ so that all bit-fields can be packed tightly. */
+ unsigned mtype:8; /* main data type */
+ unsigned prtype:24; /* precise type; MySQL data
+ type, charset code, flags to
+ indicate nullability,
+ signedness, whether this is a
+ binary string, whether this is
+ a true VARCHAR where MySQL
+ uses 2 bytes to store the length */
+
+ /* the remaining fields do not affect alphabetical ordering: */
+
+ unsigned len:16; /* length; for MySQL data this
+ is field->pack_length(),
+ except that for a >= 5.0.3
+ type true VARCHAR this is the
+ maximum byte length of the
+ string data (in addition to
+ the string, MySQL uses 1 or 2
+ bytes to store the string length) */
+
+ unsigned mbminlen:2; /* minimum length of a
+ character, in bytes */
+ unsigned mbmaxlen:3; /* maximum length of a
+ character, in bytes */
+ /*----------------------*/
+ /* End of definitions copied from dtype_t */
+
+ unsigned ind:10; /* table column position
+ (starting from 0) */
+ unsigned ord_part:1; /* nonzero if this column
+ appears in the ordering fields
+ of an index */
};
/* DICT_MAX_INDEX_COL_LEN is measured in bytes and is the max index column
@@ -145,35 +169,18 @@ UTF-8 charset. In that charset, a character may take at most 3 bytes. */
struct dict_field_struct{
dict_col_t* col; /* pointer to the table column */
const char* name; /* name of the column */
- ulint prefix_len; /* 0 or the length of the column
+ unsigned prefix_len:10; /* 0 or the length of the column
prefix in bytes in a MySQL index of
type, e.g., INDEX (textcol(25));
must be smaller than
DICT_MAX_INDEX_COL_LEN; NOTE that
in the UTF-8 charset, MySQL sets this
to 3 * the prefix len in UTF-8 chars */
- ulint fixed_len; /* 0 or the fixed length of the
+ unsigned fixed_len:10; /* 0 or the fixed length of the
column if smaller than
DICT_MAX_INDEX_COL_LEN */
};
-/* Data structure for an index tree */
-struct dict_tree_struct{
- ulint type; /* tree type */
- dulint id; /* id of the index stored in the tree */
- ulint space; /* space of index tree */
- ulint page; /* index tree root page number */
- byte pad[64];/* Padding to prevent other memory hotspots on
- the same memory cache line */
- rw_lock_t lock; /* read-write lock protecting the upper levels
- of the index tree */
- dict_index_t* tree_index; /* the index stored in the
- index tree */
- ulint magic_n;/* magic number */
-};
-
-#define DICT_TREE_MAGIC_N 7545676
-
/* Data structure for an index */
struct dict_index_struct{
dulint id; /* id of the index */
@@ -182,30 +189,28 @@ struct dict_index_struct{
const char* name; /* index name */
const char* table_name; /* table name */
dict_table_t* table; /* back pointer to table */
- ulint space; /* space where the index tree is placed */
- ulint trx_id_offset;/* position of the the trx id column
+ unsigned space:32;
+ /* space where the index tree is placed */
+ unsigned page:32;/* index tree root page number */
+ unsigned trx_id_offset:10;/* position of the the trx id column
in a clustered index record, if the fields
before it are known to be of a fixed size,
0 otherwise */
- ulint n_user_defined_cols;
+ unsigned n_user_defined_cols:10;
/* number of columns the user defined to
be in the index: in the internal
representation we add more columns */
- ulint n_uniq; /* number of fields from the beginning
+ unsigned n_uniq:10;/* number of fields from the beginning
which are enough to determine an index
entry uniquely */
- ulint n_def; /* number of fields defined so far */
- ulint n_fields;/* number of fields in the index */
+ unsigned n_def:10;/* number of fields defined so far */
+ unsigned n_fields:10;/* number of fields in the index */
+ unsigned n_nullable:10;/* number of nullable fields */
+ unsigned cached:1;/* TRUE if the index object is in the
+ dictionary cache */
dict_field_t* fields; /* array of field descriptions */
- ulint n_nullable;/* number of nullable fields */
UT_LIST_NODE_T(dict_index_t)
indexes;/* list of indexes of the table */
- dict_tree_t* tree; /* index tree struct */
- UT_LIST_NODE_T(dict_index_t)
- tree_indexes; /* list of indexes of the same index
- tree */
- ibool cached; /* TRUE if the index object is in the
- dictionary cache */
btr_search_t* search_info; /* info used in optimistic searches */
/*----------------------*/
ib_longlong* stat_n_diff_key_vals;
@@ -218,7 +223,12 @@ struct dict_index_struct{
ulint stat_n_leaf_pages;
/* approximate number of leaf pages in the
index tree */
+ rw_lock_t lock; /* read-write lock protecting the upper levels
+ of the index tree */
+#ifdef UNIV_DEBUG
ulint magic_n;/* magic number */
+# define DICT_INDEX_MAGIC_N 76789786
+#endif
};
/* Data structure for a foreign key constraint; an example:
@@ -229,7 +239,13 @@ struct dict_foreign_struct{
this memory heap */
char* id; /* id of the constraint as a
null-terminated string */
- ulint type; /* 0 or DICT_FOREIGN_ON_DELETE_CASCADE
+ unsigned n_fields:10; /* number of indexes' first fields
+ for which the the foreign key
+ constraint is defined: we allow the
+ indexes to contain more fields than
+ mentioned in the constraint, as long
+ as the first fields are as mentioned */
+ unsigned type:6; /* 0 or DICT_FOREIGN_ON_DELETE_CASCADE
or DICT_FOREIGN_ON_DELETE_SET_NULL */
char* foreign_table_name;/* foreign table name */
dict_table_t* foreign_table; /* table where the foreign key is */
@@ -240,12 +256,6 @@ struct dict_foreign_struct{
is */
const char** referenced_col_names;/* names of the referenced
columns in the referenced table */
- ulint n_fields; /* number of indexes' first fields
- for which the the foreign key
- constraint is defined: we allow the
- indexes to contain more fields than
- mentioned in the constraint, as long
- as the first fields are as mentioned */
dict_index_t* foreign_index; /* foreign index; we require that
both tables contain explicitly defined
indexes for the constraint: InnoDB
@@ -270,12 +280,9 @@ a foreign key constraint is enforced, therefore RESTRICT just means no flag */
#define DICT_FOREIGN_ON_UPDATE_NO_ACTION 32
-#define DICT_INDEX_MAGIC_N 76789786
-
/* Data structure for a database table */
struct dict_table_struct{
dulint id; /* id of the table */
- ulint flags; /* DICT_TF_COMPACT, ... */
mem_heap_t* heap; /* memory heap */
const char* name; /* table name */
const char* dir_path_of_temp_table;/* NULL or the directory path
@@ -284,20 +291,33 @@ struct dict_table_struct{
innodb_file_per_table is defined in my.cnf;
in Unix this is usually /tmp/..., in Windows
\temp\... */
- ulint space; /* space where the clustered index of the
+ unsigned space:32;
+ /* space where the clustered index of the
table is placed */
- ibool ibd_file_missing;/* TRUE if this is in a single-table
+ unsigned ibd_file_missing:1;
+ /* TRUE if this is in a single-table
tablespace and the .ibd file is missing; then
we must return in ha_innodb.cc an error if the
user tries to query such an orphaned table */
- ibool tablespace_discarded;/* this flag is set TRUE when the
- user calls DISCARD TABLESPACE on this table,
- and reset to FALSE in IMPORT TABLESPACE */
+ unsigned tablespace_discarded:1;
+ /* this flag is set TRUE when the user
+ calls DISCARD TABLESPACE on this
+ table, and reset to FALSE in IMPORT
+ TABLESPACE */
+ unsigned cached:1;/* TRUE if the table object has been added
+ to the dictionary cache */
+ unsigned flags:8;/* DICT_TF_COMPACT, ... */
+ unsigned n_def:10;/* number of columns defined so far */
+ unsigned n_cols:10;/* number of columns */
+ dict_col_t* cols; /* array of column descriptions */
+ const char* col_names;
+ /* n_def column names packed in an
+ "name1\0name2\0...nameN\0" array. until
+ n_def reaches n_cols, this is allocated with
+ ut_malloc, and the final size array is
+ allocated through the table's heap. */
hash_node_t name_hash; /* hash chain node */
hash_node_t id_hash; /* hash chain node */
- ulint n_def; /* number of columns defined so far */
- ulint n_cols; /* number of columns */
- dict_col_t* cols; /* array of column descriptions */
UT_LIST_BASE_NODE_T(dict_index_t)
indexes; /* list of indexes of the table */
UT_LIST_BASE_NODE_T(dict_foreign_t)
@@ -321,8 +341,6 @@ struct dict_table_struct{
on the table: we cannot drop the table while
there are foreign key checks running on
it! */
- ibool cached; /* TRUE if the table object has been added
- to the dictionary cache */
lock_t* auto_inc_lock;/* a buffer for an auto-inc lock
for this table: we allocate the memory here
so that individual transactions can get it
@@ -339,12 +357,7 @@ struct dict_table_struct{
had an IX lock on */
UT_LIST_BASE_NODE_T(lock_t)
locks; /* list of locks on the table */
- ulint max_row_size;
- /* maximum size of a single row in the
- table, not guaranteed to be especially
- accurate. it's ULINT_MAX if there are
- unbounded variable-width fields. initialized
- in dict_table_add_to_cache. */
+#ifdef UNIV_DEBUG
/*----------------------*/
ibool does_not_fit_in_memory;
/* this field is used to specify in simulations
@@ -355,7 +368,15 @@ struct dict_table_struct{
dictionary on disk, and the database will
forget about value TRUE if it has to reload
the table definition from disk */
+#endif /* UNIV_DEBUG */
/*----------------------*/
+ unsigned big_rows:1;
+ /* flag: TRUE if the maximum length of
+ a single row exceeds BIG_ROW_SIZE;
+ initialized in dict_table_add_to_cache() */
+ unsigned stat_initialized:1; /* TRUE if statistics have
+ been calculated the first time
+ after database startup or table creation */
ib_longlong stat_n_rows;
/* approximate number of rows in the table;
we periodically calculate new estimates */
@@ -364,9 +385,6 @@ struct dict_table_struct{
database pages */
ulint stat_sum_of_other_index_sizes;
/* other indexes in database pages */
- ibool stat_initialized; /* TRUE if statistics have
- been calculated the first time
- after database startup or table creation */
ulint stat_modified_counter;
/* when a row is inserted, updated, or deleted,
we add 1 to this number; we calculate new
@@ -389,9 +407,11 @@ struct dict_table_struct{
SELECT MAX(auto inc column) */
ib_longlong autoinc;/* autoinc counter value to give to the
next inserted row */
+#ifdef UNIV_DEBUG
ulint magic_n;/* magic number */
+# define DICT_TABLE_MAGIC_N 76333786
+#endif /* UNIV_DEBUG */
};
-#define DICT_TABLE_MAGIC_N 76333786
#ifndef UNIV_NONINL
#include "dict0mem.ic"
diff --git a/storage/innobase/include/dict0types.h b/storage/innobase/include/dict0types.h
index bd8a1a996d1..b90545f2105 100644
--- a/storage/innobase/include/dict0types.h
+++ b/storage/innobase/include/dict0types.h
@@ -13,7 +13,6 @@ typedef struct dict_sys_struct dict_sys_t;
typedef struct dict_col_struct dict_col_t;
typedef struct dict_field_struct dict_field_t;
typedef struct dict_index_struct dict_index_t;
-typedef struct dict_tree_struct dict_tree_t;
typedef struct dict_table_struct dict_table_t;
typedef struct dict_foreign_struct dict_foreign_t;
diff --git a/storage/innobase/include/ibuf0ibuf.ic b/storage/innobase/include/ibuf0ibuf.ic
index 4c5f6dbf5e1..4d65a7f5250 100644
--- a/storage/innobase/include/ibuf0ibuf.ic
+++ b/storage/innobase/include/ibuf0ibuf.ic
@@ -165,8 +165,8 @@ ibuf_index_page_calc_free(
/* out: value for ibuf bitmap bits */
page_t* page) /* in: non-unique secondary index page */
{
- return(ibuf_index_page_calc_free_bits
- (page_get_max_insert_size_after_reorganize(page, 1)));
+ return(ibuf_index_page_calc_free_bits(
+ page_get_max_insert_size_after_reorganize(page, 1)));
}
/****************************************************************************
diff --git a/storage/innobase/include/page0page.h b/storage/innobase/include/page0page.h
index 7f99f670190..833d268c9de 100644
--- a/storage/innobase/include/page0page.h
+++ b/storage/innobase/include/page0page.h
@@ -132,6 +132,24 @@ directory. */
#define PAGE_DIR_SLOT_MAX_N_OWNED 8
#define PAGE_DIR_SLOT_MIN_N_OWNED 4
+/****************************************************************
+Gets the start of a page. */
+UNIV_INLINE
+page_t*
+page_align(
+/*=======*/
+ /* out: start of the page */
+ void* ptr) /* in: pointer to page frame */
+ __attribute__((const));
+/****************************************************************
+Gets the offset within a page. */
+UNIV_INLINE
+ulint
+page_offset(
+/*========*/
+ /* out: offset from the start of the page */
+ const void* ptr) /* in: pointer to page frame */
+ __attribute__((const));
/*****************************************************************
Returns the max trx id field value. */
UNIV_INLINE
diff --git a/storage/innobase/include/page0page.ic b/storage/innobase/include/page0page.ic
index 9348acd5ffc..d9e67f3eeeb 100644
--- a/storage/innobase/include/page0page.ic
+++ b/storage/innobase/include/page0page.ic
@@ -15,6 +15,28 @@ Created 2/2/1994 Heikki Tuuri
#define UNIV_INLINE
#endif
+/****************************************************************
+Gets the start of a page. */
+UNIV_INLINE
+page_t*
+page_align(
+/*=======*/
+ /* out: start of the page */
+ void* ptr) /* in: pointer to page frame */
+{
+ return((page_t*) ut_align_down(ptr, UNIV_PAGE_SIZE));
+}
+/****************************************************************
+Gets the offset within a page. */
+UNIV_INLINE
+ulint
+page_offset(
+/*========*/
+ /* out: offset from the start of the page */
+ const void* ptr) /* in: pointer to page frame */
+{
+ return(ut_align_offset(ptr, UNIV_PAGE_SIZE));
+}
/*****************************************************************
Returns the max trx id field value. */
UNIV_INLINE
@@ -175,7 +197,7 @@ page_rec_is_comp(
/* out: nonzero if in compact format */
const rec_t* rec) /* in: record */
{
- return(page_is_comp(ut_align_down((rec_t*) rec, UNIV_PAGE_SIZE)));
+ return(page_is_comp(page_align((rec_t*) rec)));
}
/****************************************************************
@@ -291,7 +313,7 @@ page_rec_is_user_rec(
/* out: TRUE if a user record */
const rec_t* rec) /* in: record */
{
- return(page_rec_is_user_rec_low(ut_align_offset(rec, UNIV_PAGE_SIZE)));
+ return(page_rec_is_user_rec_low(page_offset(rec)));
}
/****************************************************************
@@ -303,7 +325,7 @@ page_rec_is_supremum(
/* out: TRUE if the supremum record */
const rec_t* rec) /* in: record */
{
- return(page_rec_is_supremum_low(ut_align_offset(rec, UNIV_PAGE_SIZE)));
+ return(page_rec_is_supremum_low(page_offset(rec)));
}
/****************************************************************
@@ -315,7 +337,7 @@ page_rec_is_infimum(
/* out: TRUE if the infimum record */
const rec_t* rec) /* in: record */
{
- return(page_rec_is_infimum_low(ut_align_offset(rec, UNIV_PAGE_SIZE)));
+ return(page_rec_is_infimum_low(page_offset(rec)));
}
/*****************************************************************
@@ -351,7 +373,7 @@ page_cmp_dtuple_rec_with_match(
ut_ad(rec_offs_validate(rec, NULL, offsets));
ut_ad(!rec_offs_comp(offsets) == !page_rec_is_comp(rec));
- rec_offset = ut_align_offset(rec, UNIV_PAGE_SIZE);
+ rec_offset = page_offset(rec);
if (UNIV_UNLIKELY(rec_offset == PAGE_NEW_INFIMUM)
|| UNIV_UNLIKELY(rec_offset == PAGE_OLD_INFIMUM)) {
@@ -492,7 +514,7 @@ page_dir_slot_set_rec(
{
ut_ad(page_rec_check(rec));
- mach_write_to_2(slot, ut_align_offset(rec, UNIV_PAGE_SIZE));
+ mach_write_to_2(slot, page_offset(rec));
}
/*******************************************************************
@@ -550,7 +572,7 @@ page_rec_get_next(
ut_ad(page_rec_check(rec));
- page = ut_align_down(rec, UNIV_PAGE_SIZE);
+ page = page_align(rec);
offs = rec_get_next_offs(rec, page_is_comp(page));
@@ -592,11 +614,11 @@ page_rec_set_next(
ut_ad(page_rec_check(rec));
ut_ad(!page_rec_is_supremum(rec));
- page = ut_align_down(rec, UNIV_PAGE_SIZE);
+ page = page_align(rec);
if (next) {
ut_ad(!page_rec_is_infimum(next));
- ut_ad(page == ut_align_down(next, UNIV_PAGE_SIZE));
+ ut_ad(page == page_align(next));
offs = (ulint) (next - page);
} else {
offs = 0;
@@ -623,7 +645,7 @@ page_rec_get_prev(
ut_ad(page_rec_check(rec));
- page = ut_align_down(rec, UNIV_PAGE_SIZE);
+ page = page_align(rec);
ut_ad(!page_rec_is_infimum(rec));
@@ -735,15 +757,15 @@ page_get_max_insert_size(
if (page_is_comp(page)) {
occupied = page_header_get_field(page, PAGE_HEAP_TOP)
- PAGE_NEW_SUPREMUM_END
- + page_dir_calc_reserved_space
- (n_recs + page_dir_get_n_heap(page) - 2);
+ + page_dir_calc_reserved_space(
+ n_recs + page_dir_get_n_heap(page) - 2);
free_space = page_get_free_space_of_empty(TRUE);
} else {
occupied = page_header_get_field(page, PAGE_HEAP_TOP)
- PAGE_OLD_SUPREMUM_END
- + page_dir_calc_reserved_space
- (n_recs + page_dir_get_n_heap(page) - 2);
+ + page_dir_calc_reserved_space(
+ n_recs + page_dir_get_n_heap(page) - 2);
free_space = page_get_free_space_of_empty(FALSE);
}
diff --git a/storage/innobase/include/read0read.ic b/storage/innobase/include/read0read.ic
index 9785cf1b3ce..3aded1ca07c 100644
--- a/storage/innobase/include/read0read.ic
+++ b/storage/innobase/include/read0read.ic
@@ -69,9 +69,9 @@ read_view_sees_trx_id(
for (i = 0; i < n_ids; i++) {
- cmp = ut_dulint_cmp
- (trx_id,
- read_view_get_nth_trx_id(view, n_ids - i - 1));
+ cmp = ut_dulint_cmp(
+ trx_id,
+ read_view_get_nth_trx_id(view, n_ids - i - 1));
if (cmp <= 0) {
return(cmp < 0);
}
diff --git a/storage/innobase/include/rem0cmp.h b/storage/innobase/include/rem0cmp.h
index 36d91db0e87..c6a6e5de4db 100644
--- a/storage/innobase/include/rem0cmp.h
+++ b/storage/innobase/include/rem0cmp.h
@@ -16,16 +16,17 @@ Created 7/1/1994 Heikki Tuuri
#include "rem0rec.h"
/*****************************************************************
-Returns TRUE if two types are equal for comparison purposes. */
+Returns TRUE if two columns are equal for comparison purposes. */
ibool
-cmp_types_are_equal(
-/*================*/
- /* out: TRUE if the types are considered
- equal in comparisons */
- dtype_t* type1, /* in: type 1 */
- dtype_t* type2, /* in: type 2 */
- ibool check_charsets); /* in: whether to check charsets */
+cmp_cols_are_equal(
+/*===============*/
+ /* out: TRUE if the columns are
+ considered equal in comparisons */
+ const dict_col_t* col1, /* in: column 1 */
+ const dict_col_t* col2, /* in: column 2 */
+ ibool check_charsets);
+ /* in: whether to check charsets */
/*****************************************************************
This function is used to compare two data fields for which we know the
data type. */
@@ -35,7 +36,8 @@ cmp_data_data(
/*==========*/
/* out: 1, 0, -1, if data1 is greater, equal,
less than data2, respectively */
- dtype_t* cur_type,/* in: data type of the fields */
+ ulint mtype, /* in: main type */
+ ulint prtype, /* in: precise type */
byte* data1, /* in: data field (== a pointer to a memory
buffer) */
ulint len1, /* in: data field length or UNIV_SQL_NULL */
@@ -51,7 +53,8 @@ cmp_data_data_slow(
/*===============*/
/* out: 1, 0, -1, if data1 is greater, equal,
less than data2, respectively */
- dtype_t* cur_type,/* in: data type of the fields */
+ ulint mtype, /* in: main type */
+ ulint prtype, /* in: precise type */
byte* data1, /* in: data field (== a pointer to a memory
buffer) */
ulint len1, /* in: data field length or UNIV_SQL_NULL */
diff --git a/storage/innobase/include/rem0cmp.ic b/storage/innobase/include/rem0cmp.ic
index 5653ec1ac44..52dc7ff5dc9 100644
--- a/storage/innobase/include/rem0cmp.ic
+++ b/storage/innobase/include/rem0cmp.ic
@@ -15,7 +15,8 @@ cmp_data_data(
/*==========*/
/* out: 1, 0, -1, if data1 is greater, equal,
less than data2, respectively */
- dtype_t* cur_type,/* in: data type of the fields */
+ ulint mtype, /* in: main type */
+ ulint prtype, /* in: precise type */
byte* data1, /* in: data field (== a pointer to a memory
buffer) */
ulint len1, /* in: data field length or UNIV_SQL_NULL */
@@ -23,7 +24,7 @@ cmp_data_data(
buffer) */
ulint len2) /* in: data field length or UNIV_SQL_NULL */
{
- return(cmp_data_data_slow(cur_type, data1, len1, data2, len2));
+ return(cmp_data_data_slow(mtype, prtype, data1, len1, data2, len2));
}
/*****************************************************************
@@ -38,12 +39,17 @@ cmp_dfield_dfield(
dfield_t* dfield1,/* in: data field; must have type field set */
dfield_t* dfield2)/* in: data field */
{
+ const dtype_t* type;
+
ut_ad(dfield_check_typed(dfield1));
- return(cmp_data_data
- (dfield_get_type(dfield1),
- dfield_get_data(dfield1), dfield_get_len(dfield1),
- dfield_get_data(dfield2), dfield_get_len(dfield2)));
+ type = dfield_get_type(dfield1);
+
+ return(cmp_data_data(type->mtype, type->prtype,
+ dfield_get_data(dfield1),
+ dfield_get_len(dfield1),
+ dfield_get_data(dfield2),
+ dfield_get_len(dfield2)));
}
/*****************************************************************
diff --git a/storage/innobase/include/rem0rec.h b/storage/innobase/include/rem0rec.h
index af11198d001..43ef6650e90 100644
--- a/storage/innobase/include/rem0rec.h
+++ b/storage/innobase/include/rem0rec.h
@@ -14,11 +14,6 @@ Created 5/30/1994 Heikki Tuuri
#include "rem0types.h"
#include "mtr0types.h"
-/* Maximum values for various fields (for non-blob tuples) */
-#define REC_MAX_N_FIELDS (1024 - 1)
-#define REC_MAX_HEAP_NO (2 * 8192 - 1)
-#define REC_MAX_N_OWNED (16 - 1)
-
/* Info bit denoting the predefined minimum record: this bit is set
if and only if the record is the first user record on a non-leaf
B-tree page that is the leftmost page on its level
diff --git a/storage/innobase/include/rem0rec.ic b/storage/innobase/include/rem0rec.ic
index 5e4c0ea0664..ace90247b80 100644
--- a/storage/innobase/include/rem0rec.ic
+++ b/storage/innobase/include/rem0rec.ic
@@ -336,8 +336,8 @@ rec_set_next_offs(
as a non-negative number */
field_value = (ulint)((lint)next
- - (lint)ut_align_offset
- (rec, UNIV_PAGE_SIZE));
+ - (lint)ut_align_offset(
+ rec, UNIV_PAGE_SIZE));
field_value &= REC_NEXT_MASK;
} else {
field_value = 0;
@@ -597,15 +597,15 @@ rec_get_deleted_flag(
ulint comp) /* in: nonzero=compact page format */
{
if (UNIV_EXPECT(comp, REC_OFFS_COMPACT)) {
- return(UNIV_UNLIKELY
- (rec_get_bit_field_1(rec, REC_NEW_INFO_BITS,
- REC_INFO_DELETED_FLAG,
- REC_INFO_BITS_SHIFT)));
+ return(UNIV_UNLIKELY(
+ rec_get_bit_field_1(rec, REC_NEW_INFO_BITS,
+ REC_INFO_DELETED_FLAG,
+ REC_INFO_BITS_SHIFT)));
} else {
- return(UNIV_UNLIKELY
- (rec_get_bit_field_1(rec, REC_OLD_INFO_BITS,
- REC_INFO_DELETED_FLAG,
- REC_INFO_BITS_SHIFT)));
+ return(UNIV_UNLIKELY(
+ rec_get_bit_field_1(rec, REC_OLD_INFO_BITS,
+ REC_INFO_DELETED_FLAG,
+ REC_INFO_BITS_SHIFT)));
}
}
@@ -846,16 +846,16 @@ rec_offs_validate(
if (index) {
ulint max_n_fields;
ut_ad((ulint) index == offsets[3]);
- max_n_fields = ut_max
- (dict_index_get_n_fields(index),
- dict_index_get_n_unique_in_tree(index) + 1);
+ max_n_fields = ut_max(
+ dict_index_get_n_fields(index),
+ dict_index_get_n_unique_in_tree(index) + 1);
if (comp && rec) {
switch (rec_get_status(rec)) {
case REC_STATUS_ORDINARY:
break;
case REC_STATUS_NODE_PTR:
- max_n_fields = dict_index_get_n_unique_in_tree
- (index) + 1;
+ max_n_fields = dict_index_get_n_unique_in_tree(
+ index) + 1;
break;
case REC_STATUS_INFIMUM:
case REC_STATUS_SUPREMUM:
@@ -1453,8 +1453,8 @@ rec_get_converted_size(
data_size = dtuple_get_data_size(dtuple);
- extra_size = rec_get_converted_extra_size
- (data_size, dtuple_get_n_fields(dtuple));
+ extra_size = rec_get_converted_extra_size(
+ data_size, dtuple_get_n_fields(dtuple));
return(data_size + extra_size);
}
diff --git a/storage/innobase/include/rem0types.h b/storage/innobase/include/rem0types.h
index 94c394499c5..79c162392d2 100644
--- a/storage/innobase/include/rem0types.h
+++ b/storage/innobase/include/rem0types.h
@@ -12,5 +12,9 @@ Created 5/30/1994 Heikki Tuuri
/* We define the physical record simply as an array of bytes */
typedef byte rec_t;
+/* Maximum values for various fields (for non-blob tuples) */
+#define REC_MAX_N_FIELDS (1024 - 1)
+#define REC_MAX_HEAP_NO (2 * 8192 - 1)
+#define REC_MAX_N_OWNED (16 - 1)
#endif
diff --git a/storage/innobase/include/row0upd.ic b/storage/innobase/include/row0upd.ic
index 5e852559fe4..6173849e68f 100644
--- a/storage/innobase/include/row0upd.ic
+++ b/storage/innobase/include/row0upd.ic
@@ -93,8 +93,8 @@ upd_field_set_field_no(
(ulong) dict_index_get_n_fields(index));
}
- dtype_copy(dfield_get_type(&(upd_field->new_val)),
- dict_index_get_nth_type(index, field_no));
+ dict_col_copy_type(dict_index_get_nth_col(index, field_no),
+ dfield_get_type(&(upd_field->new_val)));
}
/*************************************************************************
diff --git a/storage/innobase/include/sync0rw.h b/storage/innobase/include/sync0rw.h
index e5f3e1341c5..d8f3c400918 100644
--- a/storage/innobase/include/sync0rw.h
+++ b/storage/innobase/include/sync0rw.h
@@ -426,13 +426,6 @@ struct rw_lock_struct {
waiters (readers or writers) in the global
wait array, waiting for this rw_lock.
Otherwise, == 0. */
- ibool writer_is_wait_ex;
- /* This is TRUE if the writer field is
- RW_LOCK_WAIT_EX; this field is located far
- from the memory update hotspot fields which
- are at the start of this struct, thus we can
- peek this field without causing much memory
- bus traffic */
UT_LIST_NODE_T(rw_lock_t) list;
/* All allocated rw locks are put into a
list */
@@ -440,15 +433,21 @@ struct rw_lock_struct {
UT_LIST_BASE_NODE_T(rw_lock_debug_t) debug_list;
/* In the debug version: pointer to the debug
info list of the lock */
-#endif /* UNIV_SYNC_DEBUG */
-
ulint level; /* Level in the global latching order. */
+#endif /* UNIV_SYNC_DEBUG */
const char* cfile_name;/* File name where lock created */
- ulint cline; /* Line where created */
const char* last_s_file_name;/* File name where last s-locked */
const char* last_x_file_name;/* File name where last x-locked */
- ulint last_s_line; /* Line number where last time s-locked */
- ulint last_x_line; /* Line number where last time x-locked */
+ ibool writer_is_wait_ex;
+ /* This is TRUE if the writer field is
+ RW_LOCK_WAIT_EX; this field is located far
+ from the memory update hotspot fields which
+ are at the start of this struct, thus we can
+ peek this field without causing much memory
+ bus traffic */
+ unsigned cline:14; /* Line where created */
+ unsigned last_s_line:14; /* Line number where last time s-locked */
+ unsigned last_x_line:14; /* Line number where last time x-locked */
ulint magic_n;
};
diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i
index e60241b0ff3..63fdabbe823 100644
--- a/storage/innobase/include/univ.i
+++ b/storage/innobase/include/univ.i
@@ -91,6 +91,7 @@ memory is read outside the allocated blocks. */
#define UNIV_SYNC_PERF_STAT
#define UNIV_SEARCH_PERF_STAT
#define UNIV_SRV_PRINT_LATCH_WAITS
+#define UNIV_BTR_PRINT
#endif
#define UNIV_BTR_DEBUG
diff --git a/storage/innobase/lock/lock0lock.c b/storage/innobase/lock/lock0lock.c
index 3a2f17f41e5..551470f49b6 100644
--- a/storage/innobase/lock/lock0lock.c
+++ b/storage/innobase/lock/lock0lock.c
@@ -1041,8 +1041,8 @@ lock_has_to_wait(
return(lock_rec_has_to_wait(lock1->trx,
lock1->type_mode, lock2,
- lock_rec_get_nth_bit
- (lock1, 1)));
+ lock_rec_get_nth_bit(
+ lock1, 1)));
}
return(TRUE);
@@ -1303,13 +1303,13 @@ lock_rec_get_next(
if (page_rec_is_comp(rec)) {
do {
lock = lock_rec_get_next_on_page(lock);
- } while (lock && !lock_rec_get_nth_bit
- (lock, rec_get_heap_no(rec, TRUE)));
+ } while (lock && !lock_rec_get_nth_bit(
+ lock, rec_get_heap_no(rec, TRUE)));
} else {
do {
lock = lock_rec_get_next_on_page(lock);
- } while (lock && !lock_rec_get_nth_bit
- (lock, rec_get_heap_no(rec, FALSE)));
+ } while (lock && !lock_rec_get_nth_bit(
+ lock, rec_get_heap_no(rec, FALSE)));
}
return(lock);
@@ -1880,8 +1880,8 @@ lock_rec_enqueue_waiting(
if (lock_deadlock_occurs(lock, trx)) {
lock_reset_lock_and_trx_wait(lock);
- lock_rec_reset_nth_bit(lock, rec_get_heap_no
- (rec, page_rec_is_comp(rec)));
+ lock_rec_reset_nth_bit(lock, rec_get_heap_no(
+ rec, page_rec_is_comp(rec)));
return(DB_DEADLOCK);
}
@@ -2661,8 +2661,9 @@ lock_move_reorganize_page(
for (;;) {
ut_ad(comp || !memcmp(page_cur_get_rec(&cur1),
page_cur_get_rec(&cur2),
- rec_get_data_size_old
- (page_cur_get_rec(&cur2))));
+ rec_get_data_size_old(
+ page_cur_get_rec(
+ &cur2))));
old_heap_no = rec_get_heap_no(page_cur_get_rec(&cur2),
comp);
@@ -2759,8 +2760,9 @@ lock_move_rec_list_end(
while (page_cur_get_rec(&cur1) != sup) {
ut_ad(comp || !memcmp(page_cur_get_rec(&cur1),
page_cur_get_rec(&cur2),
- rec_get_data_size_old
- (page_cur_get_rec(&cur2))));
+ rec_get_data_size_old(
+ page_cur_get_rec(
+ &cur2))));
heap_no = rec_get_heap_no(page_cur_get_rec(&cur1),
comp);
@@ -2839,8 +2841,9 @@ lock_move_rec_list_start(
while (page_cur_get_rec(&cur1) != rec) {
ut_ad(comp || !memcmp(page_cur_get_rec(&cur1),
page_cur_get_rec(&cur2),
- rec_get_data_size_old
- (page_cur_get_rec(&cur2))));
+ rec_get_data_size_old(
+ page_cur_get_rec(
+ &cur2))));
heap_no = rec_get_heap_no(page_cur_get_rec(&cur1),
comp);
@@ -2898,8 +2901,8 @@ lock_update_split_right(
of the infimum on right page */
lock_rec_inherit_to_gap(page_get_supremum_rec(left_page),
- page_rec_get_next
- (page_get_infimum_rec(right_page)));
+ page_rec_get_next(
+ page_get_infimum_rec(right_page)));
lock_mutex_exit_kernel();
}
@@ -3000,8 +3003,8 @@ lock_update_split_left(
successor of the infimum on the right page */
lock_rec_inherit_to_gap(page_get_supremum_rec(left_page),
- page_rec_get_next
- (page_get_infimum_rec(right_page)));
+ page_rec_get_next(
+ page_get_infimum_rec(right_page)));
lock_mutex_exit_kernel();
}
@@ -3439,9 +3442,9 @@ lock_deadlock_recursive(
incompatible mode, and is itself waiting for
a lock */
- ret = lock_deadlock_recursive
- (start, lock_trx,
- lock_trx->wait_lock, cost, depth + 1);
+ ret = lock_deadlock_recursive(
+ start, lock_trx,
+ lock_trx->wait_lock, cost, depth + 1);
if (ret != 0) {
return(ret);
@@ -4219,9 +4222,9 @@ lock_rec_print(
if (page) {
rec_t* rec
= page_find_rec_with_heap_no(page, i);
- offsets = rec_get_offsets
- (rec, lock->index, offsets,
- ULINT_UNDEFINED, &heap);
+ offsets = rec_get_offsets(
+ rec, lock->index, offsets,
+ ULINT_UNDEFINED, &heap);
rec_print_new(file, rec, offsets);
}
@@ -4378,14 +4381,14 @@ loop:
fprintf(file,
"Trx read view will not see trx with"
" id >= %lu %lu, sees < %lu %lu\n",
- (ulong) ut_dulint_get_high
- (trx->read_view->low_limit_id),
- (ulong) ut_dulint_get_low
- (trx->read_view->low_limit_id),
- (ulong) ut_dulint_get_high
- (trx->read_view->up_limit_id),
- (ulong) ut_dulint_get_low
- (trx->read_view->up_limit_id));
+ (ulong) ut_dulint_get_high(
+ trx->read_view->low_limit_id),
+ (ulong) ut_dulint_get_low(
+ trx->read_view->low_limit_id),
+ (ulong) ut_dulint_get_high(
+ trx->read_view->up_limit_id),
+ (ulong) ut_dulint_get_low(
+ trx->read_view->up_limit_id));
}
fprintf(file,
@@ -4443,8 +4446,8 @@ loop:
mtr_start(&mtr);
- page = buf_page_get_with_no_latch
- (space, page_no, &mtr);
+ page = buf_page_get_with_no_latch(
+ space, page_no, &mtr);
mtr_commit(&mtr);
@@ -4510,8 +4513,9 @@ lock_table_queue_validate(
ut_a(!is_waiting);
- ut_a(!lock_table_other_has_incompatible
- (lock->trx, 0, table, lock_get_mode(lock)));
+ ut_a(!lock_table_other_has_incompatible(
+ lock->trx, 0, table,
+ lock_get_mode(lock)));
} else {
is_waiting = TRUE;
@@ -4580,8 +4584,8 @@ lock_rec_queue_validate(
impl_trx = lock_clust_rec_some_has_impl(rec, index, offsets);
- if (impl_trx && lock_rec_other_has_expl_req
- (LOCK_S, 0, LOCK_WAIT, rec, impl_trx)) {
+ if (impl_trx && lock_rec_other_has_expl_req(
+ LOCK_S, 0, LOCK_WAIT, rec, impl_trx)) {
ut_a(lock_rec_has_expl(LOCK_X | LOCK_REC_NOT_GAP,
rec, impl_trx));
@@ -4594,11 +4598,11 @@ lock_rec_queue_validate(
next function call: we have to release lock table mutex
to obey the latching order */
- impl_trx = lock_sec_rec_some_has_impl_off_kernel
- (rec, index, offsets);
+ impl_trx = lock_sec_rec_some_has_impl_off_kernel(
+ rec, index, offsets);
- if (impl_trx && lock_rec_other_has_expl_req
- (LOCK_S, 0, LOCK_WAIT, rec, impl_trx)) {
+ if (impl_trx && lock_rec_other_has_expl_req(
+ LOCK_S, 0, LOCK_WAIT, rec, impl_trx)) {
ut_a(lock_rec_has_expl(LOCK_X | LOCK_REC_NOT_GAP,
rec, impl_trx));
@@ -4626,8 +4630,8 @@ lock_rec_queue_validate(
} else {
mode = LOCK_S;
}
- ut_a(!lock_rec_other_has_expl_req
- (mode, 0, 0, rec, lock->trx));
+ ut_a(!lock_rec_other_has_expl_req(
+ mode, 0, 0, rec, lock->trx));
} else if (lock_get_wait(lock) && !lock_rec_get_gap(lock)) {
@@ -4764,8 +4768,8 @@ lock_validate(void)
while (lock) {
if (lock_get_type(lock) & LOCK_TABLE) {
- lock_table_queue_validate
- (lock->un_member.tab_lock.table);
+ lock_table_queue_validate(
+ lock->un_member.tab_lock.table);
}
lock = UT_LIST_GET_NEXT(trx_locks, lock);
@@ -4787,9 +4791,9 @@ lock_validate(void)
space = lock->un_member.rec_lock.space;
page_no = lock->un_member.rec_lock.page_no;
- if (ut_dulint_cmp
- (ut_dulint_create(space, page_no),
- limit) >= 0) {
+ if (ut_dulint_cmp(
+ ut_dulint_create(space, page_no),
+ limit) >= 0) {
break;
}
@@ -4889,8 +4893,9 @@ lock_rec_insert_check_and_lock(
had to wait for their insert. Both had waiting gap type lock requests
on the successor, which produced an unnecessary deadlock. */
- if (lock_rec_other_has_conflicting
- (LOCK_X | LOCK_GAP | LOCK_INSERT_INTENTION, next_rec, trx)) {
+ if (lock_rec_other_has_conflicting(
+ LOCK_X | LOCK_GAP | LOCK_INSERT_INTENTION, next_rec,
+ trx)) {
/* Note that we may get DB_SUCCESS also here! */
err = lock_rec_enqueue_waiting(LOCK_X | LOCK_GAP
@@ -4952,8 +4957,8 @@ lock_rec_convert_impl_to_expl(
if (index->type & DICT_CLUSTERED) {
impl_trx = lock_clust_rec_some_has_impl(rec, index, offsets);
} else {
- impl_trx = lock_sec_rec_some_has_impl_off_kernel
- (rec, index, offsets);
+ impl_trx = lock_sec_rec_some_has_impl_off_kernel(
+ rec, index, offsets);
}
if (impl_trx) {
@@ -4963,9 +4968,9 @@ lock_rec_convert_impl_to_expl(
if (!lock_rec_has_expl(LOCK_X | LOCK_REC_NOT_GAP, rec,
impl_trx)) {
- lock_rec_add_to_queue
- (LOCK_REC | LOCK_X | LOCK_REC_NOT_GAP,
- rec, index, impl_trx);
+ lock_rec_add_to_queue(
+ LOCK_REC | LOCK_X | LOCK_REC_NOT_GAP,
+ rec, index, impl_trx);
}
}
}
diff --git a/storage/innobase/log/log0log.c b/storage/innobase/log/log0log.c
index 9ac9e40466c..5d8875f1bd0 100644
--- a/storage/innobase/log/log0log.c
+++ b/storage/innobase/log/log0log.c
@@ -355,8 +355,8 @@ log_close(void)
full by the current mtr: the next mtr log record group
will start within this block at the offset data_len */
- log_block_set_first_rec_group
- (log_block, log_block_get_data_len(log_block));
+ log_block_set_first_rec_group(
+ log_block, log_block_get_data_len(log_block));
}
if (log->buf_free > log->max_buf_free) {
@@ -900,17 +900,17 @@ log_group_init(
#endif /* UNIV_LOG_ARCHIVE */
for (i = 0; i < n_files; i++) {
- *(group->file_header_bufs + i) = ut_align
- (mem_alloc(LOG_FILE_HDR_SIZE + OS_FILE_LOG_BLOCK_SIZE),
- OS_FILE_LOG_BLOCK_SIZE);
+ *(group->file_header_bufs + i) = ut_align(
+ mem_alloc(LOG_FILE_HDR_SIZE + OS_FILE_LOG_BLOCK_SIZE),
+ OS_FILE_LOG_BLOCK_SIZE);
memset(*(group->file_header_bufs + i), '\0',
LOG_FILE_HDR_SIZE);
#ifdef UNIV_LOG_ARCHIVE
- *(group->archive_file_header_bufs + i) = ut_align
- (mem_alloc(LOG_FILE_HDR_SIZE + OS_FILE_LOG_BLOCK_SIZE),
- OS_FILE_LOG_BLOCK_SIZE);
+ *(group->archive_file_header_bufs + i) = ut_align(
+ mem_alloc(LOG_FILE_HDR_SIZE + OS_FILE_LOG_BLOCK_SIZE),
+ OS_FILE_LOG_BLOCK_SIZE);
memset(*(group->archive_file_header_bufs + i), '\0',
LOG_FILE_HDR_SIZE);
#endif /* UNIV_LOG_ARCHIVE */
@@ -923,9 +923,8 @@ log_group_init(
group->archived_offset = 0;
#endif /* UNIV_LOG_ARCHIVE */
- group->checkpoint_buf = ut_align
- (mem_alloc(2 * OS_FILE_LOG_BLOCK_SIZE),
- OS_FILE_LOG_BLOCK_SIZE);
+ group->checkpoint_buf = ut_align(
+ mem_alloc(2 * OS_FILE_LOG_BLOCK_SIZE), OS_FILE_LOG_BLOCK_SIZE);
memset(group->checkpoint_buf, '\0', OS_FILE_LOG_BLOCK_SIZE);
@@ -1029,9 +1028,9 @@ log_sys_check_flush_completion(void)
/* Move the log buffer content to the start of the
buffer */
- move_start = ut_calc_align_down
- (log_sys->write_end_offset,
- OS_FILE_LOG_BLOCK_SIZE);
+ move_start = ut_calc_align_down(
+ log_sys->write_end_offset,
+ OS_FILE_LOG_BLOCK_SIZE);
move_end = ut_calc_align(log_sys->buf_free,
OS_FILE_LOG_BLOCK_SIZE);
@@ -1255,16 +1254,16 @@ loop:
(ulong) ut_dulint_get_high(start_lsn),
(ulong) ut_dulint_get_low(start_lsn),
(ulong) log_block_get_hdr_no(buf),
- (ulong) log_block_get_hdr_no
- (buf + write_len - OS_FILE_LOG_BLOCK_SIZE));
+ (ulong) log_block_get_hdr_no(
+ buf + write_len - OS_FILE_LOG_BLOCK_SIZE));
ut_a(log_block_get_hdr_no(buf)
== log_block_convert_lsn_to_no(start_lsn));
for (i = 0; i < write_len / OS_FILE_LOG_BLOCK_SIZE; i++) {
ut_a(log_block_get_hdr_no(buf) + i
- == log_block_get_hdr_no
- (buf + i * OS_FILE_LOG_BLOCK_SIZE));
+ == log_block_get_hdr_no(
+ buf + i * OS_FILE_LOG_BLOCK_SIZE));
}
}
#endif /* UNIV_DEBUG */
@@ -1412,10 +1411,10 @@ loop:
if (log_debug_writes) {
fprintf(stderr,
"Writing log from %lu %lu up to lsn %lu %lu\n",
- (ulong) ut_dulint_get_high
- (log_sys->written_to_all_lsn),
- (ulong) ut_dulint_get_low
- (log_sys->written_to_all_lsn),
+ (ulong) ut_dulint_get_high(
+ log_sys->written_to_all_lsn),
+ (ulong) ut_dulint_get_low(
+ log_sys->written_to_all_lsn),
(ulong) ut_dulint_get_high(log_sys->lsn),
(ulong) ut_dulint_get_low(log_sys->lsn));
}
@@ -1446,9 +1445,9 @@ loop:
log_sys->one_flushed = FALSE;
log_block_set_flush_bit(log_sys->buf + area_start, TRUE);
- log_block_set_checkpoint_no
- (log_sys->buf + area_end - OS_FILE_LOG_BLOCK_SIZE,
- log_sys->next_checkpoint_no);
+ log_block_set_checkpoint_no(
+ log_sys->buf + area_end - OS_FILE_LOG_BLOCK_SIZE,
+ log_sys->next_checkpoint_no);
/* Copy the last, incompletely written, log block a log block length
up, so that when the flush operation writes from the log buffer, the
@@ -1466,12 +1465,12 @@ loop:
/* Do the write to the log files */
while (group) {
- log_group_write_buf
- (group, log_sys->buf + area_start,
- area_end - area_start,
- ut_dulint_align_down(log_sys->written_to_all_lsn,
- OS_FILE_LOG_BLOCK_SIZE),
- start_offset - area_start);
+ log_group_write_buf(
+ group, log_sys->buf + area_start,
+ area_end - area_start,
+ ut_dulint_align_down(log_sys->written_to_all_lsn,
+ OS_FILE_LOG_BLOCK_SIZE),
+ start_offset - area_start);
log_group_set_fields(group, log_sys->write_lsn);
@@ -1730,8 +1729,8 @@ log_group_checkpoint(
log_sys->next_checkpoint_lsn);
mach_write_to_4(buf + LOG_CHECKPOINT_OFFSET,
- log_group_calc_lsn_offset
- (log_sys->next_checkpoint_lsn, group));
+ log_group_calc_lsn_offset(
+ log_sys->next_checkpoint_lsn, group));
mach_write_to_4(buf + LOG_CHECKPOINT_LOG_BUF_SIZE, log_sys->buf_size);
@@ -2355,9 +2354,9 @@ loop:
OS_DATA_FILE, &ret);
if (!ret && (open_mode == OS_FILE_CREATE)) {
- file_handle = os_file_create
- (name, OS_FILE_OPEN, OS_FILE_AIO,
- OS_DATA_FILE, &ret);
+ file_handle = os_file_create(
+ name, OS_FILE_OPEN, OS_FILE_AIO,
+ OS_DATA_FILE, &ret);
}
if (!ret) {
@@ -2388,10 +2387,10 @@ loop:
group->archive_space_id, FALSE);
if (next_offset % group->file_size == 0) {
- log_group_archive_file_header_write
- (group, n_files,
- group->archived_file_no + n_files,
- start_lsn);
+ log_group_archive_file_header_write(
+ group, n_files,
+ group->archived_file_no + n_files,
+ start_lsn);
next_offset += LOG_FILE_HDR_SIZE;
}
@@ -2513,10 +2512,10 @@ log_archive_write_complete_groups(void)
#endif /* UNIV_DEBUG */
/* Calculate the archive file space start lsn */
- start_lsn = ut_dulint_subtract
- (log_sys->next_archived_lsn,
- end_offset - LOG_FILE_HDR_SIZE + trunc_files
- * (group->file_size - LOG_FILE_HDR_SIZE));
+ start_lsn = ut_dulint_subtract(
+ log_sys->next_archived_lsn,
+ end_offset - LOG_FILE_HDR_SIZE + trunc_files
+ * (group->file_size - LOG_FILE_HDR_SIZE));
end_lsn = start_lsn;
for (i = 0; i < trunc_files; i++) {
@@ -2656,8 +2655,8 @@ loop:
if (ut_dulint_cmp(limit_lsn, log_sys->lsn) >= 0) {
- limit_lsn = ut_dulint_align_down
- (log_sys->lsn, OS_FILE_LOG_BLOCK_SIZE);
+ limit_lsn = ut_dulint_align_down(
+ log_sys->lsn, OS_FILE_LOG_BLOCK_SIZE);
}
}
@@ -2804,8 +2803,8 @@ log_archive_close_groups(
/* Write a notice to the headers of archived log
files that the file write has been completed */
- log_group_archive_completed_header_write
- (group, 0, log_sys->archived_lsn);
+ log_group_archive_completed_header_write(
+ group, 0, log_sys->archived_lsn);
fil_space_truncate_start(group->archive_space_id,
trunc_len);
diff --git a/storage/innobase/log/log0recv.c b/storage/innobase/log/log0recv.c
index 3a53e0eb6e5..280ebbb6bf2 100644
--- a/storage/innobase/log/log0recv.c
+++ b/storage/innobase/log/log0recv.c
@@ -239,12 +239,14 @@ recv_truncate_group(
archived_lsn = checkpoint_lsn;
}
- finish_lsn1 = ut_dulint_add(ut_dulint_align_down
- (archived_lsn, OS_FILE_LOG_BLOCK_SIZE),
+ finish_lsn1 = ut_dulint_add(ut_dulint_align_down(
+ archived_lsn,
+ OS_FILE_LOG_BLOCK_SIZE),
log_group_get_capacity(group));
- finish_lsn2 = ut_dulint_add(ut_dulint_align_up
- (recovered_lsn, OS_FILE_LOG_BLOCK_SIZE),
+ finish_lsn2 = ut_dulint_add(ut_dulint_align_up(
+ recovered_lsn,
+ OS_FILE_LOG_BLOCK_SIZE),
recv_sys->last_log_buf_size);
if (ut_dulint_cmp(limit_lsn, ut_dulint_max) != 0) {
@@ -274,8 +276,8 @@ recv_truncate_group(
ut_memcpy(log_sys->buf, recv_sys->last_block,
OS_FILE_LOG_BLOCK_SIZE);
- log_block_set_data_len(log_sys->buf, ut_dulint_minus
- (recovered_lsn, start_lsn));
+ log_block_set_data_len(log_sys->buf, ut_dulint_minus(
+ recovered_lsn, start_lsn));
}
if (ut_dulint_cmp(start_lsn, finish_lsn) >= 0) {
@@ -441,16 +443,16 @@ recv_check_cp_is_consistent(
fold = ut_fold_binary(buf, LOG_CHECKPOINT_CHECKSUM_1);
- if ((fold & 0xFFFFFFFFUL) != mach_read_from_4
- (buf + LOG_CHECKPOINT_CHECKSUM_1)) {
+ if ((fold & 0xFFFFFFFFUL) != mach_read_from_4(
+ buf + LOG_CHECKPOINT_CHECKSUM_1)) {
return(FALSE);
}
fold = ut_fold_binary(buf + LOG_CHECKPOINT_LSN,
LOG_CHECKPOINT_CHECKSUM_2 - LOG_CHECKPOINT_LSN);
- if ((fold & 0xFFFFFFFFUL) != mach_read_from_4
- (buf + LOG_CHECKPOINT_CHECKSUM_2)) {
+ if ((fold & 0xFFFFFFFFUL) != mach_read_from_4(
+ buf + LOG_CHECKPOINT_CHECKSUM_2)) {
return(FALSE);
}
@@ -498,9 +500,9 @@ recv_find_max_checkpoint(
" %lu at %lu invalid, %lu\n",
(ulong) group->id,
(ulong) field,
- (ulong) mach_read_from_4
- (buf
- + LOG_CHECKPOINT_CHECKSUM_1));
+ (ulong) mach_read_from_4(
+ buf
+ + LOG_CHECKPOINT_CHECKSUM_1));
}
#endif /* UNIV_DEBUG */
@@ -509,20 +511,20 @@ recv_find_max_checkpoint(
group->state = LOG_GROUP_OK;
- group->lsn = mach_read_from_8
- (buf + LOG_CHECKPOINT_LSN);
- group->lsn_offset = mach_read_from_4
- (buf + LOG_CHECKPOINT_OFFSET);
- checkpoint_no = mach_read_from_8
- (buf + LOG_CHECKPOINT_NO);
+ group->lsn = mach_read_from_8(
+ buf + LOG_CHECKPOINT_LSN);
+ group->lsn_offset = mach_read_from_4(
+ buf + LOG_CHECKPOINT_OFFSET);
+ checkpoint_no = mach_read_from_8(
+ buf + LOG_CHECKPOINT_NO);
#ifdef UNIV_DEBUG
if (log_debug_writes) {
fprintf(stderr,
"InnoDB: Checkpoint number %lu"
" found in group %lu\n",
- (ulong) ut_dulint_get_low
- (checkpoint_no),
+ (ulong) ut_dulint_get_low(
+ checkpoint_no),
(ulong) group->id);
}
#endif /* UNIV_DEBUG */
@@ -609,8 +611,8 @@ recv_read_cp_info_for_backup(
if (mach_read_from_4(cp_buf + LOG_CHECKPOINT_FSP_MAGIC_N)
== LOG_CHECKPOINT_FSP_MAGIC_N_VAL) {
- *fsp_limit = mach_read_from_4
- (cp_buf + LOG_CHECKPOINT_FSP_FREE_LIMIT);
+ *fsp_limit = mach_read_from_4(
+ cp_buf + LOG_CHECKPOINT_FSP_FREE_LIMIT);
if (*fsp_limit == 0) {
*fsp_limit = 1000000000;
@@ -779,10 +781,10 @@ recv_parse_or_apply_log_rec_body(
ptr = mlog_parse_nbytes(type, ptr, end_ptr, page);
break;
case MLOG_REC_INSERT: case MLOG_COMP_REC_INSERT:
- if (NULL != (ptr = mlog_parse_index
- (ptr, end_ptr,
- type == MLOG_COMP_REC_INSERT,
- &index))) {
+ if (NULL != (ptr = mlog_parse_index(
+ ptr, end_ptr,
+ type == MLOG_COMP_REC_INSERT,
+ &index))) {
ut_a(!page
|| (ibool)!!page_is_comp(page)
== dict_table_is_comp(index->table));
@@ -791,15 +793,15 @@ recv_parse_or_apply_log_rec_body(
}
break;
case MLOG_REC_CLUST_DELETE_MARK: case MLOG_COMP_REC_CLUST_DELETE_MARK:
- if (NULL != (ptr = mlog_parse_index
- (ptr, end_ptr,
- type == MLOG_COMP_REC_CLUST_DELETE_MARK,
- &index))) {
+ if (NULL != (ptr = mlog_parse_index(
+ ptr, end_ptr,
+ type == MLOG_COMP_REC_CLUST_DELETE_MARK,
+ &index))) {
ut_a(!page
|| (ibool)!!page_is_comp(page)
== dict_table_is_comp(index->table));
- ptr = btr_cur_parse_del_mark_set_clust_rec
- (ptr, end_ptr, index, page);
+ ptr = btr_cur_parse_del_mark_set_clust_rec(
+ ptr, end_ptr, index, page);
}
break;
case MLOG_COMP_REC_SEC_DELETE_MARK:
@@ -815,10 +817,10 @@ recv_parse_or_apply_log_rec_body(
ptr = btr_cur_parse_del_mark_set_sec_rec(ptr, end_ptr, page);
break;
case MLOG_REC_UPDATE_IN_PLACE: case MLOG_COMP_REC_UPDATE_IN_PLACE:
- if (NULL != (ptr = mlog_parse_index
- (ptr, end_ptr,
- type == MLOG_COMP_REC_UPDATE_IN_PLACE,
- &index))) {
+ if (NULL != (ptr = mlog_parse_index(
+ ptr, end_ptr,
+ type == MLOG_COMP_REC_UPDATE_IN_PLACE,
+ &index))) {
ut_a(!page
|| (ibool)!!page_is_comp(page)
== dict_table_is_comp(index->table));
@@ -828,11 +830,11 @@ recv_parse_or_apply_log_rec_body(
break;
case MLOG_LIST_END_DELETE: case MLOG_COMP_LIST_END_DELETE:
case MLOG_LIST_START_DELETE: case MLOG_COMP_LIST_START_DELETE:
- if (NULL != (ptr = mlog_parse_index
- (ptr, end_ptr,
- type == MLOG_COMP_LIST_END_DELETE
- || type == MLOG_COMP_LIST_START_DELETE,
- &index))) {
+ if (NULL != (ptr = mlog_parse_index(
+ ptr, end_ptr,
+ type == MLOG_COMP_LIST_END_DELETE
+ || type == MLOG_COMP_LIST_START_DELETE,
+ &index))) {
ut_a(!page
|| (ibool)!!page_is_comp(page)
== dict_table_is_comp(index->table));
@@ -841,22 +843,22 @@ recv_parse_or_apply_log_rec_body(
}
break;
case MLOG_LIST_END_COPY_CREATED: case MLOG_COMP_LIST_END_COPY_CREATED:
- if (NULL != (ptr = mlog_parse_index
- (ptr, end_ptr,
- type == MLOG_COMP_LIST_END_COPY_CREATED,
- &index))) {
+ if (NULL != (ptr = mlog_parse_index(
+ ptr, end_ptr,
+ type == MLOG_COMP_LIST_END_COPY_CREATED,
+ &index))) {
ut_a(!page
|| (ibool)!!page_is_comp(page)
== dict_table_is_comp(index->table));
- ptr = page_parse_copy_rec_list_to_created_page
- (ptr, end_ptr, index, page, mtr);
+ ptr = page_parse_copy_rec_list_to_created_page(
+ ptr, end_ptr, index, page, mtr);
}
break;
case MLOG_PAGE_REORGANIZE: case MLOG_COMP_PAGE_REORGANIZE:
- if (NULL != (ptr = mlog_parse_index
- (ptr, end_ptr,
- type == MLOG_COMP_PAGE_REORGANIZE,
- &index))) {
+ if (NULL != (ptr = mlog_parse_index(
+ ptr, end_ptr,
+ type == MLOG_COMP_PAGE_REORGANIZE,
+ &index))) {
ut_a(!page
|| (ibool)!!page_is_comp(page)
== dict_table_is_comp(index->table));
@@ -887,15 +889,15 @@ recv_parse_or_apply_log_rec_body(
page, mtr);
break;
case MLOG_REC_MIN_MARK: case MLOG_COMP_REC_MIN_MARK:
- ptr = btr_parse_set_min_rec_mark
- (ptr, end_ptr, type == MLOG_COMP_REC_MIN_MARK,
- page, mtr);
+ ptr = btr_parse_set_min_rec_mark(
+ ptr, end_ptr, type == MLOG_COMP_REC_MIN_MARK,
+ page, mtr);
break;
case MLOG_REC_DELETE: case MLOG_COMP_REC_DELETE:
- if (NULL != (ptr = mlog_parse_index
- (ptr, end_ptr,
- type == MLOG_COMP_REC_DELETE,
- &index))) {
+ if (NULL != (ptr = mlog_parse_index(
+ ptr, end_ptr,
+ type == MLOG_COMP_REC_DELETE,
+ &index))) {
ut_a(!page
|| (ibool)!!page_is_comp(page)
== dict_table_is_comp(index->table));
@@ -1430,8 +1432,8 @@ loop:
RW_X_LATCH, &mtr);
#ifdef UNIV_SYNC_DEBUG
- buf_page_dbg_add_level
- (page, SYNC_NO_ORDER_CHECK);
+ buf_page_dbg_add_level(
+ page, SYNC_NO_ORDER_CHECK);
#endif /* UNIV_SYNC_DEBUG */
recv_recover_page(FALSE, FALSE, page,
space, page_no);
@@ -1570,18 +1572,18 @@ recv_apply_log_recs_for_backup(void)
the block corresponding to buf_pool->frame_zero
(== page). */
- buf_page_init_for_backup_restore
- (recv_addr->space, recv_addr->page_no,
- buf_block_align(page));
+ buf_page_init_for_backup_restore(
+ recv_addr->space, recv_addr->page_no,
+ buf_block_align(page));
/* Extend the tablespace's last file if the page_no
does not fall inside its bounds; we assume the last
file is auto-extending, and ibbackup copied the file
when it still was smaller */
- success = fil_extend_space_to_desired_size
- (&actual_size,
- recv_addr->space, recv_addr->page_no + 1);
+ success = fil_extend_space_to_desired_size(
+ &actual_size,
+ recv_addr->space, recv_addr->page_no + 1);
if (!success) {
fprintf(stderr,
"InnoDB: Fatal error: cannot extend"
@@ -1615,9 +1617,9 @@ recv_apply_log_recs_for_backup(void)
/* Write the page back to the tablespace file using the
fil0fil.c routines */
- buf_flush_init_for_writing
- (page, mach_read_from_8(page + FIL_PAGE_LSN),
- recv_addr->space, recv_addr->page_no);
+ buf_flush_init_for_writing(
+ page, mach_read_from_8(page + FIL_PAGE_LSN),
+ recv_addr->space, recv_addr->page_no);
error = fil_io(OS_FILE_WRITE, TRUE, recv_addr->space,
recv_addr->page_no, 0, UNIV_PAGE_SIZE,
@@ -1916,8 +1918,9 @@ loop:
fil_path_to_mysql_datadir is set in ibbackup to
point to the datadir we should use there */
- if (NULL == fil_op_log_parse_or_replay
- (body, end_ptr, type, TRUE, space)) {
+ if (NULL == fil_op_log_parse_or_replay(
+ body, end_ptr, type, TRUE,
+ space)) {
fprintf(stderr,
"InnoDB: Error: file op"
" log record of type %lu"
@@ -1956,8 +1959,8 @@ loop:
if (recv_sys->found_corrupt_log) {
- recv_report_corrupt_log
- (ptr, type, space, page_no);
+ recv_report_corrupt_log(
+ ptr, type, space, page_no);
}
return(FALSE);
@@ -1998,8 +2001,8 @@ loop:
}
}
- new_recovered_lsn = recv_calc_lsn_on_data_add
- (recv_sys->recovered_lsn, total_len);
+ new_recovered_lsn = recv_calc_lsn_on_data_add(
+ recv_sys->recovered_lsn, total_len);
if (ut_dulint_cmp(new_recovered_lsn, recv_sys->scanned_lsn)
> 0) {
@@ -2202,22 +2205,21 @@ recv_scan_log_recs(
|| !log_block_checksum_is_ok_or_old_format(log_block)) {
if (no == log_block_convert_lsn_to_no(scanned_lsn)
- && !log_block_checksum_is_ok_or_old_format
- (log_block)) {
+ && !log_block_checksum_is_ok_or_old_format(
+ log_block)) {
fprintf(stderr,
"InnoDB: Log block no %lu at"
" lsn %lu %lu has\n"
"InnoDB: ok header, but checksum field"
" contains %lu, should be %lu\n",
(ulong) no,
- (ulong) ut_dulint_get_high
- (scanned_lsn),
- (ulong) ut_dulint_get_low
- (scanned_lsn),
- (ulong) log_block_get_checksum
- (log_block),
- (ulong) log_block_calc_checksum
- (log_block));
+ (ulong) ut_dulint_get_high(
+ scanned_lsn),
+ (ulong) ut_dulint_get_low(scanned_lsn),
+ (ulong) log_block_get_checksum(
+ log_block),
+ (ulong) log_block_calc_checksum(
+ log_block));
}
/* Garbage or an incompletely written log block */
@@ -2273,8 +2275,8 @@ recv_scan_log_recs(
recv_sys->parse_start_lsn
= ut_dulint_add(scanned_lsn,
- log_block_get_first_rec_group
- (log_block));
+ log_block_get_first_rec_group(
+ log_block));
recv_sys->scanned_lsn = recv_sys->parse_start_lsn;
recv_sys->recovered_lsn = recv_sys->parse_start_lsn;
}
@@ -2297,8 +2299,8 @@ recv_scan_log_recs(
recv_sys->found_corrupt_log = TRUE;
} else if (!recv_sys->found_corrupt_log) {
- more_data = recv_sys_add_to_parsing_buf
- (log_block, scanned_lsn);
+ more_data = recv_sys_add_to_parsing_buf(
+ log_block, scanned_lsn);
}
recv_sys->scanned_lsn = scanned_lsn;
@@ -2385,11 +2387,10 @@ recv_group_scan_log_recs(
log_group_read_log_seg(LOG_RECOVER, log_sys->buf,
group, start_lsn, end_lsn);
- finished = recv_scan_log_recs
- (TRUE, (buf_pool->n_frames - recv_n_pool_free_frames)
- * UNIV_PAGE_SIZE, TRUE, log_sys->buf,
- RECV_SCAN_SIZE, start_lsn,
- contiguous_lsn, group_scanned_lsn);
+ finished = recv_scan_log_recs(
+ TRUE, (buf_pool->n_frames - recv_n_pool_free_frames)
+ * UNIV_PAGE_SIZE, TRUE, log_sys->buf, RECV_SCAN_SIZE,
+ start_lsn, contiguous_lsn, group_scanned_lsn);
start_lsn = end_lsn;
}
@@ -2561,18 +2562,18 @@ recv_recovery_from_checkpoint_start(
"InnoDB: %lu %lu and %lu %lu.\n"
"InnoDB: #########################"
"#################################\n",
- (ulong) ut_dulint_get_high
- (checkpoint_lsn),
- (ulong) ut_dulint_get_low
- (checkpoint_lsn),
- (ulong) ut_dulint_get_high
- (min_flushed_lsn),
- (ulong) ut_dulint_get_low
- (min_flushed_lsn),
- (ulong) ut_dulint_get_high
- (max_flushed_lsn),
- (ulong) ut_dulint_get_low
- (max_flushed_lsn));
+ (ulong) ut_dulint_get_high(
+ checkpoint_lsn),
+ (ulong) ut_dulint_get_low(
+ checkpoint_lsn),
+ (ulong) ut_dulint_get_high(
+ min_flushed_lsn),
+ (ulong) ut_dulint_get_low(
+ min_flushed_lsn),
+ (ulong) ut_dulint_get_high(
+ max_flushed_lsn),
+ (ulong) ut_dulint_get_low(
+ max_flushed_lsn));
}
recv_needed_recovery = TRUE;
@@ -2602,8 +2603,8 @@ recv_recovery_from_checkpoint_start(
" half-written data pages from"
" the doublewrite\n"
"InnoDB: buffer...\n");
- trx_sys_doublewrite_init_or_restore_pages
- (TRUE);
+ trx_sys_doublewrite_init_or_restore_pages(
+ TRUE);
}
ut_print_timestamp(stderr);
@@ -2629,10 +2630,10 @@ recv_recovery_from_checkpoint_start(
group = recv_sys->archive_group;
capacity = log_group_get_capacity(group);
- if ((ut_dulint_cmp(recv_sys->scanned_lsn, ut_dulint_add
- (checkpoint_lsn, capacity)) > 0)
- || (ut_dulint_cmp(checkpoint_lsn, ut_dulint_add
- (recv_sys->scanned_lsn, capacity))
+ if ((ut_dulint_cmp(recv_sys->scanned_lsn, ut_dulint_add(
+ checkpoint_lsn, capacity)) > 0)
+ || (ut_dulint_cmp(checkpoint_lsn, ut_dulint_add(
+ recv_sys->scanned_lsn, capacity))
> 0)) {
mutex_exit(&(log_sys->mutex));
@@ -2756,10 +2757,10 @@ recv_recovery_from_checkpoint_start(
" lsn %lu %lu up to lsn %lu %lu\n",
(ulong) ut_dulint_get_high(checkpoint_lsn),
(ulong) ut_dulint_get_low(checkpoint_lsn),
- (ulong) ut_dulint_get_high
- (recv_sys->recovered_lsn),
- (ulong) ut_dulint_get_low
- (recv_sys->recovered_lsn));
+ (ulong) ut_dulint_get_high(
+ recv_sys->recovered_lsn),
+ (ulong) ut_dulint_get_low(
+ recv_sys->recovered_lsn));
}
} else {
srv_start_lsn = recv_sys->recovered_lsn;
@@ -3189,10 +3190,10 @@ ask_again:
group->archive_space_id, read_offset / UNIV_PAGE_SIZE,
read_offset % UNIV_PAGE_SIZE, len, buf, NULL);
- ret = recv_scan_log_recs
- (TRUE, (buf_pool->n_frames - recv_n_pool_free_frames)
- * UNIV_PAGE_SIZE, TRUE, buf, len, start_lsn,
- &dummy_lsn, &scanned_lsn);
+ ret = recv_scan_log_recs(
+ TRUE, (buf_pool->n_frames - recv_n_pool_free_frames)
+ * UNIV_PAGE_SIZE, TRUE, buf, len, start_lsn,
+ &dummy_lsn, &scanned_lsn);
if (ut_dulint_cmp(scanned_lsn, file_end_lsn) == 0) {
diff --git a/storage/innobase/mem/mem0dbg.c b/storage/innobase/mem/mem0dbg.c
index 3cab454e3ac..419f410cf1b 100644
--- a/storage/innobase/mem/mem0dbg.c
+++ b/storage/innobase/mem/mem0dbg.c
@@ -497,8 +497,8 @@ mem_heap_validate_or_print(
" %lx but trailer %lx\n",
(ulint)block,
(ulint)field, len, check_field,
- mem_field_trailer_get_check
- (user_field));
+ mem_field_trailer_get_check(
+ user_field));
return;
}
diff --git a/storage/innobase/mem/mem0pool.c b/storage/innobase/mem/mem0pool.c
index 91e7532aba8..6a419ff33ec 100644
--- a/storage/innobase/mem/mem0pool.c
+++ b/storage/innobase/mem/mem0pool.c
@@ -501,8 +501,8 @@ mem_area_free(
ulint next_size;
- next_size = mem_area_get_size
- ((mem_area_t*)(((byte*)area) + size));
+ next_size = mem_area_get_size(
+ (mem_area_t*)(((byte*)area) + size));
if (ut_2_power_up(next_size) != next_size) {
fprintf(stderr,
"InnoDB: Error: Memory area size %lu,"
diff --git a/storage/innobase/mtr/mtr0log.c b/storage/innobase/mtr/mtr0log.c
index ba5284d9169..cb03f207a56 100644
--- a/storage/innobase/mtr/mtr0log.c
+++ b/storage/innobase/mtr/mtr0log.c
@@ -445,21 +445,21 @@ mlog_open_and_write_index(
dict_index_get_n_unique_in_tree(index));
log_ptr += 2;
for (i = 0; i < n; i++) {
- dict_field_t* field;
- dtype_t* type;
- ulint len;
+ dict_field_t* field;
+ const dict_col_t* col;
+ ulint len;
+
field = dict_index_get_nth_field(index, i);
- type = dict_col_get_type(dict_field_get_col(field));
+ col = dict_field_get_col(field);
len = field->fixed_len;
ut_ad(len < 0x7fff);
if (len == 0
- && (dtype_get_len(type) > 255
- || dtype_get_mtype(type) == DATA_BLOB)) {
+ && (col->len > 255 || col->mtype == DATA_BLOB)) {
/* variable-length field
with maximum length > 255 */
len = 0x7fff;
}
- if (dtype_get_prtype(type) & DATA_NOT_NULL) {
+ if (col->prtype & DATA_NOT_NULL) {
len |= 0x8000;
}
if (log_ptr + 2 > log_end) {
@@ -541,14 +541,16 @@ mlog_parse_index(
/* The high-order bit of len is the NOT NULL flag;
the rest is 0 or 0x7fff for variable-length fields,
and 1..0x7ffe for fixed-length fields. */
- dict_mem_table_add_col
- (table, "DUMMY",
- ((len + 1) & 0x7fff) <= 1
- ? DATA_BINARY : DATA_FIXBINARY,
- len & 0x8000 ? DATA_NOT_NULL : 0,
- len & 0x7fff, 0);
- dict_index_add_col
- (ind, dict_table_get_nth_col(table, i), 0);
+ dict_mem_table_add_col(
+ table, "DUMMY",
+ ((len + 1) & 0x7fff) <= 1
+ ? DATA_BINARY : DATA_FIXBINARY,
+ len & 0x8000 ? DATA_NOT_NULL : 0,
+ len & 0x7fff);
+
+ dict_index_add_col(ind, table, (dict_col_t*)
+ dict_table_get_nth_col(table, i),
+ 0);
}
ptr += 2;
}
diff --git a/storage/innobase/mtr/mtr0mtr.c b/storage/innobase/mtr/mtr0mtr.c
index 13c579c646b..1a65da6e7f4 100644
--- a/storage/innobase/mtr/mtr0mtr.c
+++ b/storage/innobase/mtr/mtr0mtr.c
@@ -131,9 +131,9 @@ mtr_log_reserve_and_write(
}
if (mlog->heap == NULL) {
- mtr->end_lsn = log_reserve_and_write_fast
- (first_data, dyn_block_get_used(mlog),
- &(mtr->start_lsn), &success);
+ mtr->end_lsn = log_reserve_and_write_fast(
+ first_data, dyn_block_get_used(mlog),
+ &(mtr->start_lsn), &success);
if (success) {
return;
diff --git a/storage/innobase/os/os0file.c b/storage/innobase/os/os0file.c
index 65903717cfb..a4acb0cd485 100644
--- a/storage/innobase/os/os0file.c
+++ b/storage/innobase/os/os0file.c
@@ -3483,9 +3483,9 @@ try_again:
#endif
} else {
if (!wake_later) {
- os_aio_simulated_wake_handler_thread
- (os_aio_get_segment_no_from_slot
- (array, slot));
+ os_aio_simulated_wake_handler_thread(
+ os_aio_get_segment_no_from_slot(
+ array, slot));
}
}
} else if (type == OS_FILE_WRITE) {
@@ -3501,9 +3501,9 @@ try_again:
#endif
} else {
if (!wake_later) {
- os_aio_simulated_wake_handler_thread
- (os_aio_get_segment_no_from_slot
- (array, slot));
+ os_aio_simulated_wake_handler_thread(
+ os_aio_get_segment_no_from_slot(
+ array, slot));
}
}
} else {
diff --git a/storage/innobase/os/os0thread.c b/storage/innobase/os/os0thread.c
index 0c9434ccc7f..a0b1e51d359 100644
--- a/storage/innobase/os/os0thread.c
+++ b/storage/innobase/os/os0thread.c
@@ -142,8 +142,9 @@ os_thread_create(
AIX is always big enough. An empirical test on AIX-4.3 suggested
the size was 96 kB, though. */
- ret = pthread_attr_setstacksize
- (&attr, (size_t)(PTHREAD_STACK_MIN + 32 * 1024));
+ ret = pthread_attr_setstacksize(&attr,
+ (size_t)(PTHREAD_STACK_MIN
+ + 32 * 1024));
if (ret) {
fprintf(stderr,
"InnoDB: Error: pthread_attr_setstacksize"
diff --git a/storage/innobase/page/page0cur.c b/storage/innobase/page/page0cur.c
index 2a440c4f479..a297eb545a0 100644
--- a/storage/innobase/page/page0cur.c
+++ b/storage/innobase/page/page0cur.c
@@ -259,11 +259,11 @@ page_cur_search_with_match(
&& (page_header_get_ptr(page, PAGE_LAST_INSERT))
&& (page_header_get_field(page, PAGE_DIRECTION) == PAGE_RIGHT)) {
- if (page_cur_try_search_shortcut
- (page, index, tuple,
- iup_matched_fields, iup_matched_bytes,
- ilow_matched_fields, ilow_matched_bytes,
- cursor)) {
+ if (page_cur_try_search_shortcut(
+ page, index, tuple,
+ iup_matched_fields, iup_matched_bytes,
+ ilow_matched_fields, ilow_matched_bytes,
+ cursor)) {
return;
}
}
@@ -326,8 +326,9 @@ low_slot_match:
} else if (UNIV_EXPECT(cmp, -1)) {
#ifdef PAGE_CUR_LE_OR_EXTENDS
if (mode == PAGE_CUR_LE_OR_EXTENDS
- && page_cur_rec_field_extends
- (tuple, mid_rec, offsets, cur_matched_fields)) {
+ && page_cur_rec_field_extends(
+ tuple, mid_rec, offsets,
+ cur_matched_fields)) {
goto low_slot_match;
}
@@ -382,8 +383,9 @@ low_rec_match:
} else if (UNIV_EXPECT(cmp, -1)) {
#ifdef PAGE_CUR_LE_OR_EXTENDS
if (mode == PAGE_CUR_LE_OR_EXTENDS
- && page_cur_rec_field_extends
- (tuple, mid_rec, offsets, cur_matched_fields)) {
+ && page_cur_rec_field_extends(
+ tuple, mid_rec, offsets,
+ cur_matched_fields)) {
goto low_rec_match;
}
@@ -645,9 +647,9 @@ page_cur_insert_rec_write_log(
+ extra_info_yes);
if (extra_info_yes) {
/* Write the info bits */
- mach_write_to_1
- (log_ptr,
- rec_get_info_and_status_bits(insert_rec, comp));
+ mach_write_to_1(log_ptr,
+ rec_get_info_and_status_bits(insert_rec,
+ comp));
log_ptr++;
/* Write the record origin offset */
@@ -796,8 +798,8 @@ page_cur_parse_insert_rec(
ULINT_UNDEFINED, &heap);
if (extra_info_yes == 0) {
- info_and_status_bits = rec_get_info_and_status_bits
- (cursor_rec, page_is_comp(page));
+ info_and_status_bits = rec_get_info_and_status_bits(
+ cursor_rec, page_is_comp(page));
origin_offset = rec_offs_extra_size(offsets);
mismatch_index = rec_offs_size(offsets) - end_seg_len;
}
@@ -975,8 +977,8 @@ page_cur_insert_rec_low(
page_header_set_field(page, PAGE_DIRECTION, PAGE_RIGHT);
page_header_set_field(page, PAGE_N_DIRECTION,
- page_header_get_field
- (page, PAGE_N_DIRECTION) + 1);
+ page_header_get_field(
+ page, PAGE_N_DIRECTION) + 1);
} else if ((page_rec_get_next(insert_rec) == last_insert)
&& (page_header_get_field(page, PAGE_DIRECTION)
@@ -984,8 +986,8 @@ page_cur_insert_rec_low(
page_header_set_field(page, PAGE_DIRECTION, PAGE_LEFT);
page_header_set_field(page, PAGE_N_DIRECTION,
- page_header_get_field
- (page, PAGE_N_DIRECTION) + 1);
+ page_header_get_field(
+ page, PAGE_N_DIRECTION) + 1);
} else {
page_header_set_field(page, PAGE_DIRECTION, PAGE_NO_DIRECTION);
page_header_set_field(page, PAGE_N_DIRECTION, 0);
@@ -1278,7 +1280,7 @@ page_cur_delete_rec_write_log(
}
/* Write the cursor rec offset as a 2-byte ulint */
- mach_write_to_2(log_ptr, ut_align_offset(rec, UNIV_PAGE_SIZE));
+ mach_write_to_2(log_ptr, page_offset(rec));
mlog_close(mtr, log_ptr + 2);
}
diff --git a/storage/innobase/page/page0page.c b/storage/innobase/page/page0page.c
index 0c869445546..4212df7a631 100644
--- a/storage/innobase/page/page0page.c
+++ b/storage/innobase/page/page0page.c
@@ -381,7 +381,7 @@ page_create(
dfield_set_data(field, "infimum", 8);
dtype_set(dfield_get_type(field),
- DATA_VARCHAR, DATA_ENGLISH | DATA_NOT_NULL, 8, 0);
+ DATA_VARCHAR, DATA_ENGLISH | DATA_NOT_NULL, 8);
/* Set the corresponding physical record to its place in the page
record heap */
@@ -407,7 +407,7 @@ page_create(
dfield_set_data(field, "supremum", comp ? 8 : 9);
dtype_set(dfield_get_type(field),
- DATA_VARCHAR, DATA_ENGLISH | DATA_NOT_NULL, comp ? 8 : 9, 0);
+ DATA_VARCHAR, DATA_ENGLISH | DATA_NOT_NULL, comp ? 8 : 9);
supremum_rec = rec_convert_dtuple_to_rec(heap_top, index, tuple);
@@ -650,7 +650,7 @@ page_delete_rec_list_write_log(
log_ptr = mlog_open_and_write_index(mtr, rec, index, type, 2);
if (log_ptr) {
/* Write the parameter as a 2-byte ulint */
- mach_write_to_2(log_ptr, ut_align_offset(rec, UNIV_PAGE_SIZE));
+ mach_write_to_2(log_ptr, page_offset(rec));
mlog_close(mtr, log_ptr + 2);
}
}
diff --git a/storage/innobase/pars/pars0opt.c b/storage/innobase/pars/pars0opt.c
index 7c564d3ee4c..2abe6720235 100644
--- a/storage/innobase/pars/pars0opt.c
+++ b/storage/innobase/pars/pars0opt.c
@@ -333,9 +333,9 @@ opt_calc_index_goodness(
col_no = dict_index_get_nth_col_no(index, j);
- exp = opt_look_for_col_in_cond_before
- (OPT_EQUAL, col_no, sel_node->search_cond,
- sel_node, nth_table, &op);
+ exp = opt_look_for_col_in_cond_before(
+ OPT_EQUAL, col_no, sel_node->search_cond,
+ sel_node, nth_table, &op);
if (exp) {
/* The value for this column is exactly known already
at this stage of the join */
@@ -346,9 +346,9 @@ opt_calc_index_goodness(
} else {
/* Look for non-equality comparisons */
- exp = opt_look_for_col_in_cond_before
- (OPT_COMPARISON, col_no, sel_node->search_cond,
- sel_node, nth_table, &op);
+ exp = opt_look_for_col_in_cond_before(
+ OPT_COMPARISON, col_no, sel_node->search_cond,
+ sel_node, nth_table, &op);
if (exp) {
index_plan[j] = exp;
*last_op = op;
@@ -675,10 +675,11 @@ opt_classify_comparison(
access the table, it is classified as OPT_END_COND */
if ((dict_index_get_n_fields(plan->index) > plan->n_exact_match)
- && opt_look_for_col_in_comparison_before
- (OPT_COMPARISON,
- dict_index_get_nth_col_no(plan->index, plan->n_exact_match),
- cond, sel_node, i, &op)) {
+ && opt_look_for_col_in_comparison_before(
+ OPT_COMPARISON,
+ dict_index_get_nth_col_no(plan->index,
+ plan->n_exact_match),
+ cond, sel_node, i, &op)) {
if (sel_node->asc && ((op == '<') || (op == PARS_LE_TOKEN))) {
@@ -903,8 +904,8 @@ opt_find_all_cols(
/* Fill in the field_no fields in sym_node */
- sym_node->field_nos[SYM_CLUST_FIELD_NO] = dict_index_get_nth_col_pos
- (dict_table_get_first_index(index->table), sym_node->col_no);
+ sym_node->field_nos[SYM_CLUST_FIELD_NO] = dict_index_get_nth_col_pos(
+ dict_table_get_first_index(index->table), sym_node->col_no);
if (!(index->type & DICT_CLUSTERED)) {
ut_a(plan);
diff --git a/storage/innobase/pars/pars0pars.c b/storage/innobase/pars/pars0pars.c
index 214fff68c55..6861844870c 100644
--- a/storage/innobase/pars/pars0pars.c
+++ b/storage/innobase/pars/pars0pars.c
@@ -254,43 +254,43 @@ pars_resolve_func_data_type(
== DATA_INT);
} else if (func == PARS_COUNT_TOKEN) {
ut_a(arg);
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if (func == PARS_TO_CHAR_TOKEN) {
ut_a(dtype_get_mtype(que_node_get_data_type(arg)) == DATA_INT);
dtype_set(que_node_get_data_type(node), DATA_VARCHAR,
- DATA_ENGLISH, 0, 0);
+ DATA_ENGLISH, 0);
} else if (func == PARS_TO_BINARY_TOKEN) {
if (dtype_get_mtype(que_node_get_data_type(arg)) == DATA_INT) {
dtype_set(que_node_get_data_type(node), DATA_VARCHAR,
- DATA_ENGLISH, 0, 0);
+ DATA_ENGLISH, 0);
} else {
dtype_set(que_node_get_data_type(node), DATA_BINARY,
- 0, 0, 0);
+ 0, 0);
}
} else if (func == PARS_TO_NUMBER_TOKEN) {
ut_a(dtype_get_mtype(que_node_get_data_type(arg))
== DATA_VARCHAR);
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if (func == PARS_BINARY_TO_NUMBER_TOKEN) {
ut_a(dtype_get_mtype(que_node_get_data_type(arg))
== DATA_VARCHAR);
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if (func == PARS_LENGTH_TOKEN) {
ut_a(dtype_get_mtype(que_node_get_data_type(arg))
== DATA_VARCHAR);
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if (func == PARS_INSTR_TOKEN) {
ut_a(dtype_get_mtype(que_node_get_data_type(arg))
== DATA_VARCHAR);
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if (func == PARS_SYSDATE_TOKEN) {
ut_a(arg == NULL);
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if ((func == PARS_SUBSTR_TOKEN)
|| (func == PARS_CONCAT_TOKEN)) {
@@ -298,7 +298,7 @@ pars_resolve_func_data_type(
ut_a(dtype_get_mtype(que_node_get_data_type(arg))
== DATA_VARCHAR);
dtype_set(que_node_get_data_type(node), DATA_VARCHAR,
- DATA_ENGLISH, 0, 0);
+ DATA_ENGLISH, 0);
} else if ((func == '>') || (func == '<') || (func == '=')
|| (func == PARS_GE_TOKEN)
@@ -310,18 +310,18 @@ pars_resolve_func_data_type(
|| (func == PARS_NOTFOUND_TOKEN)) {
/* We currently have no iboolean type: use integer type */
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if (func == PARS_RND_TOKEN) {
ut_a(dtype_get_mtype(que_node_get_data_type(arg)) == DATA_INT);
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if (func == PARS_RND_STR_TOKEN) {
ut_a(dtype_get_mtype(que_node_get_data_type(arg)) == DATA_INT);
dtype_set(que_node_get_data_type(node), DATA_VARCHAR,
- DATA_ENGLISH, 0, 0);
+ DATA_ENGLISH, 0);
} else {
ut_error;
}
@@ -450,7 +450,6 @@ pars_resolve_exp_columns(
sym_node_t* sym_node;
dict_table_t* table;
sym_node_t* t_node;
- dict_col_t* col;
ulint n_cols;
ulint i;
@@ -490,10 +489,13 @@ pars_resolve_exp_columns(
n_cols = dict_table_get_n_cols(table);
for (i = 0; i < n_cols; i++) {
- col = dict_table_get_nth_col(table, i);
+ const dict_col_t* col
+ = dict_table_get_nth_col(table, i);
+ const char* col_name
+ = dict_table_get_col_name(table, i);
- if ((sym_node->name_len == ut_strlen(col->name))
- && (0 == ut_memcmp(sym_node->name, col->name,
+ if ((sym_node->name_len == ut_strlen(col_name))
+ && (0 == ut_memcmp(sym_node->name, col_name,
sym_node->name_len))) {
/* Found */
sym_node->resolved = TRUE;
@@ -502,8 +504,10 @@ pars_resolve_exp_columns(
sym_node->col_no = i;
sym_node->prefetch_buf = NULL;
- dfield_set_type(&(sym_node->common.val),
- dict_col_get_type(col));
+ dict_col_copy_type(
+ col,
+ dfield_get_type(&sym_node
+ ->common.val));
return;
}
@@ -592,7 +596,6 @@ pars_select_all_columns(
sym_node_t* col_node;
sym_node_t* table_node;
dict_table_t* table;
- dict_col_t* col;
ulint i;
select_node->select_list = NULL;
@@ -603,15 +606,15 @@ pars_select_all_columns(
table = table_node->table;
for (i = 0; i < dict_table_get_n_user_cols(table); i++) {
-
- col = dict_table_get_nth_col(table, i);
+ const char* col_name = dict_table_get_col_name(
+ table, i);
col_node = sym_tab_add_id(pars_sym_tab_global,
- (byte*)col->name,
- ut_strlen(col->name));
- select_node->select_list
- = que_node_list_add_last
- (select_node->select_list, col_node);
+ (byte*)col_name,
+ ut_strlen(col_name));
+
+ select_node->select_list = que_node_list_add_last(
+ select_node->select_list, col_node);
}
table_node = que_node_get_next(table_node);
@@ -888,10 +891,12 @@ pars_process_assign_list(
pars_resolve_exp_columns(table_sym, assign_node->val);
pars_resolve_exp_variables_and_types(NULL, assign_node->val);
#if 0
- ut_a(dtype_get_mtype
- (dfield_get_type(que_node_get_val(assign_node->col)))
- == dtype_get_mtype
- (dfield_get_type(que_node_get_val(assign_node->val))));
+ ut_a(dtype_get_mtype(
+ dfield_get_type(que_node_get_val(
+ assign_node->col)))
+ == dtype_get_mtype(
+ dfield_get_type(que_node_get_val(
+ assign_node->val))));
#endif
/* Add to the update node all the columns found in assignment
@@ -915,13 +920,14 @@ pars_process_assign_list(
col_sym = assign_node->col;
- upd_field_set_field_no(upd_field, dict_index_get_nth_col_pos
- (clust_index, col_sym->col_no),
+ upd_field_set_field_no(upd_field, dict_index_get_nth_col_pos(
+ clust_index, col_sym->col_no),
clust_index, NULL);
upd_field->exp = assign_node->val;
- if (!dtype_is_fixed_size(dict_index_get_nth_type
- (clust_index, upd_field->field_no))) {
+ if (!dict_col_get_fixed_size(
+ dict_index_get_nth_col(clust_index,
+ upd_field->field_no))) {
changes_field_size = 0;
}
@@ -1126,23 +1132,23 @@ pars_set_dfield_type(
if (type == &pars_int_token) {
ut_a(len == 0);
- dtype_set(dfield_get_type(dfield), DATA_INT, flags, 4, 0);
+ dtype_set(dfield_get_type(dfield), DATA_INT, flags, 4);
} else if (type == &pars_char_token) {
ut_a(len == 0);
dtype_set(dfield_get_type(dfield), DATA_VARCHAR,
- DATA_ENGLISH | flags, 0, 0);
+ DATA_ENGLISH | flags, 0);
} else if (type == &pars_binary_token) {
ut_a(len != 0);
dtype_set(dfield_get_type(dfield), DATA_FIXBINARY,
- DATA_BINARY_TYPE | flags, len, 0);
+ DATA_BINARY_TYPE | flags, len);
} else if (type == &pars_blob_token) {
ut_a(len == 0);
dtype_set(dfield_get_type(dfield), DATA_BLOB,
- DATA_BINARY_TYPE | flags, 0, 0);
+ DATA_BINARY_TYPE | flags, 0);
} else {
ut_error;
}
@@ -1599,7 +1605,8 @@ pars_create_table(
sym_node_t* table_sym, /* in: table name node in the symbol
table */
sym_node_t* column_defs, /* in: list of column names */
- void* not_fit_in_memory)/* in: a non-NULL pointer means that
+ void* not_fit_in_memory __attribute__((unused)))
+ /* in: a non-NULL pointer means that
this is a table which in simulations
should be simulated as not fitting
in memory; thread is put to sleep
@@ -1623,18 +1630,18 @@ pars_create_table(
create tables in the old (not compact) record format. */
table = dict_mem_table_create(table_sym->name, 0, n_cols, 0);
+#ifdef UNIV_DEBUG
if (not_fit_in_memory != NULL) {
table->does_not_fit_in_memory = TRUE;
}
-
+#endif /* UNIV_DEBUG */
column = column_defs;
while (column) {
dtype = dfield_get_type(que_node_get_val(column));
dict_mem_table_add_col(table, column->name, dtype->mtype,
- dtype->prtype, dtype->len,
- dtype->prec);
+ dtype->prtype, dtype->len);
column->resolved = TRUE;
column->token_type = SYM_COLUMN;
@@ -1859,8 +1866,8 @@ pars_sql(
pars_sym_tab_global = sym_tab_create(heap);
pars_sym_tab_global->string_len = strlen(str);
- pars_sym_tab_global->sql_string = mem_heap_dup
- (heap, str, pars_sym_tab_global->string_len + 1);
+ pars_sym_tab_global->sql_string = mem_heap_dup(
+ heap, str, pars_sym_tab_global->string_len + 1);
pars_sym_tab_global->next_char_pos = 0;
pars_sym_tab_global->info = info;
diff --git a/storage/innobase/pars/pars0sym.c b/storage/innobase/pars/pars0sym.c
index 8d691febb14..2d56fff2d42 100644
--- a/storage/innobase/pars/pars0sym.c
+++ b/storage/innobase/pars/pars0sym.c
@@ -102,7 +102,7 @@ sym_tab_add_int_lit(
node->indirection = NULL;
- dtype_set(&(node->common.val.type), DATA_INT, 0, 4, 0);
+ dtype_set(&(node->common.val.type), DATA_INT, 0, 4);
data = mem_heap_alloc(sym_tab->heap, 4);
mach_write_to_4(data, val);
@@ -144,7 +144,7 @@ sym_tab_add_str_lit(
node->indirection = NULL;
- dtype_set(&(node->common.val.type), DATA_VARCHAR, DATA_ENGLISH, 0, 0);
+ dtype_set(&(node->common.val.type), DATA_VARCHAR, DATA_ENGLISH, 0);
if (len) {
data = mem_heap_alloc(sym_tab->heap, len);
@@ -226,7 +226,7 @@ sym_tab_add_bound_lit(
ut_error;
}
- dtype_set(&(node->common.val.type), blit->type, blit->prtype, len, 0);
+ dtype_set(&(node->common.val.type), blit->type, blit->prtype, len);
dfield_set_data(&(node->common.val), blit->address, blit->length);
diff --git a/storage/innobase/read/read0read.c b/storage/innobase/read/read0read.c
index 4b9a116c3c1..2375c35190a 100644
--- a/storage/innobase/read/read0read.c
+++ b/storage/innobase/read/read0read.c
@@ -200,8 +200,9 @@ read_view_oldest_copy_or_open_new(
insert_done = 1;
} else {
read_view_set_nth_trx_id(view_copy, i,
- read_view_get_nth_trx_id
- (old_view, i - insert_done));
+ read_view_get_nth_trx_id(
+ old_view,
+ i - insert_done));
}
i++;
@@ -216,8 +217,8 @@ read_view_oldest_copy_or_open_new(
if (n > 0) {
/* The last active transaction has the smallest id: */
- view_copy->up_limit_id = read_view_get_nth_trx_id
- (view_copy, n - 1);
+ view_copy->up_limit_id = read_view_get_nth_trx_id(
+ view_copy, n - 1);
} else {
view_copy->up_limit_id = old_view->up_limit_id;
}
@@ -379,10 +380,10 @@ read_view_print(
for (i = 0; i < n_ids; i++) {
fprintf(stderr, "Read view trx id %lu %lu\n",
- (ulong) ut_dulint_get_high
- (read_view_get_nth_trx_id(view, i)),
- (ulong) ut_dulint_get_low
- (read_view_get_nth_trx_id(view, i)));
+ (ulong) ut_dulint_get_high(
+ read_view_get_nth_trx_id(view, i)),
+ (ulong) ut_dulint_get_low(
+ read_view_get_nth_trx_id(view, i)));
}
}
@@ -420,8 +421,8 @@ read_cursor_view_create_for_mysql(
mutex_enter(&kernel_mutex);
- curview->read_view = read_view_create_low
- (UT_LIST_GET_LEN(trx_sys->trx_list), curview->heap);
+ curview->read_view = read_view_create_low(
+ UT_LIST_GET_LEN(trx_sys->trx_list), curview->heap);
view = curview->read_view;
view->creator_trx_id = cr_trx->id;
diff --git a/storage/innobase/rem/rem0cmp.c b/storage/innobase/rem/rem0cmp.c
index 57a028352fc..07e5b64c157 100644
--- a/storage/innobase/rem/rem0cmp.c
+++ b/storage/innobase/rem/rem0cmp.c
@@ -92,47 +92,48 @@ cmp_collate(
}
/*****************************************************************
-Returns TRUE if two types are equal for comparison purposes. */
+Returns TRUE if two columns are equal for comparison purposes. */
ibool
-cmp_types_are_equal(
-/*================*/
- /* out: TRUE if the types are considered
- equal in comparisons */
- dtype_t* type1, /* in: type 1 */
- dtype_t* type2, /* in: type 2 */
- ibool check_charsets) /* in: whether to check charsets */
+cmp_cols_are_equal(
+/*===============*/
+ /* out: TRUE if the columns are
+ considered equal in comparisons */
+ const dict_col_t* col1, /* in: column 1 */
+ const dict_col_t* col2, /* in: column 2 */
+ ibool check_charsets)
+ /* in: whether to check charsets */
{
- if (dtype_is_non_binary_string_type(type1->mtype, type1->prtype)
- && dtype_is_non_binary_string_type(type2->mtype, type2->prtype)) {
+ if (dtype_is_non_binary_string_type(col1->mtype, col1->prtype)
+ && dtype_is_non_binary_string_type(col2->mtype, col2->prtype)) {
/* Both are non-binary string types: they can be compared if
and only if the charset-collation is the same */
if (check_charsets) {
- return(dtype_get_charset_coll(type1->prtype)
- == dtype_get_charset_coll(type2->prtype));
+ return(dtype_get_charset_coll(col1->prtype)
+ == dtype_get_charset_coll(col2->prtype));
} else {
return(TRUE);
}
}
- if (dtype_is_binary_string_type(type1->mtype, type1->prtype)
- && dtype_is_binary_string_type(type2->mtype, type2->prtype)) {
+ if (dtype_is_binary_string_type(col1->mtype, col1->prtype)
+ && dtype_is_binary_string_type(col2->mtype, col2->prtype)) {
/* Both are binary string types: they can be compared */
return(TRUE);
}
- if (type1->mtype != type2->mtype) {
+ if (col1->mtype != col2->mtype) {
return(FALSE);
}
- if (type1->mtype == DATA_INT
- && (type1->prtype & DATA_UNSIGNED)
- != (type2->prtype & DATA_UNSIGNED)) {
+ if (col1->mtype == DATA_INT
+ && (col1->prtype & DATA_UNSIGNED)
+ != (col2->prtype & DATA_UNSIGNED)) {
/* The storage format of an unsigned integer is different
from a signed integer: in a signed integer we OR
@@ -141,12 +142,7 @@ cmp_types_are_equal(
return(FALSE);
}
- if (type1->mtype == DATA_INT && type1->len != type2->len) {
-
- return(FALSE);
- }
-
- return(TRUE);
+ return(col1->mtype != DATA_INT || col1->len == col2->len);
}
#ifndef UNIV_HOTBACKUP
@@ -159,7 +155,8 @@ cmp_whole_field(
/*============*/
/* out: 1, 0, -1, if a is greater,
equal, less than b, respectively */
- dtype_t* type, /* in: data type */
+ ulint mtype, /* in: main type */
+ ulint prtype, /* in: precise type */
unsigned char* a, /* in: data field */
unsigned int a_length, /* in: data field length,
not UNIV_SQL_NULL */
@@ -172,11 +169,8 @@ cmp_whole_field(
double d_1;
double d_2;
int swap_flag = 1;
- ulint data_type;
- data_type = type->mtype;
-
- switch (data_type) {
+ switch (mtype) {
case DATA_DECIMAL:
/* Remove preceding spaces */
@@ -253,11 +247,8 @@ cmp_whole_field(
}
return(0);
- case DATA_VARMYSQL:
- case DATA_MYSQL:
case DATA_BLOB:
- if (data_type == DATA_BLOB
- && 0 != (type->prtype & DATA_BINARY_TYPE)) {
+ if (prtype & DATA_BINARY_TYPE) {
ut_print_timestamp(stderr);
fprintf(stderr,
@@ -265,15 +256,17 @@ cmp_whole_field(
" with a character set sensitive\n"
"InnoDB: comparison!\n");
}
-
- return(innobase_mysql_cmp
- ((int)(type->prtype & DATA_MYSQL_TYPE_MASK),
- (uint)dtype_get_charset_coll(type->prtype),
- a, a_length, b, b_length));
+ /* fall through */
+ case DATA_VARMYSQL:
+ case DATA_MYSQL:
+ return(innobase_mysql_cmp(
+ (int)(prtype & DATA_MYSQL_TYPE_MASK),
+ (uint)dtype_get_charset_coll(prtype),
+ a, a_length, b, b_length));
default:
fprintf(stderr,
"InnoDB: unknown type number %lu\n",
- (ulong) data_type);
+ (ulong) mtype);
ut_error;
}
@@ -290,7 +283,8 @@ cmp_data_data_slow(
/*===============*/
/* out: 1, 0, -1, if data1 is greater, equal,
less than data2, respectively */
- dtype_t* cur_type,/* in: data type of the fields */
+ ulint mtype, /* in: main type */
+ ulint prtype, /* in: precise type */
byte* data1, /* in: data field (== a pointer to a memory
buffer) */
ulint len1, /* in: data field length or UNIV_SQL_NULL */
@@ -303,8 +297,6 @@ cmp_data_data_slow(
ulint data2_byte;
ulint cur_bytes;
- ut_ad(dtype_validate(cur_type));
-
if (len1 == UNIV_SQL_NULL || len2 == UNIV_SQL_NULL) {
if (len1 == len2) {
@@ -322,13 +314,13 @@ cmp_data_data_slow(
return(1);
}
- if (cur_type->mtype >= DATA_FLOAT
- || (cur_type->mtype == DATA_BLOB
- && 0 == (cur_type->prtype & DATA_BINARY_TYPE)
- && dtype_get_charset_coll(cur_type->prtype)
+ if (mtype >= DATA_FLOAT
+ || (mtype == DATA_BLOB
+ && 0 == (prtype & DATA_BINARY_TYPE)
+ && dtype_get_charset_coll(prtype)
!= DATA_MYSQL_LATIN1_SWEDISH_CHARSET_COLL)) {
- return(cmp_whole_field(cur_type,
+ return(cmp_whole_field(mtype, prtype,
data1, (unsigned) len1,
data2, (unsigned) len2));
}
@@ -344,7 +336,7 @@ cmp_data_data_slow(
return(0);
}
- data1_byte = dtype_get_pad_char(cur_type);
+ data1_byte = dtype_get_pad_char(mtype, prtype);
if (data1_byte == ULINT_UNDEFINED) {
@@ -355,7 +347,7 @@ cmp_data_data_slow(
}
if (len2 <= cur_bytes) {
- data2_byte = dtype_get_pad_char(cur_type);
+ data2_byte = dtype_get_pad_char(mtype, prtype);
if (data2_byte == ULINT_UNDEFINED) {
@@ -372,9 +364,9 @@ cmp_data_data_slow(
goto next_byte;
}
- if (cur_type->mtype <= DATA_CHAR
- || (cur_type->mtype == DATA_BLOB
- && 0 == (cur_type->prtype & DATA_BINARY_TYPE))) {
+ if (mtype <= DATA_CHAR
+ || (mtype == DATA_BLOB
+ && 0 == (prtype & DATA_BINARY_TYPE))) {
data1_byte = cmp_collate(data1_byte);
data2_byte = cmp_collate(data2_byte);
@@ -435,8 +427,6 @@ cmp_dtuple_rec_with_match(
value for current comparison */
{
#ifndef UNIV_HOTBACKUP
- dtype_t* cur_type; /* pointer to type of the current
- field in dtuple */
dfield_t* dtuple_field; /* current field in logical record */
ulint dtuple_f_len; /* the length of the current field
in the logical record */
@@ -483,8 +473,17 @@ cmp_dtuple_rec_with_match(
while (cur_field < dtuple_get_n_fields_cmp(dtuple)) {
+ ulint mtype;
+ ulint prtype;
+
dtuple_field = dtuple_get_nth_field(dtuple, cur_field);
- cur_type = dfield_get_type(dtuple_field);
+ {
+ const dtype_t* type
+ = dfield_get_type(dtuple_field);
+
+ mtype = type->mtype;
+ prtype = type->prtype;
+ }
dtuple_f_len = dfield_get_len(dtuple_field);
@@ -524,13 +523,13 @@ cmp_dtuple_rec_with_match(
}
}
- if (cur_type->mtype >= DATA_FLOAT
- || (cur_type->mtype == DATA_BLOB
- && 0 == (cur_type->prtype & DATA_BINARY_TYPE)
- && dtype_get_charset_coll(cur_type->prtype)
+ if (mtype >= DATA_FLOAT
+ || (mtype == DATA_BLOB
+ && 0 == (prtype & DATA_BINARY_TYPE)
+ && dtype_get_charset_coll(prtype)
!= DATA_MYSQL_LATIN1_SWEDISH_CHARSET_COLL)) {
- ret = cmp_whole_field(cur_type,
+ ret = cmp_whole_field(mtype, prtype,
dfield_get_data(dtuple_field),
(unsigned) dtuple_f_len,
rec_b_ptr, (unsigned) rec_f_len);
@@ -558,7 +557,7 @@ cmp_dtuple_rec_with_match(
goto next_field;
}
- rec_byte = dtype_get_pad_char(cur_type);
+ rec_byte = dtype_get_pad_char(mtype, prtype);
if (rec_byte == ULINT_UNDEFINED) {
ret = 1;
@@ -570,7 +569,8 @@ cmp_dtuple_rec_with_match(
}
if (UNIV_UNLIKELY(dtuple_f_len <= cur_bytes)) {
- dtuple_byte = dtype_get_pad_char(cur_type);
+ dtuple_byte = dtype_get_pad_char(mtype,
+ prtype);
if (dtuple_byte == ULINT_UNDEFINED) {
ret = -1;
@@ -589,9 +589,9 @@ cmp_dtuple_rec_with_match(
goto next_byte;
}
- if (cur_type->mtype <= DATA_CHAR
- || (cur_type->mtype == DATA_BLOB
- && !(cur_type->prtype & DATA_BINARY_TYPE))) {
+ if (mtype <= DATA_CHAR
+ || (mtype == DATA_BLOB
+ && !(prtype & DATA_BINARY_TYPE))) {
rec_byte = cmp_collate(rec_byte);
dtuple_byte = cmp_collate(dtuple_byte);
@@ -696,8 +696,8 @@ cmp_dtuple_is_prefix_of_rec(
}
if (matched_fields == n_fields - 1
- && matched_bytes == dfield_get_len
- (dtuple_get_nth_field(dtuple, n_fields - 1))) {
+ && matched_bytes == dfield_get_len(
+ dtuple_get_nth_field(dtuple, n_fields - 1))) {
return(TRUE);
}
@@ -730,8 +730,6 @@ cmp_rec_rec_with_match(
the value for the current comparison */
{
#ifndef UNIV_HOTBACKUP
- dtype_t* cur_type; /* pointer to type struct of the
- current field in index */
ulint rec1_n_fields; /* the number of fields in rec */
ulint rec1_f_len; /* length of current field in rec */
byte* rec1_b_ptr; /* pointer to the current byte in rec field */
@@ -764,12 +762,19 @@ cmp_rec_rec_with_match(
while ((cur_field < rec1_n_fields) && (cur_field < rec2_n_fields)) {
- if (index->type & DICT_UNIVERSAL) {
- cur_type = dtype_binary;
+ ulint mtype;
+ ulint prtype;
+
+ if (UNIV_UNLIKELY(index->type & DICT_UNIVERSAL)) {
+ /* This is for the insert buffer B-tree. */
+ mtype = DATA_BINARY;
+ prtype = 0;
} else {
- cur_type = dict_col_get_type
- (dict_field_get_col(dict_index_get_nth_field
- (index, cur_field)));
+ const dict_col_t* col
+ = dict_index_get_nth_col(index, cur_field);
+
+ mtype = col->mtype;
+ prtype = col->prtype;
}
rec1_b_ptr = rec_get_nth_field(rec1, offsets1,
@@ -834,13 +839,13 @@ cmp_rec_rec_with_match(
}
}
- if (cur_type->mtype >= DATA_FLOAT
- || (cur_type->mtype == DATA_BLOB
- && 0 == (cur_type->prtype & DATA_BINARY_TYPE)
- && dtype_get_charset_coll(cur_type->prtype)
+ if (mtype >= DATA_FLOAT
+ || (mtype == DATA_BLOB
+ && 0 == (prtype & DATA_BINARY_TYPE)
+ && dtype_get_charset_coll(prtype)
!= DATA_MYSQL_LATIN1_SWEDISH_CHARSET_COLL)) {
- ret = cmp_whole_field(cur_type,
+ ret = cmp_whole_field(mtype, prtype,
rec1_b_ptr,
(unsigned) rec1_f_len,
rec2_b_ptr,
@@ -867,7 +872,7 @@ cmp_rec_rec_with_match(
goto next_field;
}
- rec2_byte = dtype_get_pad_char(cur_type);
+ rec2_byte = dtype_get_pad_char(mtype, prtype);
if (rec2_byte == ULINT_UNDEFINED) {
ret = 1;
@@ -879,7 +884,7 @@ cmp_rec_rec_with_match(
}
if (rec1_f_len <= cur_bytes) {
- rec1_byte = dtype_get_pad_char(cur_type);
+ rec1_byte = dtype_get_pad_char(mtype, prtype);
if (rec1_byte == ULINT_UNDEFINED) {
ret = -1;
@@ -898,9 +903,9 @@ cmp_rec_rec_with_match(
goto next_byte;
}
- if (cur_type->mtype <= DATA_CHAR
- || (cur_type->mtype == DATA_BLOB
- && !(cur_type->prtype & DATA_BINARY_TYPE))) {
+ if (mtype <= DATA_CHAR
+ || (mtype == DATA_BLOB
+ && !(prtype & DATA_BINARY_TYPE))) {
rec1_byte = cmp_collate(rec1_byte);
rec2_byte = cmp_collate(rec2_byte);
@@ -972,8 +977,6 @@ cmp_debug_dtuple_rec_with_match(
returns, contains the value for current
comparison */
{
- dtype_t* cur_type; /* pointer to type of the current
- field in dtuple */
dfield_t* dtuple_field; /* current field in logical record */
ulint dtuple_f_len; /* the length of the current field
in the logical record */
@@ -1014,9 +1017,17 @@ cmp_debug_dtuple_rec_with_match(
while (cur_field < dtuple_get_n_fields_cmp(dtuple)) {
+ ulint mtype;
+ ulint prtype;
+
dtuple_field = dtuple_get_nth_field(dtuple, cur_field);
+ {
+ const dtype_t* type
+ = dfield_get_type(dtuple_field);
- cur_type = dfield_get_type(dtuple_field);
+ mtype = type->mtype;
+ prtype = type->prtype;
+ }
dtuple_f_data = dfield_get_data(dtuple_field);
dtuple_f_len = dfield_get_len(dtuple_field);
@@ -1032,7 +1043,7 @@ cmp_debug_dtuple_rec_with_match(
goto order_resolved;
}
- ret = cmp_data_data(cur_type, dtuple_f_data, dtuple_f_len,
+ ret = cmp_data_data(mtype, prtype, dtuple_f_data, dtuple_f_len,
rec_f_data, rec_f_len);
if (ret != 0) {
goto order_resolved;
diff --git a/storage/innobase/rem/rem0rec.c b/storage/innobase/rem/rem0rec.c
index c57a19f0230..549b5ee8b28 100644
--- a/storage/innobase/rem/rem0rec.c
+++ b/storage/innobase/rem/rem0rec.c
@@ -202,8 +202,7 @@ rec_init_offsets(
}
field = dict_index_get_nth_field(index, i);
- if (!(dtype_get_prtype(dict_col_get_type
- (dict_field_get_col(field)))
+ if (!(dict_field_get_col(field)->prtype
& DATA_NOT_NULL)) {
/* nullable field => read the null flag */
@@ -226,11 +225,11 @@ rec_init_offsets(
if (UNIV_UNLIKELY(!field->fixed_len)) {
/* Variable-length field: read the length */
- dtype_t* type = dict_col_get_type
- (dict_field_get_col(field));
+ const dict_col_t* col
+ = dict_field_get_col(field);
len = *lens--;
- if (UNIV_UNLIKELY(dtype_get_len(type) > 255)
- || UNIV_UNLIKELY(dtype_get_mtype(type)
+ if (UNIV_UNLIKELY(col->len > 255)
+ || UNIV_UNLIKELY(col->mtype
== DATA_BLOB)) {
if (len & 0x80) {
/* 1exxxxxxx xxxxxxxx */
@@ -442,8 +441,6 @@ rec_get_converted_size_new(
{
ulint size = REC_N_NEW_EXTRA_BYTES
+ (index->n_nullable + 7) / 8;
- dict_field_t* field;
- dtype_t* type;
ulint i;
ulint n_fields;
ut_ad(index && dtuple);
@@ -471,25 +468,27 @@ rec_get_converted_size_new(
/* read the lengths of fields 0..n */
for (i = 0; i < n_fields; i++) {
- ulint len = dtuple_get_nth_field(dtuple, i)->len;
+ dict_field_t* field;
+ ulint len;
+ const dict_col_t* col;
+
field = dict_index_get_nth_field(index, i);
- type = dict_col_get_type(dict_field_get_col(field));
- ut_ad(len != UNIV_SQL_NULL
- || !(dtype_get_prtype(type) & DATA_NOT_NULL));
+ len = dtuple_get_nth_field(dtuple, i)->len;
+ col = dict_field_get_col(field);
+
+ ut_ad(len != UNIV_SQL_NULL || !(col->prtype & DATA_NOT_NULL));
if (len == UNIV_SQL_NULL) {
/* No length is stored for NULL fields. */
continue;
}
- ut_ad(len <= dtype_get_len(type)
- || dtype_get_mtype(type) == DATA_BLOB);
+ ut_ad(len <= col->len || col->mtype == DATA_BLOB);
ut_ad(!field->fixed_len || len == field->fixed_len);
if (field->fixed_len) {
} else if (len < 128
- || (dtype_get_len(type) < 256
- && dtype_get_mtype(type) != DATA_BLOB)) {
+ || (col->len < 256 && col->mtype != DATA_BLOB)) {
size++;
} else {
size += 2;
@@ -588,8 +587,6 @@ rec_set_nth_field_extern_bit_new(
{
byte* nulls = rec - (REC_N_NEW_EXTRA_BYTES + 1);
byte* lens = nulls - (index->n_nullable + 7) / 8;
- dict_field_t* field;
- dtype_t* type;
ulint i;
ulint n_fields;
ulint null_mask = 1;
@@ -603,9 +600,13 @@ rec_set_nth_field_extern_bit_new(
/* read the lengths of fields 0..n */
for (i = 0; i < n_fields; i++) {
+ const dict_field_t* field;
+ const dict_col_t* col;
+
field = dict_index_get_nth_field(index, i);
- type = dict_col_get_type(dict_field_get_col(field));
- if (!(dtype_get_prtype(type) & DATA_NOT_NULL)) {
+ col = dict_field_get_col(field);
+
+ if (!(col->prtype & DATA_NOT_NULL)) {
if (UNIV_UNLIKELY(!(byte) null_mask)) {
nulls--;
null_mask = 1;
@@ -629,8 +630,7 @@ rec_set_nth_field_extern_bit_new(
continue;
}
lens--;
- if (dtype_get_len(type) > 255
- || dtype_get_mtype(type) == DATA_BLOB) {
+ if (col->len > 255 || col->mtype == DATA_BLOB) {
ulint len = lens[1];
if (len & 0x80) { /* 1exxxxxx: 2-byte length */
if (i == ith) {
@@ -640,9 +640,10 @@ rec_set_nth_field_extern_bit_new(
/* toggle the extern bit */
len ^= 0x40;
if (mtr) {
- mlog_write_ulint
- (lens + 1, len,
- MLOG_1BYTE, mtr);
+ mlog_write_ulint(lens + 1,
+ len,
+ MLOG_1BYTE,
+ mtr);
} else {
lens[1] = (byte) len;
}
@@ -767,8 +768,8 @@ rec_convert_dtuple_to_rec_old(
len = dfield_get_len(field);
if (len == UNIV_SQL_NULL) {
- len = dtype_get_sql_null_size
- (dfield_get_type(field));
+ len = dtype_get_sql_null_size(
+ dfield_get_type(field));
data_write_sql_null(rec + end_offset, len);
end_offset += len;
@@ -795,8 +796,8 @@ rec_convert_dtuple_to_rec_old(
len = dfield_get_len(field);
if (len == UNIV_SQL_NULL) {
- len = dtype_get_sql_null_size
- (dfield_get_type(field));
+ len = dtype_get_sql_null_size(
+ dfield_get_type(field));
data_write_sql_null(rec + end_offset, len);
end_offset += len;
@@ -1057,8 +1058,8 @@ rec_copy_prefix_to_dtuple(
ut_ad(rec_validate(rec, offsets));
ut_ad(dtuple_check_typed(tuple));
- dtuple_set_info_bits(tuple, rec_get_info_bits
- (rec, dict_table_is_comp(index->table)));
+ dtuple_set_info_bits(tuple, rec_get_info_bits(
+ rec, dict_table_is_comp(index->table)));
for (i = 0; i < n_fields; i++) {
@@ -1137,8 +1138,6 @@ rec_copy_prefix_to_buf(
{
byte* nulls;
byte* lens;
- dict_field_t* field;
- dtype_t* type;
ulint i;
ulint prefix_len;
ulint null_mask;
@@ -1148,10 +1147,10 @@ rec_copy_prefix_to_buf(
if (!dict_table_is_comp(index->table)) {
ut_ad(rec_validate_old(rec));
- return(rec_copy_prefix_to_buf_old
- (rec, n_fields,
- rec_get_field_start_offs(rec, n_fields),
- buf, buf_size));
+ return(rec_copy_prefix_to_buf_old(
+ rec, n_fields,
+ rec_get_field_start_offs(rec, n_fields),
+ buf, buf_size));
}
status = rec_get_status(rec);
@@ -1180,9 +1179,13 @@ rec_copy_prefix_to_buf(
/* read the lengths of fields 0..n */
for (i = 0; i < n_fields; i++) {
+ const dict_field_t* field;
+ const dict_col_t* col;
+
field = dict_index_get_nth_field(index, i);
- type = dict_col_get_type(dict_field_get_col(field));
- if (!(dtype_get_prtype(type) & DATA_NOT_NULL)) {
+ col = dict_field_get_col(field);
+
+ if (!(col->prtype & DATA_NOT_NULL)) {
/* nullable field => read the null flag */
if (UNIV_UNLIKELY(!(byte) null_mask)) {
nulls--;
@@ -1201,8 +1204,7 @@ rec_copy_prefix_to_buf(
prefix_len += field->fixed_len;
} else {
ulint len = *lens--;
- if (dtype_get_len(type) > 255
- || dtype_get_mtype(type) == DATA_BLOB) {
+ if (col->len > 255 || col->mtype == DATA_BLOB) {
if (len & 0x80) {
/* 1exxxxxx */
len &= 0x3f;
diff --git a/storage/innobase/row/row0ins.c b/storage/innobase/row/row0ins.c
index 352519f5d56..aeaa83daa4d 100644
--- a/storage/innobase/row/row0ins.c
+++ b/storage/innobase/row/row0ins.c
@@ -135,12 +135,12 @@ row_ins_alloc_sys_fields(
/*=====================*/
ins_node_t* node) /* in: insert node */
{
- dtuple_t* row;
- dict_table_t* table;
- mem_heap_t* heap;
- dict_col_t* col;
- dfield_t* dfield;
- byte* ptr;
+ dtuple_t* row;
+ dict_table_t* table;
+ mem_heap_t* heap;
+ const dict_col_t* col;
+ dfield_t* dfield;
+ byte* ptr;
row = node->row;
table = node->table;
@@ -251,8 +251,8 @@ row_ins_sec_index_entry_by_modify(
heap = mem_heap_create(1024);
- update = row_upd_build_sec_rec_difference_binary
- (cursor->index, entry, rec, thr_get_trx(thr), heap);
+ update = row_upd_build_sec_rec_difference_binary(
+ cursor->index, entry, rec, thr_get_trx(thr), heap);
if (mode == BTR_MODIFY_LEAF) {
/* Try an optimistic updating of the record, keeping changes
within the page */
@@ -445,7 +445,6 @@ row_ins_cascade_calc_update_vec(
upd_field_t* parent_ufield;
ulint n_fields_updated;
ulint parent_field_no;
- dtype_t* type;
ulint i;
ulint j;
@@ -470,16 +469,19 @@ row_ins_cascade_calc_update_vec(
for (i = 0; i < foreign->n_fields; i++) {
- parent_field_no = dict_table_get_nth_col_pos
- (parent_table,
- dict_index_get_nth_col_no(parent_index, i));
+ parent_field_no = dict_table_get_nth_col_pos(
+ parent_table,
+ dict_index_get_nth_col_no(parent_index, i));
for (j = 0; j < parent_update->n_fields; j++) {
parent_ufield = parent_update->fields + j;
if (parent_ufield->field_no == parent_field_no) {
- ulint min_size;
+ ulint min_size;
+ const dict_col_t* col;
+
+ col = dict_index_get_nth_col(index, i);
/* A field in the parent index record is
updated. Let us make the update vector
@@ -488,20 +490,17 @@ row_ins_cascade_calc_update_vec(
ufield = update->fields + n_fields_updated;
ufield->field_no
- = dict_table_get_nth_col_pos
- (table,
- dict_index_get_nth_col_no(index, i));
+ = dict_table_get_nth_col_pos(
+ table, dict_col_get_no(col));
ufield->exp = NULL;
ufield->new_val = parent_ufield->new_val;
- type = dict_index_get_nth_type(index, i);
-
/* Do not allow a NOT NULL column to be
updated as NULL */
if (ufield->new_val.len == UNIV_SQL_NULL
- && (type->prtype & DATA_NOT_NULL)) {
+ && (col->prtype & DATA_NOT_NULL)) {
return(ULINT_UNDEFINED);
}
@@ -510,9 +509,12 @@ row_ins_cascade_calc_update_vec(
column, do not allow the update */
if (ufield->new_val.len != UNIV_SQL_NULL
- && dtype_get_at_most_n_mbchars
- (type, dtype_get_len(type),
- ufield->new_val.len, ufield->new_val.data)
+ && dtype_get_at_most_n_mbchars(
+ col->prtype,
+ col->mbminlen, col->mbmaxlen,
+ col->len,
+ ufield->new_val.len,
+ ufield->new_val.data)
< ufield->new_val.len) {
return(ULINT_UNDEFINED);
@@ -523,7 +525,7 @@ row_ins_cascade_calc_update_vec(
need to pad with spaces the new value of the
child column */
- min_size = dtype_get_min_size(type);
+ min_size = dict_col_get_min_size(col);
if (min_size
&& ufield->new_val.len != UNIV_SQL_NULL
@@ -531,8 +533,8 @@ row_ins_cascade_calc_update_vec(
char* pad_start;
const char* pad_end;
- ufield->new_val.data = mem_heap_alloc
- (heap, min_size);
+ ufield->new_val.data = mem_heap_alloc(
+ heap, min_size);
pad_start = ((char*) ufield
->new_val.data)
+ ufield->new_val.len;
@@ -544,14 +546,13 @@ row_ins_cascade_calc_update_vec(
parent_ufield->new_val.data,
parent_ufield->new_val.len);
- switch (UNIV_EXPECT(dtype_get_mbminlen
- (type), 1)) {
+ switch (UNIV_EXPECT(col->mbminlen,1)) {
default:
ut_error;
case 1:
if (UNIV_UNLIKELY
- (dtype_get_charset_coll
- (dtype_get_prtype(type))
+ (dtype_get_charset_coll(
+ col->prtype)
== DATA_MYSQL_BINARY_CHARSET_COLL)) {
/* Do not pad BINARY
columns. */
@@ -603,8 +604,8 @@ row_ins_set_detailed(
if (os_file_set_eof(srv_misc_tmpfile)) {
ut_print_name(srv_misc_tmpfile, trx, TRUE,
foreign->foreign_table_name);
- dict_print_info_on_foreign_key_in_create_format
- (srv_misc_tmpfile, trx, foreign, FALSE);
+ dict_print_info_on_foreign_key_in_create_format(
+ srv_misc_tmpfile, trx, foreign, FALSE);
trx_set_detailed_error_from_file(trx, srv_misc_tmpfile);
} else {
trx_set_detailed_error(trx, "temp file operation failed");
@@ -834,8 +835,8 @@ row_ins_foreign_check_on_constraint(
operation. */
node->cascade_heap = mem_heap_create(128);
- node->cascade_node = row_create_update_node_for_mysql
- (table, node->cascade_heap);
+ node->cascade_node = row_create_update_node_for_mysql(
+ table, node->cascade_heap);
que_node_set_parent(node->cascade_node, node);
}
@@ -881,11 +882,11 @@ row_ins_foreign_check_on_constraint(
err = DB_ROW_IS_REFERENCED;
- row_ins_foreign_report_err
- ("Trying an update, possibly causing a cyclic"
- " cascaded update\n"
- "in the child table,", thr, foreign,
- btr_pcur_get_rec(pcur), entry);
+ row_ins_foreign_report_err(
+ "Trying an update, possibly causing a cyclic"
+ " cascaded update\n"
+ "in the child table,", thr, foreign,
+ btr_pcur_get_rec(pcur), entry);
goto nonstandard_exit_func;
}
@@ -893,9 +894,9 @@ row_ins_foreign_check_on_constraint(
if (row_ins_cascade_n_ancestors(cascade) >= 15) {
err = DB_ROW_IS_REFERENCED;
- row_ins_foreign_report_err
- ("Trying a too deep cascaded delete or update\n",
- thr, foreign, btr_pcur_get_rec(pcur), entry);
+ row_ins_foreign_report_err(
+ "Trying a too deep cascaded delete or update\n",
+ thr, foreign, btr_pcur_get_rec(pcur), entry);
goto nonstandard_exit_func;
}
@@ -961,9 +962,9 @@ row_ins_foreign_check_on_constraint(
we already have a normal shared lock on the appropriate
gap if the search criterion was not unique */
- err = lock_clust_rec_read_check_and_lock_alt
- (0, clust_rec, clust_index,
- LOCK_X, LOCK_REC_NOT_GAP, thr);
+ err = lock_clust_rec_read_check_and_lock_alt(
+ 0, clust_rec, clust_index, LOCK_X, LOCK_REC_NOT_GAP,
+ thr);
}
if (err != DB_SUCCESS) {
@@ -995,8 +996,9 @@ row_ins_foreign_check_on_constraint(
for (i = 0; i < foreign->n_fields; i++) {
(update->fields + i)->field_no
- = dict_table_get_nth_col_pos
- (table, dict_index_get_nth_col_no(index, i));
+ = dict_table_get_nth_col_pos(
+ table,
+ dict_index_get_nth_col_no(index, i));
(update->fields + i)->exp = NULL;
(update->fields + i)->new_val.len = UNIV_SQL_NULL;
(update->fields + i)->new_val.data = NULL;
@@ -1017,14 +1019,14 @@ row_ins_foreign_check_on_constraint(
if (n_to_update == ULINT_UNDEFINED) {
err = DB_ROW_IS_REFERENCED;
- row_ins_foreign_report_err
- ("Trying a cascaded update where the"
- " updated value in the child\n"
- "table would not fit in the length"
- " of the column, or the value would\n"
- "be NULL and the column is"
- " declared as not NULL in the child table,",
- thr, foreign, btr_pcur_get_rec(pcur), entry);
+ row_ins_foreign_report_err(
+ "Trying a cascaded update where the"
+ " updated value in the child\n"
+ "table would not fit in the length"
+ " of the column, or the value would\n"
+ "be NULL and the column is"
+ " declared as not NULL in the child table,",
+ thr, foreign, btr_pcur_get_rec(pcur), entry);
goto nonstandard_exit_func;
}
@@ -1133,11 +1135,11 @@ row_ins_set_shared_rec_lock(
ut_ad(rec_offs_validate(rec, index, offsets));
if (index->type & DICT_CLUSTERED) {
- err = lock_clust_rec_read_check_and_lock
- (0, rec, index, offsets, LOCK_S, type, thr);
+ err = lock_clust_rec_read_check_and_lock(
+ 0, rec, index, offsets, LOCK_S, type, thr);
} else {
- err = lock_sec_rec_read_check_and_lock
- (0, rec, index, offsets, LOCK_S, type, thr);
+ err = lock_sec_rec_read_check_and_lock(
+ 0, rec, index, offsets, LOCK_S, type, thr);
}
return(err);
@@ -1164,11 +1166,11 @@ row_ins_set_exclusive_rec_lock(
ut_ad(rec_offs_validate(rec, index, offsets));
if (index->type & DICT_CLUSTERED) {
- err = lock_clust_rec_read_check_and_lock
- (0, rec, index, offsets, LOCK_X, type, thr);
+ err = lock_clust_rec_read_check_and_lock(
+ 0, rec, index, offsets, LOCK_X, type, thr);
} else {
- err = lock_sec_rec_read_check_and_lock
- (0, rec, index, offsets, LOCK_X, type, thr);
+ err = lock_sec_rec_read_check_and_lock(
+ 0, rec, index, offsets, LOCK_X, type, thr);
}
return(err);
@@ -1232,8 +1234,8 @@ run_again:
for example */
for (i = 0; i < foreign->n_fields; i++) {
- if (UNIV_SQL_NULL == dfield_get_len
- (dtuple_get_nth_field(entry, i))) {
+ if (UNIV_SQL_NULL == dfield_get_len(
+ dtuple_get_nth_field(entry, i))) {
goto exit_func;
}
@@ -1286,8 +1288,8 @@ run_again:
ut_print_name(ef, trx, TRUE,
foreign->foreign_table_name);
fputs(":\n", ef);
- dict_print_info_on_foreign_key_in_create_format
- (ef, trx, foreign, TRUE);
+ dict_print_info_on_foreign_key_in_create_format(
+ ef, trx, foreign, TRUE);
fputs("\nTrying to add to index ", ef);
ut_print_name(ef, trx, FALSE,
foreign->foreign_index->name);
@@ -1348,9 +1350,8 @@ run_again:
if (rec == page_get_supremum_rec(page)) {
- err = row_ins_set_shared_rec_lock
- (LOCK_ORDINARY, rec,
- check_index, offsets, thr);
+ err = row_ins_set_shared_rec_lock(
+ LOCK_ORDINARY, rec, check_index, offsets, thr);
if (err != DB_SUCCESS) {
break;
@@ -1364,9 +1365,9 @@ run_again:
if (cmp == 0) {
if (rec_get_deleted_flag(rec,
rec_offs_comp(offsets))) {
- err = row_ins_set_shared_rec_lock
- (LOCK_ORDINARY, rec,
- check_index, offsets, thr);
+ err = row_ins_set_shared_rec_lock(
+ LOCK_ORDINARY, rec, check_index,
+ offsets, thr);
if (err != DB_SUCCESS) {
break;
@@ -1376,9 +1377,9 @@ run_again:
a record because we can allow inserts
into gaps */
- err = row_ins_set_shared_rec_lock
- (LOCK_REC_NOT_GAP, rec,
- check_index, offsets, thr);
+ err = row_ins_set_shared_rec_lock(
+ LOCK_REC_NOT_GAP, rec, check_index,
+ offsets, thr);
if (err != DB_SUCCESS) {
@@ -1394,9 +1395,9 @@ run_again:
condition: check them in a separate
function */
- err = row_ins_foreign_check_on_constraint
- (thr, foreign, &pcur,
- entry, &mtr);
+ err = row_ins_foreign_check_on_constraint(
+ thr, foreign, &pcur, entry,
+ &mtr);
if (err != DB_SUCCESS) {
/* Since reporting a plain
"duplicate key" error
@@ -1417,9 +1418,9 @@ run_again:
break;
}
} else {
- row_ins_foreign_report_err
- ("Trying to delete or update",
- thr, foreign, rec, entry);
+ row_ins_foreign_report_err(
+ "Trying to delete or update",
+ thr, foreign, rec, entry);
err = DB_ROW_IS_REFERENCED;
break;
@@ -1428,8 +1429,8 @@ run_again:
}
if (cmp < 0) {
- err = row_ins_set_shared_rec_lock
- (LOCK_GAP, rec, check_index, offsets, thr);
+ err = row_ins_set_shared_rec_lock(
+ LOCK_GAP, rec, check_index, offsets, thr);
if (err != DB_SUCCESS) {
break;
@@ -1437,8 +1438,8 @@ run_again:
if (check_ref) {
err = DB_NO_REFERENCED_ROW;
- row_ins_foreign_report_add_err
- (trx, foreign, rec, entry);
+ row_ins_foreign_report_add_err(
+ trx, foreign, rec, entry);
} else {
err = DB_SUCCESS;
}
@@ -1453,8 +1454,8 @@ next_rec:
if (!moved) {
if (check_ref) {
rec = btr_pcur_get_rec(&pcur);
- row_ins_foreign_report_add_err
- (trx, foreign, rec, entry);
+ row_ins_foreign_report_add_err(
+ trx, foreign, rec, entry);
err = DB_NO_REFERENCED_ROW;
} else {
err = DB_SUCCESS;
@@ -1546,8 +1547,8 @@ row_ins_check_foreign_constraints(
But the counter on the table protects the referenced
table from being dropped while the check is running. */
- err = row_ins_check_foreign_constraint
- (TRUE, foreign, table, entry, thr);
+ err = row_ins_check_foreign_constraint(
+ TRUE, foreign, table, entry, thr);
if (foreign->referenced_table) {
mutex_enter(&(dict_sys->mutex));
@@ -1617,8 +1618,8 @@ row_ins_dupl_error_with_rec(
if (!(index->type & DICT_CLUSTERED)) {
for (i = 0; i < n_unique; i++) {
- if (UNIV_SQL_NULL == dfield_get_len
- (dtuple_get_nth_field(entry, i))) {
+ if (UNIV_SQL_NULL == dfield_get_len(
+ dtuple_get_nth_field(entry, i))) {
return(FALSE);
}
@@ -1665,8 +1666,8 @@ row_ins_scan_sec_index_for_duplicate(
since we define NULL != NULL in this case */
for (i = 0; i < n_unique; i++) {
- if (UNIV_SQL_NULL == dfield_get_len
- (dtuple_get_nth_field(entry, i))) {
+ if (UNIV_SQL_NULL == dfield_get_len(
+ dtuple_get_nth_field(entry, i))) {
return(DB_SUCCESS);
}
@@ -1702,12 +1703,12 @@ row_ins_scan_sec_index_for_duplicate(
duplicates ( REPLACE, LOAD DATAFILE REPLACE,
INSERT ON DUPLICATE KEY UPDATE). */
- err = row_ins_set_exclusive_rec_lock
- (LOCK_ORDINARY, rec, index, offsets, thr);
+ err = row_ins_set_exclusive_rec_lock(
+ LOCK_ORDINARY, rec, index, offsets, thr);
} else {
- err = row_ins_set_shared_rec_lock
- (LOCK_ORDINARY, rec, index, offsets, thr);
+ err = row_ins_set_shared_rec_lock(
+ LOCK_ORDINARY, rec, index, offsets, thr);
}
if (err != DB_SUCCESS) {
@@ -1831,22 +1832,22 @@ row_ins_duplicate_error_in_clust(
duplicates ( REPLACE, LOAD DATAFILE REPLACE,
INSERT ON DUPLICATE KEY UPDATE). */
- err = row_ins_set_exclusive_rec_lock
- (LOCK_REC_NOT_GAP, rec,
- cursor->index, offsets, thr);
+ err = row_ins_set_exclusive_rec_lock(
+ LOCK_REC_NOT_GAP, rec,
+ cursor->index, offsets, thr);
} else {
- err = row_ins_set_shared_rec_lock
- (LOCK_REC_NOT_GAP, rec,
- cursor->index, offsets, thr);
+ err = row_ins_set_shared_rec_lock(
+ LOCK_REC_NOT_GAP, rec,
+ cursor->index, offsets, thr);
}
if (err != DB_SUCCESS) {
goto func_exit;
}
- if (row_ins_dupl_error_with_rec
- (rec, entry, cursor->index, offsets)) {
+ if (row_ins_dupl_error_with_rec(
+ rec, entry, cursor->index, offsets)) {
trx->error_info = cursor->index;
err = DB_DUPLICATE_KEY;
goto func_exit;
@@ -1869,22 +1870,22 @@ row_ins_duplicate_error_in_clust(
duplicates ( REPLACE, LOAD DATAFILE REPLACE,
INSERT ON DUPLICATE KEY UPDATE). */
- err = row_ins_set_exclusive_rec_lock
- (LOCK_REC_NOT_GAP, rec,
- cursor->index, offsets, thr);
+ err = row_ins_set_exclusive_rec_lock(
+ LOCK_REC_NOT_GAP, rec,
+ cursor->index, offsets, thr);
} else {
- err = row_ins_set_shared_rec_lock
- (LOCK_REC_NOT_GAP, rec,
- cursor->index, offsets, thr);
+ err = row_ins_set_shared_rec_lock(
+ LOCK_REC_NOT_GAP, rec,
+ cursor->index, offsets, thr);
}
if (err != DB_SUCCESS) {
goto func_exit;
}
- if (row_ins_dupl_error_with_rec
- (rec, entry, cursor->index, offsets)) {
+ if (row_ins_dupl_error_with_rec(
+ rec, entry, cursor->index, offsets)) {
trx->error_info = cursor->index;
err = DB_DUPLICATE_KEY;
goto func_exit;
@@ -2021,8 +2022,8 @@ row_ins_index_entry_low(
#ifdef UNIV_DEBUG
{
page_t* page = btr_cur_get_page(&cursor);
- rec_t* first_rec = page_rec_get_next
- (page_get_infimum_rec(page));
+ rec_t* first_rec = page_rec_get_next(
+ page_get_infimum_rec(page));
if (UNIV_LIKELY(first_rec != page_get_supremum_rec(page))) {
ut_a(rec_get_n_fields(first_rec, index)
@@ -2040,16 +2041,16 @@ row_ins_index_entry_low(
/* Note that the following may return also
DB_LOCK_WAIT */
- err = row_ins_duplicate_error_in_clust
- (&cursor, entry, thr, &mtr);
+ err = row_ins_duplicate_error_in_clust(
+ &cursor, entry, thr, &mtr);
if (err != DB_SUCCESS) {
goto function_exit;
}
} else {
mtr_commit(&mtr);
- err = row_ins_scan_sec_index_for_duplicate
- (index, entry, thr);
+ err = row_ins_scan_sec_index_for_duplicate(
+ index, entry, thr);
mtr_start(&mtr);
if (err != DB_SUCCESS) {
@@ -2084,19 +2085,19 @@ row_ins_index_entry_low(
}
if (index->type & DICT_CLUSTERED) {
- err = row_ins_clust_index_entry_by_modify
- (mode, &cursor, &big_rec, entry,
- ext_vec, n_ext_vec, thr, &mtr);
+ err = row_ins_clust_index_entry_by_modify(
+ mode, &cursor, &big_rec, entry,
+ ext_vec, n_ext_vec, thr, &mtr);
} else {
- err = row_ins_sec_index_entry_by_modify
- (mode, &cursor, entry, thr, &mtr);
+ err = row_ins_sec_index_entry_by_modify(
+ mode, &cursor, entry, thr, &mtr);
}
} else {
if (mode == BTR_MODIFY_LEAF) {
- err = btr_cur_optimistic_insert
- (0, &cursor, entry,
- &insert_rec, &big_rec, thr, &mtr);
+ err = btr_cur_optimistic_insert(
+ 0, &cursor, entry, &insert_rec, &big_rec,
+ thr, &mtr);
} else {
ut_a(mode == BTR_MODIFY_TREE);
if (buf_LRU_buf_pool_running_out()) {
@@ -2105,9 +2106,9 @@ row_ins_index_entry_low(
goto function_exit;
}
- err = btr_cur_pessimistic_insert
- (0, &cursor, entry,
- &insert_rec, &big_rec, thr, &mtr);
+ err = btr_cur_pessimistic_insert(
+ 0, &cursor, entry, &insert_rec, &big_rec,
+ thr, &mtr);
}
if (err == DB_SUCCESS) {
@@ -2211,7 +2212,6 @@ row_ins_index_entry_set_vals(
dfield_t* row_field;
ulint n_fields;
ulint i;
- dtype_t* cur_type;
ut_ad(entry && row);
@@ -2227,12 +2227,13 @@ row_ins_index_entry_set_vals(
if (ind_field->prefix_len > 0
&& dfield_get_len(row_field) != UNIV_SQL_NULL) {
- cur_type = dict_col_get_type
- (dict_field_get_col(ind_field));
+ const dict_col_t* col
+ = dict_field_get_col(ind_field);
- field->len = dtype_get_at_most_n_mbchars
- (cur_type, ind_field->prefix_len,
- dfield_get_len(row_field), row_field->data);
+ field->len = dtype_get_at_most_n_mbchars(
+ col->prtype, col->mbminlen, col->mbmaxlen,
+ ind_field->prefix_len,
+ row_field->len, row_field->data);
} else {
field->len = row_field->len;
}
diff --git a/storage/innobase/row/row0mysql.c b/storage/innobase/row/row0mysql.c
index af3f80fa53b..a2895bae71a 100644
--- a/storage/innobase/row/row0mysql.c
+++ b/storage/innobase/row/row0mysql.c
@@ -417,13 +417,13 @@ row_mysql_convert_row_to_innobase(
}
}
- row_mysql_store_col_in_innobase_format
- (dfield,
- prebuilt->ins_upd_rec_buff + templ->mysql_col_offset,
- TRUE, /* MySQL row format data */
- mysql_rec + templ->mysql_col_offset,
- templ->mysql_col_len,
- dict_table_is_comp(prebuilt->table));
+ row_mysql_store_col_in_innobase_format(
+ dfield,
+ prebuilt->ins_upd_rec_buff + templ->mysql_col_offset,
+ TRUE, /* MySQL row format data */
+ mysql_rec + templ->mysql_col_offset,
+ templ->mysql_col_len,
+ dict_table_is_comp(prebuilt->table));
next_column:
;
}
@@ -619,8 +619,8 @@ row_create_prebuilt(
prebuilt->sel_graph = NULL;
- prebuilt->search_tuple = dtuple_create
- (heap, 2 * dict_table_get_n_cols(table));
+ prebuilt->search_tuple = dtuple_create(
+ heap, 2 * dict_table_get_n_cols(table));
clust_index = dict_table_get_first_index(table);
@@ -707,16 +707,16 @@ row_prebuilt_free(
for (i = 0; i < MYSQL_FETCH_CACHE_SIZE; i++) {
if (prebuilt->fetch_cache[i] != NULL) {
- if ((ROW_PREBUILT_FETCH_MAGIC_N != mach_read_from_4
- ((prebuilt->fetch_cache[i]) - 4))
- || (ROW_PREBUILT_FETCH_MAGIC_N != mach_read_from_4
- ((prebuilt->fetch_cache[i])
- + prebuilt->mysql_row_len))) {
+ if ((ROW_PREBUILT_FETCH_MAGIC_N != mach_read_from_4(
+ (prebuilt->fetch_cache[i]) - 4))
+ || (ROW_PREBUILT_FETCH_MAGIC_N != mach_read_from_4(
+ (prebuilt->fetch_cache[i])
+ + prebuilt->mysql_row_len))) {
fputs("InnoDB: Error: trying to free"
" a corrupt fetch buffer.\n", stderr);
- mem_analyze_corruption
- (prebuilt->fetch_cache[i]);
+ mem_analyze_corruption(
+ prebuilt->fetch_cache[i]);
ut_error;
}
@@ -811,8 +811,8 @@ row_get_prebuilt_insert_row(
prebuilt->ins_node = node;
if (prebuilt->ins_upd_rec_buff == NULL) {
- prebuilt->ins_upd_rec_buff = mem_heap_alloc
- (prebuilt->heap, prebuilt->mysql_row_len);
+ prebuilt->ins_upd_rec_buff = mem_heap_alloc(
+ prebuilt->heap, prebuilt->mysql_row_len);
}
row = dtuple_create(prebuilt->heap,
@@ -830,10 +830,10 @@ row_get_prebuilt_insert_row(
ins_node_set_new_row(node, row);
- prebuilt->ins_graph = que_node_get_parent
- (pars_complete_graph_for_exec(node,
- prebuilt->trx,
- prebuilt->heap));
+ prebuilt->ins_graph = que_node_get_parent(
+ pars_complete_graph_for_exec(node,
+ prebuilt->trx,
+ prebuilt->heap));
prebuilt->ins_graph->state = QUE_FORK_ACTIVE;
}
@@ -1188,10 +1188,10 @@ row_prebuild_sel_graph(
node = sel_node_create(prebuilt->heap);
- prebuilt->sel_graph = que_node_get_parent
- (pars_complete_graph_for_exec(node,
- prebuilt->trx,
- prebuilt->heap));
+ prebuilt->sel_graph = que_node_get_parent(
+ pars_complete_graph_for_exec(node,
+ prebuilt->trx,
+ prebuilt->heap));
prebuilt->sel_graph->state = QUE_FORK_ACTIVE;
}
@@ -1260,10 +1260,10 @@ row_get_prebuilt_update_vector(
prebuilt->upd_node = node;
- prebuilt->upd_graph = que_node_get_parent
- (pars_complete_graph_for_exec(node,
- prebuilt->trx,
- prebuilt->heap));
+ prebuilt->upd_graph = que_node_get_parent(
+ pars_complete_graph_for_exec(node,
+ prebuilt->trx,
+ prebuilt->heap));
prebuilt->upd_graph->state = QUE_FORK_ACTIVE;
}
@@ -1607,16 +1607,11 @@ row_table_got_default_clust_index(
/*==============================*/
dict_table_t* table)
{
- dict_index_t* clust_index;
+ const dict_index_t* clust_index;
clust_index = dict_table_get_first_index(table);
- if (dtype_get_mtype(dict_index_get_nth_type(clust_index, 0))
- == DATA_SYS) {
- return(TRUE);
- }
-
- return(FALSE);
+ return(dict_index_get_nth_col(clust_index, 0)->mtype == DATA_SYS);
}
/*************************************************************************
@@ -1782,9 +1777,8 @@ row_create_table_for_mysql(
/* Check that no reserved column names are used. */
for (i = 0; i < dict_table_get_n_user_cols(table); i++) {
- dict_col_t* col = dict_table_get_nth_col(table, i);
-
- if (dict_col_name_is_reserved(col->name)) {
+ if (dict_col_name_is_reserved(
+ dict_table_get_col_name(table, i))) {
dict_mem_table_free(table);
trx_commit_for_mysql(trx);
@@ -1975,16 +1969,16 @@ row_create_index_for_mysql(
for (i = 0; i < dict_index_get_n_fields(index); i++) {
for (j = 0; j < i; j++) {
- if (0 == ut_strcmp
- (dict_index_get_nth_field(index, j)->name,
- dict_index_get_nth_field(index, i)->name)) {
+ if (0 == ut_strcmp(
+ dict_index_get_nth_field(index, j)->name,
+ dict_index_get_nth_field(index, i)->name)) {
ut_print_timestamp(stderr);
fputs(" InnoDB: Error: column ", stderr);
ut_print_name(stderr, trx, FALSE,
- dict_index_get_nth_field
- (index, i)->name);
+ dict_index_get_nth_field(
+ index, i)->name);
fputs(" appears twice in ", stderr);
dict_index_name_print(stderr, trx, index);
fputs("\n"
@@ -2205,8 +2199,8 @@ loop:
goto already_dropped;
}
- if (DB_SUCCESS != row_drop_table_for_mysql_in_background
- (drop->table_name)) {
+ if (DB_SUCCESS != row_drop_table_for_mysql_in_background(
+ drop->table_name)) {
/* If the DROP fails for some table, we return, and let the
main thread retry later */
@@ -2835,9 +2829,9 @@ row_truncate_table_for_mysql(
rec = btr_pcur_get_rec(&pcur);
if (root_page_no != FIL_NULL) {
- page_rec_write_index_page_no
- (rec, DICT_SYS_INDEXES_PAGE_NO_FIELD,
- root_page_no, &mtr);
+ page_rec_write_index_page_no(
+ rec, DICT_SYS_INDEXES_PAGE_NO_FIELD,
+ root_page_no, &mtr);
/* We will need to commit and restart the
mini-transaction in order to avoid deadlocks.
The dict_truncate_index_tree() call has allocated
@@ -3038,8 +3032,8 @@ check_next_foreign:
}
if (foreign && trx->check_foreigns
- && !(drop_db && dict_tables_have_same_db
- (name, foreign->foreign_table_name))) {
+ && !(drop_db && dict_tables_have_same_db(
+ name, foreign->foreign_table_name))) {
FILE* ef = dict_foreign_err_file;
/* We only allow dropping a referenced table if
@@ -3232,8 +3226,8 @@ check_next_foreign:
space_id = table->space;
if (table->dir_path_of_temp_table != NULL) {
- dir_path_of_temp_table = mem_strdup
- (table->dir_path_of_temp_table);
+ dir_path_of_temp_table = mem_strdup(
+ table->dir_path_of_temp_table);
is_path = TRUE;
name_or_path = dir_path_of_temp_table;
} else {
@@ -3447,8 +3441,8 @@ row_delete_constraint(
ulint err;
/* New format constraints have ids <databasename>/<constraintname>. */
- err = row_delete_constraint_low
- (mem_heap_strcat(heap, database_name, id), trx);
+ err = row_delete_constraint_low(
+ mem_heap_strcat(heap, database_name, id), trx);
if ((err == DB_SUCCESS) && !strchr(id, '/')) {
/* Old format < 4.0.18 constraints have constraint ids
@@ -3570,9 +3564,9 @@ row_rename_table_for_mysql(
heap = mem_heap_create(100);
- err = dict_foreign_parse_drop_constraints
- (heap, trx, table,
- &n_constraints_to_drop, &constraints_to_drop);
+ err = dict_foreign_parse_drop_constraints(
+ heap, trx, table, &n_constraints_to_drop,
+ &constraints_to_drop);
if (err != DB_SUCCESS) {
@@ -3611,71 +3605,71 @@ row_rename_table_for_mysql(
pars_info_add_str_literal(info, "new_table_name", new_name);
pars_info_add_str_literal(info, "old_table_name", old_name);
- err = que_eval_sql
- (info,
- "PROCEDURE RENAME_CONSTRAINT_IDS () IS\n"
- "gen_constr_prefix CHAR;\n"
- "new_db_name CHAR;\n"
- "foreign_id CHAR;\n"
- "new_foreign_id CHAR;\n"
- "old_db_name_len INT;\n"
- "old_t_name_len INT;\n"
- "new_db_name_len INT;\n"
- "id_len INT;\n"
- "found INT;\n"
- "BEGIN\n"
- "found := 1;\n"
- "old_db_name_len := INSTR(:old_table_name, '/')-1;\n"
- "new_db_name_len := INSTR(:new_table_name, '/')-1;\n"
- "new_db_name := SUBSTR(:new_table_name, 0,\n"
- " new_db_name_len);\n"
- "old_t_name_len := LENGTH(:old_table_name);\n"
- "gen_constr_prefix := CONCAT(:old_table_name,\n"
- " '_ibfk_');\n"
- "WHILE found = 1 LOOP\n"
- " SELECT ID INTO foreign_id\n"
- " FROM SYS_FOREIGN\n"
- " WHERE FOR_NAME = :old_table_name\n"
- " AND TO_BINARY(FOR_NAME)\n"
- " = TO_BINARY(:old_table_name)\n"
- " LOCK IN SHARE MODE;\n"
- " IF (SQL % NOTFOUND) THEN\n"
- " found := 0;\n"
- " ELSE\n"
- " UPDATE SYS_FOREIGN\n"
- " SET FOR_NAME = :new_table_name\n"
- " WHERE ID = foreign_id;\n"
- " id_len := LENGTH(foreign_id);\n"
- " IF (INSTR(foreign_id, '/') > 0) THEN\n"
- " IF (INSTR(foreign_id,\n"
- " gen_constr_prefix) > 0)\n"
- " THEN\n"
- " new_foreign_id :=\n"
- " CONCAT(:new_table_name,\n"
- " SUBSTR(foreign_id, old_t_name_len,\n"
- " id_len - old_t_name_len));\n"
- " ELSE\n"
- " new_foreign_id :=\n"
- " CONCAT(new_db_name,\n"
- " SUBSTR(foreign_id,\n"
- " old_db_name_len,\n"
- " id_len - old_db_name_len));\n"
- " END IF;\n"
- " UPDATE SYS_FOREIGN\n"
- " SET ID = new_foreign_id\n"
- " WHERE ID = foreign_id;\n"
- " UPDATE SYS_FOREIGN_COLS\n"
- " SET ID = new_foreign_id\n"
- " WHERE ID = foreign_id;\n"
- " END IF;\n"
- " END IF;\n"
- "END LOOP;\n"
- "UPDATE SYS_FOREIGN SET REF_NAME = :new_table_name\n"
- "WHERE REF_NAME = :old_table_name\n"
- " AND TO_BINARY(REF_NAME)\n"
- " = TO_BINARY(:old_table_name);\n"
- "END;\n"
- , FALSE, trx);
+ err = que_eval_sql(
+ info,
+ "PROCEDURE RENAME_CONSTRAINT_IDS () IS\n"
+ "gen_constr_prefix CHAR;\n"
+ "new_db_name CHAR;\n"
+ "foreign_id CHAR;\n"
+ "new_foreign_id CHAR;\n"
+ "old_db_name_len INT;\n"
+ "old_t_name_len INT;\n"
+ "new_db_name_len INT;\n"
+ "id_len INT;\n"
+ "found INT;\n"
+ "BEGIN\n"
+ "found := 1;\n"
+ "old_db_name_len := INSTR(:old_table_name, '/')-1;\n"
+ "new_db_name_len := INSTR(:new_table_name, '/')-1;\n"
+ "new_db_name := SUBSTR(:new_table_name, 0,\n"
+ " new_db_name_len);\n"
+ "old_t_name_len := LENGTH(:old_table_name);\n"
+ "gen_constr_prefix := CONCAT(:old_table_name,\n"
+ " '_ibfk_');\n"
+ "WHILE found = 1 LOOP\n"
+ " SELECT ID INTO foreign_id\n"
+ " FROM SYS_FOREIGN\n"
+ " WHERE FOR_NAME = :old_table_name\n"
+ " AND TO_BINARY(FOR_NAME)\n"
+ " = TO_BINARY(:old_table_name)\n"
+ " LOCK IN SHARE MODE;\n"
+ " IF (SQL % NOTFOUND) THEN\n"
+ " found := 0;\n"
+ " ELSE\n"
+ " UPDATE SYS_FOREIGN\n"
+ " SET FOR_NAME = :new_table_name\n"
+ " WHERE ID = foreign_id;\n"
+ " id_len := LENGTH(foreign_id);\n"
+ " IF (INSTR(foreign_id, '/') > 0) THEN\n"
+ " IF (INSTR(foreign_id,\n"
+ " gen_constr_prefix) > 0)\n"
+ " THEN\n"
+ " new_foreign_id :=\n"
+ " CONCAT(:new_table_name,\n"
+ " SUBSTR(foreign_id, old_t_name_len,\n"
+ " id_len - old_t_name_len));\n"
+ " ELSE\n"
+ " new_foreign_id :=\n"
+ " CONCAT(new_db_name,\n"
+ " SUBSTR(foreign_id,\n"
+ " old_db_name_len,\n"
+ " id_len - old_db_name_len));\n"
+ " END IF;\n"
+ " UPDATE SYS_FOREIGN\n"
+ " SET ID = new_foreign_id\n"
+ " WHERE ID = foreign_id;\n"
+ " UPDATE SYS_FOREIGN_COLS\n"
+ " SET ID = new_foreign_id\n"
+ " WHERE ID = foreign_id;\n"
+ " END IF;\n"
+ " END IF;\n"
+ "END LOOP;\n"
+ "UPDATE SYS_FOREIGN SET REF_NAME = :new_table_name\n"
+ "WHERE REF_NAME = :old_table_name\n"
+ " AND TO_BINARY(REF_NAME)\n"
+ " = TO_BINARY(:old_table_name);\n"
+ "END;\n"
+ , FALSE, trx);
} else if (n_constraints_to_drop > 0) {
/* Drop some constraints of tmp tables. */
@@ -3763,8 +3757,8 @@ end:
/* We only want to switch off some of the type checking in
an ALTER, not in a RENAME. */
- err = dict_load_foreigns
- (new_name, old_is_tmp ? trx->check_foreigns : TRUE);
+ err = dict_load_foreigns(
+ new_name, old_is_tmp ? trx->check_foreigns : TRUE);
if (err != DB_SUCCESS) {
ut_print_timestamp(stderr);
@@ -3904,8 +3898,8 @@ func_exit:
for (i = 0;
i < dict_index_get_n_ordering_defined_by_user(index);
i++) {
- if (UNIV_SQL_NULL == dfield_get_len
- (dtuple_get_nth_field(prev_entry, i))) {
+ if (UNIV_SQL_NULL == dfield_get_len(
+ dtuple_get_nth_field(prev_entry, i))) {
contains_null = TRUE;
}
@@ -3928,8 +3922,8 @@ not_ok:
} else if ((index->type & DICT_UNIQUE)
&& !contains_null
&& matched_fields
- >= dict_index_get_n_ordering_defined_by_user
- (index)) {
+ >= dict_index_get_n_ordering_defined_by_user(
+ index)) {
fputs("InnoDB: duplicate key in ", stderr);
goto not_ok;
@@ -4004,7 +3998,7 @@ row_check_table_for_mysql(
ut_print_name(stderr, trx, FALSE, index->name);
putc('\n', stderr); */
- if (!btr_validate_tree(index->tree, prebuilt->trx)) {
+ if (!btr_validate_index(index, prebuilt->trx)) {
ret = DB_ERROR;
} else {
if (!row_scan_and_check_index(prebuilt,
diff --git a/storage/innobase/row/row0purge.c b/storage/innobase/row/row0purge.c
index 1513b18666d..889a11a7a76 100644
--- a/storage/innobase/row/row0purge.c
+++ b/storage/innobase/row/row0purge.c
@@ -123,10 +123,10 @@ row_purge_remove_clust_if_poss_low(
rec = btr_pcur_get_rec(pcur);
- if (0 != ut_dulint_cmp(node->roll_ptr, row_get_rec_roll_ptr
- (rec, index, rec_get_offsets
- (rec, index, offsets_,
- ULINT_UNDEFINED, &heap)))) {
+ if (0 != ut_dulint_cmp(node->roll_ptr, row_get_rec_roll_ptr(
+ rec, index, rec_get_offsets(
+ rec, index, offsets_,
+ ULINT_UNDEFINED, &heap)))) {
if (UNIV_LIKELY_NULL(heap)) {
mem_heap_free(heap);
}
@@ -248,9 +248,9 @@ row_purge_remove_sec_if_poss_low(
success = row_purge_reposition_pcur(BTR_SEARCH_LEAF, node, mtr_vers);
if (success) {
- old_has = row_vers_old_has_index_entry
- (TRUE, btr_pcur_get_rec(&(node->pcur)),
- mtr_vers, index, entry);
+ old_has = row_vers_old_has_index_entry(
+ TRUE, btr_pcur_get_rec(&(node->pcur)),
+ mtr_vers, index, entry);
}
btr_pcur_commit_specify_mtr(&(node->pcur), mtr_vers);
@@ -430,7 +430,7 @@ skip_secondaries:
index = dict_table_get_first_index(node->table);
- mtr_x_lock(dict_tree_get_lock(index->tree), &mtr);
+ mtr_x_lock(dict_index_get_lock(index), &mtr);
/* NOTE: we must also acquire an X-latch to the
root page of the tree. We will need it when we
@@ -441,7 +441,7 @@ skip_secondaries:
latching order if we would only later latch the
root page of such a tree! */
- btr_root_get(index->tree, &mtr);
+ btr_root_get(index, &mtr);
/* We assume in purge of externally stored fields
that the space id of the undo log record is 0! */
@@ -618,8 +618,8 @@ row_purge(
if (purge_needed) {
node->found_clust = FALSE;
- node->index = dict_table_get_next_index
- (dict_table_get_first_index(node->table));
+ node->index = dict_table_get_next_index(
+ dict_table_get_first_index(node->table));
if (node->rec_type == TRX_UNDO_DEL_MARK_REC) {
row_purge_del_mark(node);
diff --git a/storage/innobase/row/row0row.c b/storage/innobase/row/row0row.c
index b945954041e..5a7216324a8 100644
--- a/storage/innobase/row/row0row.c
+++ b/storage/innobase/row/row0row.c
@@ -114,10 +114,8 @@ row_build_index_entry(
dict_field_t* ind_field;
dfield_t* dfield;
dfield_t* dfield2;
- dict_col_t* col;
ulint i;
ulint storage_len;
- dtype_t* cur_type;
ut_ad(row && index && heap);
ut_ad(dtuple_check_typed(row));
@@ -128,13 +126,13 @@ row_build_index_entry(
if (index->type & DICT_UNIVERSAL) {
dtuple_set_n_fields_cmp(entry, entry_len);
} else {
- dtuple_set_n_fields_cmp
- (entry, dict_index_get_n_unique_in_tree(index));
+ dtuple_set_n_fields_cmp(
+ entry, dict_index_get_n_unique_in_tree(index));
}
for (i = 0; i < entry_len; i++) {
ind_field = dict_index_get_nth_field(index, i);
- col = ind_field->col;
+ const dict_col_t* col = ind_field->col;
dfield = dtuple_get_nth_field(entry, i);
@@ -143,17 +141,20 @@ row_build_index_entry(
dfield_copy(dfield, dfield2);
/* If a column prefix index, take only the prefix */
- if (ind_field->prefix_len > 0
- && dfield_get_len(dfield2) != UNIV_SQL_NULL) {
+ if (ind_field->prefix_len) {
+ if (dfield_get_len(dfield2) != UNIV_SQL_NULL) {
- cur_type = dict_col_get_type
- (dict_field_get_col(ind_field));
+ storage_len = dtype_get_at_most_n_mbchars(
+ col->prtype,
+ col->mbminlen, col->mbmaxlen,
+ ind_field->prefix_len,
+ dfield_get_len(dfield2),
+ dfield2->data);
- storage_len = dtype_get_at_most_n_mbchars
- (cur_type, ind_field->prefix_len,
- dfield_get_len(dfield2), dfield2->data);
+ dfield_set_len(dfield, storage_len);
+ }
- dfield_set_len(dfield, storage_len);
+ dfield_get_type(dfield)->len = ind_field->prefix_len;
}
}
@@ -192,7 +193,6 @@ row_build(
dtuple_t* row;
dict_table_t* table;
dict_field_t* ind_field;
- dict_col_t* col;
dfield_t* dfield;
ulint n_fields;
byte* field;
@@ -227,8 +227,8 @@ row_build(
row = dtuple_create(heap, row_len);
- dtuple_set_info_bits(row, rec_get_info_bits
- (rec, dict_table_is_comp(table)));
+ dtuple_set_info_bits(row, rec_get_info_bits(
+ rec, dict_table_is_comp(table)));
n_fields = rec_offs_n_fields(offsets);
@@ -239,7 +239,9 @@ row_build(
if (ind_field->prefix_len == 0) {
- col = dict_field_get_col(ind_field);
+ const dict_col_t* col
+ = dict_field_get_col(ind_field);
+
dfield = dtuple_get_nth_field(row,
dict_col_get_no(col));
field = rec_get_nth_field(rec, offsets, i, &len);
@@ -416,17 +418,22 @@ row_build_row_ref(
column, or the full column, and we must adjust the length
accordingly. */
- clust_col_prefix_len = dict_index_get_nth_field
- (clust_index, i)->prefix_len;
+ clust_col_prefix_len = dict_index_get_nth_field(
+ clust_index, i)->prefix_len;
if (clust_col_prefix_len > 0) {
if (len != UNIV_SQL_NULL) {
+ const dtype_t* dtype
+ = dfield_get_type(dfield);
+
dfield_set_len(dfield,
- dtype_get_at_most_n_mbchars
- (dfield_get_type(dfield),
- clust_col_prefix_len, len,
- (char*) field));
+ dtype_get_at_most_n_mbchars(
+ dtype->prtype,
+ dtype->mbminlen,
+ dtype->mbmaxlen,
+ clust_col_prefix_len,
+ len, (char*) field));
}
}
}
@@ -513,17 +520,22 @@ notfound:
column, or the full column, and we must adjust the length
accordingly. */
- clust_col_prefix_len = dict_index_get_nth_field
- (clust_index, i)->prefix_len;
+ clust_col_prefix_len = dict_index_get_nth_field(
+ clust_index, i)->prefix_len;
if (clust_col_prefix_len > 0) {
if (len != UNIV_SQL_NULL) {
+ const dtype_t* dtype
+ = dfield_get_type(dfield);
+
dfield_set_len(dfield,
- dtype_get_at_most_n_mbchars
- (dfield_get_type(dfield),
- clust_col_prefix_len, len,
- (char*) field));
+ dtype_get_at_most_n_mbchars(
+ dtype->prtype,
+ dtype->mbminlen,
+ dtype->mbmaxlen,
+ clust_col_prefix_len,
+ len, (char*) field));
}
}
}
@@ -550,13 +562,8 @@ row_build_row_ref_from_row(
directly into data of this row */
{
dict_index_t* clust_index;
- dict_field_t* field;
- dfield_t* dfield;
- dfield_t* dfield2;
- dict_col_t* col;
ulint ref_len;
ulint i;
- dtype_t* cur_type;
ut_ad(ref && table && row);
@@ -567,6 +574,11 @@ row_build_row_ref_from_row(
ut_ad(ref_len == dtuple_get_n_fields(ref));
for (i = 0; i < ref_len; i++) {
+ const dict_col_t* col;
+ dict_field_t* field;
+ dfield_t* dfield;
+ dfield_t* dfield2;
+
dfield = dtuple_get_nth_field(ref, i);
field = dict_index_get_nth_field(clust_index, i);
@@ -580,12 +592,9 @@ row_build_row_ref_from_row(
if (field->prefix_len > 0
&& dfield->len != UNIV_SQL_NULL) {
- cur_type = dict_col_get_type
- (dict_field_get_col(field));
-
- dfield->len = dtype_get_at_most_n_mbchars
- (cur_type, field->prefix_len,
- dfield->len, dfield->data);
+ dfield->len = dtype_get_at_most_n_mbchars(
+ col->prtype, col->mbminlen, col->mbmaxlen,
+ field->prefix_len, dfield->len, dfield->data);
}
}
diff --git a/storage/innobase/row/row0sel.c b/storage/innobase/row/row0sel.c
index 06aeca509d3..c6b117cdafa 100644
--- a/storage/innobase/row/row0sel.c
+++ b/storage/innobase/row/row0sel.c
@@ -45,9 +45,6 @@ to que_run_threads: this is to allow canceling runaway queries */
#define SEL_COST_LIMIT 100
-/* The lower limit for what we consider a "big" row */
-#define BIG_ROW_SIZE 1024
-
/* Flags for search shortcut */
#define SEL_FOUND 0
#define SEL_EXHAUSTED 1
@@ -72,15 +69,12 @@ row_sel_sec_rec_is_for_clust_rec(
rec_t* clust_rec, /* in: clustered index record */
dict_index_t* clust_index) /* in: clustered index */
{
- dict_field_t* ifield;
- dict_col_t* col;
byte* sec_field;
ulint sec_len;
byte* clust_field;
ulint clust_len;
ulint n;
ulint i;
- dtype_t* cur_type;
mem_heap_t* heap = NULL;
ulint clust_offsets_[REC_OFFS_NORMAL_SIZE];
ulint sec_offsets_[REC_OFFS_SMALL_SIZE];
@@ -99,26 +93,26 @@ row_sel_sec_rec_is_for_clust_rec(
n = dict_index_get_n_ordering_defined_by_user(sec_index);
for (i = 0; i < n; i++) {
+ const dict_field_t* ifield;
+ const dict_col_t* col;
+
ifield = dict_index_get_nth_field(sec_index, i);
col = dict_field_get_col(ifield);
- clust_field = rec_get_nth_field(clust_rec, clust_offs,
- dict_col_get_clust_pos(col),
- &clust_len);
+ clust_field = rec_get_nth_field(
+ clust_rec, clust_offs,
+ dict_col_get_clust_pos(col, clust_index), &clust_len);
sec_field = rec_get_nth_field(sec_rec, sec_offs, i, &sec_len);
- if (ifield->prefix_len > 0
- && clust_len != UNIV_SQL_NULL) {
+ if (ifield->prefix_len > 0 && clust_len != UNIV_SQL_NULL) {
- cur_type = dict_col_get_type
- (dict_field_get_col(ifield));
-
- clust_len = dtype_get_at_most_n_mbchars
- (cur_type, ifield->prefix_len,
- clust_len, (char*) clust_field);
+ clust_len = dtype_get_at_most_n_mbchars(
+ col->prtype, col->mbminlen, col->mbmaxlen,
+ ifield->prefix_len,
+ clust_len, (char*) clust_field);
}
- if (0 != cmp_data_data(dict_col_get_type(col),
+ if (0 != cmp_data_data(col->mtype, col->prtype,
clust_field, clust_len,
sec_field, sec_len)) {
is_equal = FALSE;
@@ -319,8 +313,8 @@ row_sel_fetch_columns(
heap = mem_heap_create(1);
- data = btr_rec_copy_externally_stored_field
- (rec, offsets, field_no, &len, heap);
+ data = btr_rec_copy_externally_stored_field(
+ rec, offsets, field_no, &len, heap);
ut_a(len != UNIV_SQL_NULL);
@@ -557,9 +551,9 @@ row_sel_build_prev_vers(
plan->old_vers_heap = mem_heap_create(512);
}
- err = row_vers_build_for_consistent_read
- (rec, mtr, plan->index, offsets, read_view, offset_heap,
- plan->old_vers_heap, old_vers);
+ err = row_vers_build_for_consistent_read(
+ rec, mtr, plan->index, offsets, read_view, offset_heap,
+ plan->old_vers_heap, old_vers);
return(err);
}
@@ -592,9 +586,9 @@ row_sel_build_committed_vers_for_mysql(
prebuilt->old_vers_heap = mem_heap_create(200);
}
- err = row_vers_build_for_semi_consistent_read
- (rec, mtr, clust_index, offsets, offset_heap,
- prebuilt->old_vers_heap, old_vers);
+ err = row_vers_build_for_semi_consistent_read(
+ rec, mtr, clust_index, offsets, offset_heap,
+ prebuilt->old_vers_heap, old_vers);
return(err);
}
@@ -754,9 +748,9 @@ row_sel_get_clust_rec(
lock_type = LOCK_ORDINARY;
}
- err = lock_clust_rec_read_check_and_lock
- (0, clust_rec, index, offsets,
- node->row_lock_mode, lock_type, thr);
+ err = lock_clust_rec_read_check_and_lock(
+ 0, clust_rec, index, offsets,
+ node->row_lock_mode, lock_type, thr);
if (err != DB_SUCCESS) {
@@ -800,8 +794,8 @@ row_sel_get_clust_rec(
exist in our snapshot. */
if ((old_vers
- || rec_get_deleted_flag(rec, dict_table_is_comp
- (plan->table)))
+ || rec_get_deleted_flag(rec, dict_table_is_comp(
+ plan->table)))
&& !row_sel_sec_rec_is_for_clust_rec(rec, plan->index,
clust_rec, index)) {
goto func_exit;
@@ -850,11 +844,11 @@ sel_set_rec_lock(
}
if (index->type & DICT_CLUSTERED) {
- err = lock_clust_rec_read_check_and_lock
- (0, rec, index, offsets, mode, type, thr);
+ err = lock_clust_rec_read_check_and_lock(
+ 0, rec, index, offsets, mode, type, thr);
} else {
- err = lock_sec_rec_read_check_and_lock
- (0, rec, index, offsets, mode, type, thr);
+ err = lock_sec_rec_read_check_and_lock(
+ 0, rec, index, offsets, mode, type, thr);
}
return(err);
@@ -1246,7 +1240,7 @@ table_loop:
if (consistent_read && plan->unique_search && !plan->pcur_is_open
&& !plan->must_get_clust
- && (plan->table->max_row_size < BIG_ROW_SIZE)) {
+ && !plan->table->big_rows) {
if (!search_latch_locked) {
rw_lock_s_lock(&btr_search_latch);
@@ -1506,13 +1500,13 @@ skip_lock:
}
if (old_vers == NULL) {
- offsets = rec_get_offsets
- (rec, index, offsets,
- ULINT_UNDEFINED, &heap);
- row_sel_fetch_columns
- (index, rec, offsets,
- UT_LIST_GET_FIRST
- (plan->columns));
+ offsets = rec_get_offsets(
+ rec, index, offsets,
+ ULINT_UNDEFINED, &heap);
+ row_sel_fetch_columns(
+ index, rec, offsets,
+ UT_LIST_GET_FIRST(
+ plan->columns));
if (!row_sel_test_end_conds(plan)) {
@@ -1651,7 +1645,7 @@ skip_lock:
if ((plan->n_rows_fetched <= SEL_PREFETCH_LIMIT)
|| plan->unique_search || plan->no_prefetch
- || (plan->table->max_row_size >= BIG_ROW_SIZE)) {
+ || plan->table->big_rows) {
/* No prefetch in operation: go to the next table */
@@ -1922,8 +1916,8 @@ row_sel_step(
if (node->consistent_read) {
/* Assign a read view for the query */
- node->read_view = trx_assign_read_view
- (thr_get_trx(thr));
+ node->read_view = trx_assign_read_view(
+ thr_get_trx(thr));
} else {
if (node->set_x_locks) {
i_lock_mode = LOCK_IX;
@@ -2010,8 +2004,8 @@ fetch_step(
sel_assign_into_var_values(node->into_list,
sel_node);
} else {
- void* ret = (*node->func->func)
- (sel_node, node->func->arg);
+ void* ret = (*node->func->func)(
+ sel_node, node->func->arg);
if (!ret) {
sel_node->state
@@ -2249,8 +2243,7 @@ row_sel_convert_mysql_key_to_innobase(
while (key_ptr < key_end) {
- ut_a(dict_col_get_type(field->col)->mtype
- == dfield_get_type(dfield)->mtype);
+ ut_a(field->col->mtype == dfield_get_type(dfield)->mtype);
data_offset = 0;
is_null = FALSE;
@@ -2334,11 +2327,11 @@ row_sel_convert_mysql_key_to_innobase(
/* Storing may use at most data_len bytes of buf */
if (!is_null) {
- row_mysql_store_col_in_innobase_format
- (dfield, buf,
- FALSE, /* MySQL key value format col */
- key_ptr + data_offset, data_len,
- dict_table_is_comp(index->table));
+ row_mysql_store_col_in_innobase_format(
+ dfield, buf,
+ FALSE, /* MySQL key value format col */
+ key_ptr + data_offset, data_len,
+ dict_table_is_comp(index->table));
buf += data_len;
}
@@ -2405,9 +2398,9 @@ row_sel_store_row_id_to_prebuilt(
ut_ad(rec_offs_validate(index_rec, index, offsets));
- data = rec_get_nth_field
- (index_rec, offsets,
- dict_index_get_sys_col_pos(index, DATA_ROW_ID), &len);
+ data = rec_get_nth_field(
+ index_rec, offsets,
+ dict_index_get_sys_col_pos(index, DATA_ROW_ID), &len);
if (len != DATA_ROW_ID_LEN) {
fprintf(stderr,
@@ -2480,8 +2473,8 @@ row_sel_field_store_in_mysql_format(
length of the data to the first byte or the first
two bytes of dest. */
- dest = row_mysql_store_true_var_len
- (dest, len, templ->mysql_length_bytes);
+ dest = row_mysql_store_true_var_len(
+ dest, len, templ->mysql_length_bytes);
}
/* Copy the actual data */
@@ -2614,8 +2607,8 @@ row_sel_store_mysql_rec(
if (UNIV_UNLIKELY(templ->type == DATA_BLOB)) {
if (prebuilt->blob_heap == NULL) {
- prebuilt->blob_heap = mem_heap_create
- (UNIV_PAGE_SIZE);
+ prebuilt->blob_heap = mem_heap_create(
+ UNIV_PAGE_SIZE);
}
heap = prebuilt->blob_heap;
@@ -2630,9 +2623,9 @@ row_sel_store_mysql_rec(
already run out of memory in the next call, which
causes an assert */
- data = btr_rec_copy_externally_stored_field
- (rec, offsets, templ->rec_field_no,
- &len, heap);
+ data = btr_rec_copy_externally_stored_field(
+ rec, offsets, templ->rec_field_no,
+ &len, heap);
ut_a(len != UNIV_SQL_NULL);
} else {
@@ -2643,9 +2636,9 @@ row_sel_store_mysql_rec(
}
if (len != UNIV_SQL_NULL) {
- row_sel_field_store_in_mysql_format
- (mysql_rec + templ->mysql_col_offset,
- templ, data, len);
+ row_sel_field_store_in_mysql_format(
+ mysql_rec + templ->mysql_col_offset,
+ templ, data, len);
/* Cleanup */
if (extern_field_heap) {
@@ -2747,9 +2740,9 @@ row_sel_build_prev_vers_for_mysql(
prebuilt->old_vers_heap = mem_heap_create(200);
}
- err = row_vers_build_for_consistent_read
- (rec, mtr, clust_index, offsets, read_view, offset_heap,
- prebuilt->old_vers_heap, old_vers);
+ err = row_vers_build_for_consistent_read(
+ rec, mtr, clust_index, offsets, read_view, offset_heap,
+ prebuilt->old_vers_heap, old_vers);
return(err);
}
@@ -2853,9 +2846,9 @@ row_sel_get_clust_rec_for_mysql(
the clust rec with a unique condition, hence
we set a LOCK_REC_NOT_GAP type lock */
- err = lock_clust_rec_read_check_and_lock
- (0, clust_rec, clust_index, *offsets,
- prebuilt->select_lock_type, LOCK_REC_NOT_GAP, thr);
+ err = lock_clust_rec_read_check_and_lock(
+ 0, clust_rec, clust_index, *offsets,
+ prebuilt->select_lock_type, LOCK_REC_NOT_GAP, thr);
if (err != DB_SUCCESS) {
goto err_exit;
@@ -2870,15 +2863,16 @@ row_sel_get_clust_rec_for_mysql(
then we never look for an earlier version */
if (trx->isolation_level > TRX_ISO_READ_UNCOMMITTED
- && !lock_clust_rec_cons_read_sees
- (clust_rec, clust_index, *offsets, trx->read_view)) {
+ && !lock_clust_rec_cons_read_sees(
+ clust_rec, clust_index, *offsets,
+ trx->read_view)) {
/* The following call returns 'offsets' associated with
'old_vers' */
- err = row_sel_build_prev_vers_for_mysql
- (trx->read_view, clust_index,
- prebuilt, clust_rec, offsets, offset_heap,
- &old_vers, mtr);
+ err = row_sel_build_prev_vers_for_mysql(
+ trx->read_view, clust_index, prebuilt,
+ clust_rec, offsets, offset_heap, &old_vers,
+ mtr);
if (err != DB_SUCCESS) {
@@ -2901,16 +2895,18 @@ row_sel_get_clust_rec_for_mysql(
visit through secondary index records that would not really
exist in our snapshot. */
- if (clust_rec && (old_vers || rec_get_deleted_flag
- (rec, dict_table_is_comp(sec_index->table)))
- && !row_sel_sec_rec_is_for_clust_rec
- (rec, sec_index, clust_rec, clust_index)) {
+ if (clust_rec && (old_vers || rec_get_deleted_flag(
+ rec,
+ dict_table_is_comp(
+ sec_index->table)))
+ && !row_sel_sec_rec_is_for_clust_rec(
+ rec, sec_index, clust_rec, clust_index)) {
clust_rec = NULL;
} else {
#ifdef UNIV_SEARCH_DEBUG
ut_a(clust_rec == NULL
- || row_sel_sec_rec_is_for_clust_rec
- (rec, sec_index, clust_rec, clust_index));
+ || row_sel_sec_rec_is_for_clust_rec(
+ rec, sec_index, clust_rec, clust_index));
#endif
}
}
@@ -3018,8 +3014,8 @@ row_sel_pop_cached_row_for_mysql(
if (UNIV_UNLIKELY(prebuilt->keep_other_fields_on_keyread)) {
/* Copy cache record field by field, don't touch fields that
are not covered by current key */
- cached_rec = prebuilt->fetch_cache
- [prebuilt->fetch_cache_first];
+ cached_rec = prebuilt->fetch_cache[
+ prebuilt->fetch_cache_first];
for (i = 0; i < prebuilt->n_template; i++) {
templ = prebuilt->mysql_template + i;
@@ -3031,8 +3027,7 @@ row_sel_pop_cached_row_for_mysql(
if (templ->mysql_null_bit_mask) {
buf[templ->mysql_null_byte_offset]
^= (buf[templ->mysql_null_byte_offset]
- ^ cached_rec
- [templ->mysql_null_byte_offset])
+ ^ cached_rec[templ->mysql_null_byte_offset])
& (byte)templ->mysql_null_bit_mask;
}
}
@@ -3088,9 +3083,10 @@ row_sel_push_cache_row_for_mysql(
ut_ad(prebuilt->fetch_cache_first == 0);
- if (UNIV_UNLIKELY(!row_sel_store_mysql_rec
- (prebuilt->fetch_cache[prebuilt->n_fetch_cached],
- prebuilt, rec, offsets))) {
+ if (UNIV_UNLIKELY(!row_sel_store_mysql_rec(
+ prebuilt->fetch_cache[
+ prebuilt->n_fetch_cached],
+ prebuilt, rec, offsets))) {
ut_error;
}
@@ -3217,15 +3213,12 @@ row_search_for_mysql(
ibool mtr_has_extra_clust_latch = FALSE;
ibool moves_up = FALSE;
ibool set_also_gap_locks = TRUE;
- /* if the query is a plain
- locking SELECT, and the isolation
- level is <= TRX_ISO_READ_COMMITTED,
- then this is set to FALSE */
+ /* if the query is a plain locking SELECT, and the isolation level
+ is <= TRX_ISO_READ_COMMITTED, then this is set to FALSE */
ibool did_semi_consistent_read = FALSE;
- /* if the returned record was locked
- and we did a semi-consistent read
- (fetch the newest committed version),
- then this is set to TRUE */
+ /* if the returned record was locked and we did a semi-consistent
+ read (fetch the newest committed version), then this is set to
+ TRUE */
#ifdef UNIV_SEARCH_DEBUG
ulint cnt = 0;
#endif /* UNIV_SEARCH_DEBUG */
@@ -3478,8 +3471,9 @@ row_search_for_mysql(
trx->has_search_latch = TRUE;
}
#endif
- switch (row_sel_try_search_shortcut_for_mysql
- (&rec, prebuilt, &offsets, &heap, &mtr)) {
+ switch (row_sel_try_search_shortcut_for_mysql(
+ &rec, prebuilt, &offsets, &heap,
+ &mtr)) {
case SEL_FOUND:
#ifdef UNIV_SEARCH_DEBUG
ut_a(0 == cmp_dtuple_rec(search_tuple,
@@ -3559,8 +3553,8 @@ shortcut_fails_too_big_rec:
/* Scan the MySQL query string; check if SELECT is the first
word there */
- if (dict_str_starts_with_keyword
- (trx->mysql_thd, *trx->mysql_query_str, "SELECT")) {
+ if (dict_str_starts_with_keyword(
+ trx->mysql_thd, *trx->mysql_query_str, "SELECT")) {
/* It is a plain locking SELECT and the isolation
level is low: do not lock gaps */
@@ -3587,9 +3581,9 @@ shortcut_fails_too_big_rec:
clust_index = dict_table_get_first_index(index->table);
if (UNIV_LIKELY(direction != 0)) {
- ibool need_to_process = sel_restore_position_for_mysql
- (&same_user_rec, BTR_SEARCH_LEAF,
- pcur, moves_up, &mtr);
+ ibool need_to_process = sel_restore_position_for_mysql(
+ &same_user_rec, BTR_SEARCH_LEAF,
+ pcur, moves_up, &mtr);
if (UNIV_UNLIKELY(need_to_process)) {
if (UNIV_UNLIKELY(prebuilt->row_read_type
@@ -3621,13 +3615,13 @@ shortcut_fails_too_big_rec:
pcur->trx_if_known = trx;
} else {
if (mode == PAGE_CUR_G) {
- btr_pcur_open_at_index_side
- (TRUE, index,
- BTR_SEARCH_LEAF, pcur, FALSE, &mtr);
+ btr_pcur_open_at_index_side(
+ TRUE, index, BTR_SEARCH_LEAF, pcur, FALSE,
+ &mtr);
} else if (mode == PAGE_CUR_L) {
- btr_pcur_open_at_index_side
- (FALSE, index,
- BTR_SEARCH_LEAF, pcur, FALSE, &mtr);
+ btr_pcur_open_at_index_side(
+ FALSE, index, BTR_SEARCH_LEAF, pcur, FALSE,
+ &mtr);
}
}
@@ -3759,7 +3753,7 @@ wrong_offs:
"InnoDB: Index corruption: rec offs %lu"
" next offs %lu, page no %lu,\n"
"InnoDB: ",
- (ulong) ut_align_offset(rec, UNIV_PAGE_SIZE),
+ (ulong) page_offset(rec),
(ulong) next_offs,
(ulong) buf_frame_get_page_no(rec));
dict_index_name_print(stderr, trx, index);
@@ -3779,7 +3773,7 @@ wrong_offs:
"InnoDB: Index corruption: rec offs %lu"
" next offs %lu, page no %lu,\n"
"InnoDB: ",
- (ulong) ut_align_offset(rec, UNIV_PAGE_SIZE),
+ (ulong) page_offset(rec),
(ulong) next_offs,
(ulong) buf_frame_get_page_no(rec));
dict_index_name_print(stderr, trx, index);
@@ -3804,7 +3798,7 @@ wrong_offs:
"InnoDB: Index corruption: rec offs %lu"
" next offs %lu, page no %lu,\n"
"InnoDB: ",
- (ulong) ut_align_offset(rec, UNIV_PAGE_SIZE),
+ (ulong) page_offset(rec),
(ulong) next_offs,
(ulong) buf_frame_get_page_no(rec));
dict_index_name_print(stderr, trx, index);
@@ -3839,10 +3833,10 @@ wrong_offs:
option is not set or this session is not
using a READ COMMITTED isolation level. */
- err = sel_set_rec_lock
- (rec, index, offsets,
- prebuilt->select_lock_type,
- LOCK_GAP, thr);
+ err = sel_set_rec_lock(
+ rec, index, offsets,
+ prebuilt->select_lock_type, LOCK_GAP,
+ thr);
if (err != DB_SUCCESS) {
@@ -3874,10 +3868,10 @@ wrong_offs:
option is not set or this session is not
using a READ COMMITTED isolation level. */
- err = sel_set_rec_lock
- (rec, index, offsets,
- prebuilt->select_lock_type,
- LOCK_GAP, thr);
+ err = sel_set_rec_lock(
+ rec, index, offsets,
+ prebuilt->select_lock_type, LOCK_GAP,
+ thr);
if (err != DB_SUCCESS) {
@@ -3961,9 +3955,9 @@ no_gap_lock:
/* The following call returns 'offsets'
associated with 'old_vers' */
- err = row_sel_build_committed_vers_for_mysql
- (clust_index, prebuilt, rec,
- &offsets, &heap, &old_vers, &mtr);
+ err = row_sel_build_committed_vers_for_mysql(
+ clust_index, prebuilt, rec,
+ &offsets, &heap, &old_vers, &mtr);
if (err != DB_SUCCESS) {
@@ -3977,8 +3971,8 @@ no_gap_lock:
goto lock_wait_or_error;
}
if (UNIV_LIKELY(trx->wait_lock != NULL)) {
- lock_cancel_waiting_and_release
- (trx->wait_lock);
+ lock_cancel_waiting_and_release(
+ trx->wait_lock);
trx_reset_new_rec_lock_info(trx);
} else {
mutex_exit(&kernel_mutex);
@@ -4025,16 +4019,16 @@ no_gap_lock:
by skipping this lookup */
if (UNIV_LIKELY(srv_force_recovery < 5)
- && !lock_clust_rec_cons_read_sees
- (rec, index, offsets, trx->read_view)) {
+ && !lock_clust_rec_cons_read_sees(
+ rec, index, offsets, trx->read_view)) {
rec_t* old_vers;
/* The following call returns 'offsets'
associated with 'old_vers' */
- err = row_sel_build_prev_vers_for_mysql
- (trx->read_view, clust_index,
- prebuilt, rec, &offsets, &heap,
- &old_vers, &mtr);
+ err = row_sel_build_prev_vers_for_mysql(
+ trx->read_view, clust_index,
+ prebuilt, rec, &offsets, &heap,
+ &old_vers, &mtr);
if (err != DB_SUCCESS) {
@@ -4084,6 +4078,23 @@ no_gap_lock:
row_unlock_for_mysql(prebuilt, TRUE);
}
+ /* This is an optimization to skip setting the next key lock
+ on the record that follows this delete-marked record. This
+ optimization works because of the unique search criteria
+ which precludes the presence of a range lock between this
+ delete marked record and the record following it.
+
+ For now this is applicable only to clustered indexes while
+ doing a unique search. There is scope for further optimization
+ applicable to unique secondary indexes. Current behaviour is
+ to widen the scope of a lock on an already delete marked record
+ if the same record is deleted twice by the same transaction */
+ if (index == clust_index && unique_search) {
+ err = DB_RECORD_NOT_FOUND;
+
+ goto normal_return;
+ }
+
goto next_rec;
}
@@ -4209,9 +4220,9 @@ requires_clust_rec:
if (prebuilt->clust_index_was_generated) {
if (result_rec != rec) {
- offsets = rec_get_offsets
- (rec, index, offsets,
- ULINT_UNDEFINED, &heap);
+ offsets = rec_get_offsets(
+ rec, index, offsets, ULINT_UNDEFINED,
+ &heap);
}
row_sel_store_row_id_to_prebuilt(prebuilt, rec,
index, offsets);
@@ -4466,8 +4477,8 @@ row_search_check_if_query_cache_permitted(
if (trx->isolation_level >= TRX_ISO_REPEATABLE_READ
&& !trx->read_view) {
- trx->read_view = read_view_open_now
- (trx->id, trx->global_read_view_heap);
+ trx->read_view = read_view_open_now(
+ trx->id, trx->global_read_view_heap);
trx->global_read_view = trx->read_view;
}
}
diff --git a/storage/innobase/row/row0uins.c b/storage/innobase/row/row0uins.c
index 822b7cfb9f2..ce9ab792204 100644
--- a/storage/innobase/row/row0uins.c
+++ b/storage/innobase/row/row0uins.c
@@ -286,8 +286,8 @@ row_undo_ins(
return(DB_SUCCESS);
}
- node->index = dict_table_get_next_index
- (dict_table_get_first_index(node->table));
+ node->index = dict_table_get_next_index(
+ dict_table_get_first_index(node->table));
while (node->index != NULL) {
entry = row_build_index_entry(node->row, node->index,
diff --git a/storage/innobase/row/row0umod.c b/storage/innobase/row/row0umod.c
index 778f240d18e..68139da116e 100644
--- a/storage/innobase/row/row0umod.c
+++ b/storage/innobase/row/row0umod.c
@@ -108,12 +108,12 @@ row_undo_mod_clust_low(
} else {
ut_ad(mode == BTR_MODIFY_TREE);
- err = btr_cur_pessimistic_update
- (BTR_NO_LOCKING_FLAG
- | BTR_NO_UNDO_LOG_FLAG
- | BTR_KEEP_SYS_FLAG,
- btr_cur, &dummy_big_rec, node->update,
- node->cmpl_info, thr, mtr);
+ err = btr_cur_pessimistic_update(
+ BTR_NO_LOCKING_FLAG
+ | BTR_NO_UNDO_LOG_FLAG
+ | BTR_KEEP_SYS_FLAG,
+ btr_cur, &dummy_big_rec, node->update,
+ node->cmpl_info, thr, mtr);
}
return(err);
@@ -444,8 +444,8 @@ row_undo_mod_del_unmark_sec_and_undo_update(
ut_a(err == DB_SUCCESS);
heap = mem_heap_create(100);
- update = row_upd_build_sec_rec_difference_binary
- (index, entry, btr_cur_get_rec(btr_cur), trx, heap);
+ update = row_upd_build_sec_rec_difference_binary(
+ index, entry, btr_cur_get_rec(btr_cur), trx, heap);
if (upd_get_n_fields(update) == 0) {
/* Do nothing */
@@ -454,18 +454,18 @@ row_undo_mod_del_unmark_sec_and_undo_update(
/* Try an optimistic updating of the record, keeping
changes within the page */
- err = btr_cur_optimistic_update
- (BTR_KEEP_SYS_FLAG | BTR_NO_LOCKING_FLAG,
- btr_cur, update, 0, thr, &mtr);
+ err = btr_cur_optimistic_update(
+ BTR_KEEP_SYS_FLAG | BTR_NO_LOCKING_FLAG,
+ btr_cur, update, 0, thr, &mtr);
if (err == DB_OVERFLOW || err == DB_UNDERFLOW) {
err = DB_FAIL;
}
} else {
ut_a(mode == BTR_MODIFY_TREE);
- err = btr_cur_pessimistic_update
- (BTR_KEEP_SYS_FLAG | BTR_NO_LOCKING_FLAG,
- btr_cur, &dummy_big_rec,
- update, 0, thr, &mtr);
+ err = btr_cur_pessimistic_update(
+ BTR_KEEP_SYS_FLAG | BTR_NO_LOCKING_FLAG,
+ btr_cur, &dummy_big_rec,
+ update, 0, thr, &mtr);
}
mem_heap_free(heap);
@@ -538,11 +538,11 @@ row_undo_mod_del_mark_sec(
entry = row_build_index_entry(node->row, index, heap);
- err = row_undo_mod_del_unmark_sec_and_undo_update
- (BTR_MODIFY_LEAF, thr, index, entry);
+ err = row_undo_mod_del_unmark_sec_and_undo_update(
+ BTR_MODIFY_LEAF, thr, index, entry);
if (err == DB_FAIL) {
- err = row_undo_mod_del_unmark_sec_and_undo_update
- (BTR_MODIFY_TREE, thr, index, entry);
+ err = row_undo_mod_del_unmark_sec_and_undo_update(
+ BTR_MODIFY_TREE, thr, index, entry);
}
if (err != DB_SUCCESS) {
@@ -620,11 +620,11 @@ row_undo_mod_upd_exist_sec(
row_upd_index_replace_new_col_vals(entry, index,
node->update, NULL);
- err = row_undo_mod_del_unmark_sec_and_undo_update
- (BTR_MODIFY_LEAF, thr, index, entry);
+ err = row_undo_mod_del_unmark_sec_and_undo_update(
+ BTR_MODIFY_LEAF, thr, index, entry);
if (err == DB_FAIL) {
- err = row_undo_mod_del_unmark_sec_and_undo_update
- (BTR_MODIFY_TREE, thr, index, entry);
+ err = row_undo_mod_del_unmark_sec_and_undo_update(
+ BTR_MODIFY_TREE, thr, index, entry);
}
if (err != DB_SUCCESS) {
@@ -736,8 +736,8 @@ row_undo_mod(
return(DB_SUCCESS);
}
- node->index = dict_table_get_next_index
- (dict_table_get_first_index(node->table));
+ node->index = dict_table_get_next_index(
+ dict_table_get_first_index(node->table));
if (node->rec_type == TRX_UNDO_UPD_EXIST_REC) {
diff --git a/storage/innobase/row/row0upd.c b/storage/innobase/row/row0upd.c
index 84f5f2a1acf..6533ac93d7d 100644
--- a/storage/innobase/row/row0upd.c
+++ b/storage/innobase/row/row0upd.c
@@ -197,8 +197,9 @@ row_upd_check_references_constraints(
if (foreign->referenced_index == index
&& (node->is_delete
- || row_upd_changes_first_fields_binary
- (entry, index, node->update, foreign->n_fields))) {
+ || row_upd_changes_first_fields_binary(
+ entry, index, node->update,
+ foreign->n_fields))) {
if (foreign->foreign_table == NULL) {
dict_table_get(foreign->foreign_table_name);
@@ -218,8 +219,8 @@ row_upd_check_references_constraints(
But the counter on the table protects 'foreign' from
being dropped while the check is running. */
- err = row_ins_check_foreign_constraint
- (FALSE, foreign, table, entry, thr);
+ err = row_ins_check_foreign_constraint(
+ FALSE, foreign, table, entry, thr);
if (foreign->foreign_table) {
mutex_enter(&(dict_sys->mutex));
@@ -235,8 +236,8 @@ row_upd_check_references_constraints(
if (err != DB_SUCCESS) {
if (got_s_lock) {
- row_mysql_unfreeze_data_dictionary
- (trx);
+ row_mysql_unfreeze_data_dictionary(
+ trx);
}
mem_heap_free(heap);
@@ -388,9 +389,9 @@ row_upd_changes_field_size_or_external(
this fix also to 4.0. The merge to 5.0 will be made
manually immediately after we commit this to 4.1. */
- new_len = dtype_get_sql_null_size
- (dict_index_get_nth_type(index,
- upd_field->field_no));
+ new_len = dict_col_get_sql_null_size(
+ dict_index_get_nth_col(index,
+ upd_field->field_no));
}
old_len = rec_offs_nth_size(offsets, upd_field->field_no);
@@ -479,8 +480,8 @@ row_upd_write_sys_vals_to_log(
ut_ad(mtr);
log_ptr += mach_write_compressed(log_ptr,
- dict_index_get_sys_col_pos
- (index, DATA_TRX_ID));
+ dict_index_get_sys_col_pos(
+ index, DATA_TRX_ID));
trx_write_roll_ptr(log_ptr, roll_ptr);
log_ptr += DATA_ROLL_PTR_LEN;
@@ -884,7 +885,6 @@ row_upd_index_replace_new_col_vals_index_pos(
ulint j;
ulint i;
ulint n_fields;
- dtype_t* cur_type;
ut_ad(index);
@@ -913,8 +913,8 @@ row_upd_index_replace_new_col_vals_index_pos(
dfield_set_data(dfield, new_val->data,
new_val->len);
if (heap && new_val->len != UNIV_SQL_NULL) {
- dfield->data = mem_heap_alloc
- (heap, new_val->len);
+ dfield->data = mem_heap_alloc(
+ heap, new_val->len);
ut_memcpy(dfield->data, new_val->data,
new_val->len);
}
@@ -922,13 +922,17 @@ row_upd_index_replace_new_col_vals_index_pos(
if (field->prefix_len > 0
&& new_val->len != UNIV_SQL_NULL) {
- cur_type = dict_col_get_type
- (dict_field_get_col(field));
+ const dict_col_t* col
+ = dict_field_get_col(field);
dfield->len
- = dtype_get_at_most_n_mbchars
- (cur_type, field->prefix_len,
- new_val->len, new_val->data);
+ = dtype_get_at_most_n_mbchars(
+ col->prtype,
+ col->mbminlen,
+ col->mbmaxlen,
+ field->prefix_len,
+ new_val->len,
+ new_val->data);
}
}
}
@@ -952,27 +956,31 @@ row_upd_index_replace_new_col_vals(
copy the new values, set this as NULL if you
do not want allocation */
{
- dict_field_t* field;
upd_field_t* upd_field;
dfield_t* dfield;
dfield_t* new_val;
ulint j;
ulint i;
- dtype_t* cur_type;
+ dict_index_t* clust_index;
ut_ad(index);
+ clust_index = dict_table_get_first_index(index->table);
+
dtuple_set_info_bits(entry, update->info_bits);
for (j = 0; j < dict_index_get_n_fields(index); j++) {
- field = dict_index_get_nth_field(index, j);
+ ulint clust_pos;
+ dict_field_t* field = dict_index_get_nth_field(index, j);
+
+ clust_pos = dict_col_get_clust_pos(field->col, clust_index);
for (i = 0; i < upd_get_n_fields(update); i++) {
upd_field = upd_get_nth_field(update, i);
- if (upd_field->field_no == field->col->clust_pos) {
+ if (upd_field->field_no == clust_pos) {
dfield = dtuple_get_nth_field(entry, j);
@@ -981,8 +989,8 @@ row_upd_index_replace_new_col_vals(
dfield_set_data(dfield, new_val->data,
new_val->len);
if (heap && new_val->len != UNIV_SQL_NULL) {
- dfield->data = mem_heap_alloc
- (heap, new_val->len);
+ dfield->data = mem_heap_alloc(
+ heap, new_val->len);
ut_memcpy(dfield->data, new_val->data,
new_val->len);
}
@@ -990,13 +998,17 @@ row_upd_index_replace_new_col_vals(
if (field->prefix_len > 0
&& new_val->len != UNIV_SQL_NULL) {
- cur_type = dict_col_get_type
- (dict_field_get_col(field));
+ const dict_col_t* col
+ = dict_field_get_col(field);
dfield->len
- = dtype_get_at_most_n_mbchars
- (cur_type, field->prefix_len,
- new_val->len, new_val->data);
+ = dtype_get_at_most_n_mbchars(
+ col->prtype,
+ col->mbminlen,
+ col->mbmaxlen,
+ field->prefix_len,
+ new_val->len,
+ new_val->data);
}
}
}
@@ -1025,30 +1037,34 @@ row_upd_changes_ord_field_binary(
field numbers in this MUST be clustered index
positions! */
{
- upd_field_t* upd_field;
- dict_field_t* ind_field;
- dict_col_t* col;
ulint n_unique;
ulint n_upd_fields;
- ulint col_pos;
- ulint col_no;
ulint i, j;
+ dict_index_t* clust_index;
ut_ad(update && index);
n_unique = dict_index_get_n_unique(index);
n_upd_fields = upd_get_n_fields(update);
+ clust_index = dict_table_get_first_index(index->table);
+
for (i = 0; i < n_unique; i++) {
+ const dict_field_t* ind_field;
+ const dict_col_t* col;
+ ulint col_pos;
+ ulint col_no;
+
ind_field = dict_index_get_nth_field(index, i);
col = dict_field_get_col(ind_field);
- col_pos = dict_col_get_clust_pos(col);
+ col_pos = dict_col_get_clust_pos(col, clust_index);
col_no = dict_col_get_no(col);
for (j = 0; j < n_upd_fields; j++) {
- upd_field = upd_get_nth_field(update, j);
+ upd_field_t* upd_field
+ = upd_get_nth_field(update, j);
/* Note that if the index field is a column prefix
then it may be that row does not contain an externally
@@ -1058,9 +1074,9 @@ row_upd_changes_ord_field_binary(
if (col_pos == upd_field->field_no
&& (row == NULL
|| ind_field->prefix_len > 0
- || !dfield_datas_are_binary_equal
- (dtuple_get_nth_field(row, col_no),
- &(upd_field->new_val)))) {
+ || !dfield_datas_are_binary_equal(
+ dtuple_get_nth_field(row, col_no),
+ &(upd_field->new_val)))) {
return(TRUE);
}
@@ -1092,8 +1108,8 @@ row_upd_changes_some_index_ord_field_binary(
upd_field = upd_get_nth_field(update, i);
- if (dict_field_get_col(dict_index_get_nth_field
- (index, upd_field->field_no))
+ if (dict_field_get_col(dict_index_get_nth_field(
+ index, upd_field->field_no))
->ord_part) {
return(TRUE);
@@ -1117,34 +1133,37 @@ row_upd_changes_first_fields_binary(
upd_t* update, /* in: update vector for the row */
ulint n) /* in: how many first fields to check */
{
- upd_field_t* upd_field;
- dict_field_t* ind_field;
- dict_col_t* col;
ulint n_upd_fields;
- ulint col_pos;
ulint i, j;
+ dict_index_t* clust_index;
- ut_a(update && index);
- ut_a(n <= dict_index_get_n_fields(index));
+ ut_ad(update && index);
+ ut_ad(n <= dict_index_get_n_fields(index));
n_upd_fields = upd_get_n_fields(update);
+ clust_index = dict_table_get_first_index(index->table);
for (i = 0; i < n; i++) {
+ const dict_field_t* ind_field;
+ const dict_col_t* col;
+ ulint col_pos;
+
ind_field = dict_index_get_nth_field(index, i);
col = dict_field_get_col(ind_field);
- col_pos = dict_col_get_clust_pos(col);
+ col_pos = dict_col_get_clust_pos(col, clust_index);
ut_a(ind_field->prefix_len == 0);
for (j = 0; j < n_upd_fields; j++) {
- upd_field = upd_get_nth_field(update, j);
+ upd_field_t* upd_field
+ = upd_get_nth_field(update, j);
if (col_pos == upd_field->field_no
- && !dfield_datas_are_binary_equal
- (dtuple_get_nth_field(entry, i),
- &(upd_field->new_val))) {
+ && !dfield_datas_are_binary_equal(
+ dtuple_get_nth_field(entry, i),
+ &(upd_field->new_val))) {
return(TRUE);
}
@@ -1322,9 +1341,9 @@ row_upd_sec_index_entry(
/* NOTE that the following call loses
the position of pcur ! */
- err = row_upd_check_references_constraints
- (node, &pcur, index->table,
- index, thr, &mtr);
+ err = row_upd_check_references_constraints(
+ node, &pcur, index->table,
+ index, thr, &mtr);
if (err != DB_SUCCESS) {
goto close_cur;
@@ -1356,8 +1375,8 @@ close_cur:
}
/***************************************************************
-Updates secondary index record if it is changed in the row update. This
-should be quite rare in database applications. */
+Updates the secondary index record if it is changed in the row update or
+deletes it if this is a delete. */
UNIV_INLINE
ulint
row_upd_sec_step(
@@ -1434,17 +1453,17 @@ row_upd_clust_rec_by_insert(
free those externally stored fields even if the delete marked
record is removed from the index tree, or updated. */
- btr_cur_mark_extern_inherited_fields
- (btr_cur_get_rec(btr_cur),
- rec_get_offsets(btr_cur_get_rec(btr_cur),
- dict_table_get_first_index(table),
- offsets_, ULINT_UNDEFINED, &heap),
- node->update, mtr);
+ btr_cur_mark_extern_inherited_fields(
+ btr_cur_get_rec(btr_cur),
+ rec_get_offsets(btr_cur_get_rec(btr_cur),
+ dict_table_get_first_index(table),
+ offsets_, ULINT_UNDEFINED, &heap),
+ node->update, mtr);
if (check_ref) {
/* NOTE that the following call loses
the position of pcur ! */
- err = row_upd_check_references_constraints
- (node, pcur, table, index, thr, mtr);
+ err = row_upd_check_references_constraints(
+ node, pcur, table, index, thr, mtr);
if (err != DB_SUCCESS) {
mtr_commit(mtr);
if (UNIV_LIKELY_NULL(heap)) {
@@ -1573,10 +1592,10 @@ row_upd_clust_rec(
ut_a(btr_pcur_restore_position(BTR_MODIFY_TREE, pcur, mtr));
rec = btr_cur_get_rec(btr_cur);
- err = btr_store_big_rec_extern_fields
- (index, rec,
- rec_get_offsets(rec, index, offsets_,
- ULINT_UNDEFINED, &heap),
+ err = btr_store_big_rec_extern_fields(
+ index, rec,
+ rec_get_offsets(rec, index, offsets_,
+ ULINT_UNDEFINED, &heap),
big_rec, mtr);
if (UNIV_LIKELY_NULL(heap)) {
mem_heap_free(heap);
@@ -1730,8 +1749,8 @@ row_upd_clust_step(
ULINT_UNDEFINED, &heap);
if (!node->has_clust_rec_x_lock) {
- err = lock_clust_rec_modify_check_and_lock
- (0, rec, index, offsets, thr);
+ err = lock_clust_rec_modify_check_and_lock(
+ 0, rec, index, offsets, thr);
if (err != DB_SUCCESS) {
mtr_commit(mtr);
goto exit_func;
@@ -1831,14 +1850,14 @@ row_upd(
ut_ad(node && thr);
- if (node->in_mysql_interface) {
+ if (UNIV_LIKELY(node->in_mysql_interface)) {
/* We do not get the cmpl_info value from the MySQL
interpreter: we must calculate it on the fly: */
if (node->is_delete
- || row_upd_changes_some_index_ord_field_binary
- (node->table, node->update)) {
+ || row_upd_changes_some_index_ord_field_binary(
+ node->table, node->update)) {
node->cmpl_info = 0;
} else {
node->cmpl_info = UPD_NODE_NO_ORD_CHANGE;
@@ -2046,9 +2065,9 @@ row_upd_in_place_in_select(
}
row_upd_eval_new_vals(node->update);
- ut_ad(!rec_get_deleted_flag
- (btr_pcur_get_rec(pcur),
- dict_table_is_comp(btr_cur->index->table)));
+ ut_ad(!rec_get_deleted_flag(
+ btr_pcur_get_rec(pcur),
+ dict_table_is_comp(btr_cur->index->table)));
ut_ad(node->cmpl_info & UPD_NODE_NO_SIZE_CHANGE);
ut_ad(node->cmpl_info & UPD_NODE_NO_ORD_CHANGE);
diff --git a/storage/innobase/row/row0vers.c b/storage/innobase/row/row0vers.c
index 9b51314df7b..c8b71965f75 100644
--- a/storage/innobase/row/row0vers.c
+++ b/storage/innobase/row/row0vers.c
@@ -158,9 +158,9 @@ row_vers_impl_x_locked_off_kernel(
mem_heap_free(heap2); /* free version and clust_offsets */
if (prev_version) {
- clust_offsets = rec_get_offsets
- (prev_version, clust_index, NULL,
- ULINT_UNDEFINED, &heap);
+ clust_offsets = rec_get_offsets(
+ prev_version, clust_index, NULL,
+ ULINT_UNDEFINED, &heap);
row = row_build(ROW_COPY_POINTERS, clust_index,
prev_version, clust_offsets, heap);
entry = row_build_index_entry(row, index, heap);
diff --git a/storage/innobase/srv/srv0srv.c b/storage/innobase/srv/srv0srv.c
index b781a601039..5d92b913934 100644
--- a/storage/innobase/srv/srv0srv.c
+++ b/storage/innobase/srv/srv0srv.c
@@ -899,21 +899,21 @@ srv_init(void)
table = dict_mem_table_create("SYS_DUMMY1",
DICT_HDR_SPACE, 1, 0);
dict_mem_table_add_col(table, "DUMMY", DATA_CHAR,
- DATA_ENGLISH | DATA_NOT_NULL, 8, 0);
+ DATA_ENGLISH | DATA_NOT_NULL, 8);
- srv_sys->dummy_ind1 = dict_mem_index_create
- ("SYS_DUMMY1", "SYS_DUMMY1", DICT_HDR_SPACE, 0, 1);
- dict_index_add_col(srv_sys->dummy_ind1,
+ srv_sys->dummy_ind1 = dict_mem_index_create(
+ "SYS_DUMMY1", "SYS_DUMMY1", DICT_HDR_SPACE, 0, 1);
+ dict_index_add_col(srv_sys->dummy_ind1, table, (dict_col_t*)
dict_table_get_nth_col(table, 0), 0);
srv_sys->dummy_ind1->table = table;
/* create dummy table and index for new-style infimum and supremum */
table = dict_mem_table_create("SYS_DUMMY2",
DICT_HDR_SPACE, 1, DICT_TF_COMPACT);
dict_mem_table_add_col(table, "DUMMY", DATA_CHAR,
- DATA_ENGLISH | DATA_NOT_NULL, 8, 0);
- srv_sys->dummy_ind2 = dict_mem_index_create
- ("SYS_DUMMY2", "SYS_DUMMY2", DICT_HDR_SPACE, 0, 1);
- dict_index_add_col(srv_sys->dummy_ind2,
+ DATA_ENGLISH | DATA_NOT_NULL, 8);
+ srv_sys->dummy_ind2 = dict_mem_index_create(
+ "SYS_DUMMY2", "SYS_DUMMY2", DICT_HDR_SPACE, 0, 1);
+ dict_index_add_col(srv_sys->dummy_ind2, table, (dict_col_t*)
dict_table_get_nth_col(table, 0), 0);
srv_sys->dummy_ind2->table = table;
@@ -1902,8 +1902,8 @@ loop:
if (srv_innodb_status) {
mutex_enter(&srv_monitor_file_mutex);
rewind(srv_monitor_file);
- srv_printf_innodb_monitor
- (srv_monitor_file, NULL, NULL);
+ srv_printf_innodb_monitor(srv_monitor_file, NULL,
+ NULL);
os_file_set_eof(srv_monitor_file);
mutex_exit(&srv_monitor_file_mutex);
}
@@ -1984,9 +1984,9 @@ loop:
granted: in that case do nothing */
if (thr_get_trx(slot->thr)->wait_lock) {
- lock_cancel_waiting_and_release
- (thr_get_trx(slot->thr)
- ->wait_lock);
+ lock_cancel_waiting_and_release(
+ thr_get_trx(slot->thr)
+ ->wait_lock);
}
}
}
@@ -2493,8 +2493,8 @@ flush_loop:
srv_main_thread_op_info = "flushing buffer pool pages";
if (srv_fast_shutdown < 2) {
- n_pages_flushed = buf_flush_batch
- (BUF_FLUSH_LIST, 100, ut_dulint_max);
+ n_pages_flushed = buf_flush_batch(BUF_FLUSH_LIST, 100,
+ ut_dulint_max);
} else {
/* In the fastest shutdown we do not flush the buffer pool
to data files: we set n_pages_flushed to 0 artificially. */
diff --git a/storage/innobase/srv/srv0start.c b/storage/innobase/srv/srv0start.c
index 2b9bd402bb7..d5b44fac3fa 100644
--- a/storage/innobase/srv/srv0start.c
+++ b/storage/innobase/srv/srv0start.c
@@ -301,8 +301,8 @@ srv_parse_data_file_paths_and_sizes(
str += (sizeof ":max:") - 1;
- str = srv_parse_megabytes
- (str, max_auto_extend_size);
+ str = srv_parse_megabytes(
+ str, max_auto_extend_size);
}
if (*str != '\0') {
@@ -557,8 +557,8 @@ open_or_create_log_file(
*log_file_created = FALSE;
srv_normalize_path_for_win(srv_log_group_home_dirs[k]);
- srv_log_group_home_dirs[k] = srv_add_path_separator_if_needed
- (srv_log_group_home_dirs[k]);
+ srv_log_group_home_dirs[k] = srv_add_path_separator_if_needed(
+ srv_log_group_home_dirs[k]);
ut_a(strlen(srv_log_group_home_dirs[k])
< (sizeof name) - 10 - sizeof "ib_logfile");
@@ -796,17 +796,17 @@ open_or_create_data_files(
}
if (srv_data_file_is_raw_partition[i] == SRV_OLD_RAW) {
- files[i] = os_file_create
- (name, OS_FILE_OPEN_RAW,
- OS_FILE_NORMAL, OS_DATA_FILE, &ret);
+ files[i] = os_file_create(
+ name, OS_FILE_OPEN_RAW,
+ OS_FILE_NORMAL, OS_DATA_FILE, &ret);
} else if (i == 0) {
- files[i] = os_file_create
- (name, OS_FILE_OPEN_RETRY,
- OS_FILE_NORMAL, OS_DATA_FILE, &ret);
+ files[i] = os_file_create(
+ name, OS_FILE_OPEN_RETRY,
+ OS_FILE_NORMAL, OS_DATA_FILE, &ret);
} else {
- files[i] = os_file_create
- (name, OS_FILE_OPEN,
- OS_FILE_NORMAL, OS_DATA_FILE, &ret);
+ files[i] = os_file_create(
+ name, OS_FILE_OPEN, OS_FILE_NORMAL,
+ OS_DATA_FILE, &ret);
}
if (!ret) {
@@ -876,12 +876,12 @@ open_or_create_data_files(
return(DB_ERROR);
}
skip_size_check:
- fil_read_flushed_lsn_and_arch_log_no
- (files[i], one_opened,
+ fil_read_flushed_lsn_and_arch_log_no(
+ files[i], one_opened,
#ifdef UNIV_LOG_ARCHIVE
- min_arch_log_no, max_arch_log_no,
+ min_arch_log_no, max_arch_log_no,
#endif /* UNIV_LOG_ARCHIVE */
- min_flushed_lsn, max_flushed_lsn);
+ min_flushed_lsn, max_flushed_lsn);
one_opened = TRUE;
} else {
/* We created the data file and now write it full of
@@ -915,10 +915,10 @@ skip_size_check:
"InnoDB: Database physically writes the"
" file full: wait...\n");
- ret = os_file_set_size
- (name, files[i],
- srv_calc_low32(srv_data_file_sizes[i]),
- srv_calc_high32(srv_data_file_sizes[i]));
+ ret = os_file_set_size(
+ name, files[i],
+ srv_calc_low32(srv_data_file_sizes[i]),
+ srv_calc_high32(srv_data_file_sizes[i]));
if (!ret) {
fprintf(stderr,
@@ -1198,9 +1198,9 @@ innobase_start_or_create_for_mysql(void)
mutex_create(&srv_monitor_file_mutex, SYNC_NO_ORDER_CHECK);
if (srv_innodb_status) {
- srv_monitor_file_name = mem_alloc
- (strlen(fil_path_to_mysql_datadir)
- + 20 + sizeof "/innodb_status.");
+ srv_monitor_file_name = mem_alloc(
+ strlen(fil_path_to_mysql_datadir)
+ + 20 + sizeof "/innodb_status.");
sprintf(srv_monitor_file_name, "%s/innodb_status.%lu",
fil_path_to_mysql_datadir, os_proc_get_number());
srv_monitor_file = fopen(srv_monitor_file_name, "w+");
@@ -1471,10 +1471,9 @@ innobase_start_or_create_for_mysql(void)
fprintf(stderr,
"InnoDB: Starting archive"
" recovery from a backup...\n");
- err = recv_recovery_from_archive_start
- (min_flushed_lsn,
- srv_archive_recovery_limit_lsn,
- min_arch_log_no);
+ err = recv_recovery_from_archive_start(
+ min_flushed_lsn, srv_archive_recovery_limit_lsn,
+ min_arch_log_no);
if (err != DB_SUCCESS) {
return(DB_ERROR);
@@ -1535,8 +1534,8 @@ innobase_start_or_create_for_mysql(void)
data dictionary tables. Does that harm the scanning of
the data dictionary below? */
- dict_check_tablespaces_and_store_max_id
- (recv_needed_recovery);
+ dict_check_tablespaces_and_store_max_id(
+ recv_needed_recovery);
}
srv_startup_is_before_trx_rollback_phase = FALSE;
diff --git a/storage/innobase/sync/sync0arr.c b/storage/innobase/sync/sync0arr.c
index 278dd65bb1e..e45cd48a6b4 100644
--- a/storage/innobase/sync/sync0arr.c
+++ b/storage/innobase/sync/sync0arr.c
@@ -737,9 +737,9 @@ sync_array_detect_deadlock(
(cannot be cell thread) (wait) x-lock, and
he is blocked by start thread */
- ret = sync_array_deadlock_step
- (arr, start, thread,
- debug->pass, depth);
+ ret = sync_array_deadlock_step(
+ arr, start, thread, debug->pass,
+ depth);
if (ret) {
print:
fprintf(stderr, "rw-lock %p ",
@@ -772,9 +772,9 @@ print:
holding (wait) x-lock, and he is blocked by
start thread */
- ret = sync_array_deadlock_step
- (arr, start, thread,
- debug->pass, depth);
+ ret = sync_array_deadlock_step(
+ arr, start, thread, debug->pass,
+ depth);
if (ret) {
goto print;
}
diff --git a/storage/innobase/sync/sync0rw.c b/storage/innobase/sync/sync0rw.c
index f22b0dc8d61..304801d0a3b 100644
--- a/storage/innobase/sync/sync0rw.c
+++ b/storage/innobase/sync/sync0rw.c
@@ -89,7 +89,8 @@ void
rw_lock_create_func(
/*================*/
rw_lock_t* lock, /* in: pointer to memory */
- ulint level, /* in: level */
+ ulint level __attribute__((unused)),
+ /* in: level */
const char* cfile_name, /* in: file name where created */
ulint cline, /* in: file line where created */
const char* cmutex_name) /* in: mutex name */
@@ -116,9 +117,9 @@ rw_lock_create_func(
#ifdef UNIV_SYNC_DEBUG
UT_LIST_INIT(lock->debug_list);
-#endif /* UNIV_SYNC_DEBUG */
lock->level = level;
+#endif /* UNIV_SYNC_DEBUG */
lock->magic_n = RW_LOCK_MAGIC_N;
diff --git a/storage/innobase/sync/sync0sync.c b/storage/innobase/sync/sync0sync.c
index d74b2b09ccf..91fd248502a 100644
--- a/storage/innobase/sync/sync0sync.c
+++ b/storage/innobase/sync/sync0sync.c
@@ -838,17 +838,17 @@ sync_thread_levels_g(
ulint line;
os_thread_id_t thread_id;
- mutex_get_debug_info
- (mutex, &file_name,
- &line, &thread_id);
+ mutex_get_debug_info(
+ mutex, &file_name,
+ &line, &thread_id);
fprintf(stderr,
"InnoDB: Locked mutex:"
" addr %p thread %ld"
" file %s line %ld\n",
(void*) mutex,
- os_thread_pf
- (thread_id),
+ os_thread_pf(
+ thread_id),
file_name,
(ulong) line);
#else /* UNIV_SYNC_DEBUG */
@@ -1155,8 +1155,8 @@ sync_thread_add_level(
case SYNC_IBUF_HEADER:
ut_a(sync_thread_levels_g(array, SYNC_FSP - 1)
&& !sync_thread_levels_contain(array, SYNC_IBUF_MUTEX)
- && !sync_thread_levels_contain
- (array, SYNC_IBUF_PESS_INSERT_MUTEX));
+ && !sync_thread_levels_contain(
+ array, SYNC_IBUF_PESS_INSERT_MUTEX));
break;
case SYNC_DICT_AUTOINC_MUTEX:
ut_a(sync_thread_levels_g(array, SYNC_DICT_AUTOINC_MUTEX));
diff --git a/storage/innobase/trx/trx0purge.c b/storage/innobase/trx/trx0purge.c
index 9689a9fb179..11e089ac90e 100644
--- a/storage/innobase/trx/trx0purge.c
+++ b/storage/innobase/trx/trx0purge.c
@@ -284,8 +284,8 @@ trx_purge_add_update_undo_to_history(
hist_size = mtr_read_ulint(rseg_header + TRX_RSEG_HISTORY_SIZE,
MLOG_4BYTES, mtr);
- ut_ad(undo->size == flst_get_len
- (seg_header + TRX_UNDO_PAGE_LIST, mtr));
+ ut_ad(undo->size == flst_get_len(
+ seg_header + TRX_UNDO_PAGE_LIST, mtr));
mlog_write_ulint(rseg_header + TRX_RSEG_HISTORY_SIZE,
hist_size + undo->size, MLOG_4BYTES, mtr);
@@ -454,8 +454,8 @@ trx_purge_truncate_rseg_history(
rseg_hdr = trx_rsegf_get(rseg->space, rseg->page_no, &mtr);
- hdr_addr = trx_purge_get_log_from_hist
- (flst_get_last(rseg_hdr + TRX_RSEG_HISTORY, &mtr));
+ hdr_addr = trx_purge_get_log_from_hist(
+ flst_get_last(rseg_hdr + TRX_RSEG_HISTORY, &mtr));
loop:
if (hdr_addr.page == FIL_NULL) {
@@ -493,8 +493,8 @@ loop:
return;
}
- prev_hdr_addr = trx_purge_get_log_from_hist
- (flst_get_prev_addr(log_hdr + TRX_UNDO_HISTORY_NODE, &mtr));
+ prev_hdr_addr = trx_purge_get_log_from_hist(
+ flst_get_prev_addr(log_hdr + TRX_UNDO_HISTORY_NODE, &mtr));
n_removed_logs++;
seg_hdr = undo_page + TRX_UNDO_SEG_HDR;
@@ -633,8 +633,8 @@ trx_purge_rseg_get_next_history_log(
purge_sys->n_pages_handled++;
- prev_log_addr = trx_purge_get_log_from_hist
- (flst_get_prev_addr(log_hdr + TRX_UNDO_HISTORY_NODE, &mtr));
+ prev_log_addr = trx_purge_get_log_from_hist(
+ flst_get_prev_addr(log_hdr + TRX_UNDO_HISTORY_NODE, &mtr));
if (prev_log_addr.page == FIL_NULL) {
/* No logs left in the history list */
@@ -855,9 +855,9 @@ trx_purge_get_next_rec(
purge_sys->hdr_page_no,
purge_sys->hdr_offset);
if (next_rec == NULL) {
- rec2 = trx_undo_get_next_rec
- (rec2, purge_sys->hdr_page_no,
- purge_sys->hdr_offset, &mtr);
+ rec2 = trx_undo_get_next_rec(
+ rec2, purge_sys->hdr_page_no,
+ purge_sys->hdr_offset, &mtr);
break;
}
diff --git a/storage/innobase/trx/trx0rec.c b/storage/innobase/trx/trx0rec.c
index 3a214d6ce38..69e858fe71d 100644
--- a/storage/innobase/trx/trx0rec.c
+++ b/storage/innobase/trx/trx0rec.c
@@ -50,8 +50,8 @@ trx_undof_page_add_undo_rec_log(
}
log_end = &log_ptr[11 + 13 + MLOG_BUF_MARGIN];
- log_ptr = mlog_write_initial_log_record_fast
- (undo_page, MLOG_UNDO_INSERT, log_ptr, mtr);
+ log_ptr = mlog_write_initial_log_record_fast(
+ undo_page, MLOG_UNDO_INSERT, log_ptr, mtr);
len = new_free - old_free - 4;
mach_write_to_2(log_ptr, len);
@@ -413,7 +413,6 @@ trx_undo_page_report_modify(
{
dict_table_t* table;
upd_field_t* upd_field;
- dict_col_t* col;
ulint first_free;
byte* ptr;
ulint len;
@@ -486,13 +485,13 @@ trx_undo_page_report_modify(
/* Store the values of the system columns */
field = rec_get_nth_field(rec, offsets,
- dict_index_get_sys_col_pos
- (index, DATA_TRX_ID), &len);
+ dict_index_get_sys_col_pos(
+ index, DATA_TRX_ID), &len);
ut_ad(len == DATA_TRX_ID_LEN);
trx_id = trx_read_trx_id(field);
field = rec_get_nth_field(rec, offsets,
- dict_index_get_sys_col_pos
- (index, DATA_ROLL_PTR), &len);
+ dict_index_get_sys_col_pos(
+ index, DATA_ROLL_PTR), &len);
ut_ad(len == DATA_ROLL_PTR_LEN);
roll_ptr = trx_read_roll_ptr(field);
@@ -567,9 +566,9 @@ trx_undo_page_report_modify(
/* If a field has external storage, we add
to flen the flag */
- len = mach_write_compressed
- (ptr,
- UNIV_EXTERN_STORAGE_FIELD + flen);
+ len = mach_write_compressed(
+ ptr,
+ UNIV_EXTERN_STORAGE_FIELD + flen);
/* Notify purge that it eventually has to
free the old externally stored field */
@@ -627,7 +626,8 @@ trx_undo_page_report_modify(
for (col_no = 0; col_no < dict_table_get_n_cols(table);
col_no++) {
- col = dict_table_get_nth_col(table, col_no);
+ const dict_col_t* col
+ = dict_table_get_nth_col(table, col_no);
if (col->ord_part > 0) {
@@ -826,9 +826,9 @@ trx_undo_update_rec_get_update(
buf = mem_heap_alloc(heap, DATA_ROLL_PTR_LEN);
trx_write_roll_ptr(buf, roll_ptr);
- upd_field_set_field_no
- (upd_field, dict_index_get_sys_col_pos(index, DATA_ROLL_PTR),
- index, trx);
+ upd_field_set_field_no(
+ upd_field, dict_index_get_sys_col_pos(index, DATA_ROLL_PTR),
+ index, trx);
dfield_set_data(&(upd_field->new_val), buf, DATA_ROLL_PTR_LEN);
/* Store then the updated ordinary columns to the update vector */
@@ -1094,14 +1094,14 @@ trx_undo_report_row_operation(
#endif /* UNIV_SYNC_DEBUG */
if (op_type == TRX_UNDO_INSERT_OP) {
- offset = trx_undo_page_report_insert
- (undo_page, trx, index, clust_entry, &mtr);
+ offset = trx_undo_page_report_insert(
+ undo_page, trx, index, clust_entry, &mtr);
} else {
offsets = rec_get_offsets(rec, index, offsets,
ULINT_UNDEFINED, &heap);
- offset = trx_undo_page_report_modify
- (undo_page, trx, index, rec, offsets,
- update, cmpl_info, &mtr);
+ offset = trx_undo_page_report_modify(
+ undo_page, trx, index, rec, offsets, update,
+ cmpl_info, &mtr);
}
if (offset == 0) {
diff --git a/storage/innobase/trx/trx0rseg.c b/storage/innobase/trx/trx0rseg.c
index 745a29021ad..7a6989c7b4f 100644
--- a/storage/innobase/trx/trx0rseg.c
+++ b/storage/innobase/trx/trx0rseg.c
@@ -171,18 +171,18 @@ trx_rseg_mem_create(
if (len > 0) {
trx_sys->rseg_history_len += len;
- node_addr = trx_purge_get_log_from_hist
- (flst_get_last(rseg_header + TRX_RSEG_HISTORY, mtr));
+ node_addr = trx_purge_get_log_from_hist(
+ flst_get_last(rseg_header + TRX_RSEG_HISTORY, mtr));
rseg->last_page_no = node_addr.page;
rseg->last_offset = node_addr.boffset;
undo_log_hdr = trx_undo_page_get(rseg->space, node_addr.page,
mtr) + node_addr.boffset;
- rseg->last_trx_no = mtr_read_dulint
- (undo_log_hdr + TRX_UNDO_TRX_NO, mtr);
- rseg->last_del_marks = mtr_read_ulint
- (undo_log_hdr + TRX_UNDO_DEL_MARKS, MLOG_2BYTES, mtr);
+ rseg->last_trx_no = mtr_read_dulint(
+ undo_log_hdr + TRX_UNDO_TRX_NO, mtr);
+ rseg->last_del_marks = mtr_read_ulint(
+ undo_log_hdr + TRX_UNDO_DEL_MARKS, MLOG_2BYTES, mtr);
} else {
rseg->last_page_no = FIL_NULL;
}
diff --git a/storage/innobase/trx/trx0sys.c b/storage/innobase/trx/trx0sys.c
index ce68f994d44..b87f3d5e090 100644
--- a/storage/innobase/trx/trx0sys.c
+++ b/storage/innobase/trx/trx0sys.c
@@ -105,17 +105,17 @@ trx_doublewrite_init(
trx_doublewrite->first_free = 0;
- trx_doublewrite->block1 = mach_read_from_4
- (doublewrite + TRX_SYS_DOUBLEWRITE_BLOCK1);
- trx_doublewrite->block2 = mach_read_from_4
- (doublewrite + TRX_SYS_DOUBLEWRITE_BLOCK2);
- trx_doublewrite->write_buf_unaligned = ut_malloc
- ((1 + 2 * TRX_SYS_DOUBLEWRITE_BLOCK_SIZE) * UNIV_PAGE_SIZE);
-
- trx_doublewrite->write_buf = ut_align
- (trx_doublewrite->write_buf_unaligned, UNIV_PAGE_SIZE);
- trx_doublewrite->buf_block_arr = mem_alloc
- (2 * TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * sizeof(void*));
+ trx_doublewrite->block1 = mach_read_from_4(
+ doublewrite + TRX_SYS_DOUBLEWRITE_BLOCK1);
+ trx_doublewrite->block2 = mach_read_from_4(
+ doublewrite + TRX_SYS_DOUBLEWRITE_BLOCK2);
+ trx_doublewrite->write_buf_unaligned = ut_malloc(
+ (1 + 2 * TRX_SYS_DOUBLEWRITE_BLOCK_SIZE) * UNIV_PAGE_SIZE);
+
+ trx_doublewrite->write_buf = ut_align(
+ trx_doublewrite->write_buf_unaligned, UNIV_PAGE_SIZE);
+ trx_doublewrite->buf_block_arr = mem_alloc(
+ 2 * TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * sizeof(void*));
}
/********************************************************************
@@ -438,8 +438,8 @@ trx_sys_doublewrite_init_or_restore_pages(
/* printf("Resetting space id in page %lu\n",
source_page_no); */
} else {
- space_id = mach_read_from_4
- (page + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
+ space_id = mach_read_from_4(
+ page + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
}
if (!restore_corrupt_pages) {
@@ -671,12 +671,12 @@ trx_sys_print_mysql_binlog_offset_from_page(
fprintf(stderr,
"ibbackup: Last MySQL binlog file position %lu %lu,"
" file name %s\n",
- (ulong) mach_read_from_4
- (sys_header + TRX_SYS_MYSQL_LOG_INFO
- + TRX_SYS_MYSQL_LOG_OFFSET_HIGH),
- (ulong) mach_read_from_4
- (sys_header + TRX_SYS_MYSQL_LOG_INFO
- + TRX_SYS_MYSQL_LOG_OFFSET_LOW),
+ (ulong) mach_read_from_4(
+ sys_header + TRX_SYS_MYSQL_LOG_INFO
+ + TRX_SYS_MYSQL_LOG_OFFSET_HIGH),
+ (ulong) mach_read_from_4(
+ sys_header + TRX_SYS_MYSQL_LOG_INFO
+ + TRX_SYS_MYSQL_LOG_OFFSET_LOW),
sys_header + TRX_SYS_MYSQL_LOG_INFO
+ TRX_SYS_MYSQL_LOG_NAME);
}
@@ -708,12 +708,12 @@ trx_sys_print_mysql_binlog_offset(void)
return;
}
- trx_sys_mysql_bin_log_pos_high = mach_read_from_4
- (sys_header + TRX_SYS_MYSQL_LOG_INFO
- + TRX_SYS_MYSQL_LOG_OFFSET_HIGH);
- trx_sys_mysql_bin_log_pos_low = mach_read_from_4
- (sys_header + TRX_SYS_MYSQL_LOG_INFO
- + TRX_SYS_MYSQL_LOG_OFFSET_LOW);
+ trx_sys_mysql_bin_log_pos_high = mach_read_from_4(
+ sys_header + TRX_SYS_MYSQL_LOG_INFO
+ + TRX_SYS_MYSQL_LOG_OFFSET_HIGH);
+ trx_sys_mysql_bin_log_pos_low = mach_read_from_4(
+ sys_header + TRX_SYS_MYSQL_LOG_INFO
+ + TRX_SYS_MYSQL_LOG_OFFSET_LOW);
trx_sys_mysql_bin_log_pos
= (((ib_longlong)trx_sys_mysql_bin_log_pos_high) << 32)
@@ -777,12 +777,12 @@ trx_sys_print_mysql_master_log_pos(void)
TRX_SYS_MYSQL_LOG_NAME_LEN);
trx_sys_mysql_master_log_pos
- = (((ib_longlong) mach_read_from_4
- (sys_header + TRX_SYS_MYSQL_MASTER_LOG_INFO
- + TRX_SYS_MYSQL_LOG_OFFSET_HIGH)) << 32)
- + ((ib_longlong) mach_read_from_4
- (sys_header + TRX_SYS_MYSQL_MASTER_LOG_INFO
- + TRX_SYS_MYSQL_LOG_OFFSET_LOW));
+ = (((ib_longlong) mach_read_from_4(
+ sys_header + TRX_SYS_MYSQL_MASTER_LOG_INFO
+ + TRX_SYS_MYSQL_LOG_OFFSET_HIGH)) << 32)
+ + ((ib_longlong) mach_read_from_4(
+ sys_header + TRX_SYS_MYSQL_MASTER_LOG_INFO
+ + TRX_SYS_MYSQL_LOG_OFFSET_LOW));
mtr_commit(&mtr);
}
@@ -847,12 +847,6 @@ trx_sysf_create(
mtr);
ut_a(buf_frame_get_page_no(page) == TRX_SYS_PAGE_NO);
- /* Reset the doublewrite buffer magic number to zero so that we
- know that the doublewrite buffer has not yet been created (this
- suppresses a Valgrind warning) */
-
- mach_write_to_4(page + TRX_SYS_DOUBLEWRITE + TRX_SYS_DOUBLEWRITE_MAGIC,
- 0);
#ifdef UNIV_SYNC_DEBUG
buf_page_dbg_add_level(page, SYNC_TRX_SYS_HEADER);
#endif /* UNIV_SYNC_DEBUG */
@@ -860,6 +854,13 @@ trx_sysf_create(
mlog_write_ulint(page + FIL_PAGE_TYPE, FIL_PAGE_TYPE_TRX_SYS,
MLOG_2BYTES, mtr);
+ /* Reset the doublewrite buffer magic number to zero so that we
+ know that the doublewrite buffer has not yet been created (this
+ suppresses a Valgrind warning) */
+
+ mlog_write_ulint(page + TRX_SYS_DOUBLEWRITE
+ + TRX_SYS_DOUBLEWRITE_MAGIC, 0, MLOG_4BYTES, mtr);
+
sys_header = trx_sysf_get(mtr);
/* Start counting transaction ids from number 1 up */
@@ -919,12 +920,12 @@ trx_sys_init_at_db_start(void)
to the disk-based header! Thus trx id values will not overlap when
the database is repeatedly started! */
- trx_sys->max_trx_id = ut_dulint_add
- (ut_dulint_align_up(mtr_read_dulint
- (sys_header
- + TRX_SYS_TRX_ID_STORE, &mtr),
- TRX_SYS_TRX_ID_WRITE_MARGIN),
- 2 * TRX_SYS_TRX_ID_WRITE_MARGIN);
+ trx_sys->max_trx_id = ut_dulint_add(
+ ut_dulint_align_up(mtr_read_dulint(
+ sys_header
+ + TRX_SYS_TRX_ID_STORE, &mtr),
+ TRX_SYS_TRX_ID_WRITE_MARGIN),
+ 2 * TRX_SYS_TRX_ID_WRITE_MARGIN);
UT_LIST_INIT(trx_sys->mysql_trx_list);
trx_lists_init_at_db_start();
@@ -935,8 +936,8 @@ trx_sys_init_at_db_start(void)
for (;;) {
if ( trx->conc_state != TRX_PREPARED) {
- rows_to_undo += ut_conv_dulint_to_longlong
- (trx->undo_no);
+ rows_to_undo += ut_conv_dulint_to_longlong(
+ trx->undo_no);
}
trx = UT_LIST_GET_NEXT(trx_list, trx);
diff --git a/storage/innobase/trx/trx0trx.c b/storage/innobase/trx/trx0trx.c
index 78b9e2446cb..4d0a26b5757 100644
--- a/storage/innobase/trx/trx0trx.c
+++ b/storage/innobase/trx/trx0trx.c
@@ -556,10 +556,10 @@ trx_lists_init_at_db_start(void)
"InnoDB: Transaction"
" %lu %lu was in the"
" XA prepared state.\n",
- ut_dulint_get_high
- (trx->id),
- ut_dulint_get_low
- (trx->id));
+ ut_dulint_get_high(
+ trx->id),
+ ut_dulint_get_low(
+ trx->id));
if (srv_force_recovery == 0) {
@@ -790,8 +790,8 @@ trx_commit_off_kernel(
because only a single OS thread is allowed to do the
transaction commit for this transaction. */
- update_hdr_page = trx_undo_set_state_at_finish
- (trx, undo, &mtr);
+ update_hdr_page = trx_undo_set_state_at_finish(
+ trx, undo, &mtr);
/* We have to do the cleanup for the update log while
holding the rseg mutex because update log headers
@@ -809,19 +809,19 @@ trx_commit_off_kernel(
if (trx->mysql_log_file_name
&& trx->mysql_log_file_name[0] != '\0') {
- trx_sys_update_mysql_binlog_offset
- (trx->mysql_log_file_name,
- trx->mysql_log_offset,
- TRX_SYS_MYSQL_LOG_INFO, &mtr);
+ trx_sys_update_mysql_binlog_offset(
+ trx->mysql_log_file_name,
+ trx->mysql_log_offset,
+ TRX_SYS_MYSQL_LOG_INFO, &mtr);
trx->mysql_log_file_name = NULL;
}
if (trx->mysql_master_log_file_name[0] != '\0') {
/* This database server is a MySQL replication slave */
- trx_sys_update_mysql_binlog_offset
- (trx->mysql_master_log_file_name,
- trx->mysql_master_log_pos,
- TRX_SYS_MYSQL_MASTER_LOG_INFO, &mtr);
+ trx_sys_update_mysql_binlog_offset(
+ trx->mysql_master_log_file_name,
+ trx->mysql_master_log_pos,
+ TRX_SYS_MYSQL_MASTER_LOG_INFO, &mtr);
}
/* The following call commits the mini-transaction, making the
@@ -1010,8 +1010,8 @@ trx_assign_read_view(
mutex_enter(&kernel_mutex);
if (!trx->read_view) {
- trx->read_view = read_view_open_now
- (trx->id, trx->global_read_view_heap);
+ trx->read_view = read_view_open_now(
+ trx->id, trx->global_read_view_heap);
trx->global_read_view = trx->read_view;
}
@@ -1835,8 +1835,8 @@ trx_prepare_off_kernel(
}
if (trx->update_undo) {
- update_hdr_page = trx_undo_set_state_at_prepare
- (trx, trx->update_undo, &mtr);
+ update_hdr_page = trx_undo_set_state_at_prepare(
+ trx, trx->update_undo, &mtr);
}
mutex_exit(&(rseg->mutex));
@@ -1983,8 +1983,8 @@ trx_recover_for_mysql(
fprintf(stderr,
" InnoDB: Transaction contains changes"
" to %lu rows\n",
- (ulong) ut_conv_dulint_to_longlong
- (trx->undo_no));
+ (ulong) ut_conv_dulint_to_longlong(
+ trx->undo_no));
count++;
diff --git a/storage/innobase/trx/trx0undo.c b/storage/innobase/trx/trx0undo.c
index db33c515c34..fbcfab38f01 100644
--- a/storage/innobase/trx/trx0undo.c
+++ b/storage/innobase/trx/trx0undo.c
@@ -153,8 +153,8 @@ trx_undo_get_prev_rec_from_prev_page(
return(NULL);
}
- prev_page = trx_undo_page_get_s_latched
- (buf_frame_get_space_id(undo_page), prev_page_no, mtr);
+ prev_page = trx_undo_page_get_s_latched(
+ buf_frame_get_space_id(undo_page), prev_page_no, mtr);
return(trx_undo_page_get_last_rec(prev_page, page_no, offset));
}
@@ -1041,8 +1041,8 @@ trx_undo_truncate_end(
goto function_exit;
}
- trx_undo_free_page_in_rollback
- (trx, undo, last_page_no, &mtr);
+ trx_undo_free_page_in_rollback(
+ trx, undo, last_page_no, &mtr);
break;
}
@@ -1261,8 +1261,8 @@ trx_undo_mem_create_at_db_start(
page_no, offset);
mutex_exit(&(rseg->mutex));
- undo->dict_operation = mtr_read_ulint
- (undo_header + TRX_UNDO_DICT_TRANS, MLOG_1BYTE, mtr);
+ undo->dict_operation = mtr_read_ulint(
+ undo_header + TRX_UNDO_DICT_TRANS, MLOG_1BYTE, mtr);
undo->table_id = mtr_read_dulint(undo_header + TRX_UNDO_TABLE_ID, mtr);
undo->state = state;
@@ -1601,8 +1601,8 @@ trx_undo_reuse_cached(
offset = trx_undo_insert_header_reuse(undo_page, trx_id, mtr);
if (trx->support_xa) {
- trx_undo_header_add_space_for_xid
- (undo_page, undo_page + offset, mtr);
+ trx_undo_header_add_space_for_xid(
+ undo_page, undo_page + offset, mtr);
}
} else {
ut_a(mach_read_from_2(undo_page + TRX_UNDO_PAGE_HDR
@@ -1612,8 +1612,8 @@ trx_undo_reuse_cached(
offset = trx_undo_header_create(undo_page, trx_id, mtr);
if (trx->support_xa) {
- trx_undo_header_add_space_for_xid
- (undo_page, undo_page + offset, mtr);
+ trx_undo_header_add_space_for_xid(
+ undo_page, undo_page + offset, mtr);
}
}