The shortcut exit that I recently added to ExecInitIndexScan() for
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 31 May 2007 20:45:26 +0000 (20:45 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 31 May 2007 20:45:26 +0000 (20:45 +0000)
EXPLAIN-only operation was a little too short; it skipped initializing the
node's result tuple type, which may be needed depending on what's above the
indexscan node.  Call ExecAssignResultTypeFromTL before exiting.  (For good
luck I moved up the ExecAssignScanProjectionInfo call as well, so that
everything except indexscan-specific initialization will still be done.)
Per example from Grant Finnemore.

src/backend/executor/nodeIndexscan.c

index e6412a8fec4dfe8042b8dfa9cc619bc450d0802d..e6077f0d2517782fa45230fe83c213e661e61a07 100644 (file)
@@ -522,6 +522,12 @@ ExecInitIndexScan(IndexScan *node, EState *estate, int eflags)
         */
        ExecAssignScanType(&indexstate->ss, RelationGetDescr(currentRelation));
 
+       /*
+        * Initialize result tuple type and projection info.
+        */
+       ExecAssignResultTypeFromTL(&indexstate->ss.ps);
+       ExecAssignScanProjectionInfo(&indexstate->ss);
+
        /*
         * If we are just doing EXPLAIN (ie, aren't going to run the plan),
         * stop here.  This allows an index-advisor plugin to EXPLAIN a plan
@@ -589,12 +595,6 @@ ExecInitIndexScan(IndexScan *node, EState *estate, int eflags)
                                                                                           indexstate->iss_NumScanKeys,
                                                                                           indexstate->iss_ScanKeys);
 
-       /*
-        * Initialize result tuple type and projection info.
-        */
-       ExecAssignResultTypeFromTL(&indexstate->ss.ps);
-       ExecAssignScanProjectionInfo(&indexstate->ss);
-
        /*
         * all done.
         */