summaryrefslogtreecommitdiff
path: root/storage/innobase/page
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 /storage/innobase/page
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.
Diffstat (limited to 'storage/innobase/page')
-rw-r--r--storage/innobase/page/page0cur.c40
-rw-r--r--storage/innobase/page/page0page.c6
2 files changed, 24 insertions, 22 deletions
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);
}
}