Thread: What are ExecSeqMarkPos and ExecSeqRestrPos used for
Hi,
I'm reading code of nodeSeqscan, and was confused with ExecSeqMarkPos and
ExecSeqRestrPos. They are only called by ExecMergeJoin. Could merge join use
a plain seqscan as outer/inner plan? If not, what are they used for?
Thanks.
* DT (kurt023@hotmail.com) wrote: > I'm reading code of nodeSeqscan, and was confused with ExecSeqMarkPos and > ExecSeqRestrPos. They are only called by ExecMergeJoin. Could merge join use > a plain seqscan as outer/inner plan? If not, what are they used for? ExecSeqMarkPos and ExecSeqRestPos are called through execAmi.c's generalized ExecMarkPos and ExecRestrPos, which are then used by both nodeMergejoin.c and nodeResult.c. Offhand, it seems unlikely that there would ever be a path from MergeJoin down to ExecSeqMarkPos as MergeJoin requires sorted inputs. Perhaps it could happen with a full cartesian product but I don't know that we'd ever use a MergeJoin to implement that or that we have such an optimization today. Thanks, Stephen
Attachment
Stephen Frost <sfrost@snowman.net> writes: > * DT (kurt023@hotmail.com) wrote: >> I'm reading code of nodeSeqscan, and was confused with ExecSeqMarkPos and >> ExecSeqRestrPos. They are only called by ExecMergeJoin. Could merge join use >> a plain seqscan as outer/inner plan? If not, what are they used for? > ExecSeqMarkPos and ExecSeqRestPos are called through execAmi.c's > generalized ExecMarkPos and ExecRestrPos, which are then used by both > nodeMergejoin.c and nodeResult.c. Offhand, it seems unlikely that there > would ever be a path from MergeJoin down to ExecSeqMarkPos as MergeJoin > requires sorted inputs. Perhaps it could happen with a full cartesian > product but I don't know that we'd ever use a MergeJoin to implement > that or that we have such an optimization today. I'm pretty sure those are dead code. See the comment for ExecSupportsMarkRestore. regards, tom lane