From 0e06e6838758d3d67a94c454fe4b55c86aa1491d Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Tue, 25 Jul 2000 23:43:38 +0000
Subject: [PATCH] ExecRestrPos() really needs to raise ERROR, not a wimpy DEBUG
 message, if given a node type it doesn't support.  As is, wrong results from
 a mergejoin would go undetected.

---
 src/backend/executor/execAmi.c | 29 ++++++++++++++++++-----------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/src/backend/executor/execAmi.c b/src/backend/executor/execAmi.c
index 10478f60ad6..c3cb019c89d 100644
--- a/src/backend/executor/execAmi.c
+++ b/src/backend/executor/execAmi.c
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- *	$Id: execAmi.c,v 1.49 2000/07/12 02:37:00 tgl Exp $
+ *	$Id: execAmi.c,v 1.50 2000/07/25 23:43:38 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -356,7 +356,8 @@ ExecReScan(Plan *node, ExprContext *exprCtxt, Plan *parent)
 			break;
 
 		default:
-			elog(ERROR, "ExecReScan: node type %u not supported", nodeTag(node));
+			elog(ERROR, "ExecReScan: node type %d not supported",
+				 nodeTag(node));
 			return;
 	}
 
@@ -393,7 +394,8 @@ ExecReScanR(Relation relDesc,	/* LLL relDesc unused  */
  *
  *		Marks the current scan position.
  *
- *		XXX Needs to be extended to include all the node types.
+ *		XXX Needs to be extended to include all the node types,
+ *		or at least all the ones that can be directly below a mergejoin.
  * ----------------------------------------------------------------
  */
 void
@@ -422,16 +424,20 @@ ExecMarkPos(Plan *node)
 			break;
 
 		default:
-			elog(DEBUG, "ExecMarkPos: node type %u not supported", nodeTag(node));
+			/* don't make hard error unless caller asks to restore... */
+			elog(DEBUG, "ExecMarkPos: node type %d not supported",
+				 nodeTag(node));
 			break;
 	}
-	return;
 }
 
 /* ----------------------------------------------------------------
  *		ExecRestrPos
  *
  *		restores the scan position previously saved with ExecMarkPos()
+ *
+ *		XXX Needs to be extended to include all the node types,
+ *		or at least all the ones that can be directly below a mergejoin.
  * ----------------------------------------------------------------
  */
 void
@@ -441,22 +447,23 @@ ExecRestrPos(Plan *node)
 	{
 		case T_SeqScan:
 			ExecSeqRestrPos((SeqScan *) node);
-			return;
+			break;
 
 		case T_IndexScan:
 			ExecIndexRestrPos((IndexScan *) node);
-			return;
+			break;
 
 		case T_Material:
 			ExecMaterialRestrPos((Material *) node);
-			return;
+			break;
 
 		case T_Sort:
 			ExecSortRestrPos((Sort *) node);
-			return;
+			break;
 
 		default:
-			elog(DEBUG, "ExecRestrPos: node type %u not supported", nodeTag(node));
-			return;
+			elog(ERROR, "ExecRestrPos: node type %d not supported",
+				 nodeTag(node));
+			break;
 	}
 }
-- 
GitLab