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

MySQL数据库

开发平台:

Visual C++

  1. /************************************************************************
  2. The page cursor
  3. (c) 1994-1996 Innobase Oy
  4. Created 10/4/1994 Heikki Tuuri
  5. *************************************************************************/
  6. #ifndef page0cur_h
  7. #define page0cur_h
  8. #include "univ.i"
  9. #include "page0types.h"
  10. #include "page0page.h"
  11. #include "rem0rec.h"
  12. #include "data0data.h"
  13. #include "mtr0mtr.h"
  14. #define PAGE_CUR_ADAPT
  15. /* Page cursor search modes; the values must be in this order! */
  16. #define PAGE_CUR_G 1
  17. #define PAGE_CUR_GE 2
  18. #define PAGE_CUR_L 3
  19. #define PAGE_CUR_LE 4
  20. #define PAGE_CUR_DBG 5
  21. extern ulint page_cur_short_succ;
  22. /*************************************************************
  23. Gets pointer to the page frame where the cursor is positioned. */
  24. UNIV_INLINE
  25. page_t*
  26. page_cur_get_page(
  27. /*==============*/
  28. /* out: page */
  29. page_cur_t* cur); /* in: page cursor */
  30. /*************************************************************
  31. Gets the record where the cursor is positioned. */
  32. UNIV_INLINE
  33. rec_t*
  34. page_cur_get_rec(
  35. /*=============*/
  36. /* out: record */
  37. page_cur_t* cur); /* in: page cursor */
  38. /*************************************************************
  39. Sets the cursor object to point before the first user record 
  40. on the page. */
  41. UNIV_INLINE
  42. void
  43. page_cur_set_before_first(
  44. /*======================*/
  45. page_t* page, /* in: index page */
  46. page_cur_t* cur); /* in: cursor */
  47. /*************************************************************
  48. Sets the cursor object to point after the last user record on 
  49. the page. */
  50. UNIV_INLINE
  51. void
  52. page_cur_set_after_last(
  53. /*====================*/
  54. page_t* page, /* in: index page */
  55. page_cur_t* cur); /* in: cursor */
  56. /*************************************************************
  57. Returns TRUE if the cursor is before first user record on page. */
  58. UNIV_INLINE
  59. ibool
  60. page_cur_is_before_first(
  61. /*=====================*/
  62. /* out: TRUE if at start */
  63. page_cur_t* cur); /* in: cursor */
  64. /*************************************************************
  65. Returns TRUE if the cursor is after last user record. */
  66. UNIV_INLINE
  67. ibool
  68. page_cur_is_after_last(
  69. /*===================*/
  70. /* out: TRUE if at end */
  71. page_cur_t* cur); /* in: cursor */
  72. /**************************************************************
  73. Positions the cursor on the given record. */
  74. UNIV_INLINE
  75. void
  76. page_cur_position(
  77. /*==============*/
  78. rec_t* rec, /* in: record on a page */
  79. page_cur_t* cur); /* in: page cursor */
  80. /**************************************************************
  81. Invalidates a page cursor by setting the record pointer NULL. */
  82. UNIV_INLINE
  83. void
  84. page_cur_invalidate(
  85. /*================*/
  86. page_cur_t* cur); /* in: page cursor */
  87. /**************************************************************
  88. Moves the cursor to the next record on page. */
  89. UNIV_INLINE
  90. void
  91. page_cur_move_to_next(
  92. /*==================*/
  93. page_cur_t* cur); /* in: cursor; must not be after last */
  94. /**************************************************************
  95. Moves the cursor to the previous record on page. */
  96. UNIV_INLINE
  97. void
  98. page_cur_move_to_prev(
  99. /*==================*/
  100. page_cur_t* cur); /* in: cursor; must not before first */
  101. /***************************************************************
  102. Inserts a record next to page cursor. Returns pointer to inserted record if
  103. succeed, i.e., enough space available, NULL otherwise. The cursor stays at
  104. the same position. */
  105. UNIV_INLINE
  106. rec_t*
  107. page_cur_tuple_insert(
  108. /*==================*/
  109. /* out: pointer to record if succeed, NULL
  110. otherwise */
  111. page_cur_t* cursor, /* in: a page cursor */
  112. dtuple_t*       tuple,  /* in: pointer to a data tuple */
  113. mtr_t* mtr); /* in: mini-transaction handle */
  114. /***************************************************************
  115. Inserts a record next to page cursor. Returns pointer to inserted record if
  116. succeed, i.e., enough space available, NULL otherwise. The cursor stays at
  117. the same position. */
  118. UNIV_INLINE
  119. rec_t*
  120. page_cur_rec_insert(
  121. /*================*/
  122. /* out: pointer to record if succeed, NULL
  123. otherwise */
  124. page_cur_t* cursor, /* in: a page cursor */
  125. rec_t* rec, /* in: record to insert */
  126. mtr_t* mtr); /* in: mini-transaction handle */
  127. /***************************************************************
  128. Inserts a record next to page cursor. Returns pointer to inserted record if
  129. succeed, i.e., enough space available, NULL otherwise. The record to be
  130. inserted can be in a data tuple or as a physical record. The other parameter
  131. must then be NULL. The cursor stays at the same position. */
  132. rec_t*
  133. page_cur_insert_rec_low(
  134. /*====================*/
  135. /* out: pointer to record if succeed, NULL
  136. otherwise */
  137. page_cur_t* cursor, /* in: a page cursor */
  138. dtuple_t*       tuple,  /* in: pointer to a data tuple or NULL */
  139. ulint data_size,/* in: data size of tuple */
  140. rec_t*       rec,   /* in: pointer to a physical record or NULL */
  141. mtr_t* mtr); /* in: mini-transaction handle */
  142. /*****************************************************************
  143. Copies records from page to a newly created page, from a given record onward,
  144. including that record. Infimum and supremum records are not copied. */
  145. void
  146. page_copy_rec_list_end_to_created_page(
  147. /*===================================*/
  148. page_t* new_page, /* in: index page to copy to */
  149. page_t* page, /* in: index page */
  150. rec_t* rec, /* in: first record to copy */
  151. mtr_t* mtr); /* in: mtr */
  152. /***************************************************************
  153. Deletes a record at the page cursor. The cursor is moved to the 
  154. next record after the deleted one. */
  155. void
  156. page_cur_delete_rec(
  157. /*================*/
  158. page_cur_t*   cursor, /* in: a page cursor */
  159. mtr_t* mtr); /* in: mini-transaction handle */
  160. /********************************************************************
  161. Searches the right position for a page cursor. */
  162. UNIV_INLINE
  163. ulint
  164. page_cur_search(
  165. /*============*/
  166. /* out: number of matched fields on the left */
  167. page_t* page, /* in: index page */
  168. dtuple_t* tuple, /* in: data tuple */
  169. ulint mode, /* in: PAGE_CUR_L, PAGE_CUR_LE, PAGE_CUR_G,
  170. or PAGE_CUR_GE */
  171. page_cur_t* cursor);/* out: page cursor */
  172. /********************************************************************
  173. Searches the right position for a page cursor. */
  174. void
  175. page_cur_search_with_match(
  176. /*=======================*/
  177. page_t* page, /* in: index page */
  178. dtuple_t* tuple, /* in: data tuple */
  179. ulint mode, /* in: PAGE_CUR_L, PAGE_CUR_LE, PAGE_CUR_G,
  180. or PAGE_CUR_GE */
  181. ulint* iup_matched_fields,
  182. /* in/out: already matched fields in upper
  183. limit record */
  184. ulint* iup_matched_bytes,
  185. /* in/out: already matched bytes in a field
  186. not yet completely matched */
  187. ulint* ilow_matched_fields,
  188. /* in/out: already matched fields in lower
  189. limit record */
  190. ulint* ilow_matched_bytes,
  191. /* in/out: already matched bytes in a field
  192. not yet completely matched */
  193. page_cur_t* cursor); /* out: page cursor */ 
  194. /***************************************************************
  195. Positions a page cursor on a randomly chosen user record on a page. If there
  196. are no user records, sets the cursor on the infimum record. */
  197. void
  198. page_cur_open_on_rnd_user_rec(
  199. /*==========================*/
  200. page_t* page, /* in: page */
  201. page_cur_t* cursor);/* in/out: page cursor */
  202. /***************************************************************
  203. Parses a log record of a record insert on a page. */
  204. byte*
  205. page_cur_parse_insert_rec(
  206. /*======================*/
  207. /* out: end of log record or NULL */
  208. ibool is_short,/* in: TRUE if short inserts */
  209. byte* ptr, /* in: buffer */
  210. byte* end_ptr,/* in: buffer end */
  211. page_t* page, /* in: page or NULL */
  212. mtr_t* mtr); /* in: mtr or NULL */
  213. /**************************************************************
  214. Parses a log record of copying a record list end to a new created page. */
  215. byte*
  216. page_parse_copy_rec_list_to_created_page(
  217. /*=====================================*/
  218. /* out: end of log record or NULL */
  219. byte* ptr, /* in: buffer */
  220. byte* end_ptr,/* in: buffer end */
  221. page_t* page, /* in: page or NULL */
  222. mtr_t* mtr); /* in: mtr or NULL */
  223. /***************************************************************
  224. Parses log record of a record delete on a page. */
  225. byte*
  226. page_cur_parse_delete_rec(
  227. /*======================*/
  228. /* out: pointer to record end or NULL */
  229. byte* ptr, /* in: buffer */
  230. byte* end_ptr,/* in: buffer end */
  231. page_t* page, /* in: page or NULL */
  232. mtr_t* mtr); /* in: mtr or NULL */
  233. /* Index page cursor */
  234. struct page_cur_struct{
  235. byte* rec; /* pointer to a record on page */
  236. };
  237. #ifndef UNIV_NONINL
  238. #include "page0cur.ic"
  239. #endif
  240. #endif