Add missing fix_expr_references() step for the funcexpr of a
authorTom Lane
Sat, 18 May 2002 00:42:55 +0000 (00:42 +0000)
committerTom Lane
Sat, 18 May 2002 00:42:55 +0000 (00:42 +0000)
FunctionScan plan node.

src/backend/optimizer/plan/setrefs.c

index 3e07b2425e5d0e3f60651dd26f6e6aac9b26ab33..1b05d49054ff5a8830d9bc185a2ad23c67a4b929 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.76 2002/05/12 20:10:03 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.77 2002/05/18 00:42:55 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -23,6 +23,7 @@
 #include "optimizer/planmain.h"
 #include "optimizer/tlist.h"
 #include "optimizer/var.h"
+#include "parser/parsetree.h"
 
 
 typedef struct
@@ -121,8 +122,16 @@ set_plan_references(Query *root, Plan *plan)
            set_plan_references(root, ((SubqueryScan *) plan)->subplan);
            break;
        case T_FunctionScan:
-           fix_expr_references(plan, (Node *) plan->targetlist);
-           fix_expr_references(plan, (Node *) plan->qual);
+           {
+               RangeTblEntry *rte;
+
+               fix_expr_references(plan, (Node *) plan->targetlist);
+               fix_expr_references(plan, (Node *) plan->qual);
+               rte = rt_fetch(((FunctionScan *) plan)->scan.scanrelid,
+                              root->rtable);
+               Assert(rte->rtekind == RTE_FUNCTION);
+               fix_expr_references(plan, rte->funcexpr);
+           }
            break;
        case T_NestLoop:
            set_join_references(root, (Join *) plan);