psort.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
- /*-------------------------------------------------------------------------
- *
- * 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 */