summaryrefslogtreecommitdiff
path: root/storage/innobase/pars/pars0pars.c
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/pars/pars0pars.c
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/pars/pars0pars.c')
-rw-r--r--storage/innobase/pars/pars0pars.c97
1 files changed, 52 insertions, 45 deletions
diff --git a/storage/innobase/pars/pars0pars.c b/storage/innobase/pars/pars0pars.c
index 214fff68c55..6861844870c 100644
--- a/storage/innobase/pars/pars0pars.c
+++ b/storage/innobase/pars/pars0pars.c
@@ -254,43 +254,43 @@ pars_resolve_func_data_type(
== DATA_INT);
} else if (func == PARS_COUNT_TOKEN) {
ut_a(arg);
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if (func == PARS_TO_CHAR_TOKEN) {
ut_a(dtype_get_mtype(que_node_get_data_type(arg)) == DATA_INT);
dtype_set(que_node_get_data_type(node), DATA_VARCHAR,
- DATA_ENGLISH, 0, 0);
+ DATA_ENGLISH, 0);
} else if (func == PARS_TO_BINARY_TOKEN) {
if (dtype_get_mtype(que_node_get_data_type(arg)) == DATA_INT) {
dtype_set(que_node_get_data_type(node), DATA_VARCHAR,
- DATA_ENGLISH, 0, 0);
+ DATA_ENGLISH, 0);
} else {
dtype_set(que_node_get_data_type(node), DATA_BINARY,
- 0, 0, 0);
+ 0, 0);
}
} else if (func == PARS_TO_NUMBER_TOKEN) {
ut_a(dtype_get_mtype(que_node_get_data_type(arg))
== DATA_VARCHAR);
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if (func == PARS_BINARY_TO_NUMBER_TOKEN) {
ut_a(dtype_get_mtype(que_node_get_data_type(arg))
== DATA_VARCHAR);
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if (func == PARS_LENGTH_TOKEN) {
ut_a(dtype_get_mtype(que_node_get_data_type(arg))
== DATA_VARCHAR);
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if (func == PARS_INSTR_TOKEN) {
ut_a(dtype_get_mtype(que_node_get_data_type(arg))
== DATA_VARCHAR);
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if (func == PARS_SYSDATE_TOKEN) {
ut_a(arg == NULL);
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if ((func == PARS_SUBSTR_TOKEN)
|| (func == PARS_CONCAT_TOKEN)) {
@@ -298,7 +298,7 @@ pars_resolve_func_data_type(
ut_a(dtype_get_mtype(que_node_get_data_type(arg))
== DATA_VARCHAR);
dtype_set(que_node_get_data_type(node), DATA_VARCHAR,
- DATA_ENGLISH, 0, 0);
+ DATA_ENGLISH, 0);
} else if ((func == '>') || (func == '<') || (func == '=')
|| (func == PARS_GE_TOKEN)
@@ -310,18 +310,18 @@ pars_resolve_func_data_type(
|| (func == PARS_NOTFOUND_TOKEN)) {
/* We currently have no iboolean type: use integer type */
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if (func == PARS_RND_TOKEN) {
ut_a(dtype_get_mtype(que_node_get_data_type(arg)) == DATA_INT);
- dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4, 0);
+ dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
} else if (func == PARS_RND_STR_TOKEN) {
ut_a(dtype_get_mtype(que_node_get_data_type(arg)) == DATA_INT);
dtype_set(que_node_get_data_type(node), DATA_VARCHAR,
- DATA_ENGLISH, 0, 0);
+ DATA_ENGLISH, 0);
} else {
ut_error;
}
@@ -450,7 +450,6 @@ pars_resolve_exp_columns(
sym_node_t* sym_node;
dict_table_t* table;
sym_node_t* t_node;
- dict_col_t* col;
ulint n_cols;
ulint i;
@@ -490,10 +489,13 @@ pars_resolve_exp_columns(
n_cols = dict_table_get_n_cols(table);
for (i = 0; i < n_cols; i++) {
- col = dict_table_get_nth_col(table, i);
+ const dict_col_t* col
+ = dict_table_get_nth_col(table, i);
+ const char* col_name
+ = dict_table_get_col_name(table, i);
- if ((sym_node->name_len == ut_strlen(col->name))
- && (0 == ut_memcmp(sym_node->name, col->name,
+ if ((sym_node->name_len == ut_strlen(col_name))
+ && (0 == ut_memcmp(sym_node->name, col_name,
sym_node->name_len))) {
/* Found */
sym_node->resolved = TRUE;
@@ -502,8 +504,10 @@ pars_resolve_exp_columns(
sym_node->col_no = i;
sym_node->prefetch_buf = NULL;
- dfield_set_type(&(sym_node->common.val),
- dict_col_get_type(col));
+ dict_col_copy_type(
+ col,
+ dfield_get_type(&sym_node
+ ->common.val));
return;
}
@@ -592,7 +596,6 @@ pars_select_all_columns(
sym_node_t* col_node;
sym_node_t* table_node;
dict_table_t* table;
- dict_col_t* col;
ulint i;
select_node->select_list = NULL;
@@ -603,15 +606,15 @@ pars_select_all_columns(
table = table_node->table;
for (i = 0; i < dict_table_get_n_user_cols(table); i++) {
-
- col = dict_table_get_nth_col(table, i);
+ const char* col_name = dict_table_get_col_name(
+ table, i);
col_node = sym_tab_add_id(pars_sym_tab_global,
- (byte*)col->name,
- ut_strlen(col->name));
- select_node->select_list
- = que_node_list_add_last
- (select_node->select_list, col_node);
+ (byte*)col_name,
+ ut_strlen(col_name));
+
+ select_node->select_list = que_node_list_add_last(
+ select_node->select_list, col_node);
}
table_node = que_node_get_next(table_node);
@@ -888,10 +891,12 @@ pars_process_assign_list(
pars_resolve_exp_columns(table_sym, assign_node->val);
pars_resolve_exp_variables_and_types(NULL, assign_node->val);
#if 0
- ut_a(dtype_get_mtype
- (dfield_get_type(que_node_get_val(assign_node->col)))
- == dtype_get_mtype
- (dfield_get_type(que_node_get_val(assign_node->val))));
+ ut_a(dtype_get_mtype(
+ dfield_get_type(que_node_get_val(
+ assign_node->col)))
+ == dtype_get_mtype(
+ dfield_get_type(que_node_get_val(
+ assign_node->val))));
#endif
/* Add to the update node all the columns found in assignment
@@ -915,13 +920,14 @@ pars_process_assign_list(
col_sym = assign_node->col;
- upd_field_set_field_no(upd_field, dict_index_get_nth_col_pos
- (clust_index, col_sym->col_no),
+ upd_field_set_field_no(upd_field, dict_index_get_nth_col_pos(
+ clust_index, col_sym->col_no),
clust_index, NULL);
upd_field->exp = assign_node->val;
- if (!dtype_is_fixed_size(dict_index_get_nth_type
- (clust_index, upd_field->field_no))) {
+ if (!dict_col_get_fixed_size(
+ dict_index_get_nth_col(clust_index,
+ upd_field->field_no))) {
changes_field_size = 0;
}
@@ -1126,23 +1132,23 @@ pars_set_dfield_type(
if (type == &pars_int_token) {
ut_a(len == 0);
- dtype_set(dfield_get_type(dfield), DATA_INT, flags, 4, 0);
+ dtype_set(dfield_get_type(dfield), DATA_INT, flags, 4);
} else if (type == &pars_char_token) {
ut_a(len == 0);
dtype_set(dfield_get_type(dfield), DATA_VARCHAR,
- DATA_ENGLISH | flags, 0, 0);
+ DATA_ENGLISH | flags, 0);
} else if (type == &pars_binary_token) {
ut_a(len != 0);
dtype_set(dfield_get_type(dfield), DATA_FIXBINARY,
- DATA_BINARY_TYPE | flags, len, 0);
+ DATA_BINARY_TYPE | flags, len);
} else if (type == &pars_blob_token) {
ut_a(len == 0);
dtype_set(dfield_get_type(dfield), DATA_BLOB,
- DATA_BINARY_TYPE | flags, 0, 0);
+ DATA_BINARY_TYPE | flags, 0);
} else {
ut_error;
}
@@ -1599,7 +1605,8 @@ pars_create_table(
sym_node_t* table_sym, /* in: table name node in the symbol
table */
sym_node_t* column_defs, /* in: list of column names */
- void* not_fit_in_memory)/* in: a non-NULL pointer means that
+ void* not_fit_in_memory __attribute__((unused)))
+ /* in: a non-NULL pointer means that
this is a table which in simulations
should be simulated as not fitting
in memory; thread is put to sleep
@@ -1623,18 +1630,18 @@ pars_create_table(
create tables in the old (not compact) record format. */
table = dict_mem_table_create(table_sym->name, 0, n_cols, 0);
+#ifdef UNIV_DEBUG
if (not_fit_in_memory != NULL) {
table->does_not_fit_in_memory = TRUE;
}
-
+#endif /* UNIV_DEBUG */
column = column_defs;
while (column) {
dtype = dfield_get_type(que_node_get_val(column));
dict_mem_table_add_col(table, column->name, dtype->mtype,
- dtype->prtype, dtype->len,
- dtype->prec);
+ dtype->prtype, dtype->len);
column->resolved = TRUE;
column->token_type = SYM_COLUMN;
@@ -1859,8 +1866,8 @@ pars_sql(
pars_sym_tab_global = sym_tab_create(heap);
pars_sym_tab_global->string_len = strlen(str);
- pars_sym_tab_global->sql_string = mem_heap_dup
- (heap, str, pars_sym_tab_global->string_len + 1);
+ pars_sym_tab_global->sql_string = mem_heap_dup(
+ heap, str, pars_sym_tab_global->string_len + 1);
pars_sym_tab_global->next_char_pos = 0;
pars_sym_tab_global->info = info;