---------------- * ExecConditionalAssignProjectionInfo * * as ExecAssignProjectionInfo, but store NULL rather than building projection * info if no projection is required * ---------------- */
| 609 | * ---------------- |
| 610 | */ |
| 611 | void |
| 612 | ExecConditionalAssignProjectionInfo(PlanState *planstate, TupleDesc inputDesc, |
| 613 | Index varno) |
| 614 | { |
| 615 | if (tlist_matches_tupdesc(planstate, |
| 616 | planstate->plan->targetlist, |
| 617 | varno, |
| 618 | inputDesc)) |
| 619 | { |
| 620 | planstate->ps_ProjInfo = NULL; |
| 621 | planstate->resultopsset = planstate->scanopsset; |
| 622 | planstate->resultopsfixed = planstate->scanopsfixed; |
| 623 | planstate->resultops = planstate->scanops; |
| 624 | } |
| 625 | else |
| 626 | { |
| 627 | if (!planstate->ps_ResultTupleSlot) |
| 628 | { |
| 629 | ExecInitResultSlot(planstate, &TTSOpsVirtual); |
| 630 | planstate->resultops = &TTSOpsVirtual; |
| 631 | planstate->resultopsfixed = true; |
| 632 | planstate->resultopsset = true; |
| 633 | } |
| 634 | ExecAssignProjectionInfo(planstate, inputDesc); |
| 635 | } |
| 636 | } |
| 637 | |
| 638 | static bool |
| 639 | tlist_matches_tupdesc(PlanState *ps, List *tlist, Index varno, TupleDesc tupdesc) |
no test coverage detected