📄 psort.h
字号:
/*------------------------------------------------------------------------- * * psort.h * * * * Copyright (c) 1994, Regents of the University of California * * $Id: psort.h,v 1.19.2.1 1999/07/30 17:07:22 scrappy Exp $ * *------------------------------------------------------------------------- */#ifndef PSORT_H#define PSORT_H#include "access/relscan.h"#include "nodes/plannodes.h"#include "storage/fd.h"#include "utils/lselect.h"#define MAXTAPES 7 /* See Knuth Fig. 70, p273 */struct tape{ int tp_dummy; /* (D) */ int tp_fib; /* (A) */ BufFile *tp_file; /* (TAPE) */ struct tape *tp_prev;};struct cmplist{ int cp_attn; /* attribute number */ int cp_num; /* comparison function code */ int cp_rev; /* invert comparison flag */ struct cmplist *cp_next; /* next in chain */};/* This structure preserves the state of psort between calls from different * nodes to its interface functions. Basically, it includes all of the global * variables in psort. In case you were wondering, pointers to these structures * are included in Sort node structures. -Rex 2.6.1995 */typedef struct Psortstate{ LeftistContextData treeContext; int TapeRange; int Level; int TotalDummy; struct tape Tape[MAXTAPES]; int BytesRead; int BytesWritten; int tupcount; struct leftist *Tuples; BufFile *psort_grab_file; long psort_current; /* could be file offset, or array index */ long psort_saved; /* could be file offset, or array index */ bool using_tape_files; bool all_fetched; /* this is for cursors */ HeapTuple *memtuples;} Psortstate;#ifdef EBUG#include "storage/buf.h"#include "storage/bufmgr.h"#define PDEBUG(PROC, S1)\elog(DEBUG, "%s:%d>> PROC: %s.", __FILE__, __LINE__, S1)#define PDEBUG2(PROC, S1, D1)\elog(DEBUG, "%s:%d>> PROC: %s %d.", __FILE__, __LINE__, S1, D1)#define PDEBUG4(PROC, S1, D1, S2, D2)\elog(DEBUG, "%s:%d>> PROC: %s %d, %s %d.", __FILE__, __LINE__, S1, D1, S2, D2)#define VDEBUG(VAR, FMT)\elog(DEBUG, "%s:%d>> VAR =FMT", __FILE__, __LINE__, VAR)#define ASSERT(EXPR, STR)\if (!(EXPR)) elog(FATAL, "%s:%d>> %s", __FILE__, __LINE__, STR)#define TRACE(VAL, CODE)\if (1) CODE; else#else#define PDEBUG(MSG)#define VDEBUG(VAR, FMT)#define ASSERT(EXPR, MSG)#define TRACE(VAL, CODE)#endif/* psort.c */extern bool psort_begin(Sort *node, int nkeys, ScanKey key);extern HeapTuple psort_grabtuple(Sort *node, bool *should_free);extern void psort_markpos(Sort *node);extern void psort_restorepos(Sort *node);extern void psort_end(Sort *node);extern void psort_rescan(Sort *node);#endif /* PSORT_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -