⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 btr0pcur.ic

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 IC
📖 第 1 页 / 共 2 页
字号:
{	ut_ad(cursor->pos_state == BTR_PCUR_IS_POSITIONED);	ut_ad(cursor->latch_mode != BTR_NO_LATCHES);	cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;loop:	if (btr_pcur_is_after_last_on_page(cursor, mtr)) {		if (btr_pcur_is_after_last_in_tree(cursor, mtr)) {			return(FALSE);		}		btr_pcur_move_to_next_page(cursor, mtr);	} else {		btr_pcur_move_to_next_on_page(cursor, mtr);	}	if (btr_pcur_is_on_user_rec(cursor, mtr)) {		return(TRUE);	}	goto loop;}/*************************************************************Moves the persistent cursor to the next record in the tree. If no records areleft, the cursor stays 'after last in tree'. */UNIV_INLINEiboolbtr_pcur_move_to_next(/*==================*/				/* out: TRUE if the cursor was not after last				in tree */	btr_pcur_t*	cursor,	/* in: persistent cursor; NOTE that the				function may release the page latch */	mtr_t*		mtr)	/* in: mtr */{	ut_ad(cursor->pos_state == BTR_PCUR_IS_POSITIONED);	ut_ad(cursor->latch_mode != BTR_NO_LATCHES);	cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;		if (btr_pcur_is_after_last_on_page(cursor, mtr)) {		if (btr_pcur_is_after_last_in_tree(cursor, mtr)) {			return(FALSE);		}				btr_pcur_move_to_next_page(cursor, mtr);		return(TRUE);	}	btr_pcur_move_to_next_on_page(cursor, mtr);	return(TRUE);	}/******************************************************************Commits the pcur mtr and sets the pcur latch mode to BTR_NO_LATCHES,that is, the cursor becomes detached. If there have been modificationsto the page where pcur is positioned, this can be used instead ofbtr_pcur_release_leaf. Function btr_pcur_store_position should be usedbefore calling this, if restoration of cursor is wanted later. */UNIV_INLINEvoidbtr_pcur_commit(/*============*/	btr_pcur_t*	pcur)	/* in: persistent cursor */{	ut_a(pcur->pos_state == BTR_PCUR_IS_POSITIONED);	pcur->latch_mode = BTR_NO_LATCHES;		mtr_commit(pcur->mtr);	pcur->pos_state = BTR_PCUR_WAS_POSITIONED;}	/******************************************************************Differs from btr_pcur_commit in that we can specify the mtr to commit. */UNIV_INLINEvoidbtr_pcur_commit_specify_mtr(/*========================*/	btr_pcur_t*	pcur,	/* in: persistent cursor */	mtr_t*		mtr)	/* in: mtr to commit */{	ut_a(pcur->pos_state == BTR_PCUR_IS_POSITIONED);	pcur->latch_mode = BTR_NO_LATCHES;		mtr_commit(mtr);	pcur->pos_state = BTR_PCUR_WAS_POSITIONED;}	/******************************************************************Sets the pcur latch mode to BTR_NO_LATCHES. */UNIV_INLINEvoidbtr_pcur_detach(/*============*/	btr_pcur_t*	pcur)	/* in: persistent cursor */{	ut_a(pcur->pos_state == BTR_PCUR_IS_POSITIONED);		pcur->latch_mode = BTR_NO_LATCHES;	pcur->pos_state = BTR_PCUR_WAS_POSITIONED;}/******************************************************************Tests if a cursor is detached: that is the latch mode is BTR_NO_LATCHES. */UNIV_INLINEiboolbtr_pcur_is_detached(/*=================*/				/* out: TRUE if detached */	btr_pcur_t*	pcur)	/* in: persistent cursor */{	if (pcur->latch_mode == BTR_NO_LATCHES) {		return(TRUE);	}		return(FALSE);}/******************************************************************Sets the old_rec_buf field to NULL. */UNIV_INLINEvoidbtr_pcur_init(/*==========*/	btr_pcur_t*	pcur)	/* in: persistent cursor */{		pcur->old_stored = BTR_PCUR_OLD_NOT_STORED;	pcur->old_rec_buf = NULL;	pcur->old_rec = NULL;}/******************************************************************Initializes and opens a persistent cursor to an index tree. It should beclosed with btr_pcur_close. */UNIV_INLINEvoidbtr_pcur_open(/*==========*/	dict_index_t*	index,	/* in: index */	dtuple_t*	tuple,	/* in: tuple on which search done */	ulint		mode,	/* in: PAGE_CUR_L, ...;				NOTE that if the search is made using a unique				prefix of a record, mode should be				PAGE_CUR_LE, not PAGE_CUR_GE, as the latter				may end up on the previous page from the				record! */	ulint		latch_mode,/* in: BTR_SEARCH_LEAF, ... */	btr_pcur_t*	cursor, /* in: memory buffer for persistent cursor */	mtr_t*		mtr)	/* in: mtr */{	btr_cur_t*	btr_cursor;	/* Initialize the cursor */	btr_pcur_init(cursor);	cursor->latch_mode = latch_mode;	cursor->search_mode = mode;		/* Search with the tree cursor */	btr_cursor = btr_pcur_get_btr_cur(cursor);	btr_cur_search_to_nth_level(index, 0, tuple, mode, latch_mode,							btr_cursor, 0, mtr);	cursor->pos_state = BTR_PCUR_IS_POSITIONED;	cursor->trx_if_known = NULL;}/******************************************************************Opens an persistent cursor to an index tree without initializing thecursor. */UNIV_INLINEvoidbtr_pcur_open_with_no_init(/*=======================*/	dict_index_t*	index,	/* in: index */	dtuple_t*	tuple,	/* in: tuple on which search done */	ulint		mode,	/* in: PAGE_CUR_L, ...;				NOTE that if the search is made using a unique				prefix of a record, mode should be				PAGE_CUR_LE, not PAGE_CUR_GE, as the latter				may end up on the previous page of the				record! */	ulint		latch_mode,/* in: BTR_SEARCH_LEAF, ...;				NOTE that if has_search_latch != 0 then				we maybe do not acquire a latch on the cursor				page, but assume that the caller uses his				btr search latch to protect the record! */	btr_pcur_t*	cursor, /* in: memory buffer for persistent cursor */	ulint		has_search_latch,/* in: latch mode the caller				currently has on btr_search_latch:				RW_S_LATCH, or 0 */	mtr_t*		mtr)	/* in: mtr */{	btr_cur_t*	btr_cursor;	cursor->latch_mode = latch_mode;	cursor->search_mode = mode;		/* Search with the tree cursor */	btr_cursor = btr_pcur_get_btr_cur(cursor);	btr_cur_search_to_nth_level(index, 0, tuple, mode, latch_mode,					btr_cursor, has_search_latch, mtr);	cursor->pos_state = BTR_PCUR_IS_POSITIONED;	cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;	cursor->trx_if_known = NULL;}/*********************************************************************Opens a persistent cursor at either end of an index. */UNIV_INLINEvoidbtr_pcur_open_at_index_side(/*========================*/	ibool		from_left,	/* in: TRUE if open to the low end,					FALSE if to the high end */	dict_index_t*	index,		/* in: index */	ulint		latch_mode,	/* in: latch mode */	btr_pcur_t*	pcur,		/* in: cursor */	ibool		do_init,	/* in: TRUE if should be initialized */	mtr_t*		mtr)		/* in: mtr */{	pcur->latch_mode = latch_mode;	if (from_left) {		pcur->search_mode = PAGE_CUR_G;	} else {		pcur->search_mode = PAGE_CUR_L;	}	if (do_init) {		btr_pcur_init(pcur);	}	btr_cur_open_at_index_side(from_left, index, latch_mode,					btr_pcur_get_btr_cur(pcur), mtr);	pcur->pos_state = BTR_PCUR_IS_POSITIONED;	pcur->old_stored = BTR_PCUR_OLD_NOT_STORED;	pcur->trx_if_known = NULL;}/**************************************************************************Positions a cursor at a randomly chosen position within a B-tree. */UNIV_INLINEvoidbtr_pcur_open_at_rnd_pos(/*=====================*/	dict_index_t*	index,		/* in: index */	ulint		latch_mode,	/* in: BTR_SEARCH_LEAF, ... */	btr_pcur_t*	cursor,		/* in/out: B-tree pcur */	mtr_t*		mtr)		/* in: mtr */{	/* Initialize the cursor */	cursor->latch_mode = latch_mode;	cursor->search_mode = PAGE_CUR_G;		btr_pcur_init(cursor);	btr_cur_open_at_rnd_pos(index, latch_mode,					btr_pcur_get_btr_cur(cursor), mtr);	cursor->pos_state = BTR_PCUR_IS_POSITIONED;	cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;	cursor->trx_if_known = NULL;}	/******************************************************************Frees the possible memory heap of a persistent cursor and sets the latchmode of the persistent cursor to BTR_NO_LATCHES. */UNIV_INLINEvoidbtr_pcur_close(/*===========*/	btr_pcur_t*	cursor)	/* in: persistent cursor */{	if (cursor->old_rec_buf != NULL) {		mem_free(cursor->old_rec_buf);		cursor->old_rec = NULL;		cursor->old_rec_buf = NULL;	}	cursor->btr_cur.page_cur.rec = NULL;	cursor->old_rec = NULL;	cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;		cursor->latch_mode = BTR_NO_LATCHES;	cursor->pos_state = BTR_PCUR_NOT_POSITIONED;	cursor->trx_if_known = NULL;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -