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

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1999, 2000
  5.  * Sleepycat Software.  All rights reserved.
  6.  *
  7.  * $Id: qam.h,v 11.26 2001/01/11 18:19:52 bostic Exp $
  8.  */
  9. /*
  10.  * QAM data elements: a status field and the data.
  11.  */
  12. typedef struct _qamdata {
  13. u_int8_t  flags; /* 00: delete bit. */
  14. #define QAM_VALID 0x01
  15. #define QAM_SET 0x02
  16. u_int8_t  data[1]; /* Record. */
  17. } QAMDATA;
  18. struct __queue; typedef struct __queue QUEUE;
  19. struct __qcursor; typedef struct __qcursor QUEUE_CURSOR;
  20. struct __qcursor {
  21. /* struct __dbc_internal */
  22. __DBC_INTERNAL
  23. /* Queue private part */
  24. /* Per-thread information: queue private. */
  25. db_recno_t  recno; /* Current record number. */
  26. u_int32_t  flags;
  27. };
  28. /*
  29.  * The in-memory, per-tree queue data structure.
  30.  */
  31. typedef struct __mpfarray {
  32. u_int32_t n_extent; /* Number of extents in table. */
  33. u_int32_t low_extent; /* First extent open. */
  34. u_int32_t hi_extent; /* Last extent open. */
  35. struct __qmpf {
  36. int pinref;
  37. DB_MPOOLFILE *mpf;
  38. } *mpfarray;  /* Array of open extents. */
  39. } MPFARRAY;
  40. struct __queue {
  41. db_pgno_t q_meta; /* Database meta-data page. */
  42. db_pgno_t q_root; /* Database root page. */
  43. int   re_pad; /* Fixed-length padding byte. */
  44. u_int32_t re_len; /* Length for fixed-length records. */
  45. u_int32_t rec_page; /* records per page */
  46. u_int32_t page_ext; /* Pages per extent */
  47. MPFARRAY array1, array2; /* File arrays. */
  48. DB_MPOOL_FINFO finfo; /* Initialized info struct. */
  49. DB_PGINFO pginfo; /* Initialized pginfo struct. */
  50. DBT pgcookie; /* Initialized pgcookie. */
  51. char *path; /* Space allocated to file pathname. */
  52. char *name; /* The name of the file. */
  53. char *dir; /* The dir of the file. */
  54. int mode; /* Mode to open extents. */
  55. };
  56. /* Format for queue extent names. */
  57. #define QUEUE_EXTENT "%s/__dbq.%s.%d"
  58. typedef struct __qam_filelist {
  59. DB_MPOOLFILE *mpf;
  60. u_int32_t id;
  61. } QUEUE_FILELIST;
  62. /*
  63.  * Caculate the page number of a recno
  64.  *
  65.  * Number of records per page =
  66.  * Divide the available space on the page by the record len + header.
  67.  *
  68.  * Page number for record =
  69.  * divide the physical record number by the records per page
  70.  * add the root page number
  71.  *      For now the root page will always be 1, but we might want to change
  72.  * in the future (e.g. multiple fixed len queues per file).
  73.  *
  74.  * Index of record on page =
  75.  * physical record number, less the logical pno times records/page
  76.  */
  77. #define CALC_QAM_RECNO_PER_PAGE(dbp)
  78.     (((dbp)->pgsize - sizeof(QPAGE)) /
  79.     ALIGN(((QUEUE *)(dbp)->q_internal)->re_len +
  80.     sizeof(QAMDATA) - SSZA(QAMDATA, data), sizeof(u_int32_t)))
  81. #define QAM_RECNO_PER_PAGE(dbp) (((QUEUE*)(dbp)->q_internal)->rec_page)
  82. #define QAM_RECNO_PAGE(dbp, recno)
  83.     (((QUEUE *)(dbp)->q_internal)->q_root
  84.     + (((recno) - 1) / QAM_RECNO_PER_PAGE(dbp)))
  85. #define QAM_RECNO_INDEX(dbp, pgno, recno)
  86.     (((recno) - 1) - (QAM_RECNO_PER_PAGE(dbp)
  87.     * (pgno - ((QUEUE *)(dbp)->q_internal)->q_root)))
  88. #define QAM_GET_RECORD(dbp, page, index)
  89.     ((QAMDATA *)((u_int8_t *)(page) +
  90.     sizeof(QPAGE) + (ALIGN(sizeof(QAMDATA) - SSZA(QAMDATA, data) +
  91.     ((QUEUE *)(dbp)->q_internal)->re_len, sizeof(u_int32_t)) * index)))
  92. #define QAM_AFTER_CURRENT(meta, recno)
  93.     ((recno) > (meta)->cur_recno &&
  94.     ((meta)->first_recno <= (meta)->cur_recno || (recno) < (meta)->first_recno))
  95. #define QAM_BEFORE_FIRST(meta, recno)
  96.     ((recno) < (meta)->first_recno &&
  97.     ((meta->first_recno <= (meta)->cur_recno || (recno) > (meta)->cur_recno)))
  98. #define QAM_NOT_VALID(meta, recno)
  99.     (recno == RECNO_OOB ||
  100. QAM_BEFORE_FIRST(meta, recno) || QAM_AFTER_CURRENT(meta, recno))
  101. /*
  102.  * Log opcodes for the mvptr routine.
  103.  */
  104. #define QAM_SETFIRST 0x01
  105. #define QAM_SETCUR 0x02
  106. /*
  107.  * Parameter to __qam_position.
  108.  */
  109. typedef enum {
  110. QAM_READ,
  111. QAM_WRITE,
  112. QAM_CONSUME
  113. } qam_position_mode;
  114. typedef enum {
  115. QAM_PROBE_GET,
  116. QAM_PROBE_PUT,
  117. QAM_PROBE_MPF
  118. } qam_probe_mode;
  119. #define __qam_fget(dbp, pgnoaddr, flags, addrp) 
  120. __qam_fprobe(dbp, *pgnoaddr, addrp, QAM_PROBE_GET, flags)
  121. #define __qam_fput(dbp, pageno, addrp, flags) 
  122. __qam_fprobe(dbp, pageno, addrp, QAM_PROBE_PUT, flags)
  123. #include "qam_auto.h"
  124. #include "qam_ext.h"