---------------------------------------------------------------- * ExecHashJoin * * Parallel-oblivious version. * ---------------------------------------------------------------- */
| 733 | * ---------------------------------------------------------------- |
| 734 | */ |
| 735 | static TupleTableSlot * /* return: a tuple or NULL */ |
| 736 | ExecHashJoin(PlanState *pstate) |
| 737 | { |
| 738 | TupleTableSlot *result; |
| 739 | |
| 740 | /* |
| 741 | * On sufficiently smart compilers this should be inlined with the |
| 742 | * parallel-aware branches removed. |
| 743 | */ |
| 744 | result = ExecHashJoinImpl(pstate, false); |
| 745 | |
| 746 | if (TupIsNull(result) && !((HashJoinState *) pstate)->reuse_hashtable |
| 747 | && !((HashJoinState *) pstate)->delayEagerFree) |
| 748 | { |
| 749 | /* |
| 750 | * CDB: We'll read no more from inner subtree. To keep our |
| 751 | * sibling QEs from being starved, tell source QEs not to |
| 752 | * clog up the pipeline with our never-to-be-consumed |
| 753 | * data. |
| 754 | */ |
| 755 | ExecSquelchNode(pstate, false); |
| 756 | } |
| 757 | |
| 758 | return result; |
| 759 | } |
| 760 | |
| 761 | /* ---------------------------------------------------------------- |
| 762 | * ExecParallelHashJoin |
nothing calls this directly
no test coverage detected