Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4a6e3a6

Browse files
committed
Old planner() becomes union_planner(); new planner() makes initialization
of some global variables to support subselects and calls union_planner().Calls to SS_replace_correlation_vars() and SS_process_sublinks() inquery_planner() before planning.Get rid of #ifdef INDEXSCAN_PATCH in createplan.c.
1 parenta3f1c36 commit4a6e3a6

File tree

6 files changed

+625
-20
lines changed

6 files changed

+625
-20
lines changed

‎src/backend/optimizer/plan/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# Makefile for optimizer/plan
55
#
66
# IDENTIFICATION
7-
# $Header: /cvsroot/pgsql/src/backend/optimizer/plan/Makefile,v 1.5 1997/12/20 00:24:31 scrappy Exp $
7+
# $Header: /cvsroot/pgsql/src/backend/optimizer/plan/Makefile,v 1.6 1998/02/13 03:36:51 vadim Exp $
88
#
99
#-------------------------------------------------------------------------
1010

@@ -15,7 +15,7 @@ INCLUDE_OPT = -I../..
1515

1616
CFLAGS+=$(INCLUDE_OPT)
1717

18-
OBJS = createplan.o initsplan.o planmain.o planner.o setrefs.o
18+
OBJS = createplan.o initsplan.o planmain.o planner.o setrefs.o subselect.o
1919

2020
# not ready yet: predmig.o xfunc.o
2121

‎src/backend/optimizer/plan/createplan.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.25 1998/02/10 04:01:09 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.26 1998/02/13 03:36:54 vadim Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -685,13 +685,11 @@ fix_indxqual_references(Node *clause, Path *index_path)
685685
elseif (IsA(clause,Const))
686686
{
687687
return (clause);
688-
#ifdefINDEXSCAN_PATCH
689688
}
690689
elseif (IsA(clause,Param))
691690
{
692691
/* Function parameter used as index scan arg. DZ - 27-8-1996 */
693692
return (clause);
694-
#endif
695693
}
696694
elseif (is_opclause(clause)&&
697695
is_funcclause((Node*)get_leftop((Expr*)clause))&&

‎src/backend/optimizer/plan/planmain.c

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.18 1998/02/10 04:01:12 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.19 1998/02/13 03:36:57 vadim Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -22,7 +22,9 @@
2222
#include"nodes/makefuncs.h"
2323

2424
#include"optimizer/planmain.h"
25+
#include"optimizer/subselect.h"
2526
#include"optimizer/internal.h"
27+
#include"optimizer/prep.h"
2628
#include"optimizer/paths.h"
2729
#include"optimizer/clauses.h"
2830
#include"optimizer/keys.h"
@@ -72,7 +74,18 @@ query_planner(Query *root,
7274
List*var_only_tlist=NIL;
7375
List*level_tlist=NIL;
7476
Plan*subplan=NULL;
75-
77+
78+
if (PlannerQueryLevel>1 )
79+
{
80+
/* should copy be made ? */
81+
tlist= (List*)SS_replace_correlation_vars ((Node*)tlist);
82+
qual= (List*)SS_replace_correlation_vars ((Node*)qual);
83+
}
84+
if (root->hasSubLinks)
85+
qual= (List*)SS_process_sublinks ((Node*)qual);
86+
87+
qual=cnfify((Expr*)qual, true);
88+
7689
/*
7790
* A command without a target list or qualification is an error,
7891
* except for "delete foo".
@@ -145,7 +158,7 @@ query_planner(Query *root,
145158
if (constant_qual!=NULL)
146159
{
147160
return ((Plan*)make_result(tlist,
148-
(Node*)constant_qual,
161+
(Node*)constant_qual,
149162
(Plan*)scan));
150163
}
151164
else

‎src/backend/optimizer/plan/planner.c

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.21 1998/01/15 18:59:48 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.22 1998/02/13 03:36:59 vadim Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
1414
#include<sys/types.h>
15+
#include<string.h>
1516

1617
#include"postgres.h"
1718

@@ -30,6 +31,7 @@
3031
#include"optimizer/plancat.h"
3132
#include"optimizer/prep.h"
3233
#include"optimizer/planmain.h"
34+
#include"optimizer/subselect.h"
3335
#include"optimizer/paths.h"
3436
#include"optimizer/cost.h"
3537

@@ -56,10 +58,32 @@ extern Plan *make_groupPlan(List **tlist, bool tuplePerGroup,
5658
*
5759
*****************************************************************************/
5860

61+
Plan*
62+
planner(Query*parse)
63+
{
64+
Plan*result_plan;
65+
66+
PlannerQueryLevel=1;
67+
PlannerVarParam=NULL;
68+
PlannerParamVar=NULL;
69+
PlannerInitPlan=NULL;
70+
PlannerPlanId=0;
71+
72+
result_plan=union_planner (parse);
73+
74+
Assert (PlannerQueryLevel==1);
75+
if (PlannerPlanId>0 )
76+
{
77+
result_plan->initPlan=PlannerInitPlan;
78+
(void)SS_finalize_plan (result_plan);
79+
}
80+
result_plan->nParamExec=length (PlannerParamVar);
81+
82+
return (result_plan);
83+
}
5984

6085
/*
61-
* planner--
62-
* Main query optimizer routine.
86+
* union_planner--
6387
*
6488
* Invokes the planner on union queries if there are any left,
6589
* recursing if necessary to get them all, then processes normal plans.
@@ -68,14 +92,13 @@ extern Plan *make_groupPlan(List **tlist, bool tuplePerGroup,
6892
*
6993
*/
7094
Plan*
71-
planner(Query*parse)
95+
union_planner(Query*parse)
7296
{
7397
List*tlist=parse->targetList;
7498
List*rangetable=parse->rtable;
7599

76100
Plan*result_plan= (Plan*)NULL;
77101

78-
List*primary_qual;
79102
Indexrt_index;
80103

81104

@@ -100,17 +123,25 @@ planner(Query *parse)
100123
}
101124
else
102125
{
126+
List**vpm=NULL;
127+
103128
tlist=preprocess_targetlist(tlist,
104129
parse->commandType,
105130
parse->resultRelation,
106131
parse->rtable);
107-
108-
primary_qual=cnfify((Expr*)parse->qual, true);
109-
132+
if (parse->rtable!=NULL )
133+
{
134+
vpm= (List**)palloc (length (parse->rtable)*sizeof (List*));
135+
memset (vpm,0,length (parse->rtable)*sizeof (List*));
136+
}
137+
PlannerVarParam=lcons (vpm,PlannerVarParam);
110138
result_plan=query_planner(parse,
111-
parse->commandType,
112-
tlist,
113-
primary_qual);
139+
parse->commandType,
140+
tlist,
141+
(List*)parse->qual);
142+
PlannerVarParam=lnext (PlannerVarParam);
143+
if (vpm!=NULL )
144+
pfree (vpm);
114145
}
115146

116147
/*

‎src/backend/optimizer/plan/setrefs.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.17 1998/02/10 04:01:13 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.18 1998/02/13 03:37:02 vadim Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -405,7 +405,21 @@ replace_clause_joinvar_refs(Expr *clause,
405405
leftvar,
406406
rightvar));
407407
}
408+
elseif (is_subplan(clause))
409+
{
410+
((Expr*)clause)->args=
411+
replace_subclause_joinvar_refs(((Expr*)clause)->args,
412+
outer_tlist,
413+
inner_tlist);
414+
((SubPlan*) ((Expr*)clause)->oper)->sublink->oper=
415+
replace_subclause_joinvar_refs(((SubPlan*) ((Expr*)clause)->oper)->sublink->oper,
416+
outer_tlist,
417+
inner_tlist);
418+
return ((List*)clause);
419+
}
408420
/* shouldn't reach here */
421+
elog (ERROR,"replace_clause_joinvar_refs: unsupported clause %d",
422+
nodeTag (clause));
409423
returnNULL;
410424
}
411425

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp