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

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. Cursor read
  3. (c) 1997 Innobase Oy
  4. Created 2/16/1997 Heikki Tuuri
  5. *******************************************************/
  6. /*************************************************************************
  7. Gets the nth trx id in a read view. */
  8. UNIV_INLINE
  9. dulint
  10. read_view_get_nth_trx_id(
  11. /*=====================*/
  12. /* out: trx id */
  13. read_view_t* view, /* in: read view */
  14. ulint n) /* in: position */
  15. {
  16. ut_ad(n < view->n_trx_ids);
  17. return(*(view->trx_ids + n));
  18. }
  19. /*************************************************************************
  20. Sets the nth trx id in a read view. */
  21. UNIV_INLINE
  22. void
  23. read_view_set_nth_trx_id(
  24. /*=====================*/
  25. read_view_t* view, /* in: read view */
  26. ulint n, /* in: position */
  27. dulint trx_id) /* in: trx id to set */
  28. {
  29. ut_ad(n < view->n_trx_ids);
  30. *(view->trx_ids + n) = trx_id;
  31. }
  32. /*************************************************************************
  33. Checks if a read view sees the specified transaction. */
  34. UNIV_INLINE
  35. ibool
  36. read_view_sees_trx_id(
  37. /*==================*/
  38. /* out: TRUE if sees */
  39. read_view_t* view, /* in: read view */
  40. dulint trx_id) /* in: trx id */
  41. {
  42. ulint n_ids;
  43. int cmp;
  44. ulint i;
  45. if (ut_dulint_cmp(trx_id, view->up_limit_id) < 0) {
  46. return(TRUE);
  47. }
  48. if (ut_dulint_cmp(trx_id, view->low_limit_id) >= 0) {
  49. return(FALSE);
  50. }
  51. /* We go through the trx ids in the array smallest first: this order
  52. may save CPU time, because if there was a very long running
  53. transaction in the trx id array, its trx id is looked at first, and
  54. the first two comparisons may well decide the visibility of trx_id. */
  55. n_ids = view->n_trx_ids;
  56. for (i = 0; i < n_ids; i++) {
  57. cmp = ut_dulint_cmp(trx_id,
  58. read_view_get_nth_trx_id(view, n_ids - i - 1));
  59. if (0 == cmp) {
  60. return(FALSE);
  61. } else if (cmp < 0) {
  62. return(TRUE);
  63. }
  64. }
  65. return(TRUE);
  66. }