PG归并排序算法详解

  • 5 第五轮,在状态EXEC_MJ_NEXTINNER下,内表游标下移获取数据——8(1),需要注意的是,这里将 mj_MatchedInner标记为false 。与outer tuple比较——5(2) < 8(1),切换到状态EXEC_MJ_NEXTOUTER。

    在状态EXEC_MJ_NEXTOUTER下,外表游标下移获取到outer tuple——6(1),同时通过MJEVAL_MATCHABLE切换到EXEC_MJ_TESTOUTER。

    在状态EXEC_MJ_TESTOUTER下,这里对于 outer tuple与marked tuple 进行了比较——6(1) > 5(1),重新载入current inner tuple——8(1),然后切换到状态EXEC_MJ_SKIP_TEST。

    在状态EXEC_MJ_SKIP_TEST下,调用方法MJCompare比较outer tuple与inner tuple——6(1) < 8(1)。切换到状态EXEC_MJ_SKIPOUTER_ADVANCE。

    来到状态EXEC_MJ_SKIPOUTER_ADVANCE。由于在该轮开始,变量mj_MatchedOuter已经被置为false,因此,这里并没有继续外表的游标下移,而是修改变量mj_MatchedOuter为true,然后调用MJFillOuter将其关联的inner tuple置为空。这里没有进行状态的切换。该轮循环结束。