relscan.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * relscan.h
  4.  *   POSTGRES internal relation scan descriptor definitions.
  5.  *
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  * $Id: relscan.h,v 1.15 1999/05/25 16:13:33 momjian Exp $
  10.  *
  11.  *-------------------------------------------------------------------------
  12.  */
  13. #ifndef RELSCAN_H
  14. #define RELSCAN_H
  15. #include <storage/buf.h>
  16. #include <utils/rel.h>
  17. #include <access/htup.h>
  18. #include <utils/tqual.h>
  19. typedef ItemPointerData MarkData;
  20. typedef struct HeapScanDescData
  21. {
  22. Relation rs_rd; /* pointer to relation descriptor */
  23. HeapTupleData rs_ptup; /* previous tuple in scan */
  24. HeapTupleData rs_ctup; /* current tuple in scan */
  25. HeapTupleData rs_ntup; /* next tuple in scan */
  26. Buffer rs_pbuf; /* previous buffer in scan */
  27. Buffer rs_cbuf; /* current buffer in scan */
  28. Buffer rs_nbuf; /* next buffer in scan */
  29. ItemPointerData rs_mptid; /* marked previous tid */
  30. ItemPointerData rs_mctid; /* marked current tid */
  31. ItemPointerData rs_mntid; /* marked next tid */
  32. ItemPointerData rs_mcd; /* marked current delta XXX ??? */
  33. Snapshot rs_snapshot; /* snapshot to see */
  34. bool rs_atend; /* restart scan at end? */
  35. uint16 rs_cdelta; /* current delta in chain */
  36. uint16 rs_nkeys; /* number of attributes in keys */
  37. ScanKey rs_key; /* key descriptors */
  38. } HeapScanDescData;
  39. typedef HeapScanDescData *HeapScanDesc;
  40. typedef struct IndexScanDescData
  41. {
  42. Relation relation; /* relation descriptor */
  43. void    *opaque; /* am-specific slot */
  44. ItemPointerData previousItemData; /* previous index pointer */
  45. ItemPointerData currentItemData; /* current index pointer */
  46. ItemPointerData nextItemData; /* next index pointer */
  47. MarkData previousMarkData; /* marked previous pointer */
  48. MarkData currentMarkData;/* marked current  pointer */
  49. MarkData nextMarkData; /* marked next pointer */
  50. uint8 flags; /* scan position flags */
  51. bool scanFromEnd; /* restart scan at end? */
  52. uint16 numberOfKeys; /* number of key attributes */
  53. ScanKey keyData; /* key descriptor */
  54. } IndexScanDescData;
  55. typedef IndexScanDescData *IndexScanDesc;
  56. /* ----------------
  57.  * IndexScanDescPtr is used in the executor where we have to
  58.  * keep track of several index scans when using several indices
  59.  * - cim 9/10/89
  60.  * ----------------
  61.  */
  62. typedef IndexScanDesc *IndexScanDescPtr;
  63. /*
  64.  * HeapScanIsValid
  65.  * True iff the heap scan is valid.
  66.  */
  67. #define HeapScanIsValid(scan) PointerIsValid(scan)
  68. /*
  69.  * IndexScanIsValid
  70.  * True iff the index scan is valid.
  71.  */
  72. #define IndexScanIsValid(scan) PointerIsValid(scan)
  73. #endif  /* RELSCAN_H */