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

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * psort.h
  4.  *
  5.  *
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  * $Id: psort.h,v 1.19.2.1 1999/07/30 17:07:22 scrappy Exp $
  10.  *
  11.  *-------------------------------------------------------------------------
  12.  */
  13. #ifndef PSORT_H
  14. #define PSORT_H
  15. #include "access/relscan.h"
  16. #include "nodes/plannodes.h"
  17. #include "storage/fd.h"
  18. #include "utils/lselect.h"
  19. #define MAXTAPES 7 /* See Knuth Fig. 70, p273 */
  20. struct tape
  21. {
  22. int tp_dummy; /* (D) */
  23. int tp_fib; /* (A) */
  24. BufFile    *tp_file; /* (TAPE) */
  25. struct tape *tp_prev;
  26. };
  27. struct cmplist
  28. {
  29. int cp_attn; /* attribute number */
  30. int cp_num; /* comparison function code */
  31. int cp_rev; /* invert comparison flag */
  32. struct cmplist *cp_next; /* next in chain */
  33. };
  34. /* This structure preserves the state of psort between calls from different
  35.  * nodes to its interface functions. Basically, it includes all of the global
  36.  * variables in psort. In case you were wondering, pointers to these structures
  37.  * are included in Sort node structures. -Rex 2.6.1995
  38.  */
  39. typedef struct Psortstate
  40. {
  41. LeftistContextData treeContext;
  42. int TapeRange;
  43. int Level;
  44. int TotalDummy;
  45. struct tape Tape[MAXTAPES];
  46. int BytesRead;
  47. int BytesWritten;
  48. int tupcount;
  49. struct leftist *Tuples;
  50. BufFile    *psort_grab_file;
  51. long psort_current; /* could be file offset, or array index */
  52. long psort_saved; /* could be file offset, or array index */
  53. bool using_tape_files;
  54. bool all_fetched; /* this is for cursors */
  55. HeapTuple  *memtuples;
  56. } Psortstate;
  57. #ifdef EBUG
  58. #include "storage/buf.h"
  59. #include "storage/bufmgr.h"
  60. #define PDEBUG(PROC, S1)
  61. elog(DEBUG, "%s:%d>> PROC: %s.", __FILE__, __LINE__, S1)
  62. #define PDEBUG2(PROC, S1, D1)
  63. elog(DEBUG, "%s:%d>> PROC: %s %d.", __FILE__, __LINE__, S1, D1)
  64. #define PDEBUG4(PROC, S1, D1, S2, D2)
  65. elog(DEBUG, "%s:%d>> PROC: %s %d, %s %d.", __FILE__, __LINE__, S1, D1, S2, D2)
  66. #define VDEBUG(VAR, FMT)
  67. elog(DEBUG, "%s:%d>> VAR =FMT", __FILE__, __LINE__, VAR)
  68. #define ASSERT(EXPR, STR)
  69. if (!(EXPR)) elog(FATAL, "%s:%d>> %s", __FILE__, __LINE__, STR)
  70. #define TRACE(VAL, CODE)
  71. if (1) CODE; else
  72. #else
  73. #define PDEBUG(MSG)
  74. #define VDEBUG(VAR, FMT)
  75. #define ASSERT(EXPR, MSG)
  76. #define TRACE(VAL, CODE)
  77. #endif
  78. /* psort.c */
  79. extern bool psort_begin(Sort *node, int nkeys, ScanKey key);
  80. extern HeapTuple psort_grabtuple(Sort *node, bool *should_free);
  81. extern void psort_markpos(Sort *node);
  82. extern void psort_restorepos(Sort *node);
  83. extern void psort_end(Sort *node);
  84. extern void psort_rescan(Sort *node);
  85. #endif  /* PSORT_H */