|
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 | +Indexsave_PlannerQueryLevel; |
| 57 | +List*save_PlannerInitPlan; |
| 58 | +List*save_PlannerParamVar; |
| 59 | +intsave_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 | returnresult_plan;
|
85 | 107 | }
|
86 | 108 |
|
|