* Execution of DynamicIndexScan */
| 102 | * Execution of DynamicIndexScan |
| 103 | */ |
| 104 | TupleTableSlot * |
| 105 | ExecDynamicIndexScan(PlanState *pstate) |
| 106 | { |
| 107 | DynamicIndexScanState *node = castNode(DynamicIndexScanState, pstate); |
| 108 | |
| 109 | DynamicIndexScan *plan = (DynamicIndexScan *) node->ss.ps.plan; |
| 110 | |
| 111 | node->as_valid_subplans = NULL; |
| 112 | if (NULL != plan->join_prune_paramids && !node->did_pruning) |
| 113 | { |
| 114 | node->did_pruning = true; |
| 115 | node->as_valid_subplans = |
| 116 | ExecFindMatchingSubPlans(node->as_prune_state, |
| 117 | node->ss.ps.state, |
| 118 | list_length(plan->partOids), |
| 119 | plan->join_prune_paramids); |
| 120 | |
| 121 | int i; |
| 122 | int partOidIdx = -1; |
| 123 | List *newPartOids = NIL; |
| 124 | ListCell *lc; |
| 125 | |
| 126 | for (i = 0; i < bms_num_members(node->as_valid_subplans); i++) |
| 127 | { |
| 128 | partOidIdx = bms_next_member(node->as_valid_subplans, partOidIdx); |
| 129 | newPartOids = lappend_oid(newPartOids, node->partOids[partOidIdx]); |
| 130 | } |
| 131 | |
| 132 | node->partOids = palloc(sizeof(Oid) * list_length(newPartOids)); |
| 133 | foreach_with_count(lc, newPartOids, i) |
| 134 | node->partOids[i] = lfirst_oid(lc); |
| 135 | node->nOids = list_length(newPartOids); |
| 136 | } |
| 137 | |
| 138 | return ExecNextDynamicIndexScan(node); |
| 139 | } |
nothing calls this directly
no test coverage detected