|
8 | 8 | *
|
9 | 9 | *
|
10 | 10 | * IDENTIFICATION
|
11 |
| - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.79 2000/04/12 17:15:22 momjian Exp $ |
| 11 | + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.79.2.1 2000/07/27 23:53:29 tgl Exp $ |
12 | 12 | *
|
13 | 13 | *-------------------------------------------------------------------------
|
14 | 14 | */
|
@@ -53,6 +53,22 @@ Plan *
|
53 | 53 | planner(Query *parse)
|
54 | 54 | {
|
55 | 55 | Plan *result_plan;
|
| 56 | + Index save_PlannerQueryLevel; |
| 57 | + List *save_PlannerInitPlan; |
| 58 | + List *save_PlannerParamVar; |
| 59 | + int save_PlannerPlanId; |
| 60 | + |
| 61 | + /* |
| 62 | + * The planner can be called recursively (an example is when |
| 63 | + * eval_const_expressions tries to simplify an SQL function). |
| 64 | + * So, global state variables must be saved and restored. |
| 65 | + * |
| 66 | + * (Perhaps these should be moved into the Query structure instead?) |
| 67 | + */ |
| 68 | + save_PlannerQueryLevel = PlannerQueryLevel; |
| 69 | + save_PlannerInitPlan = PlannerInitPlan; |
| 70 | + save_PlannerParamVar = PlannerParamVar; |
| 71 | + save_PlannerPlanId = PlannerPlanId; |
56 | 72 |
|
57 | 73 | /* Initialize state for subselects */
|
58 | 74 | PlannerQueryLevel = 1;
|
@@ -81,6 +97,12 @@ planner(Query *parse)
|
81 | 97 | /* final cleanup of the plan */
|
82 | 98 | set_plan_references(result_plan);
|
83 | 99 |
|
| 100 | + /* restore state for outer planner, if any */ |
| 101 | + PlannerQueryLevel = save_PlannerQueryLevel; |
| 102 | + PlannerInitPlan = save_PlannerInitPlan; |
| 103 | + PlannerParamVar = save_PlannerParamVar; |
| 104 | + PlannerPlanId = save_PlannerPlanId; |
| 105 | + |
84 | 106 | return result_plan;
|
85 | 107 | }
|
86 | 108 |
|
|
0 commit comments