From: Tom Lane Date: Tue, 29 Jan 2019 20:48:51 +0000 (-0500) Subject: Refactor planner's header files. X-Git-Tag: REL_12_BETA1~838 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f09346a9c6218dd239fdf3a79a729716c0d305bd;hp=a1b8c41e990ec0f083e9b684700a07640d5a356a;p=postgresql 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 --- diff --git a/contrib/bloom/blcost.c b/contrib/bloom/blcost.c index 902d23ec4a..2d8a7f1d26 100644 --- a/contrib/bloom/blcost.c +++ b/contrib/bloom/blcost.c @@ -13,7 +13,6 @@ #include "postgres.h" #include "fmgr.h" -#include "optimizer/cost.h" #include "utils/selfuncs.h" #include "bloom.h" diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c index e7db83d3fb..be626bef6e 100644 --- a/contrib/file_fdw/file_fdw.c +++ b/contrib/file_fdw/file_fdw.c @@ -29,11 +29,10 @@ #include "foreign/foreign.h" #include "miscadmin.h" #include "nodes/makefuncs.h" -#include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "optimizer/pathnode.h" #include "optimizer/planmain.h" #include "optimizer/restrictinfo.h" -#include "optimizer/var.h" #include "utils/memutils.h" #include "utils/rel.h" #include "utils/sampling.h" diff --git a/contrib/postgres_fdw/deparse.c b/contrib/postgres_fdw/deparse.c index f368d4b31f..b0e44e5562 100644 --- a/contrib/postgres_fdw/deparse.c +++ b/contrib/postgres_fdw/deparse.c @@ -48,10 +48,9 @@ #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "nodes/plannodes.h" -#include "optimizer/clauses.h" +#include "optimizer/optimizer.h" #include "optimizer/prep.h" #include "optimizer/tlist.h" -#include "optimizer/var.h" #include "parser/parsetree.h" #include "utils/builtins.h" #include "utils/lsyscache.h" diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index 1a88919cfc..7fcac81e2e 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -28,11 +28,11 @@ #include "nodes/nodeFuncs.h" #include "optimizer/cost.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 "optimizer/tlist.h" #include "parser/parsetree.h" #include "utils/builtins.h" diff --git a/contrib/tsm_system_rows/tsm_system_rows.c b/contrib/tsm_system_rows/tsm_system_rows.c index 69944f61c8..c92490f938 100644 --- a/contrib/tsm_system_rows/tsm_system_rows.c +++ b/contrib/tsm_system_rows/tsm_system_rows.c @@ -33,8 +33,7 @@ #include "access/tsmapi.h" #include "catalog/pg_type.h" #include "miscadmin.h" -#include "optimizer/clauses.h" -#include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "utils/sampling.h" PG_MODULE_MAGIC; diff --git a/contrib/tsm_system_time/tsm_system_time.c b/contrib/tsm_system_time/tsm_system_time.c index f516552cc0..edeacf0b53 100644 --- a/contrib/tsm_system_time/tsm_system_time.c +++ b/contrib/tsm_system_time/tsm_system_time.c @@ -31,8 +31,7 @@ #include "access/tsmapi.h" #include "catalog/pg_type.h" #include "miscadmin.h" -#include "optimizer/clauses.h" -#include "optimizer/cost.h" +#include "optimizer/optimizer.h" #include "utils/sampling.h" #include "utils/spccache.h" diff --git a/src/backend/access/gist/gistbuild.c b/src/backend/access/gist/gistbuild.c index 94463ffb99..bd142a3560 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 de147d7b68..8e63c1fad2 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 5e5e32dbae..9360b5bbc9 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 383387bc69..298e0ab4a0 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 9c55c20d6b..ce2b61631d 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 cc865de627..910f651522 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 225c078018..169b2de6cf 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 62d1ec60ba..0d3bc3a2c7 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 ec1d6b6f11..a74af4c171 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 4411b19e58..dbb06397e6 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 5d859b7c99..1831ea81cf 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 ac401689c8..9a2f1a85b4 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 5b2b8d2969..bd85099c28 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 ff76499137..434be403fe 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 499030c445..7b5896b98f 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 35a6485118..fa7161ef9d 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 2e061a5ee3..e52b806372 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 5975c5206b..9a20460e76 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 ceea3d6d72..b79be91655 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 2a260a71f2..263a0f8127 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 70a4e90a05..69d5a1f239 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 8635865d1e..4de1d2b484 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 cdf1ad09de..324356ec75 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 731391f190..157ac042b8 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 351f6ec7e1..df7e620da7 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 0d8a3f9592..2144e14ec8 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 50452706ed..abca03b805 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 19be1f375c..532de4484f 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 6e134ae1d2..3454f12912 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 be50d56b5a..7e1a3908f1 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 9dac50ea39..56d839bb31 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 94c88bd662..466e996011 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 1593dbec21..a4efa693ea 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 c1aa0ba663..1b4f7db649 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 a2376d2ed7..d6ffa7869d 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 d98cb89984..86617099df 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 f9f4b12db7..3cedd01c98 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 5db88afd89..b2239728cf 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 6bd3b2d1ac..0213a37670 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 60403eef91..915c6d0cf6 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 1f64004cf6..9e001c1bdc 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 2bd6c200cf..e9a94976b7 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 0e045f171a..5392d1a561 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 99616063f4..86c346bc38 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 c62ba88d1b..b67158154e 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 0402ffe9a7..b57de6b4c6 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 b24478ec6f..798aa8c597 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 243344a011..3efa1bdc1a 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 ecbb0db18c..3b260b1e3c 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 c1bda812c7..1c47c70802 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 d0cc14f11d..14d1c67a94 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 5116d7f349..315c81eb8e 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 1ef7c8608a..125ee5d84b 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 5b73378a19..183ea0f2c4 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 8805543da7..c6ce1011e2 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 3e0a762c41..7fc8d63ff0 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 445e81a1af..a37d1f18be 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 f21c9b32a6..d478ae7e19 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 f5155fe062..8c9721935d 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 2c49c711e3..f9516515bc 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 fd7a751c9a..57aee3d760 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 a8e9f72214..13492ceb9c 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 e773f20d9f..36cfd507b2 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 ad1201a8d2..870131b073 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 6075bc3db7..2d384a9944 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 0631567739..51e4c275ab 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 4af8c80848..fb00504676 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 2404073bc8..1b50f283c5 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 3f46b5dfb2..9851bd43d5 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 12bba1b63a..af96a03338 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 1d0c16bf48..6309a017c1 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 2fb7dd3b8e..7857424c2c 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 c216ed0922..98d75be292 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 420ca05c30..7917b889ae 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 3f5342886d..cfedd424ce 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 623f733d7d..48efbe58f7 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 0000000000..1cd5c80e76 --- /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 bec0c38617..b2e1c07732 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 8616681e0a..769a2f8e01 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 d5abe79276..0000000000 --- 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 17c44c46b9..5277e990ed 100644 --- a/src/include/optimizer/prep.h +++ b/src/include/optimizer/prep.h @@ -31,12 +31,6 @@ extern void remove_useless_result_rtes(PlannerInfo *root); 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 */ diff --git a/src/include/optimizer/tlist.h b/src/include/optimizer/tlist.h index 8b967f9583..13ac7b88b4 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 f975074bf0..0000000000 --- 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 45f10f901b..85aa61371d 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 c03748cb3c..10cd4f9ae5 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;