dict0boot.ic
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:3k
- /******************************************************
- Data dictionary creation and booting
- (c) 1996 Innobase Oy
- Created 4/18/1996 Heikki Tuuri
- *******************************************************/
- /**************************************************************************
- Writes the current value of the row id counter to the dictionary header file
- page. */
- void
- dict_hdr_flush_row_id(void);
- /*=======================*/
- /**************************************************************************
- Gets a pointer to the dictionary header and x-latches its page. */
- UNIV_INLINE
- dict_hdr_t*
- dict_hdr_get(
- /*=========*/
- /* out: pointer to the dictionary header,
- page x-latched */
- mtr_t* mtr) /* in: mtr */
- {
- dict_hdr_t* header;
- ut_ad(mtr);
-
- header = DICT_HDR + buf_page_get(DICT_HDR_SPACE, DICT_HDR_PAGE_NO,
- RW_X_LATCH, mtr);
- buf_page_dbg_add_level(header, SYNC_DICT_HEADER);
- return(header);
- }
- /**************************************************************************
- Returns a new table, index, or tree id. */
- UNIV_INLINE
- dulint
- dict_hdr_get_new_id(
- /*================*/
- /* out: the new id */
- ulint type) /* in: DICT_HDR_ROW_ID, ... */
- {
- dict_hdr_t* dict_hdr;
- dulint id;
- mtr_t mtr;
- ut_ad((type == DICT_HDR_TABLE_ID) || (type == DICT_HDR_INDEX_ID)
- || (type == DICT_HDR_MIX_ID));
- mtr_start(&mtr);
- dict_hdr = dict_hdr_get(&mtr);
- id = mtr_read_dulint(dict_hdr + type, MLOG_8BYTES, &mtr);
- id = ut_dulint_add(id, 1);
-
- mlog_write_dulint(dict_hdr + type, id, MLOG_8BYTES, &mtr);
- mtr_commit(&mtr);
- return(id);
- }
- /**************************************************************************
- Returns a new row id. */
- UNIV_INLINE
- dulint
- dict_sys_get_new_row_id(void)
- /*=========================*/
- /* out: the new id */
- {
- dulint id;
- mutex_enter(&(dict_sys->mutex));
- id = dict_sys->row_id;
-
- if (0 == (ut_dulint_get_low(id) % DICT_HDR_ROW_ID_WRITE_MARGIN)) {
- dict_hdr_flush_row_id();
- }
- UT_DULINT_INC(dict_sys->row_id);
- mutex_exit(&(dict_sys->mutex));
- return(id);
- }
- /**************************************************************************
- Reads a row id from a record or other 6-byte stored form. */
- UNIV_INLINE
- dulint
- dict_sys_read_row_id(
- /*=================*/
- /* out: row id */
- byte* field) /* in: record field */
- {
- ut_ad(DATA_ROW_ID_LEN == 6);
- return(mach_read_from_6(field));
- }
- /**************************************************************************
- Writes a row id to a record or other 6-byte stored form. */
- UNIV_INLINE
- void
- dict_sys_write_row_id(
- /*==================*/
- byte* field, /* in: record field */
- dulint row_id) /* in: row id */
- {
- ut_ad(DATA_ROW_ID_LEN == 6);
- mach_write_to_6(field, row_id);
- }