ExecRestrPos() really needs to raise ERROR, not a wimpy DEBUG message,
authorTom Lane
Tue, 25 Jul 2000 23:43:38 +0000 (23:43 +0000)
committerTom Lane
Tue, 25 Jul 2000 23:43:38 +0000 (23:43 +0000)
if given a node type it doesn't support.  As is, wrong results from a
mergejoin would go undetected.

src/backend/executor/execAmi.c

index 10478f60ad69340738ec07fb3e7a6a76c199e591..c3cb019c89d679459e0cf7b08b2a8b45756d2baf 100644 (file)
@@ -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;
    }
 }