MCPcopy Create free account
hub / github.com/apache/cloudberry / ExecInitDynamicIndexScan

Function ExecInitDynamicIndexScan

src/backend/executor/nodeDynamicIndexscan.c:39–99  ·  view source on GitHub ↗

* Initialize ScanState in DynamicIndexScan. */

Source from the content-addressed store, hash-verified

37 * Initialize ScanState in DynamicIndexScan.
38 */
39DynamicIndexScanState *
40ExecInitDynamicIndexScan(DynamicIndexScan *node, EState *estate, int eflags)
41{
42 DynamicIndexScanState *dynamicIndexScanState;
43 ListCell *lc;
44 int i;
45
46 /* check for unsupported flags */
47 Assert(!(eflags & (EXEC_FLAG_BACKWARD | EXEC_FLAG_MARK)));
48
49 dynamicIndexScanState = makeNode(DynamicIndexScanState);
50 dynamicIndexScanState->ss.ps.plan = (Plan *) node;
51 dynamicIndexScanState->ss.ps.state = estate;
52 dynamicIndexScanState->ss.ps.ExecProcNode = ExecDynamicIndexScan;
53 dynamicIndexScanState->eflags = eflags;
54
55 dynamicIndexScanState->scan_state = SCAN_INIT;
56 dynamicIndexScanState->whichPart = -1;
57 dynamicIndexScanState->nOids = list_length(node->partOids);
58 dynamicIndexScanState->partOids = palloc(sizeof(Oid) * dynamicIndexScanState->nOids);
59 foreach_with_count(lc, node->partOids, i)
60 dynamicIndexScanState->partOids[i] = lfirst_oid(lc);
61
62 /*
63 * Initialize child expressions
64 *
65 * These are not used for anything, we rely on the child IndexScan node to
66 * do all evaluation for us. But I think this is still needed to find and
67 * process any SubPlans. See comment in ExecInitIndexScan.
68 */
69 dynamicIndexScanState->ss.ps.qual = ExecInitQual(node->indexscan.scan.plan.qual,
70 (PlanState *) dynamicIndexScanState);
71
72 /*
73 * tuple table initialization
74 */
75 Relation scanRel = ExecOpenScanRelation(estate, node->indexscan.scan.scanrelid, eflags);
76
77 ExecInitScanTupleSlot(estate, &dynamicIndexScanState->ss, RelationGetDescr(scanRel), table_slot_callbacks(scanRel));
78
79 /* Dynamic table/index/bitmap scan can't tell the ops of tupleslot */
80 dynamicIndexScanState->ss.ps.scanopsfixed = false;
81 dynamicIndexScanState->ss.ps.scanopsset = true;
82
83 /*
84 * Initialize result tuple type and projection info.
85 */
86 ExecInitResultTypeTL(&dynamicIndexScanState->ss.ps);
87
88 /*
89 * This context will be reset per-partition to free up per-partition copy
90 * of LogicalIndexInfo
91 */
92 dynamicIndexScanState->partitionMemoryContext = AllocSetContextCreate(CurrentMemoryContext,
93 "DynamicIndexScanPerPartition",
94 ALLOCSET_DEFAULT_MINSIZE,
95 ALLOCSET_DEFAULT_INITSIZE,
96 ALLOCSET_DEFAULT_MAXSIZE);

Callers 1

ExecInitNodeFunction · 0.85

Calls 8

list_lengthFunction · 0.85
foreach_with_countFunction · 0.85
ExecInitQualFunction · 0.85
ExecOpenScanRelationFunction · 0.85
ExecInitScanTupleSlotFunction · 0.85
table_slot_callbacksFunction · 0.85
ExecInitResultTypeTLFunction · 0.85
pallocFunction · 0.50

Tested by

no test coverage detected