diff options
Diffstat (limited to 'src/include/access/robert_scan.h')
| -rw-r--r-- | src/include/access/robert_scan.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/include/access/robert_scan.h b/src/include/access/robert_scan.h new file mode 100644 index 0000000000..d47d2b51ad --- /dev/null +++ b/src/include/access/robert_scan.h @@ -0,0 +1,79 @@ +/* + * robert_scan.h + */ + +#ifndef ROBERT_SCAN_H +#define ROBERT_SCAN_H + +#include "access/relscan.h" +#include "access/sdir.h" +#include "access/skey.h" +#include "executor/tuptable.h" +#include "nodes/execnodes.h" +#include "nodes/tidbitmap.h" +#include "utils/snapshot.h" + +typedef enum RobertScanState +{ + ROBERT_SCAN_NOT_STARTED, + ROBERT_SCAN_BLOCK_DONE, + ROBERT_SCAN_TUPLE_DONE, + ROBERT_SCAN_READY +} RobertScanState; + +typedef struct RobertScanDescData +{ + TableScanDescData rrs_base; /* AM independent part of the descriptor */ + BlockNumber rrs_nblocks; + BlockNumber rrs_startblock; + BlockNumber rrs_numblocks; + RobertScanState rrs_state; + BlockNumber rrs_cblock; + OffsetNumber rrs_coffset; + OffsetNumber rrs_lastoffset; + int rrs_tupindex; + BufferAccessStrategy rrs_strategy; + Page rrs_cpage; +} RobertScanDescData; + +typedef RobertScanDescData *RobertScanDesc; + +/* Table scans. */ +extern TableScanDesc robert_scan_begin(Relation rel, Snapshot snapshot, + int nkeys, ScanKeyData *key, + ParallelTableScanDesc pscan, uint32 flags); +extern void robert_scan_end(TableScanDesc sscan); +extern void robert_scan_rescan(TableScanDesc sscan, ScanKeyData *key, + bool set_params, bool allow_strat, + bool allow_sync, bool allow_pagemode); +extern bool robert_scan_getnextslot(TableScanDesc sscan, + ScanDirection direction, + TupleTableSlot *slot); + +/* Index scans. */ +extern IndexFetchTableData *robert_index_fetch_begin(Relation rel); +extern void robert_index_fetch_reset(IndexFetchTableData *data); +extern void robert_index_fetch_end(IndexFetchTableData *data); +extern bool robert_index_fetch_tuple(IndexFetchTableData *data, + ItemPointer tid, Snapshot snapshot, + TupleTableSlot *slot, + bool *call_again, bool *all_dead); + +/* Bitmap scans. */ +extern bool robert_scan_bitmap_next_block(TableScanDesc sscan, + TBMIterateResult *tbmres); +extern bool robert_scan_bitmap_next_tuple(TableScanDesc sscan, + TBMIterateResult *tbmres, + TupleTableSlot *slot); + +/* Sample scans. */ +extern bool robert_scan_sample_next_block(TableScanDesc scan, + SampleScanState *scanstate); +extern bool robert_scan_sample_next_tuple(TableScanDesc scan, + SampleScanState *scanstate, + TupleTableSlot *slot); + +/* Internal functions */ +extern BlockNumber robert_scan_get_blocks_done(RobertScanDesc scan); + +#endif |
