dict0boot.ic
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. Data dictionary creation and booting
  3. (c) 1996 Innobase Oy
  4. Created 4/18/1996 Heikki Tuuri
  5. *******************************************************/
  6. /**************************************************************************
  7. Writes the current value of the row id counter to the dictionary header file
  8. page. */
  9. void
  10. dict_hdr_flush_row_id(void);
  11. /*=======================*/
  12. /**************************************************************************
  13. Gets a pointer to the dictionary header and x-latches its page. */
  14. UNIV_INLINE
  15. dict_hdr_t*
  16. dict_hdr_get(
  17. /*=========*/
  18. /* out: pointer to the dictionary header, 
  19. page x-latched */
  20. mtr_t* mtr) /* in: mtr */
  21. {
  22. dict_hdr_t* header;
  23. ut_ad(mtr);
  24. header = DICT_HDR + buf_page_get(DICT_HDR_SPACE, DICT_HDR_PAGE_NO,
  25. RW_X_LATCH, mtr);
  26. buf_page_dbg_add_level(header, SYNC_DICT_HEADER);
  27. return(header);
  28. }
  29. /**************************************************************************
  30. Returns a new table, index, or tree id. */
  31. UNIV_INLINE
  32. dulint
  33. dict_hdr_get_new_id(
  34. /*================*/
  35. /* out: the new id */
  36. ulint type) /* in: DICT_HDR_ROW_ID, ... */
  37. {
  38. dict_hdr_t* dict_hdr;
  39. dulint id;
  40. mtr_t mtr;
  41. ut_ad((type == DICT_HDR_TABLE_ID) || (type == DICT_HDR_INDEX_ID)
  42.       || (type == DICT_HDR_MIX_ID));
  43. mtr_start(&mtr);
  44. dict_hdr = dict_hdr_get(&mtr);
  45. id = mtr_read_dulint(dict_hdr + type, MLOG_8BYTES, &mtr); 
  46. id = ut_dulint_add(id, 1);
  47. mlog_write_dulint(dict_hdr + type, id, MLOG_8BYTES, &mtr); 
  48. mtr_commit(&mtr);
  49. return(id);
  50. }
  51. /**************************************************************************
  52. Returns a new row id. */
  53. UNIV_INLINE
  54. dulint
  55. dict_sys_get_new_row_id(void)
  56. /*=========================*/
  57. /* out: the new id */
  58. {
  59. dulint id;
  60. mutex_enter(&(dict_sys->mutex));
  61. id = dict_sys->row_id;
  62. if (0 == (ut_dulint_get_low(id) % DICT_HDR_ROW_ID_WRITE_MARGIN)) {
  63. dict_hdr_flush_row_id();
  64. }
  65. UT_DULINT_INC(dict_sys->row_id);
  66. mutex_exit(&(dict_sys->mutex));
  67. return(id);
  68. }
  69. /**************************************************************************
  70. Reads a row id from a record or other 6-byte stored form. */
  71. UNIV_INLINE
  72. dulint
  73. dict_sys_read_row_id(
  74. /*=================*/
  75. /* out: row id */
  76. byte* field) /* in: record field */
  77. {
  78. ut_ad(DATA_ROW_ID_LEN == 6);
  79. return(mach_read_from_6(field));
  80. }
  81. /**************************************************************************
  82. Writes a row id to a record or other 6-byte stored form. */
  83. UNIV_INLINE
  84. void
  85. dict_sys_write_row_id(
  86. /*==================*/
  87. byte* field, /* in: record field */
  88. dulint row_id) /* in: row id */
  89. {
  90. ut_ad(DATA_ROW_ID_LEN == 6);
  91. mach_write_to_6(field, row_id);
  92. }