qam.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

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