mariadb/storage/innobase/mtr/mtr0log.c
unknown bf2f50d345 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.
2006-09-21 01:39:09 -06:00

559 lines
12 KiB
C

/******************************************************
Mini-transaction log routines
(c) 1995 Innobase Oy
Created 12/7/1995 Heikki Tuuri
*******************************************************/
#include "mtr0log.h"
#ifdef UNIV_NONINL
#include "mtr0log.ic"
#endif
#include "buf0buf.h"
#include "dict0boot.h"
#include "log0recv.h"
#include "page0page.h"
/************************************************************
Catenates n bytes to the mtr log. */
void
mlog_catenate_string(
/*=================*/
mtr_t* mtr, /* in: mtr */
const byte* str, /* in: string to write */
ulint len) /* in: string length */
{
dyn_array_t* mlog;
if (mtr_get_log_mode(mtr) == MTR_LOG_NONE) {
return;
}
mlog = &(mtr->log);
dyn_push_string(mlog, str, len);
}
/************************************************************
Writes the initial part of a log record consisting of one-byte item
type and four-byte space and page numbers. Also pushes info
to the mtr memo that a buffer page has been modified. */
void
mlog_write_initial_log_record(
/*==========================*/
byte* ptr, /* in: pointer to (inside) a buffer frame holding the
file page where modification is made */
byte type, /* in: log item type: MLOG_1BYTE, ... */
mtr_t* mtr) /* in: mini-transaction handle */
{
byte* log_ptr;
ut_ad(type <= MLOG_BIGGEST_TYPE);
ut_ad(type > MLOG_8BYTES);
if (ptr < buf_pool->frame_zero || ptr >= buf_pool->high_end) {
fprintf(stderr,
"InnoDB: Error: trying to write to"
" a stray memory location %p\n", (void*) ptr);
ut_error;
}
log_ptr = mlog_open(mtr, 11);
/* If no logging is requested, we may return now */
if (log_ptr == NULL) {
return;
}
log_ptr = mlog_write_initial_log_record_fast(ptr, type, log_ptr, mtr);
mlog_close(mtr, log_ptr);
}
/************************************************************
Parses an initial log record written by mlog_write_initial_log_record. */
byte*
mlog_parse_initial_log_record(
/*==========================*/
/* out: parsed record end, NULL if not a complete
record */
byte* ptr, /* in: buffer */
byte* end_ptr,/* in: buffer end */
byte* type, /* out: log record type: MLOG_1BYTE, ... */
ulint* space, /* out: space id */
ulint* page_no)/* out: page number */
{
if (end_ptr < ptr + 1) {
return(NULL);
}
*type = (byte)((ulint)*ptr & ~MLOG_SINGLE_REC_FLAG);
ut_ad(*type <= MLOG_BIGGEST_TYPE);
ptr++;
if (end_ptr < ptr + 2) {
return(NULL);
}
ptr = mach_parse_compressed(ptr, end_ptr, space);
if (ptr == NULL) {
return(NULL);
}
ptr = mach_parse_compressed(ptr, end_ptr, page_no);
return(ptr);
}
/************************************************************
Parses a log record written by mlog_write_ulint or mlog_write_dulint. */
byte*
mlog_parse_nbytes(
/*==============*/
/* out: parsed record end, NULL if not a complete
record or a corrupt record */
ulint type, /* in: log record type: MLOG_1BYTE, ... */
byte* ptr, /* in: buffer */
byte* end_ptr,/* in: buffer end */
byte* page) /* in: page where to apply the log record, or NULL */
{
ulint offset;
ulint val;
dulint dval;
ut_a(type <= MLOG_8BYTES);
if (end_ptr < ptr + 2) {
return(NULL);
}
offset = mach_read_from_2(ptr);
ptr += 2;
if (offset >= UNIV_PAGE_SIZE) {
recv_sys->found_corrupt_log = TRUE;
return(NULL);
}
if (type == MLOG_8BYTES) {
ptr = mach_dulint_parse_compressed(ptr, end_ptr, &dval);
if (ptr == NULL) {
return(NULL);
}
if (page) {
mach_write_to_8(page + offset, dval);
}
return(ptr);
}
ptr = mach_parse_compressed(ptr, end_ptr, &val);
if (ptr == NULL) {
return(NULL);
}
if (type == MLOG_1BYTE) {
if (val > 0xFFUL) {
recv_sys->found_corrupt_log = TRUE;
return(NULL);
}
} else if (type == MLOG_2BYTES) {
if (val > 0xFFFFUL) {
recv_sys->found_corrupt_log = TRUE;
return(NULL);
}
} else {
if (type != MLOG_4BYTES) {
recv_sys->found_corrupt_log = TRUE;
return(NULL);
}
}
if (page) {
if (type == MLOG_1BYTE) {
mach_write_to_1(page + offset, val);
} else if (type == MLOG_2BYTES) {
mach_write_to_2(page + offset, val);
} else {
ut_a(type == MLOG_4BYTES);
mach_write_to_4(page + offset, val);
}
}
return(ptr);
}
/************************************************************
Writes 1 - 4 bytes to a file page buffered in the buffer pool.
Writes the corresponding log record to the mini-transaction log. */
void
mlog_write_ulint(
/*=============*/
byte* ptr, /* in: pointer where to write */
ulint val, /* in: value to write */
byte type, /* in: MLOG_1BYTE, MLOG_2BYTES, MLOG_4BYTES */
mtr_t* mtr) /* in: mini-transaction handle */
{
byte* log_ptr;
if (ptr < buf_pool->frame_zero || ptr >= buf_pool->high_end) {
fprintf(stderr,
"InnoDB: Error: trying to write to"
" a stray memory location %p\n", (void*) ptr);
ut_error;
}
if (type == MLOG_1BYTE) {
mach_write_to_1(ptr, val);
} else if (type == MLOG_2BYTES) {
mach_write_to_2(ptr, val);
} else {
ut_ad(type == MLOG_4BYTES);
mach_write_to_4(ptr, val);
}
log_ptr = mlog_open(mtr, 11 + 2 + 5);
/* If no logging is requested, we may return now */
if (log_ptr == NULL) {
return;
}
log_ptr = mlog_write_initial_log_record_fast(ptr, type, log_ptr, mtr);
mach_write_to_2(log_ptr, ptr - buf_frame_align(ptr));
log_ptr += 2;
log_ptr += mach_write_compressed(log_ptr, val);
mlog_close(mtr, log_ptr);
}
/************************************************************
Writes 8 bytes to a file page buffered in the buffer pool.
Writes the corresponding log record to the mini-transaction log. */
void
mlog_write_dulint(
/*==============*/
byte* ptr, /* in: pointer where to write */
dulint val, /* in: value to write */
mtr_t* mtr) /* in: mini-transaction handle */
{
byte* log_ptr;
if (UNIV_UNLIKELY(ptr < buf_pool->frame_zero)
|| UNIV_UNLIKELY(ptr >= buf_pool->high_end)) {
fprintf(stderr,
"InnoDB: Error: trying to write to"
" a stray memory location %p\n", (void*) ptr);
ut_error;
}
ut_ad(ptr && mtr);
mach_write_to_8(ptr, val);
log_ptr = mlog_open(mtr, 11 + 2 + 9);
/* If no logging is requested, we may return now */
if (log_ptr == NULL) {
return;
}
log_ptr = mlog_write_initial_log_record_fast(ptr, MLOG_8BYTES,
log_ptr, mtr);
mach_write_to_2(log_ptr, ptr - buf_frame_align(ptr));
log_ptr += 2;
log_ptr += mach_dulint_write_compressed(log_ptr, val);
mlog_close(mtr, log_ptr);
}
/************************************************************
Writes a string to a file page buffered in the buffer pool. Writes the
corresponding log record to the mini-transaction log. */
void
mlog_write_string(
/*==============*/
byte* ptr, /* in: pointer where to write */
const byte* str, /* in: string to write */
ulint len, /* in: string length */
mtr_t* mtr) /* in: mini-transaction handle */
{
byte* log_ptr;
if (UNIV_UNLIKELY(ptr < buf_pool->frame_zero)
|| UNIV_UNLIKELY(ptr >= buf_pool->high_end)) {
fprintf(stderr,
"InnoDB: Error: trying to write to"
" a stray memory location %p\n", (void*) ptr);
ut_error;
}
ut_ad(ptr && mtr);
ut_a(len < UNIV_PAGE_SIZE);
ut_memcpy(ptr, str, len);
log_ptr = mlog_open(mtr, 30);
/* If no logging is requested, we may return now */
if (log_ptr == NULL) {
return;
}
log_ptr = mlog_write_initial_log_record_fast(ptr, MLOG_WRITE_STRING,
log_ptr, mtr);
mach_write_to_2(log_ptr, ptr - buf_frame_align(ptr));
log_ptr += 2;
mach_write_to_2(log_ptr, len);
log_ptr += 2;
mlog_close(mtr, log_ptr);
mlog_catenate_string(mtr, str, len);
}
/************************************************************
Parses a log record written by mlog_write_string. */
byte*
mlog_parse_string(
/*==============*/
/* out: parsed record end, NULL if not a complete
record */
byte* ptr, /* in: buffer */
byte* end_ptr,/* in: buffer end */
byte* page) /* in: page where to apply the log record, or NULL */
{
ulint offset;
ulint len;
if (end_ptr < ptr + 4) {
return(NULL);
}
offset = mach_read_from_2(ptr);
ptr += 2;
if (offset >= UNIV_PAGE_SIZE) {
recv_sys->found_corrupt_log = TRUE;
return(NULL);
}
len = mach_read_from_2(ptr);
ptr += 2;
ut_a(len + offset < UNIV_PAGE_SIZE);
if (end_ptr < ptr + len) {
return(NULL);
}
if (page) {
ut_memcpy(page + offset, ptr, len);
}
return(ptr + len);
}
/************************************************************
Opens a buffer for mlog, writes the initial log record and,
if needed, the field lengths of an index. */
byte*
mlog_open_and_write_index(
/*======================*/
/* out: buffer, NULL if log mode
MTR_LOG_NONE */
mtr_t* mtr, /* in: mtr */
byte* rec, /* in: index record or page */
dict_index_t* index, /* in: record descriptor */
byte type, /* in: log item type */
ulint size) /* in: requested buffer size in bytes
(if 0, calls mlog_close() and returns NULL) */
{
byte* log_ptr;
const byte* log_start;
const byte* log_end;
ut_ad(!!page_rec_is_comp(rec) == dict_table_is_comp(index->table));
if (!page_rec_is_comp(rec)) {
log_start = log_ptr = mlog_open(mtr, 11 + size);
if (!log_ptr) {
return(NULL); /* logging is disabled */
}
log_ptr = mlog_write_initial_log_record_fast(rec, type,
log_ptr, mtr);
log_end = log_ptr + 11 + size;
} else {
ulint i;
ulint n = dict_index_get_n_fields(index);
/* total size needed */
ulint total = 11 + size + (n + 2) * 2;
ulint alloc = total;
/* allocate at most DYN_ARRAY_DATA_SIZE at a time */
if (alloc > DYN_ARRAY_DATA_SIZE) {
alloc = DYN_ARRAY_DATA_SIZE;
}
log_start = log_ptr = mlog_open(mtr, alloc);
if (!log_ptr) {
return(NULL); /* logging is disabled */
}
log_end = log_ptr + alloc;
log_ptr = mlog_write_initial_log_record_fast(rec, type,
log_ptr, mtr);
mach_write_to_2(log_ptr, n);
log_ptr += 2;
mach_write_to_2(log_ptr,
dict_index_get_n_unique_in_tree(index));
log_ptr += 2;
for (i = 0; i < n; i++) {
dict_field_t* field;
const dict_col_t* col;
ulint len;
field = dict_index_get_nth_field(index, i);
col = dict_field_get_col(field);
len = field->fixed_len;
ut_ad(len < 0x7fff);
if (len == 0
&& (col->len > 255 || col->mtype == DATA_BLOB)) {
/* variable-length field
with maximum length > 255 */
len = 0x7fff;
}
if (col->prtype & DATA_NOT_NULL) {
len |= 0x8000;
}
if (log_ptr + 2 > log_end) {
mlog_close(mtr, log_ptr);
ut_a(total > (ulint) (log_ptr - log_start));
total -= log_ptr - log_start;
alloc = total;
if (alloc > DYN_ARRAY_DATA_SIZE) {
alloc = DYN_ARRAY_DATA_SIZE;
}
log_start = log_ptr = mlog_open(mtr, alloc);
if (!log_ptr) {
return(NULL); /* logging is disabled */
}
log_end = log_ptr + alloc;
}
mach_write_to_2(log_ptr, len);
log_ptr += 2;
}
}
if (size == 0) {
mlog_close(mtr, log_ptr);
log_ptr = NULL;
} else if (log_ptr + size > log_end) {
mlog_close(mtr, log_ptr);
log_ptr = mlog_open(mtr, size);
}
return(log_ptr);
}
/************************************************************
Parses a log record written by mlog_open_and_write_index. */
byte*
mlog_parse_index(
/*=============*/
/* out: parsed record end,
NULL if not a complete record */
byte* ptr, /* in: buffer */
byte* end_ptr,/* in: buffer end */
/* out: new value of log_ptr */
ibool comp, /* in: TRUE=compact record format */
dict_index_t** index) /* out, own: dummy index */
{
ulint i, n, n_uniq;
dict_table_t* table;
dict_index_t* ind;
ut_ad(comp == FALSE || comp == TRUE);
if (comp) {
if (end_ptr < ptr + 4) {
return(NULL);
}
n = mach_read_from_2(ptr);
ptr += 2;
n_uniq = mach_read_from_2(ptr);
ut_ad(n_uniq <= n);
if (end_ptr < ptr + (n + 1) * 2) {
return(NULL);
}
} else {
n = n_uniq = 1;
}
table = dict_mem_table_create("LOG_DUMMY", DICT_HDR_SPACE, n,
comp ? DICT_TF_COMPACT : 0);
ind = dict_mem_index_create("LOG_DUMMY", "LOG_DUMMY",
DICT_HDR_SPACE, 0, n);
ind->table = table;
ind->n_uniq = n_uniq;
if (n_uniq != n) {
ind->type = DICT_CLUSTERED;
}
/* avoid ut_ad(index->cached) in dict_index_get_n_unique_in_tree */
ind->cached = TRUE;
if (comp) {
for (i = 0; i < n; i++) {
ulint len = mach_read_from_2(ptr += 2);
/* The high-order bit of len is the NOT NULL flag;
the rest is 0 or 0x7fff for variable-length fields,
and 1..0x7ffe for fixed-length fields. */
dict_mem_table_add_col(
table, "DUMMY",
((len + 1) & 0x7fff) <= 1
? DATA_BINARY : DATA_FIXBINARY,
len & 0x8000 ? DATA_NOT_NULL : 0,
len & 0x7fff);
dict_index_add_col(ind, table, (dict_col_t*)
dict_table_get_nth_col(table, i),
0);
}
ptr += 2;
}
*index = ind;
return(ptr);
}