PostgreSQL Source Code  git master
nodeTidrangescan.h File Reference
#include "nodes/execnodes.h"
Include dependency graph for nodeTidrangescan.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

TidRangeScanStateExecInitTidRangeScan (TidRangeScan *node, EState *estate, int eflags)
 
void ExecEndTidRangeScan (TidRangeScanState *node)
 
void ExecReScanTidRangeScan (TidRangeScanState *node)
 

Function Documentation

◆ ExecEndTidRangeScan()

void ExecEndTidRangeScan ( TidRangeScanState node)

Definition at line 328 of file nodeTidrangescan.c.

329 {
330  TableScanDesc scan = node->ss.ss_currentScanDesc;
331 
332  if (scan != NULL)
333  table_endscan(scan);
334 }
struct TableScanDescData * ss_currentScanDesc
Definition: execnodes.h:1475
static void table_endscan(TableScanDesc scan)
Definition: tableam.h:1009

References TidRangeScanState::ss, ScanState::ss_currentScanDesc, and table_endscan().

Referenced by ExecEndNode().

◆ ExecInitTidRangeScan()

TidRangeScanState* ExecInitTidRangeScan ( TidRangeScan node,
EState estate,
int  eflags 
)

Definition at line 348 of file nodeTidrangescan.c.

349 {
350  TidRangeScanState *tidrangestate;
351  Relation currentRelation;
352 
353  /*
354  * create state structure
355  */
356  tidrangestate = makeNode(TidRangeScanState);
357  tidrangestate->ss.ps.plan = (Plan *) node;
358  tidrangestate->ss.ps.state = estate;
359  tidrangestate->ss.ps.ExecProcNode = ExecTidRangeScan;
360 
361  /*
362  * Miscellaneous initialization
363  *
364  * create expression context for node
365  */
366  ExecAssignExprContext(estate, &tidrangestate->ss.ps);
367 
368  /*
369  * mark scan as not in progress, and TID range as not computed yet
370  */
371  tidrangestate->trss_inScan = false;
372 
373  /*
374  * open the scan relation
375  */
376  currentRelation = ExecOpenScanRelation(estate, node->scan.scanrelid, eflags);
377 
378  tidrangestate->ss.ss_currentRelation = currentRelation;
379  tidrangestate->ss.ss_currentScanDesc = NULL; /* no table scan here */
380 
381  /*
382  * get the scan type from the relation descriptor.
383  */
384  ExecInitScanTupleSlot(estate, &tidrangestate->ss,
385  RelationGetDescr(currentRelation),
386  table_slot_callbacks(currentRelation));
387 
388  /*
389  * Initialize result type and projection.
390  */
391  ExecInitResultTypeTL(&tidrangestate->ss.ps);
392  ExecAssignScanProjectionInfo(&tidrangestate->ss);
393 
394  /*
395  * initialize child expressions
396  */
397  tidrangestate->ss.ps.qual =
398  ExecInitQual(node->scan.plan.qual, (PlanState *) tidrangestate);
399 
400  TidExprListCreate(tidrangestate);
401 
402  /*
403  * all done.
404  */
405  return tidrangestate;
406 }
ExprState * ExecInitQual(List *qual, PlanState *parent)
Definition: execExpr.c:214
void ExecAssignScanProjectionInfo(ScanState *node)
Definition: execScan.c:271
void ExecInitScanTupleSlot(EState *estate, ScanState *scanstate, TupleDesc tupledesc, const TupleTableSlotOps *tts_ops)
Definition: execTuples.c:1812
void ExecInitResultTypeTL(PlanState *planstate)
Definition: execTuples.c:1756
void ExecAssignExprContext(EState *estate, PlanState *planstate)
Definition: execUtils.c:488
Relation ExecOpenScanRelation(EState *estate, Index scanrelid, int eflags)
Definition: execUtils.c:702
static void TidExprListCreate(TidRangeScanState *tidrangestate)
static TupleTableSlot * ExecTidRangeScan(PlanState *pstate)
#define makeNode(_type_)
Definition: nodes.h:176
#define RelationGetDescr(relation)
Definition: rel.h:530
ExprState * qual
Definition: execnodes.h:1057
Plan * plan
Definition: execnodes.h:1036
EState * state
Definition: execnodes.h:1038
ExecProcNodeMtd ExecProcNode
Definition: execnodes.h:1042
Relation ss_currentRelation
Definition: execnodes.h:1474
PlanState ps
Definition: execnodes.h:1473
Index scanrelid
Definition: plannodes.h:387
const TupleTableSlotOps * table_slot_callbacks(Relation relation)
Definition: tableam.c:58

References ExecAssignExprContext(), ExecAssignScanProjectionInfo(), ExecInitQual(), ExecInitResultTypeTL(), ExecInitScanTupleSlot(), ExecOpenScanRelation(), PlanState::ExecProcNode, ExecTidRangeScan(), makeNode, PlanState::plan, ScanState::ps, PlanState::qual, RelationGetDescr, TidRangeScan::scan, Scan::scanrelid, TidRangeScanState::ss, ScanState::ss_currentRelation, ScanState::ss_currentScanDesc, PlanState::state, table_slot_callbacks(), TidExprListCreate(), and TidRangeScanState::trss_inScan.

Referenced by ExecInitNode().

◆ ExecReScanTidRangeScan()

void ExecReScanTidRangeScan ( TidRangeScanState node)

Definition at line 309 of file nodeTidrangescan.c.

310 {
311  /* mark scan as not in progress, and tid range list as not computed yet */
312  node->trss_inScan = false;
313 
314  /*
315  * We must wait until TidRangeNext before calling table_rescan_tidrange.
316  */
317  ExecScanReScan(&node->ss);
318 }
void ExecScanReScan(ScanState *node)
Definition: execScan.c:298

References ExecScanReScan(), TidRangeScanState::ss, and TidRangeScanState::trss_inScan.

Referenced by ExecReScan().