summaryrefslogtreecommitdiff
path: root/src/include/access/robert_scan.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/access/robert_scan.h')
-rw-r--r--src/include/access/robert_scan.h79
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