---------------------------------------------------------------- * ExecParallelHashJoin * * Parallel-aware version. * ---------------------------------------------------------------- */
| 765 | * ---------------------------------------------------------------- |
| 766 | */ |
| 767 | static TupleTableSlot * /* return: a tuple or NULL */ |
| 768 | ExecParallelHashJoin(PlanState *pstate) |
| 769 | { |
| 770 | TupleTableSlot *result; |
| 771 | |
| 772 | /* |
| 773 | * On sufficiently smart compilers this should be inlined with the |
| 774 | * parallel-oblivious branches removed. |
| 775 | */ |
| 776 | result = ExecHashJoinImpl(pstate, true); |
| 777 | |
| 778 | if (TupIsNull(result) && !((HashJoinState *) pstate)->reuse_hashtable |
| 779 | && !((HashJoinState *) pstate)->delayEagerFree) |
| 780 | { |
| 781 | /* |
| 782 | * CDB: We'll read no more from inner subtree. To keep our |
| 783 | * sibling QEs from being starved, tell source QEs not to |
| 784 | * clog up the pipeline with our never-to-be-consumed |
| 785 | * data. |
| 786 | */ |
| 787 | ExecSquelchNode(pstate, false); |
| 788 | } |
| 789 | |
| 790 | return result; |
| 791 | } |
| 792 | |
| 793 | /* ---------------------------------------------------------------- |
| 794 | * ExecInitHashJoin |
nothing calls this directly
no test coverage detected