diff --git a/src/backend/optimizer/README b/src/backend/optimizer/README index f9a2cb982fcf88369b74e06c84f4c75477f3ac4f..98639181d498f64462f409ee931bb74aba4a0887 100644 --- a/src/backend/optimizer/README +++ b/src/backend/optimizer/README @@ -9,6 +9,7 @@ planner() preprocess target list preprocess qualifications(WHERE) --query_planner() + cnfify qualification, so qual are expressions (were AND's) and OR clauses pull out constants from target list get a target list that only contains column names, no expressions if none, then return diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index 3f7b5281cf789ac42344338fcdffa169cd943ad3..28515fba93e741fc22ce0289fe77978866a13fe7 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.18 1998/08/04 00:42:07 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.19 1998/08/07 05:02:15 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -45,6 +45,7 @@ int32 _use_geqo_rels_ = GEQO_RELS; static void find_rel_paths(Query *root, List *rels); static List *find_join_paths(Query *root, List *outer_rels, int levels_needed); +static void debug_print_rel(Query *root, RelOptInfo *rel); /* * find-paths-- @@ -173,7 +174,7 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed) { List *x; List *new_rels = NIL; - RelOptInfo *rel; + RelOptInfo *rel; /******************************************* * genetic query optimizer entry point * @@ -236,7 +237,7 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed) /* #define OPTIMIZER_DEBUG */ #ifdef OPTIMIZER_DEBUG - printf("levels left: %d\n", levels_left); + printf("levels left: %d\n", levels_needed); debug_print_rel(root, rel); #endif } diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c index cf05b30be6a00ea40b60061a41c4fdfd3ad88db7..607f980ac50a3a1a70cc7a89cf5b00d14021d4d8 100644 --- a/src/backend/optimizer/plan/initsplan.c +++ b/src/backend/optimizer/plan/initsplan.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.14 1998/08/04 16:44:14 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.15 1998/08/07 05:02:17 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -36,8 +36,7 @@ extern int Quiet; static void add_clause_to_rels(Query *root, List *clause); -static void -add_join_clause_info_to_rels(Query *root, CInfo *clauseinfo, +static void add_join_clause_info_to_rels(Query *root, CInfo *clauseinfo, List *join_relids); static void add_vars_to_rels(Query *root, List *vars, List *join_relids); @@ -183,8 +182,6 @@ add_clause_to_rels(Query *root, List *clause) clauseinfo->mergejoinorder = (MergeOrder *) NULL; clauseinfo->hashjoinoperator = (Oid) 0; - - if (length(relids) == 1) { RelOptInfo *rel = get_base_rel(root, lfirsti(relids)); diff --git a/src/backend/optimizer/plan/planmain.c b/src/backend/optimizer/plan/planmain.c index d1825f80ea3fecb02b68424c7f7388cc35eabb40..1d4340e08d90a9a00129bf88692c85cdd52fddcc 100644 --- a/src/backend/optimizer/plan/planmain.c +++ b/src/backend/optimizer/plan/planmain.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.23 1998/07/18 04:22:37 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.24 1998/08/07 05:02:19 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -18,6 +18,7 @@ #include "nodes/pg_list.h" #include "nodes/plannodes.h" #include "nodes/parsenodes.h" +#include "nodes/print.h" #include "nodes/relation.h" #include "nodes/makefuncs.h" @@ -85,7 +86,11 @@ query_planner(Query *root, qual = (List *) SS_process_sublinks((Node *) qual); qual = cnfify((Expr *) qual, true); - +#ifdef OPTIMIZER_DEBUG + printf("After cnfify()\n"); + pprint(qual); +#endif + /* * A command without a target list or qualification is an error, * except for "delete foo". @@ -250,8 +255,8 @@ subplanner(Query *root, List *flat_tlist, List *qual) { - RelOptInfo *final_relation; - List *final_relation_list; + RelOptInfo *final_relation; + List *final_relation_list; /* * Initialize the targetlist and qualification, adding entries to diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index e37da74b53e8db4d3cdaddcc3d8cf5d354ef07e9..61a7f2d473ee2fac2f3d9e64b5f4a05a348a1d2c 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.17 1998/06/15 19:28:47 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.18 1998/08/07 05:02:22 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -350,8 +350,6 @@ pull_constant_clauses(List *quals, List **constantQual) * * Returns the list of relids and vars. * - * XXX take the nreverse's out later - * */ void clause_relids_vars(Node *clause, List **relids, List **vars) diff --git a/src/tools/backend/flow.fig b/src/tools/backend/flow.fig index 35124b1f05675231694e505a89dd95578107a84e..0984b51258448bd9043bc99c72e6e1aa6b87a155 100644 --- a/src/tools/backend/flow.fig +++ b/src/tools/backend/flow.fig @@ -7,10 +7,6 @@ Inches 0 0 2.00 150.00 180.00 0 0 2.00 150.00 180.00 7950 10200 7950 10800 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 1 - 8400 375 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 1 - 8400 375 2 4 0 1 -1 29 0 0 20 0.000 0 0 7 0 0 5 2775 11400 375 11400 375 10800 2775 10800 2775 11400 2 1 0 2 29 7 0 0 -1 0.000 0 0 -1 1 1 2 @@ -73,10 +69,6 @@ Inches 2 1 0 2 20 7 0 0 -1 0.000 0 0 -1 1 0 2 0 0 2.00 150.00 180.00 2550 2175 6450 2775 -2 1 1 2 -1 7 0 0 -1 4.000 0 0 -1 1 1 2 - 0 0 2.00 150.00 180.00 - 0 0 2.00 150.00 180.00 - 4815 1908 5250 1350 2 4 0 1 -1 29 0 0 20 0.000 0 0 7 0 0 5 7650 12600 5250 12600 5250 12000 7650 12000 7650 12600 2 1 0 2 29 7 0 0 -1 0.000 0 0 -1 1 1 2 @@ -88,16 +80,20 @@ Inches 3750 5775 5250 5775 2 4 0 1 -1 8 0 0 20 0.000 0 0 7 0 0 5 3750 6075 1350 6075 1350 5475 3750 5475 3750 6075 -2 1 1 2 -1 7 0 0 -1 3.000 0 0 -1 1 1 2 - 0 0 2.00 150.00 180.00 - 0 0 2.00 150.00 180.00 - 4660 1524 5295 1293 2 1 0 2 8 7 0 0 -1 0.000 0 0 -1 1 0 2 0 0 2.00 150.00 180.00 2550 7275 2550 7875 2 1 0 2 31 7 0 0 -1 0.000 0 0 -1 1 0 2 0 0 2.00 150.00 180.00 2550 3300 2550 4275 +2 1 2 2 -1 7 0 0 -1 4.000 0 1 -1 1 1 2 + 0 0 2.00 80.00 150.00 + 0 0 2.00 80.00 150.00 + 4800 1875 5235 1317 +2 1 2 2 -1 7 0 0 -1 3.000 0 1 -1 1 1 2 + 0 0 2.00 80.00 150.00 + 0 0 2.00 80.00 150.00 + 4584 1524 5219 1293 3 0 0 2 8 7 0 0 -1 0.000 0 1 0 8 0 0 2.00 150.00 150.00 1350 9375 1050 9375 825 9000 825 4425 1050 4050 1500 3975 diff --git a/src/tools/backend/flow.jpg b/src/tools/backend/flow.jpg index f744394d879699c9597ddc9d697dcb778036c7ee..0a17ed434bf19ef2a59cae0f8f216d76f79d3aa1 100644 Binary files a/src/tools/backend/flow.jpg and b/src/tools/backend/flow.jpg differ diff --git a/src/tools/backend/index.html b/src/tools/backend/index.html index f43d6385cb0c09f4b05ef664862954533ed0e22f..5edafb8bc5e67e78497df638e06ad31a9c881f55 100644 --- a/src/tools/backend/index.html +++ b/src/tools/backend/index.html @@ -16,23 +16,23 @@ by Bruce Momjian <IMG src="flow.jpg" usemap="#flowmap" alt="flowchart" border=0> </CENTER> <MAP name="flowmap"> -<AREA COORDS="80,10,240,50" HREF="backend_dirs.html#main"> -<AREA COORDS="80,90,240,130" HREF="backend_dirs.html#postmaster"> -<AREA COORDS="340,50,500,90" HREF="backend_dirs.html#libpq"> -<AREA COORDS="80,170,240,210" HREF="backend_dirs.html#tcop"> -<AREA COORDS="340,170,500,210" HREF="backend_dirs.html#tcop"> -<AREA COORDS="80,270,240,310" HREF="backend_dirs.html#parser"> -<AREA COORDS="80,350,240,390" HREF="backend_dirs.html#tcop"> -<AREA COORDS="80,430,240,470" HREF="backend_dirs.html#optimizer"> -<AREA COORDS="80,410,240,550" HREF="backend_dirs.html#optimizer/plan"> -<AREA COORDS="80,590,240,630" HREF="backend_dirs.html#executor"> -<AREA COORDS="340,350,500,390" HREF="backend_dirs.html#commands"> -<AREA COORDS="10,700,170,750" HREF="backend_dirs.html#utils"> -<AREA COORDS="220,700,380,740" HREF="backend_dirs.html#catalog"> -<AREA COORDS="430,700,600,750" HREF="backend_dirs.html#storage"> -<AREA COORDS="110,780,280,830" HREF="backend_dirs.html#access"> -<AREA COORDS="340,780,500,830" HREF="backend_dirs.html#nodes"> -<AREA COORDS="20,870,180,910" HREF="backend_dirs.html#bootstrap"> +<AREA COORDS="70,0,230,40" HREF="backend_dirs.html#main"> +<AREA COORDS="70,80,230,120" HREF="backend_dirs.html#postmaster"> +<AREA COORDS="330,40,490,80" HREF="backend_dirs.html#libpq"> +<AREA COORDS="70,160,230,200" HREF="backend_dirs.html#tcop"> +<AREA COORDS="330,160,490,200" HREF="backend_dirs.html#tcop"> +<AREA COORDS="70,260,230,300" HREF="backend_dirs.html#parser"> +<AREA COORDS="70,340,230,380" HREF="backend_dirs.html#tcop"> +<AREA COORDS="70,420,230,460" HREF="backend_dirs.html#optimizer"> +<AREA COORDS="70,400,230,540" HREF="backend_dirs.html#optimizer/plan"> +<AREA COORDS="70,580,230,620" HREF="backend_dirs.html#executor"> +<AREA COORDS="330,340,490,380" HREF="backend_dirs.html#commands"> +<AREA COORDS="0,690,160,740" HREF="backend_dirs.html#utils"> +<AREA COORDS="210,690,370,730" HREF="backend_dirs.html#catalog"> +<AREA COORDS="420,690,590,740" HREF="backend_dirs.html#storage"> +<AREA COORDS="100,770,270,820" HREF="backend_dirs.html#access"> +<AREA COORDS="330,770,490,820" HREF="backend_dirs.html#nodes"> +<AREA COORDS="10,860,170,900" HREF="backend_dirs.html#bootstrap"> </MAP> <CENTER><EM> Click on an item to see more detail or look at the full