diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2019-01-29 15:48:51 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2019-01-29 15:48:51 -0500 |
commit | f09346a9c6218dd239fdf3a79a729716c0d305bd (patch) | |
tree | d33b3c1a0770578079e94991384923280991a252 /src | |
parent | a1b8c41e990ec0f083e9b684700a07640d5a356a (diff) | |
download | postgresql-f09346a9c6218dd239fdf3a79a729716c0d305bd.tar.gz postgresql-f09346a9c6218dd239fdf3a79a729716c0d305bd.zip |
Refactor planner's header files.
Create a new header optimizer/optimizer.h, which exposes just the
planner functions that can be used "at arm's length", without need
to access Paths or the other planner-internal data structures defined
in nodes/relation.h. This is intended to provide the whole planner
API seen by most of the rest of the system; although FDWs still need
to use additional stuff, and more thought is also needed about just
what selfuncs.c should rely on.
The main point of doing this now is to limit the amount of new
#include baggage that will be needed by "planner support functions",
which I expect to introduce later, and which will be in relevant
datatype modules rather than anywhere near the planner.
This commit just moves relevant declarations into optimizer.h from
other header files (a couple of which go away because everything
got moved), and adjusts #include lists to match. There's further
cleanup that could be done if we want to decide that some stuff
being exposed by optimizer.h doesn't belong in the planner at all,
but I'll leave that for another day.
Discussion: https://postgr.es/m/11460.1548706639@sss.pgh.pa.us
Diffstat (limited to 'src')
85 files changed, 273 insertions, 293 deletions
diff --git a/src/backend/access/gist/gistbuild.c b/src/backend/access/gist/gistbuild.c index 94463ffb995..bd142a3560d 100644 --- a/src/backend/access/gist/gistbuild.c +++ b/src/backend/access/gist/gistbuild.c @@ -22,7 +22,7 @@ #include "access/xloginsert.h" #include "catalog/index.h" #include "miscadmin.h" -#include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "storage/bufmgr.h" #include "storage/smgr.h" #include "utils/memutils.h" diff --git a/src/backend/access/spgist/spgutils.c b/src/backend/access/spgist/spgutils.c index de147d7b68d..8e63c1fad25 100644 --- a/src/backend/access/spgist/spgutils.c +++ b/src/backend/access/spgist/spgutils.c @@ -22,7 +22,6 @@ #include "access/transam.h" #include "access/xact.h" #include "catalog/pg_amop.h" -#include "optimizer/paths.h" #include "storage/bufmgr.h" #include "storage/indexfsm.h" #include "storage/lmgr.h" @@ -32,9 +31,6 @@ #include "utils/lsyscache.h" #include "utils/syscache.h" -extern Expr *spgcanorderbyop(IndexOptInfo *index, - PathKey *pathkey, int pathkeyno, - Expr *orderby_clause, int *indexcol_p); /* * SP-GiST handler function: return IndexAmRoutine with access method parameters diff --git a/src/backend/access/tablesample/bernoulli.c b/src/backend/access/tablesample/bernoulli.c index 5e5e32dbaec..9360b5bbc99 100644 --- a/src/backend/access/tablesample/bernoulli.c +++ b/src/backend/access/tablesample/bernoulli.c @@ -29,8 +29,7 @@ #include "access/hash.h" #include "access/tsmapi.h" #include "catalog/pg_type.h" -#include "optimizer/clauses.h" -#include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "utils/builtins.h" diff --git a/src/backend/access/tablesample/system.c b/src/backend/access/tablesample/system.c index 383387bc695..298e0ab4a09 100644 --- a/src/backend/access/tablesample/system.c +++ b/src/backend/access/tablesample/system.c @@ -31,8 +31,7 @@ #include "access/relscan.h" #include "access/tsmapi.h" #include "catalog/pg_type.h" -#include "optimizer/clauses.h" -#include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "utils/builtins.h" diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c index 9c55c20d6b2..ce2b61631db 100644 --- a/src/backend/access/transam/parallel.c +++ b/src/backend/access/transam/parallel.c @@ -28,7 +28,7 @@ #include "libpq/pqformat.h" #include "libpq/pqmq.h" #include "miscadmin.h" -#include "optimizer/planmain.h" +#include "optimizer/optimizer.h" #include "pgstat.h" #include "storage/ipc.h" #include "storage/sinval.h" diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index cc865de627d..910f6515227 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -64,9 +64,7 @@ #include "executor/executor.h" #include "miscadmin.h" #include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" -#include "optimizer/var.h" -#include "optimizer/planner.h" +#include "optimizer/optimizer.h" #include "parser/parse_coerce.h" #include "parser/parse_collate.h" #include "parser/parse_expr.h" diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 225c0780184..169b2de6cfb 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -56,8 +56,7 @@ #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" -#include "optimizer/planner.h" +#include "optimizer/optimizer.h" #include "parser/parser.h" #include "rewrite/rewriteManip.h" #include "storage/bufmgr.h" diff --git a/src/backend/catalog/partition.c b/src/backend/catalog/partition.c index 62d1ec60ba5..0d3bc3a2c79 100644 --- a/src/backend/catalog/partition.c +++ b/src/backend/catalog/partition.c @@ -24,9 +24,7 @@ #include "catalog/pg_inherits.h" #include "catalog/pg_partitioned_table.h" #include "nodes/makefuncs.h" -#include "optimizer/clauses.h" -#include "optimizer/prep.h" -#include "optimizer/var.h" +#include "optimizer/optimizer.h" #include "partitioning/partbounds.h" #include "rewrite/rewriteManip.h" #include "utils/fmgroids.h" diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index ec1d6b6f119..a74af4c1716 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -38,7 +38,7 @@ #include "commands/tablecmds.h" #include "commands/vacuum.h" #include "miscadmin.h" -#include "optimizer/planner.h" +#include "optimizer/optimizer.h" #include "storage/bufmgr.h" #include "storage/lmgr.h" #include "storage/predicate.h" diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index 4411b19e587..dbb06397e6b 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -37,9 +37,7 @@ #include "libpq/pqformat.h" #include "mb/pg_wchar.h" #include "miscadmin.h" -#include "optimizer/clauses.h" -#include "optimizer/planner.h" -#include "optimizer/prep.h" +#include "optimizer/optimizer.h" #include "nodes/makefuncs.h" #include "parser/parse_coerce.h" #include "parser/parse_collate.h" diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 5d859b7c99e..1831ea81cfe 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -24,8 +24,6 @@ #include "nodes/extensible.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" -#include "optimizer/planmain.h" #include "parser/parsetree.h" #include "rewrite/rewriteHandler.h" #include "storage/bufmgr.h" diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index ac401689c82..9a2f1a85b47 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -54,8 +54,7 @@ #include "executor/executor.h" #include "funcapi.h" #include "miscadmin.h" -#include "optimizer/clauses.h" -#include "optimizer/var.h" +#include "optimizer/optimizer.h" #include "parser/parse_coerce.h" #include "parser/parse_collate.h" #include "parser/parse_expr.h" diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 5b2b8d29694..bd85099c286 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -42,9 +42,7 @@ #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" -#include "optimizer/planner.h" -#include "optimizer/var.h" +#include "optimizer/optimizer.h" #include "parser/parse_coerce.h" #include "parser/parse_func.h" #include "parser/parse_oper.h" diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index ff764991379..434be403fe8 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -63,11 +63,7 @@ #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "nodes/parsenodes.h" -#include "optimizer/clauses.h" -#include "optimizer/planner.h" -#include "optimizer/predtest.h" -#include "optimizer/prep.h" -#include "optimizer/var.h" +#include "optimizer/optimizer.h" #include "parser/parse_clause.h" #include "parser/parse_coerce.h" #include "parser/parse_collate.h" diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 499030c4455..7b5896b98f9 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -36,8 +36,7 @@ #include "miscadmin.h" #include "nodes/bitmapset.h" #include "nodes/makefuncs.h" -#include "optimizer/clauses.h" -#include "optimizer/var.h" +#include "optimizer/optimizer.h" #include "parser/parse_clause.h" #include "parser/parse_collate.h" #include "parser/parse_func.h" diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index 35a6485118f..fa7161ef9d9 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -56,7 +56,7 @@ #include "executor/executor.h" #include "miscadmin.h" #include "nodes/makefuncs.h" -#include "optimizer/var.h" +#include "optimizer/optimizer.h" #include "parser/parse_coerce.h" #include "parser/parse_collate.h" #include "parser/parse_expr.h" diff --git a/src/backend/executor/execExpr.c b/src/backend/executor/execExpr.c index 2e061a5ee36..e52b8063728 100644 --- a/src/backend/executor/execExpr.c +++ b/src/backend/executor/execExpr.c @@ -40,8 +40,7 @@ #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" -#include "optimizer/planner.h" +#include "optimizer/optimizer.h" #include "pgstat.h" #include "utils/builtins.h" #include "utils/datum.h" diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 5975c5206b8..9a20460e762 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -52,7 +52,6 @@ #include "jit/jit.h" #include "mb/pg_wchar.h" #include "miscadmin.h" -#include "optimizer/clauses.h" #include "parser/parsetree.h" #include "rewrite/rewriteManip.h" #include "storage/bufmgr.h" diff --git a/src/backend/executor/execParallel.c b/src/backend/executor/execParallel.c index ceea3d6d721..b79be91655b 100644 --- a/src/backend/executor/execParallel.c +++ b/src/backend/executor/execParallel.c @@ -39,8 +39,6 @@ #include "executor/tqueue.h" #include "jit/jit.h" #include "nodes/nodeFuncs.h" -#include "optimizer/planmain.h" -#include "optimizer/planner.h" #include "storage/spin.h" #include "tcop/tcopprot.h" #include "utils/datum.h" diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index 2a260a71f24..263a0f81279 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -226,8 +226,7 @@ #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" -#include "optimizer/tlist.h" +#include "optimizer/optimizer.h" #include "parser/parse_agg.h" #include "parser/parse_coerce.h" #include "utils/acl.h" diff --git a/src/backend/executor/nodeGather.c b/src/backend/executor/nodeGather.c index 70a4e90a05d..69d5a1f2398 100644 --- a/src/backend/executor/nodeGather.c +++ b/src/backend/executor/nodeGather.c @@ -38,7 +38,7 @@ #include "executor/nodeSubplan.h" #include "executor/tqueue.h" #include "miscadmin.h" -#include "optimizer/planmain.h" +#include "optimizer/optimizer.h" #include "pgstat.h" #include "utils/memutils.h" #include "utils/rel.h" diff --git a/src/backend/executor/nodeGatherMerge.c b/src/backend/executor/nodeGatherMerge.c index 8635865d1e6..4de1d2b484d 100644 --- a/src/backend/executor/nodeGatherMerge.c +++ b/src/backend/executor/nodeGatherMerge.c @@ -23,7 +23,7 @@ #include "executor/tqueue.h" #include "lib/binaryheap.h" #include "miscadmin.h" -#include "optimizer/planmain.h" +#include "optimizer/optimizer.h" #include "utils/memutils.h" #include "utils/rel.h" diff --git a/src/backend/executor/nodeIndexscan.c b/src/backend/executor/nodeIndexscan.c index cdf1ad09de3..324356ec757 100644 --- a/src/backend/executor/nodeIndexscan.c +++ b/src/backend/executor/nodeIndexscan.c @@ -37,7 +37,6 @@ #include "lib/pairingheap.h" #include "miscadmin.h" #include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" #include "utils/array.h" #include "utils/datum.h" #include "utils/lsyscache.h" diff --git a/src/backend/executor/nodeWindowAgg.c b/src/backend/executor/nodeWindowAgg.c index 731391f1907..157ac042b82 100644 --- a/src/backend/executor/nodeWindowAgg.c +++ b/src/backend/executor/nodeWindowAgg.c @@ -41,7 +41,7 @@ #include "executor/nodeWindowAgg.h" #include "miscadmin.h" #include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" +#include "optimizer/optimizer.h" #include "parser/parse_agg.h" #include "parser/parse_coerce.h" #include "utils/acl.h" diff --git a/src/backend/jit/llvm/llvmjit_expr.c b/src/backend/jit/llvm/llvmjit_expr.c index 351f6ec7e1a..df7e620da71 100644 --- a/src/backend/jit/llvm/llvmjit_expr.c +++ b/src/backend/jit/llvm/llvmjit_expr.c @@ -33,7 +33,6 @@ #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/planner.h" #include "parser/parse_coerce.h" #include "parser/parsetree.h" #include "pgstat.h" diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index 0d8a3f9592c..2144e14ec8d 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -35,13 +35,13 @@ #include "optimizer/cost.h" #include "optimizer/geqo.h" #include "optimizer/inherit.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" #include "optimizer/plancat.h" #include "optimizer/planner.h" #include "optimizer/restrictinfo.h" #include "optimizer/tlist.h" -#include "optimizer/var.h" #include "parser/parse_clause.h" #include "parser/parsetree.h" #include "partitioning/partprune.h" diff --git a/src/backend/optimizer/path/clausesel.c b/src/backend/optimizer/path/clausesel.c index 50452706ed1..abca03b805e 100644 --- a/src/backend/optimizer/path/clausesel.c +++ b/src/backend/optimizer/path/clausesel.c @@ -18,6 +18,7 @@ #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" #include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/plancat.h" #include "utils/fmgroids.h" diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 19be1f375c5..532de4484fa 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -83,6 +83,7 @@ #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" #include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" #include "optimizer/placeholder.h" diff --git a/src/backend/optimizer/path/equivclass.c b/src/backend/optimizer/path/equivclass.c index 6e134ae1d26..3454f129122 100644 --- a/src/backend/optimizer/path/equivclass.c +++ b/src/backend/optimizer/path/equivclass.c @@ -24,11 +24,11 @@ #include "nodes/nodeFuncs.h" #include "optimizer/appendinfo.h" #include "optimizer/clauses.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" #include "optimizer/planmain.h" #include "optimizer/restrictinfo.h" -#include "optimizer/var.h" #include "utils/lsyscache.h" diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c index be50d56b5a9..7e1a3908f12 100644 --- a/src/backend/optimizer/path/indxpath.c +++ b/src/backend/optimizer/path/indxpath.c @@ -28,12 +28,11 @@ #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" #include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" -#include "optimizer/predtest.h" #include "optimizer/prep.h" #include "optimizer/restrictinfo.h" -#include "optimizer/var.h" #include "utils/builtins.h" #include "utils/bytea.h" #include "utils/lsyscache.h" diff --git a/src/backend/optimizer/path/pathkeys.c b/src/backend/optimizer/path/pathkeys.c index 9dac50ea390..56d839bb31c 100644 --- a/src/backend/optimizer/path/pathkeys.c +++ b/src/backend/optimizer/path/pathkeys.c @@ -21,10 +21,9 @@ #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "nodes/plannodes.h" -#include "optimizer/clauses.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" -#include "optimizer/tlist.h" #include "utils/lsyscache.h" diff --git a/src/backend/optimizer/path/tidpath.c b/src/backend/optimizer/path/tidpath.c index 94c88bd6622..466e9960119 100644 --- a/src/backend/optimizer/path/tidpath.c +++ b/src/backend/optimizer/path/tidpath.c @@ -40,10 +40,10 @@ #include "catalog/pg_type.h" #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" #include "optimizer/restrictinfo.h" -#include "optimizer/var.h" /* diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c index 1593dbec214..a4efa693ea7 100644 --- a/src/backend/optimizer/plan/analyzejoins.c +++ b/src/backend/optimizer/plan/analyzejoins.c @@ -25,11 +25,11 @@ #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" #include "optimizer/joininfo.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" #include "optimizer/planmain.h" #include "optimizer/tlist.h" -#include "optimizer/var.h" #include "utils/lsyscache.h" /* local functions */ diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index c1aa0ba663b..1b4f7db649e 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -28,16 +28,15 @@ #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" #include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "optimizer/paramassign.h" #include "optimizer/paths.h" #include "optimizer/placeholder.h" #include "optimizer/plancat.h" #include "optimizer/planmain.h" -#include "optimizer/predtest.h" #include "optimizer/restrictinfo.h" #include "optimizer/subselect.h" #include "optimizer/tlist.h" -#include "optimizer/var.h" #include "parser/parse_clause.h" #include "parser/parsetree.h" #include "partitioning/partprune.h" diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c index a2376d2ed7e..d6ffa7869d1 100644 --- a/src/backend/optimizer/plan/initsplan.c +++ b/src/backend/optimizer/plan/initsplan.c @@ -21,6 +21,7 @@ #include "optimizer/clauses.h" #include "optimizer/cost.h" #include "optimizer/joininfo.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" #include "optimizer/placeholder.h" @@ -28,7 +29,6 @@ #include "optimizer/planner.h" #include "optimizer/prep.h" #include "optimizer/restrictinfo.h" -#include "optimizer/var.h" #include "parser/analyze.h" #include "rewrite/rewriteManip.h" #include "utils/lsyscache.h" diff --git a/src/backend/optimizer/plan/planagg.c b/src/backend/optimizer/plan/planagg.c index d98cb899840..86617099df0 100644 --- a/src/backend/optimizer/plan/planagg.c +++ b/src/backend/optimizer/plan/planagg.c @@ -35,6 +35,7 @@ #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" #include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" #include "optimizer/planmain.h" diff --git a/src/backend/optimizer/plan/planmain.c b/src/backend/optimizer/plan/planmain.c index f9f4b12db71..3cedd01c98b 100644 --- a/src/backend/optimizer/plan/planmain.c +++ b/src/backend/optimizer/plan/planmain.c @@ -23,6 +23,7 @@ #include "optimizer/appendinfo.h" #include "optimizer/clauses.h" #include "optimizer/inherit.h" +#include "optimizer/optimizer.h" #include "optimizer/orclauses.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 5db88afd893..b2239728cf9 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -43,6 +43,7 @@ #include "optimizer/clauses.h" #include "optimizer/cost.h" #include "optimizer/inherit.h" +#include "optimizer/optimizer.h" #include "optimizer/paramassign.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" @@ -52,7 +53,6 @@ #include "optimizer/prep.h" #include "optimizer/subselect.h" #include "optimizer/tlist.h" -#include "optimizer/var.h" #include "parser/analyze.h" #include "parser/parsetree.h" #include "parser/parse_agg.h" diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 6bd3b2d1ac1..0213a376705 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -19,6 +19,7 @@ #include "catalog/pg_type.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/planmain.h" #include "optimizer/planner.h" diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c index 60403eef913..915c6d0cf6e 100644 --- a/src/backend/optimizer/plan/subselect.c +++ b/src/backend/optimizer/plan/subselect.c @@ -25,13 +25,13 @@ #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" #include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "optimizer/paramassign.h" #include "optimizer/pathnode.h" #include "optimizer/planmain.h" #include "optimizer/planner.h" #include "optimizer/prep.h" #include "optimizer/subselect.h" -#include "optimizer/var.h" #include "parser/parse_relation.h" #include "rewrite/rewriteManip.h" #include "utils/builtins.h" diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index 1f64004cf61..9e001c1bdcb 100644 --- a/src/backend/optimizer/prep/prepjointree.c +++ b/src/backend/optimizer/prep/prepjointree.c @@ -29,11 +29,11 @@ #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" +#include "optimizer/optimizer.h" #include "optimizer/placeholder.h" #include "optimizer/prep.h" #include "optimizer/subselect.h" #include "optimizer/tlist.h" -#include "optimizer/var.h" #include "parser/parse_relation.h" #include "parser/parsetree.h" #include "rewrite/rewriteManip.h" diff --git a/src/backend/optimizer/prep/prepqual.c b/src/backend/optimizer/prep/prepqual.c index 2bd6c200cfa..e9a94976b73 100644 --- a/src/backend/optimizer/prep/prepqual.c +++ b/src/backend/optimizer/prep/prepqual.c @@ -33,7 +33,7 @@ #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" +#include "optimizer/optimizer.h" #include "optimizer/prep.h" #include "utils/lsyscache.h" diff --git a/src/backend/optimizer/prep/preptlist.c b/src/backend/optimizer/prep/preptlist.c index 0e045f171af..5392d1a561e 100644 --- a/src/backend/optimizer/prep/preptlist.c +++ b/src/backend/optimizer/prep/preptlist.c @@ -44,9 +44,9 @@ #include "access/table.h" #include "catalog/pg_type.h" #include "nodes/makefuncs.h" +#include "optimizer/optimizer.h" #include "optimizer/prep.h" #include "optimizer/tlist.h" -#include "optimizer/var.h" #include "parser/parsetree.h" #include "parser/parse_coerce.h" #include "rewrite/rewriteHandler.h" diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 99616063f45..86c346bc389 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -34,9 +34,9 @@ #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" #include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "optimizer/planmain.h" #include "optimizer/prep.h" -#include "optimizer/var.h" #include "parser/analyze.h" #include "parser/parse_agg.h" #include "parser/parse_coerce.h" diff --git a/src/backend/optimizer/util/orclauses.c b/src/backend/optimizer/util/orclauses.c index c62ba88d1b2..b67158154e9 100644 --- a/src/backend/optimizer/util/orclauses.c +++ b/src/backend/optimizer/util/orclauses.c @@ -19,6 +19,7 @@ #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" #include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "optimizer/orclauses.h" #include "optimizer/restrictinfo.h" diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index 0402ffe9a74..b57de6b4c67 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -23,13 +23,13 @@ #include "optimizer/appendinfo.h" #include "optimizer/clauses.h" #include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" #include "optimizer/planmain.h" #include "optimizer/prep.h" #include "optimizer/restrictinfo.h" #include "optimizer/tlist.h" -#include "optimizer/var.h" #include "parser/parsetree.h" #include "utils/lsyscache.h" #include "utils/memutils.h" diff --git a/src/backend/optimizer/util/placeholder.c b/src/backend/optimizer/util/placeholder.c index b24478ec6f2..798aa8c5978 100644 --- a/src/backend/optimizer/util/placeholder.c +++ b/src/backend/optimizer/util/placeholder.c @@ -17,10 +17,10 @@ #include "nodes/nodeFuncs.h" #include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/placeholder.h" #include "optimizer/planmain.h" -#include "optimizer/var.h" #include "utils/lsyscache.h" /* Local functions */ diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c index 243344a0110..3efa1bdc1a4 100644 --- a/src/backend/optimizer/util/plancat.c +++ b/src/backend/optimizer/util/plancat.c @@ -35,8 +35,8 @@ #include "nodes/makefuncs.h" #include "optimizer/clauses.h" #include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "optimizer/plancat.h" -#include "optimizer/predtest.h" #include "optimizer/prep.h" #include "partitioning/partbounds.h" #include "parser/parse_relation.h" diff --git a/src/backend/optimizer/util/predtest.c b/src/backend/optimizer/util/predtest.c index ecbb0db18c3..3b260b1e3c4 100644 --- a/src/backend/optimizer/util/predtest.c +++ b/src/backend/optimizer/util/predtest.c @@ -21,8 +21,8 @@ #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" -#include "optimizer/predtest.h" +#include "nodes/relation.h" +#include "optimizer/optimizer.h" #include "utils/array.h" #include "utils/inval.h" #include "utils/lsyscache.h" diff --git a/src/backend/optimizer/util/restrictinfo.c b/src/backend/optimizer/util/restrictinfo.c index c1bda812c70..1c47c708028 100644 --- a/src/backend/optimizer/util/restrictinfo.c +++ b/src/backend/optimizer/util/restrictinfo.c @@ -17,8 +17,8 @@ #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" +#include "optimizer/optimizer.h" #include "optimizer/restrictinfo.h" -#include "optimizer/var.h" static RestrictInfo *make_restrictinfo_internal(Expr *clause, diff --git a/src/backend/optimizer/util/tlist.c b/src/backend/optimizer/util/tlist.c index d0cc14f11d7..14d1c67a940 100644 --- a/src/backend/optimizer/util/tlist.c +++ b/src/backend/optimizer/util/tlist.c @@ -17,6 +17,7 @@ #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "optimizer/tlist.h" diff --git a/src/backend/optimizer/util/var.c b/src/backend/optimizer/util/var.c index 5116d7f3490..315c81eb8e6 100644 --- a/src/backend/optimizer/util/var.c +++ b/src/backend/optimizer/util/var.c @@ -22,8 +22,8 @@ #include "access/sysattr.h" #include "nodes/nodeFuncs.h" +#include "optimizer/optimizer.h" #include "optimizer/prep.h" -#include "optimizer/var.h" #include "parser/parsetree.h" #include "rewrite/rewriteManip.h" diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 1ef7c8608ad..125ee5d84b2 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -29,7 +29,7 @@ #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/var.h" +#include "optimizer/optimizer.h" #include "parser/analyze.h" #include "parser/parse_agg.h" #include "parser/parse_clause.h" diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c index 5b73378a19c..183ea0f2c4a 100644 --- a/src/backend/parser/parse_agg.c +++ b/src/backend/parser/parse_agg.c @@ -19,8 +19,7 @@ #include "catalog/pg_type.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/tlist.h" -#include "optimizer/var.h" +#include "optimizer/optimizer.h" #include "parser/parse_agg.h" #include "parser/parse_clause.h" #include "parser/parse_coerce.h" diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index 8805543da74..c6ce1011e2d 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -31,8 +31,7 @@ #include "commands/defrem.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/tlist.h" -#include "optimizer/var.h" +#include "optimizer/optimizer.h" #include "parser/analyze.h" #include "parser/parsetree.h" #include "parser/parser.h" diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index 3e0a762c41e..7fc8d63ff0e 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -20,8 +20,7 @@ #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/tlist.h" -#include "optimizer/var.h" +#include "optimizer/optimizer.h" #include "parser/analyze.h" #include "parser/parse_clause.h" #include "parser/parse_coerce.h" diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 445e81a1afb..a37d1f18bea 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -50,9 +50,7 @@ #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" -#include "optimizer/planner.h" -#include "optimizer/var.h" +#include "optimizer/optimizer.h" #include "parser/analyze.h" #include "parser/parse_clause.h" #include "parser/parse_coerce.h" diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index f21c9b32a60..d478ae7e19b 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -22,7 +22,6 @@ #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" #include "parser/parse_coerce.h" #include "partitioning/partprune.h" #include "partitioning/partbounds.h" diff --git a/src/backend/partitioning/partprune.c b/src/backend/partitioning/partprune.c index f5155fe062e..8c9721935d7 100644 --- a/src/backend/partitioning/partprune.c +++ b/src/backend/partitioning/partprune.c @@ -45,12 +45,8 @@ #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "optimizer/appendinfo.h" -#include "optimizer/clauses.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" -#include "optimizer/planner.h" -#include "optimizer/predtest.h" -#include "optimizer/prep.h" -#include "optimizer/var.h" #include "partitioning/partprune.h" #include "partitioning/partbounds.h" #include "rewrite/rewriteManip.h" diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 2c49c711e36..f9516515bc4 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -23,61 +23,46 @@ #include "postgres.h" -#include "miscadmin.h" -#include "pgstat.h" -#include "funcapi.h" - #include "access/table.h" #include "access/xact.h" #include "access/xlog_internal.h" - #include "catalog/catalog.h" #include "catalog/namespace.h" #include "catalog/pg_subscription.h" #include "catalog/pg_subscription_rel.h" - #include "commands/tablecmds.h" #include "commands/trigger.h" - #include "executor/executor.h" #include "executor/nodeModifyTable.h" - +#include "funcapi.h" #include "libpq/pqformat.h" #include "libpq/pqsignal.h" - #include "mb/pg_wchar.h" - +#include "miscadmin.h" #include "nodes/makefuncs.h" - -#include "optimizer/planner.h" - +#include "optimizer/optimizer.h" #include "parser/parse_relation.h" - +#include "pgstat.h" #include "postmaster/bgworker.h" #include "postmaster/postmaster.h" #include "postmaster/walwriter.h" - #include "replication/decode.h" #include "replication/logical.h" #include "replication/logicalproto.h" #include "replication/logicalrelation.h" #include "replication/logicalworker.h" -#include "replication/reorderbuffer.h" #include "replication/origin.h" +#include "replication/reorderbuffer.h" #include "replication/snapbuild.h" #include "replication/walreceiver.h" #include "replication/worker_internal.h" - #include "rewrite/rewriteHandler.h" - #include "storage/bufmgr.h" #include "storage/ipc.h" #include "storage/lmgr.h" #include "storage/proc.h" #include "storage/procarray.h" - #include "tcop/tcopprot.h" - #include "utils/builtins.h" #include "utils/catcache.h" #include "utils/datum.h" @@ -87,8 +72,8 @@ #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/rel.h" -#include "utils/timeout.h" #include "utils/syscache.h" +#include "utils/timeout.h" #define NAPTIME_PER_CYCLE 1000 /* max sleep time between cycles (1s) */ diff --git a/src/backend/rewrite/rewriteManip.c b/src/backend/rewrite/rewriteManip.c index fd7a751c9a8..57aee3d760c 100644 --- a/src/backend/rewrite/rewriteManip.c +++ b/src/backend/rewrite/rewriteManip.c @@ -17,7 +17,7 @@ #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "nodes/plannodes.h" -#include "optimizer/clauses.h" +#include "nodes/relation.h" #include "parser/parse_coerce.h" #include "parser/parse_relation.h" #include "parser/parsetree.h" diff --git a/src/backend/statistics/dependencies.c b/src/backend/statistics/dependencies.c index a8e9f722140..13492ceb9ce 100644 --- a/src/backend/statistics/dependencies.c +++ b/src/backend/statistics/dependencies.c @@ -20,8 +20,7 @@ #include "lib/stringinfo.h" #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" -#include "optimizer/cost.h" -#include "optimizer/var.h" +#include "optimizer/optimizer.h" #include "nodes/nodes.h" #include "nodes/relation.h" #include "statistics/extended_stats_internal.h" diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index e773f20d9fe..36cfd507b2e 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -49,7 +49,7 @@ #include "libpq/pqsignal.h" #include "miscadmin.h" #include "nodes/print.h" -#include "optimizer/planner.h" +#include "optimizer/optimizer.h" #include "pgstat.h" #include "pg_trace.h" #include "parser/analyze.h" diff --git a/src/backend/utils/adt/array_selfuncs.c b/src/backend/utils/adt/array_selfuncs.c index ad1201a8d20..870131b0738 100644 --- a/src/backend/utils/adt/array_selfuncs.c +++ b/src/backend/utils/adt/array_selfuncs.c @@ -20,7 +20,6 @@ #include "catalog/pg_collation.h" #include "catalog/pg_operator.h" #include "catalog/pg_statistic.h" -#include "optimizer/clauses.h" #include "utils/array.h" #include "utils/builtins.h" #include "utils/lsyscache.h" diff --git a/src/backend/utils/adt/orderedsetaggs.c b/src/backend/utils/adt/orderedsetaggs.c index 6075bc3db7e..2d384a99447 100644 --- a/src/backend/utils/adt/orderedsetaggs.c +++ b/src/backend/utils/adt/orderedsetaggs.c @@ -22,7 +22,7 @@ #include "executor/executor.h" #include "miscadmin.h" #include "nodes/nodeFuncs.h" -#include "optimizer/tlist.h" +#include "optimizer/optimizer.h" #include "utils/array.h" #include "utils/builtins.h" #include "utils/lsyscache.h" diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 06315677390..51e4c275ab0 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -49,7 +49,7 @@ #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/tlist.h" +#include "optimizer/optimizer.h" #include "parser/parse_node.h" #include "parser/parse_agg.h" #include "parser/parse_func.h" diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 4af8c80848d..fb005046766 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -121,12 +121,11 @@ #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" #include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" #include "optimizer/plancat.h" -#include "optimizer/predtest.h" #include "optimizer/restrictinfo.h" -#include "optimizer/var.h" #include "parser/parse_clause.h" #include "parser/parse_coerce.h" #include "parser/parsetree.h" diff --git a/src/backend/utils/cache/partcache.c b/src/backend/utils/cache/partcache.c index 2404073bc86..1b50f283c55 100644 --- a/src/backend/utils/cache/partcache.c +++ b/src/backend/utils/cache/partcache.c @@ -25,8 +25,7 @@ #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" -#include "optimizer/planner.h" +#include "optimizer/optimizer.h" #include "partitioning/partbounds.h" #include "utils/builtins.h" #include "utils/datum.h" diff --git a/src/backend/utils/cache/plancache.c b/src/backend/utils/cache/plancache.c index 3f46b5dfb23..9851bd43d5c 100644 --- a/src/backend/utils/cache/plancache.c +++ b/src/backend/utils/cache/plancache.c @@ -61,10 +61,7 @@ #include "executor/executor.h" #include "miscadmin.h" #include "nodes/nodeFuncs.h" -#include "optimizer/cost.h" -#include "optimizer/planmain.h" -#include "optimizer/planner.h" -#include "optimizer/prep.h" +#include "optimizer/optimizer.h" #include "parser/analyze.h" #include "parser/parsetree.h" #include "storage/lmgr.h" diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 12bba1b63a0..af96a033385 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -71,9 +71,7 @@ #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" -#include "optimizer/prep.h" -#include "optimizer/var.h" +#include "optimizer/optimizer.h" #include "partitioning/partbounds.h" #include "rewrite/rewriteDefine.h" #include "rewrite/rowsecurity.h" diff --git a/src/backend/utils/cache/spccache.c b/src/backend/utils/cache/spccache.c index 1d0c16bf481..6309a017c18 100644 --- a/src/backend/utils/cache/spccache.c +++ b/src/backend/utils/cache/spccache.c @@ -22,7 +22,7 @@ #include "catalog/pg_tablespace.h" #include "commands/tablespace.h" #include "miscadmin.h" -#include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "storage/bufmgr.h" #include "utils/catcache.h" #include "utils/hsearch.h" diff --git a/src/backend/utils/cache/typcache.c b/src/backend/utils/cache/typcache.c index 2fb7dd3b8e3..7857424c2c1 100644 --- a/src/backend/utils/cache/typcache.c +++ b/src/backend/utils/cache/typcache.c @@ -59,7 +59,7 @@ #include "commands/defrem.h" #include "executor/executor.h" #include "lib/dshash.h" -#include "optimizer/planner.h" +#include "optimizer/optimizer.h" #include "storage/lwlock.h" #include "utils/builtins.h" #include "utils/catcache.h" diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index c216ed0922a..98d75be2929 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -50,6 +50,7 @@ #include "miscadmin.h" #include "optimizer/cost.h" #include "optimizer/geqo.h" +#include "optimizer/optimizer.h" #include "optimizer/paths.h" #include "optimizer/planmain.h" #include "parser/parse_expr.h" diff --git a/src/include/nodes/relation.h b/src/include/nodes/relation.h index 420ca05c30a..7917b889aeb 100644 --- a/src/include/nodes/relation.h +++ b/src/include/nodes/relation.h @@ -159,11 +159,17 @@ typedef struct PlannerGlobal * It holds links to all of the planner's working state, in addition to the * original Query. Note that at present the planner extensively modifies * the passed-in Query data structure; someday that should stop. + * + * For reasons explained in optimizer/optimizer.h, we define the typedef + * either here or in that header, whichever is read first. *---------- */ -struct AppendRelInfo; +#ifndef HAVE_PLANNERINFO_TYPEDEF +typedef struct PlannerInfo PlannerInfo; +#define HAVE_PLANNERINFO_TYPEDEF 1 +#endif -typedef struct PlannerInfo +struct PlannerInfo { NodeTag type; @@ -173,7 +179,7 @@ typedef struct PlannerInfo Index query_level; /* 1 at the outermost Query */ - struct PlannerInfo *parent_root; /* NULL at outermost Query */ + PlannerInfo *parent_root; /* NULL at outermost Query */ /* * plan_params contains the expressions that this query level needs to @@ -342,7 +348,7 @@ typedef struct PlannerInfo /* Does this query modify any partition key columns? */ bool partColsUpdated; -} PlannerInfo; +}; /* @@ -2065,8 +2071,12 @@ typedef struct PlaceHolderVar * plain innerjoin semantics. Note that lhs_strict, delay_upper_joins, and * of course the semi_xxx fields are not set meaningfully within such structs. */ +#ifndef HAVE_SPECIALJOININFO_TYPEDEF +typedef struct SpecialJoinInfo SpecialJoinInfo; +#define HAVE_SPECIALJOININFO_TYPEDEF 1 +#endif -typedef struct SpecialJoinInfo +struct SpecialJoinInfo { NodeTag type; Relids min_lefthand; /* base relids in minimum LHS for join */ @@ -2081,7 +2091,7 @@ typedef struct SpecialJoinInfo bool semi_can_hash; /* true if semi_operators are all hash */ List *semi_operators; /* OIDs of equality join operators */ List *semi_rhs_exprs; /* righthand-side expressions of these ops */ -} SpecialJoinInfo; +}; /* * Append-relation info. diff --git a/src/include/optimizer/clauses.h b/src/include/optimizer/clauses.h index 3f5342886da..cfedd424ced 100644 --- a/src/include/optimizer/clauses.h +++ b/src/include/optimizer/clauses.h @@ -35,9 +35,6 @@ extern double expression_returns_set_rows(Node *clause); extern bool contain_subplans(Node *clause); -extern bool contain_mutable_functions(Node *clause); -extern bool contain_volatile_functions(Node *clause); -extern bool contain_volatile_functions_not_nextval(Node *clause); extern char max_parallel_hazard(Query *parse); extern bool is_parallel_safe(PlannerInfo *root, Node *node); extern bool contain_nonstrict_functions(Node *clause); @@ -56,17 +53,7 @@ extern int NumRelids(Node *clause); extern void CommuteOpExpr(OpExpr *clause); extern void CommuteRowCompareExpr(RowCompareExpr *clause); -extern Node *eval_const_expressions(PlannerInfo *root, Node *node); - -extern Node *estimate_expression_value(PlannerInfo *root, Node *node); - -extern Expr *evaluate_expr(Expr *expr, Oid result_type, int32 result_typmod, - Oid result_collation); - extern Query *inline_set_returning_function(PlannerInfo *root, RangeTblEntry *rte); -extern List *expand_function_arguments(List *args, Oid result_type, - HeapTuple func_tuple); - #endif /* CLAUSES_H */ diff --git a/src/include/optimizer/cost.h b/src/include/optimizer/cost.h index 623f733d7df..48efbe58f7f 100644 --- a/src/include/optimizer/cost.h +++ b/src/include/optimizer/cost.h @@ -44,15 +44,7 @@ typedef enum * routines to compute costs and sizes */ -/* parameter variables and flags */ -extern PGDLLIMPORT double seq_page_cost; -extern PGDLLIMPORT double random_page_cost; -extern PGDLLIMPORT double cpu_tuple_cost; -extern PGDLLIMPORT double cpu_index_tuple_cost; -extern PGDLLIMPORT double cpu_operator_cost; -extern PGDLLIMPORT double parallel_tuple_cost; -extern PGDLLIMPORT double parallel_setup_cost; -extern PGDLLIMPORT int effective_cache_size; +/* parameter variables and flags (see also optimizer.h) */ extern PGDLLIMPORT Cost disable_cost; extern PGDLLIMPORT int max_parallel_workers_per_gather; extern PGDLLIMPORT bool enable_seqscan; @@ -74,7 +66,6 @@ extern PGDLLIMPORT bool enable_parallel_hash; extern PGDLLIMPORT bool enable_partition_pruning; extern PGDLLIMPORT int constraint_exclusion; -extern double clamp_row_est(double nrows); extern double index_pages_fetched(double tuples_fetched, BlockNumber pages, double index_pages, PlannerInfo *root); extern void cost_seqscan(Path *path, PlannerInfo *root, RelOptInfo *baserel, @@ -165,6 +156,10 @@ extern void final_cost_hashjoin(PlannerInfo *root, HashPath *path, JoinPathExtraData *extra); extern void cost_gather(GatherPath *path, PlannerInfo *root, RelOptInfo *baserel, ParamPathInfo *param_info, double *rows); +extern void cost_gather_merge(GatherMergePath *path, PlannerInfo *root, + RelOptInfo *rel, ParamPathInfo *param_info, + Cost input_startup_cost, Cost input_total_cost, + double *rows); extern void cost_subplan(PlannerInfo *root, SubPlan *subplan, Plan *plan); extern void cost_qual_eval(QualCost *cost, List *quals, PlannerInfo *root); extern void cost_qual_eval_node(QualCost *cost, Node *qual, PlannerInfo *root); @@ -204,23 +199,4 @@ extern PathTarget *set_pathtarget_cost_width(PlannerInfo *root, PathTarget *targ extern double compute_bitmap_pages(PlannerInfo *root, RelOptInfo *baserel, Path *bitmapqual, int loop_count, Cost *cost, double *tuple); -/* - * prototypes for clausesel.c - * routines to compute clause selectivities - */ -extern Selectivity clauselist_selectivity(PlannerInfo *root, - List *clauses, - int varRelid, - JoinType jointype, - SpecialJoinInfo *sjinfo); -extern Selectivity clause_selectivity(PlannerInfo *root, - Node *clause, - int varRelid, - JoinType jointype, - SpecialJoinInfo *sjinfo); -extern void cost_gather_merge(GatherMergePath *path, PlannerInfo *root, - RelOptInfo *rel, ParamPathInfo *param_info, - Cost input_startup_cost, Cost input_total_cost, - double *rows); - #endif /* COST_H */ diff --git a/src/include/optimizer/optimizer.h b/src/include/optimizer/optimizer.h new file mode 100644 index 00000000000..1cd5c80e768 --- /dev/null +++ b/src/include/optimizer/optimizer.h @@ -0,0 +1,175 @@ +/*------------------------------------------------------------------------- + * + * optimizer.h + * External API for the Postgres planner. + * + * This header is meant to define everything that the core planner + * exposes for use by non-planner modules. + * + * Note that there are files outside src/backend/optimizer/ that are + * considered planner modules, because they're too much in bed with + * planner operations to be treated otherwise. FDW planning code is an + * example. For the most part, however, code outside the core planner + * should not need to include any optimizer/ header except this one. + * + * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/optimizer/optimizer.h + * + *------------------------------------------------------------------------- + */ +#ifndef OPTIMIZER_H +#define OPTIMIZER_H + +#include "nodes/parsenodes.h" + +/* + * We don't want to include nodes/relation.h here, because non-planner + * code should generally treat PlannerInfo as an opaque typedef. + * But we'd like such code to use that typedef name, so define the + * typedef either here or in relation.h, whichever is read first. + */ +#ifndef HAVE_PLANNERINFO_TYPEDEF +typedef struct PlannerInfo PlannerInfo; +#define HAVE_PLANNERINFO_TYPEDEF 1 +#endif + +/* Likewise for SpecialJoinInfo. */ +#ifndef HAVE_SPECIALJOININFO_TYPEDEF +typedef struct SpecialJoinInfo SpecialJoinInfo; +#define HAVE_SPECIALJOININFO_TYPEDEF 1 +#endif + +/* It also seems best not to include plannodes.h, params.h, or htup.h here */ +struct PlannedStmt; +struct ParamListInfoData; +struct HeapTupleData; + + +/* in path/clausesel.c: */ + +extern Selectivity clause_selectivity(PlannerInfo *root, + Node *clause, + int varRelid, + JoinType jointype, + SpecialJoinInfo *sjinfo); +extern Selectivity clauselist_selectivity(PlannerInfo *root, + List *clauses, + int varRelid, + JoinType jointype, + SpecialJoinInfo *sjinfo); + +/* in path/costsize.c: */ + +/* widely used cost parameters */ +extern PGDLLIMPORT double seq_page_cost; +extern PGDLLIMPORT double random_page_cost; +extern PGDLLIMPORT double cpu_tuple_cost; +extern PGDLLIMPORT double cpu_index_tuple_cost; +extern PGDLLIMPORT double cpu_operator_cost; +extern PGDLLIMPORT double parallel_tuple_cost; +extern PGDLLIMPORT double parallel_setup_cost; +extern PGDLLIMPORT int effective_cache_size; + +extern double clamp_row_est(double nrows); + +/* in plan/planner.c: */ + +/* possible values for force_parallel_mode */ +typedef enum +{ + FORCE_PARALLEL_OFF, + FORCE_PARALLEL_ON, + FORCE_PARALLEL_REGRESS +} ForceParallelMode; + +/* GUC parameters */ +extern int force_parallel_mode; +extern bool parallel_leader_participation; + +extern struct PlannedStmt *planner(Query *parse, int cursorOptions, + struct ParamListInfoData *boundParams); + +extern Expr *expression_planner(Expr *expr); +extern Expr *expression_planner_with_deps(Expr *expr, + List **relationOids, + List **invalItems); + +extern bool plan_cluster_use_sort(Oid tableOid, Oid indexOid); +extern int plan_create_index_workers(Oid tableOid, Oid indexOid); + +/* in plan/setrefs.c: */ + +extern void extract_query_dependencies(Node *query, + List **relationOids, + List **invalItems, + bool *hasRowSecurity); + +/* in prep/prepqual.c: */ + +extern Node *negate_clause(Node *node); +extern Expr *canonicalize_qual(Expr *qual, bool is_check); + +/* in util/clauses.c: */ + +extern bool contain_mutable_functions(Node *clause); +extern bool contain_volatile_functions(Node *clause); +extern bool contain_volatile_functions_not_nextval(Node *clause); + +extern Node *eval_const_expressions(PlannerInfo *root, Node *node); + +extern Node *estimate_expression_value(PlannerInfo *root, Node *node); + +extern Expr *evaluate_expr(Expr *expr, Oid result_type, int32 result_typmod, + Oid result_collation); + +extern List *expand_function_arguments(List *args, Oid result_type, + struct HeapTupleData *func_tuple); + +/* in util/predtest.c: */ + +extern bool predicate_implied_by(List *predicate_list, List *clause_list, + bool weak); +extern bool predicate_refuted_by(List *predicate_list, List *clause_list, + bool weak); + +/* in util/tlist.c: */ + +extern int count_nonjunk_tlist_entries(List *tlist); +extern TargetEntry *get_sortgroupref_tle(Index sortref, + List *targetList); +extern TargetEntry *get_sortgroupclause_tle(SortGroupClause *sgClause, + List *targetList); +extern Node *get_sortgroupclause_expr(SortGroupClause *sgClause, + List *targetList); +extern List *get_sortgrouplist_exprs(List *sgClauses, + List *targetList); +extern SortGroupClause *get_sortgroupref_clause(Index sortref, + List *clauses); +extern SortGroupClause *get_sortgroupref_clause_noerr(Index sortref, + List *clauses); + +/* in util/var.c: */ + +/* Bits that can be OR'd into the flags argument of pull_var_clause() */ +#define PVC_INCLUDE_AGGREGATES 0x0001 /* include Aggrefs in output list */ +#define PVC_RECURSE_AGGREGATES 0x0002 /* recurse into Aggref arguments */ +#define PVC_INCLUDE_WINDOWFUNCS 0x0004 /* include WindowFuncs in output list */ +#define PVC_RECURSE_WINDOWFUNCS 0x0008 /* recurse into WindowFunc arguments */ +#define PVC_INCLUDE_PLACEHOLDERS 0x0010 /* include PlaceHolderVars in + * output list */ +#define PVC_RECURSE_PLACEHOLDERS 0x0020 /* recurse into PlaceHolderVar + * arguments */ + +extern Bitmapset *pull_varnos(Node *node); +extern Bitmapset *pull_varnos_of_level(Node *node, int levelsup); +extern void pull_varattnos(Node *node, Index varno, Bitmapset **varattnos); +extern List *pull_vars_of_level(Node *node, int levelsup); +extern bool contain_var_clause(Node *node); +extern bool contain_vars_of_level(Node *node, int levelsup); +extern int locate_var_of_level(Node *node, int levelsup); +extern List *pull_var_clause(Node *node, int flags); +extern Node *flatten_join_alias_vars(Query *query, Node *node); + +#endif /* OPTIMIZER_H */ diff --git a/src/include/optimizer/planmain.h b/src/include/optimizer/planmain.h index bec0c386172..b2e1c077320 100644 --- a/src/include/optimizer/planmain.h +++ b/src/include/optimizer/planmain.h @@ -17,19 +17,9 @@ #include "nodes/plannodes.h" #include "nodes/relation.h" -/* possible values for force_parallel_mode */ -typedef enum -{ - FORCE_PARALLEL_OFF, - FORCE_PARALLEL_ON, - FORCE_PARALLEL_REGRESS -} ForceParallelMode; - /* GUC parameters */ #define DEFAULT_CURSOR_TUPLE_FRACTION 0.1 extern double cursor_tuple_fraction; -extern int force_parallel_mode; -extern bool parallel_leader_participation; /* query_planner callback to compute query_pathkeys */ typedef void (*query_pathkeys_callback) (PlannerInfo *root, void *extra); @@ -119,10 +109,6 @@ extern bool innerrel_is_unique(PlannerInfo *root, extern Plan *set_plan_references(PlannerInfo *root, Plan *plan); extern void record_plan_function_dependency(PlannerInfo *root, Oid funcid); extern void record_plan_type_dependency(PlannerInfo *root, Oid typid); -extern void extract_query_dependencies(Node *query, - List **relationOids, - List **invalItems, - bool *hasRowSecurity); extern bool extract_query_dependencies_walker(Node *node, PlannerInfo *root); #endif /* PLANMAIN_H */ diff --git a/src/include/optimizer/planner.h b/src/include/optimizer/planner.h index 8616681e0a2..769a2f8e011 100644 --- a/src/include/optimizer/planner.h +++ b/src/include/optimizer/planner.h @@ -3,6 +3,10 @@ * planner.h * prototypes for planner.c. * + * Note that the primary entry points for planner.c are declared in + * optimizer/optimizer.h, because they're intended to be called from + * non-planner code. Declarations here are meant for use by other + * planner modules. * * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California @@ -33,8 +37,6 @@ typedef void (*create_upper_paths_hook_type) (PlannerInfo *root, extern PGDLLIMPORT create_upper_paths_hook_type create_upper_paths_hook; -extern PlannedStmt *planner(Query *parse, int cursorOptions, - ParamListInfo boundParams); extern PlannedStmt *standard_planner(Query *parse, int cursorOptions, ParamListInfo boundParams); @@ -54,14 +56,6 @@ extern void mark_partial_aggref(Aggref *agg, AggSplit aggsplit); extern Path *get_cheapest_fractional_path(RelOptInfo *rel, double tuple_fraction); -extern Expr *expression_planner(Expr *expr); -extern Expr *expression_planner_with_deps(Expr *expr, - List **relationOids, - List **invalItems); - extern Expr *preprocess_phv_expression(PlannerInfo *root, Expr *expr); -extern bool plan_cluster_use_sort(Oid tableOid, Oid indexOid); -extern int plan_create_index_workers(Oid tableOid, Oid indexOid); - #endif /* PLANNER_H */ diff --git a/src/include/optimizer/predtest.h b/src/include/optimizer/predtest.h deleted file mode 100644 index d5abe792762..00000000000 --- a/src/include/optimizer/predtest.h +++ /dev/null @@ -1,25 +0,0 @@ -/*------------------------------------------------------------------------- - * - * predtest.h - * prototypes for predtest.c - * - * - * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * src/include/optimizer/predtest.h - * - *------------------------------------------------------------------------- - */ -#ifndef PREDTEST_H -#define PREDTEST_H - -#include "nodes/primnodes.h" - - -extern bool predicate_implied_by(List *predicate_list, List *clause_list, - bool weak); -extern bool predicate_refuted_by(List *predicate_list, List *clause_list, - bool weak); - -#endif /* PREDTEST_H */ diff --git a/src/include/optimizer/prep.h b/src/include/optimizer/prep.h index 17c44c46b9d..5277e990ed9 100644 --- a/src/include/optimizer/prep.h +++ b/src/include/optimizer/prep.h @@ -32,12 +32,6 @@ extern Relids get_relids_in_jointree(Node *jtnode, bool include_joins); extern Relids get_relids_for_join(Query *query, int joinrelid); /* - * prototypes for prepqual.c - */ -extern Node *negate_clause(Node *node); -extern Expr *canonicalize_qual(Expr *qual, bool is_check); - -/* * prototypes for preptlist.c */ extern List *preprocess_targetlist(PlannerInfo *root); diff --git a/src/include/optimizer/tlist.h b/src/include/optimizer/tlist.h index 8b967f95835..13ac7b88b46 100644 --- a/src/include/optimizer/tlist.h +++ b/src/include/optimizer/tlist.h @@ -24,8 +24,6 @@ extern List *add_to_flat_tlist(List *tlist, List *exprs); extern List *get_tlist_exprs(List *tlist, bool includeJunk); -extern int count_nonjunk_tlist_entries(List *tlist); - extern bool tlist_same_exprs(List *tlist1, List *tlist2); extern bool tlist_same_datatypes(List *tlist, List *colTypes, bool junkOK); @@ -33,20 +31,6 @@ extern bool tlist_same_collations(List *tlist, List *colCollations, bool junkOK) extern void apply_tlist_labeling(List *dest_tlist, List *src_tlist); -extern TargetEntry *get_sortgroupref_tle(Index sortref, - List *targetList); -extern TargetEntry *get_sortgroupclause_tle(SortGroupClause *sgClause, - List *targetList); -extern Node *get_sortgroupclause_expr(SortGroupClause *sgClause, - List *targetList); -extern List *get_sortgrouplist_exprs(List *sgClauses, - List *targetList); - -extern SortGroupClause *get_sortgroupref_clause(Index sortref, - List *clauses); -extern SortGroupClause *get_sortgroupref_clause_noerr(Index sortref, - List *clauses); - extern Oid *extract_grouping_ops(List *groupClause); extern AttrNumber *extract_grouping_cols(List *groupClause, List *tlist); extern bool grouping_is_sortable(List *groupClause); diff --git a/src/include/optimizer/var.h b/src/include/optimizer/var.h deleted file mode 100644 index f975074bf0b..00000000000 --- a/src/include/optimizer/var.h +++ /dev/null @@ -1,40 +0,0 @@ -/*------------------------------------------------------------------------- - * - * var.h - * prototypes for optimizer/util/var.c. - * - * - * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * src/include/optimizer/var.h - * - *------------------------------------------------------------------------- - */ -#ifndef VAR_H -#define VAR_H - -#include "nodes/relation.h" - -/* Bits that can be OR'd into the flags argument of pull_var_clause() */ -#define PVC_INCLUDE_AGGREGATES 0x0001 /* include Aggrefs in output list */ -#define PVC_RECURSE_AGGREGATES 0x0002 /* recurse into Aggref arguments */ -#define PVC_INCLUDE_WINDOWFUNCS 0x0004 /* include WindowFuncs in output list */ -#define PVC_RECURSE_WINDOWFUNCS 0x0008 /* recurse into WindowFunc arguments */ -#define PVC_INCLUDE_PLACEHOLDERS 0x0010 /* include PlaceHolderVars in - * output list */ -#define PVC_RECURSE_PLACEHOLDERS 0x0020 /* recurse into PlaceHolderVar - * arguments */ - - -extern Relids pull_varnos(Node *node); -extern Relids pull_varnos_of_level(Node *node, int levelsup); -extern void pull_varattnos(Node *node, Index varno, Bitmapset **varattnos); -extern List *pull_vars_of_level(Node *node, int levelsup); -extern bool contain_var_clause(Node *node); -extern bool contain_vars_of_level(Node *node, int levelsup); -extern int locate_var_of_level(Node *node, int levelsup); -extern List *pull_var_clause(Node *node, int flags); -extern Node *flatten_join_alias_vars(Query *query, Node *node); - -#endif /* VAR_H */ diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index 45f10f901b7..85aa61371d6 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -30,8 +30,7 @@ #include "funcapi.h" #include "miscadmin.h" #include "nodes/nodeFuncs.h" -#include "optimizer/clauses.h" -#include "optimizer/planner.h" +#include "optimizer/optimizer.h" #include "parser/parse_coerce.h" #include "parser/scansup.h" #include "storage/proc.h" diff --git a/src/test/modules/test_predtest/test_predtest.c b/src/test/modules/test_predtest/test_predtest.c index c03748cb3c3..10cd4f9ae5a 100644 --- a/src/test/modules/test_predtest/test_predtest.c +++ b/src/test/modules/test_predtest/test_predtest.c @@ -18,8 +18,7 @@ #include "executor/spi.h" #include "funcapi.h" #include "nodes/makefuncs.h" -#include "optimizer/clauses.h" -#include "optimizer/predtest.h" +#include "optimizer/optimizer.h" #include "utils/builtins.h" PG_MODULE_MAGIC; |