mirror of
https://github.com/postgres/postgres.git
synced 2025-07-26 01:22:12 +03:00
Remove dead code supporting mark/restore in SeqScan, TidScan, ValuesScan.
There seems no prospect that any of this will ever be useful, and indeed it's questionable whether some of it would work if it ever got called; it's certainly not been exercised in a very long time, if ever. So let's get rid of it, and make the comments about mark/restore in execAmi.c less wishy-washy. The mark/restore support for Result nodes is also currently dead code, but that's due to planner limitations not because it's impossible that it could be useful. So I left it in.
This commit is contained in:
@ -271,16 +271,20 @@ ExecReScan(PlanState *node)
|
||||
* ExecMarkPos
|
||||
*
|
||||
* Marks the current scan position.
|
||||
*
|
||||
* NOTE: mark/restore capability is currently needed only for plan nodes
|
||||
* that are the immediate inner child of a MergeJoin node. Since MergeJoin
|
||||
* requires sorted input, there is never any need to support mark/restore in
|
||||
* node types that cannot produce sorted output. There are some cases in
|
||||
* which a node can pass through sorted data from its child; if we don't
|
||||
* implement mark/restore for such a node type, the planner compensates by
|
||||
* inserting a Material node above that node.
|
||||
*/
|
||||
void
|
||||
ExecMarkPos(PlanState *node)
|
||||
{
|
||||
switch (nodeTag(node))
|
||||
{
|
||||
case T_SeqScanState:
|
||||
ExecSeqMarkPos((SeqScanState *) node);
|
||||
break;
|
||||
|
||||
case T_IndexScanState:
|
||||
ExecIndexMarkPos((IndexScanState *) node);
|
||||
break;
|
||||
@ -289,14 +293,6 @@ ExecMarkPos(PlanState *node)
|
||||
ExecIndexOnlyMarkPos((IndexOnlyScanState *) node);
|
||||
break;
|
||||
|
||||
case T_TidScanState:
|
||||
ExecTidMarkPos((TidScanState *) node);
|
||||
break;
|
||||
|
||||
case T_ValuesScanState:
|
||||
ExecValuesMarkPos((ValuesScanState *) node);
|
||||
break;
|
||||
|
||||
case T_CustomScanState:
|
||||
ExecCustomMarkPos((CustomScanState *) node);
|
||||
break;
|
||||
@ -338,10 +334,6 @@ ExecRestrPos(PlanState *node)
|
||||
{
|
||||
switch (nodeTag(node))
|
||||
{
|
||||
case T_SeqScanState:
|
||||
ExecSeqRestrPos((SeqScanState *) node);
|
||||
break;
|
||||
|
||||
case T_IndexScanState:
|
||||
ExecIndexRestrPos((IndexScanState *) node);
|
||||
break;
|
||||
@ -350,14 +342,6 @@ ExecRestrPos(PlanState *node)
|
||||
ExecIndexOnlyRestrPos((IndexOnlyScanState *) node);
|
||||
break;
|
||||
|
||||
case T_TidScanState:
|
||||
ExecTidRestrPos((TidScanState *) node);
|
||||
break;
|
||||
|
||||
case T_ValuesScanState:
|
||||
ExecValuesRestrPos((ValuesScanState *) node);
|
||||
break;
|
||||
|
||||
case T_CustomScanState:
|
||||
ExecCustomRestrPos((CustomScanState *) node);
|
||||
break;
|
||||
@ -386,14 +370,6 @@ ExecRestrPos(PlanState *node)
|
||||
* This is used during planning and so must accept a Path, not a Plan.
|
||||
* We keep it here to be adjacent to the routines above, which also must
|
||||
* know which plan types support mark/restore.
|
||||
*
|
||||
* XXX Ideally, all plan node types would support mark/restore, and this
|
||||
* wouldn't be needed. For now, this had better match the routines above.
|
||||
*
|
||||
* (However, since the only present use of mark/restore is in mergejoin,
|
||||
* there is no need to support mark/restore in any plan type that is not
|
||||
* capable of generating ordered output. So the seqscan, tidscan,
|
||||
* and valuesscan support is actually useless code at present.)
|
||||
*/
|
||||
bool
|
||||
ExecSupportsMarkRestore(Path *pathnode)
|
||||
@ -405,11 +381,8 @@ ExecSupportsMarkRestore(Path *pathnode)
|
||||
*/
|
||||
switch (pathnode->pathtype)
|
||||
{
|
||||
case T_SeqScan:
|
||||
case T_IndexScan:
|
||||
case T_IndexOnlyScan:
|
||||
case T_TidScan:
|
||||
case T_ValuesScan:
|
||||
case T_Material:
|
||||
case T_Sort:
|
||||
return true;
|
||||
@ -426,7 +399,11 @@ ExecSupportsMarkRestore(Path *pathnode)
|
||||
* Although Result supports mark/restore if it has a child plan
|
||||
* that does, we presently come here only for ResultPath nodes,
|
||||
* which represent Result plans without a child plan. So there is
|
||||
* nothing to recurse to and we can just say "false".
|
||||
* nothing to recurse to and we can just say "false". (This means
|
||||
* that Result's support for mark/restore is in fact dead code.
|
||||
* We keep it since it's not much code, and someday the planner
|
||||
* might be smart enough to use it. That would require making
|
||||
* this function smarter too, of course.)
|
||||
*/
|
||||
Assert(IsA(pathnode, ResultPath));
|
||||
return false;
|
||||
|
Reference in New Issue
Block a user