---------------------------------------------------------------- * ExecReScanBitmapHeapScan(node) * ---------------------------------------------------------------- */
| 652 | * ---------------------------------------------------------------- |
| 653 | */ |
| 654 | void |
| 655 | ExecReScanBitmapHeapScan(BitmapHeapScanState *node) |
| 656 | { |
| 657 | PlanState *outerPlan = outerPlanState(node); |
| 658 | |
| 659 | /* rescan to release any page pin */ |
| 660 | table_rescan(node->ss.ss_currentScanDesc, NULL); |
| 661 | |
| 662 | /* release bitmaps and buffers if any */ |
| 663 | if (node->tbmiterator) |
| 664 | tbm_generic_end_iterate(node->tbmiterator); |
| 665 | if (node->prefetch_iterator) |
| 666 | tbm_generic_end_iterate(node->prefetch_iterator); |
| 667 | if (node->shared_tbmiterator) |
| 668 | tbm_end_shared_iterate(node->shared_tbmiterator); |
| 669 | if (node->shared_prefetch_iterator) |
| 670 | tbm_end_shared_iterate(node->shared_prefetch_iterator); |
| 671 | if (node->tbm) |
| 672 | tbm_generic_free(node->tbm); |
| 673 | if (node->vmbuffer != InvalidBuffer) |
| 674 | ReleaseBuffer(node->vmbuffer); |
| 675 | if (node->pvmbuffer != InvalidBuffer) |
| 676 | ReleaseBuffer(node->pvmbuffer); |
| 677 | node->tbm = NULL; |
| 678 | node->tbmiterator = NULL; |
| 679 | node->tbmres = NULL; |
| 680 | node->prefetch_iterator = NULL; |
| 681 | node->initialized = false; |
| 682 | node->shared_tbmiterator = NULL; |
| 683 | node->shared_prefetch_iterator = NULL; |
| 684 | node->vmbuffer = InvalidBuffer; |
| 685 | node->pvmbuffer = InvalidBuffer; |
| 686 | |
| 687 | ExecScanReScan(&node->ss); |
| 688 | |
| 689 | /* |
| 690 | * if chgParam of subnode is not null then plan will be re-scanned by |
| 691 | * first ExecProcNode. |
| 692 | */ |
| 693 | if (outerPlan->chgParam == NULL) |
| 694 | ExecReScan(outerPlan); |
| 695 | } |
| 696 | |
| 697 | /* ---------------------------------------------------------------- |
| 698 | * ExecEndBitmapHeapScan |
no test coverage detected