Skip to content

Commit

Permalink
Add aqp_pg17.patch
Browse files Browse the repository at this point in the history
  • Loading branch information
danolivo committed Nov 5, 2024
1 parent 2a99c02 commit 9054eca
Showing 1 changed file with 59 additions and 47 deletions.
106 changes: 59 additions & 47 deletions aqo_master.patch → aqo_pg17.patch
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
diff --git a/contrib/Makefile b/contrib/Makefile
index abd780f277..601892ef54 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -6,6 +6,7 @@ include $(top_builddir)/src/Makefile.global

SUBDIRS = \
amcheck \
+ aqo \
auth_delay \
auto_explain \
basic_archive \
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index 18a5af6b91..18c2ed3bfd 100644
index 8086607710..878a8ea9f9 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -25,6 +25,7 @@
Expand All @@ -23,7 +35,7 @@ index 18a5af6b91..18c2ed3bfd 100644

/* Instrumentation data for SERIALIZE option */
typedef struct SerializeMetrics
@@ -805,6 +812,10 @@ ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into, ExplainState *es,
@@ -796,6 +803,10 @@ ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into, ExplainState *es,
ExplainPropertyFloat("Execution Time", "ms", 1000.0 * totaltime, 3,
es);

Expand All @@ -34,7 +46,7 @@ index 18a5af6b91..18c2ed3bfd 100644
ExplainCloseGroup("Query", NULL, true, es);
}

@@ -2001,6 +2012,9 @@ ExplainNode(PlanState *planstate, List *ancestors,
@@ -1886,6 +1897,9 @@ ExplainNode(PlanState *planstate, List *ancestors,
}
}

Expand All @@ -45,10 +57,10 @@ index 18a5af6b91..18c2ed3bfd 100644
if (es->format == EXPLAIN_FORMAT_TEXT)
appendStringInfoChar(es->str, '\n');
diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c
index 2bb6db1df7..ac95740598 100644
index 52ebdd90fc..da0e257120 100644
--- a/src/backend/optimizer/path/costsize.c
+++ b/src/backend/optimizer/path/costsize.c
@@ -109,6 +109,11 @@
@@ -98,6 +98,11 @@
#include "utils/spccache.h"
#include "utils/tuplesort.h"

Expand All @@ -60,15 +72,15 @@ index 2bb6db1df7..ac95740598 100644

#define LOG2(x) (log(x) / 0.693147180559945)

@@ -202,7 +207,6 @@ static void set_rel_width(PlannerInfo *root, RelOptInfo *rel);
@@ -191,7 +196,6 @@ static void set_rel_width(PlannerInfo *root, RelOptInfo *rel);
static int32 get_expr_width(PlannerInfo *root, const Node *expr);
static double relation_byte_size(double tuples, int width);
static double page_size(double tuples, int width);
-static double get_parallel_divisor(Path *path);


/*
@@ -5309,6 +5313,58 @@ approx_tuple_count(PlannerInfo *root, JoinPath *path, List *quals)
@@ -5225,6 +5229,58 @@ approx_tuple_count(PlannerInfo *root, JoinPath *path, List *quals)
}


Expand Down Expand Up @@ -127,7 +139,7 @@ index 2bb6db1df7..ac95740598 100644
/*
* set_baserel_size_estimates
* Set the size estimates for the given base relation.
@@ -5325,19 +5381,10 @@ approx_tuple_count(PlannerInfo *root, JoinPath *path, List *quals)
@@ -5241,19 +5297,10 @@ approx_tuple_count(PlannerInfo *root, JoinPath *path, List *quals)
void
set_baserel_size_estimates(PlannerInfo *root, RelOptInfo *rel)
{
Expand All @@ -148,7 +160,7 @@ index 2bb6db1df7..ac95740598 100644

cost_qual_eval(&rel->baserestrictcost, rel->baserestrictinfo, root);

@@ -5348,13 +5395,33 @@ set_baserel_size_estimates(PlannerInfo *root, RelOptInfo *rel)
@@ -5264,13 +5311,33 @@ set_baserel_size_estimates(PlannerInfo *root, RelOptInfo *rel)
* get_parameterized_baserel_size
* Make a size estimate for a parameterized scan of a base relation.
*
Expand Down Expand Up @@ -184,7 +196,7 @@ index 2bb6db1df7..ac95740598 100644
{
List *allclauses;
double nrows;
@@ -5383,6 +5450,36 @@ get_parameterized_baserel_size(PlannerInfo *root, RelOptInfo *rel,
@@ -5299,6 +5366,36 @@ get_parameterized_baserel_size(PlannerInfo *root, RelOptInfo *rel,
* set_joinrel_size_estimates
* Set the size estimates for the given join relation.
*
Expand Down Expand Up @@ -221,7 +233,7 @@ index 2bb6db1df7..ac95740598 100644
* The rel's targetlist must have been constructed already, and a
* restriction clause list that matches the given component rels must
* be provided.
@@ -5402,11 +5499,11 @@ get_parameterized_baserel_size(PlannerInfo *root, RelOptInfo *rel,
@@ -5318,11 +5415,11 @@ get_parameterized_baserel_size(PlannerInfo *root, RelOptInfo *rel,
* build_joinrel_tlist, and baserestrictcost is not used for join rels.
*/
void
Expand All @@ -238,7 +250,7 @@ index 2bb6db1df7..ac95740598 100644
{
rel->rows = calc_joinrel_size_estimate(root,
rel,
@@ -5422,6 +5519,35 @@ set_joinrel_size_estimates(PlannerInfo *root, RelOptInfo *rel,
@@ -5338,6 +5435,35 @@ set_joinrel_size_estimates(PlannerInfo *root, RelOptInfo *rel,
* get_parameterized_joinrel_size
* Make a size estimate for a parameterized scan of a join relation.
*
Expand Down Expand Up @@ -274,7 +286,7 @@ index 2bb6db1df7..ac95740598 100644
* 'rel' is the joinrel under consideration.
* 'outer_path', 'inner_path' are (probably also parameterized) Paths that
* produce the relations being joined.
@@ -5434,11 +5560,11 @@ set_joinrel_size_estimates(PlannerInfo *root, RelOptInfo *rel,
@@ -5350,11 +5476,11 @@ set_joinrel_size_estimates(PlannerInfo *root, RelOptInfo *rel,
* set_joinrel_size_estimates must have been applied already.
*/
double
Expand All @@ -291,7 +303,7 @@ index 2bb6db1df7..ac95740598 100644
{
double nrows;

@@ -6153,7 +6279,7 @@ set_foreign_size_estimates(PlannerInfo *root, RelOptInfo *rel)
@@ -6069,7 +6195,7 @@ set_foreign_size_estimates(PlannerInfo *root, RelOptInfo *rel)
/* Should only be applied to base relations */
Assert(rel->relid > 0);

Expand All @@ -300,7 +312,7 @@ index 2bb6db1df7..ac95740598 100644

cost_qual_eval(&rel->baserestrictcost, rel->baserestrictinfo, root);

@@ -6446,7 +6572,7 @@ page_size(double tuples, int width)
@@ -6362,7 +6488,7 @@ page_size(double tuples, int width)
* Estimate the fraction of the work that each worker will do given the
* number of workers budgeted for the path.
*/
Expand All @@ -310,7 +322,7 @@ index 2bb6db1df7..ac95740598 100644
{
double parallel_divisor = path->parallel_workers;
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index c13586c537..2f889570de 100644
index c0af10ebd3..31e0ece45a 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -72,6 +72,7 @@
Expand All @@ -321,7 +333,7 @@ index c13586c537..2f889570de 100644

static Plan *create_plan_recurse(PlannerInfo *root, Path *best_path,
int flags);
@@ -551,6 +552,10 @@ create_plan_recurse(PlannerInfo *root, Path *best_path, int flags)
@@ -549,6 +550,10 @@ create_plan_recurse(PlannerInfo *root, Path *best_path, int flags)
break;
}

Expand All @@ -332,7 +344,7 @@ index c13586c537..2f889570de 100644
return plan;
}

@@ -5458,6 +5463,7 @@ copy_generic_path_info(Plan *dest, Path *src)
@@ -5415,6 +5420,7 @@ copy_generic_path_info(Plan *dest, Path *src)
dest->plan_width = src->pathtarget->width;
dest->parallel_aware = src->parallel_aware;
dest->parallel_safe = src->parallel_safe;
Expand All @@ -341,10 +353,10 @@ index c13586c537..2f889570de 100644

/*
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index 0f423e9684..8cd228baa1 100644
index 0c7273b9cc..9399be1473 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -144,7 +144,8 @@ static List *extract_rollup_sets(List *groupingSets);
@@ -142,7 +142,8 @@ static List *extract_rollup_sets(List *groupingSets);
static List *reorder_grouping_sets(List *groupingSets, List *sortclause);
static void standard_qp_callback(PlannerInfo *root, void *extra);
static double get_number_of_groups(PlannerInfo *root,
Expand All @@ -354,7 +366,7 @@ index 0f423e9684..8cd228baa1 100644
grouping_sets_data *gd,
List *target_list);
static RelOptInfo *create_grouping_paths(PlannerInfo *root,
@@ -3697,7 +3698,8 @@ standard_qp_callback(PlannerInfo *root, void *extra)
@@ -3626,7 +3627,8 @@ standard_qp_callback(PlannerInfo *root, void *extra)
*/
static double
get_number_of_groups(PlannerInfo *root,
Expand All @@ -364,7 +376,7 @@ index 0f423e9684..8cd228baa1 100644
grouping_sets_data *gd,
List *target_list)
{
@@ -3734,7 +3736,7 @@ get_number_of_groups(PlannerInfo *root,
@@ -3663,7 +3665,7 @@ get_number_of_groups(PlannerInfo *root,
GroupingSetData *gs = lfirst_node(GroupingSetData, lc3);
double numGroups = estimate_num_groups(root,
groupExprs,
Expand All @@ -373,7 +385,7 @@ index 0f423e9684..8cd228baa1 100644
&gset,
NULL);

@@ -3760,7 +3762,7 @@ get_number_of_groups(PlannerInfo *root,
@@ -3689,7 +3691,7 @@ get_number_of_groups(PlannerInfo *root,
GroupingSetData *gs = lfirst_node(GroupingSetData, lc2);
double numGroups = estimate_num_groups(root,
groupExprs,
Expand All @@ -382,7 +394,7 @@ index 0f423e9684..8cd228baa1 100644
&gset,
NULL);

@@ -3777,8 +3779,8 @@ get_number_of_groups(PlannerInfo *root,
@@ -3706,8 +3708,8 @@ get_number_of_groups(PlannerInfo *root,
groupExprs = get_sortgrouplist_exprs(root->processed_groupClause,
target_list);

Expand All @@ -393,7 +405,7 @@ index 0f423e9684..8cd228baa1 100644
}
}
else if (parse->groupingSets)
@@ -4168,7 +4170,8 @@ create_ordinary_grouping_paths(PlannerInfo *root, RelOptInfo *input_rel,
@@ -4097,7 +4099,8 @@ create_ordinary_grouping_paths(PlannerInfo *root, RelOptInfo *input_rel,
* Estimate number of groups.
*/
dNumGroups = get_number_of_groups(root,
Expand All @@ -403,7 +415,7 @@ index 0f423e9684..8cd228baa1 100644
gd,
extra->targetList);

@@ -7405,13 +7408,15 @@ create_partial_grouping_paths(PlannerInfo *root,
@@ -7303,13 +7306,15 @@ create_partial_grouping_paths(PlannerInfo *root,
if (cheapest_total_path != NULL)
dNumPartialGroups =
get_number_of_groups(root,
Expand All @@ -422,7 +434,7 @@ index 0f423e9684..8cd228baa1 100644
extra->targetList);

diff --git a/src/backend/optimizer/util/relnode.c b/src/backend/optimizer/util/relnode.c
index d7266e4cdb..7e5b771d9f 100644
index e05b21c884..5805136b70 100644
--- a/src/backend/optimizer/util/relnode.c
+++ b/src/backend/optimizer/util/relnode.c
@@ -286,6 +286,7 @@ build_simple_rel(PlannerInfo *root, int relid, RelOptInfo *parent)
Expand All @@ -449,23 +461,23 @@ index d7266e4cdb..7e5b771d9f 100644

/* Compute information relevant to the foreign relations. */
set_foreign_rel_properties(joinrel, outer_rel, inner_rel);
@@ -952,6 +953,7 @@ build_child_join_rel(PlannerInfo *root, RelOptInfo *outer_rel,
@@ -962,6 +963,7 @@ build_child_join_rel(PlannerInfo *root, RelOptInfo *outer_rel,
joinrel->all_partrels = NULL;
joinrel->partexprs = NULL;
joinrel->nullable_partexprs = NULL;
+ joinrel->ext_nodes = NULL;

/* Compute information relevant to foreign relations. */
set_foreign_rel_properties(joinrel, outer_rel, inner_rel);
@@ -1530,6 +1532,7 @@ find_childrel_parents(PlannerInfo *root, RelOptInfo *rel)
@@ -1542,6 +1544,7 @@ find_childrel_parents(PlannerInfo *root, RelOptInfo *rel)
}


+set_parampathinfo_postinit_hook_type parampathinfo_postinit_hook = NULL;
/*
* get_baserel_parampathinfo
* Get the ParamPathInfo for a parameterized path for a base relation,
@@ -1622,6 +1625,10 @@ get_baserel_parampathinfo(PlannerInfo *root, RelOptInfo *baserel,
@@ -1634,6 +1637,10 @@ get_baserel_parampathinfo(PlannerInfo *root, RelOptInfo *baserel,
ppi->ppi_rows = rows;
ppi->ppi_clauses = pclauses;
ppi->ppi_serials = pserials;
Expand All @@ -476,7 +488,7 @@ index d7266e4cdb..7e5b771d9f 100644
baserel->ppilist = lappend(baserel->ppilist, ppi);

return ppi;
@@ -1876,6 +1883,10 @@ get_appendrel_parampathinfo(RelOptInfo *appendrel, Relids required_outer)
@@ -1888,6 +1895,10 @@ get_appendrel_parampathinfo(RelOptInfo *appendrel, Relids required_outer)
ppi->ppi_rows = 0;
ppi->ppi_clauses = NIL;
ppi->ppi_serials = NULL;
Expand All @@ -488,7 +500,7 @@ index d7266e4cdb..7e5b771d9f 100644

return ppi;
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 08fa6774d9..034b434773 100644
index f4b3e91baa..45ccd76fd4 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -146,6 +146,7 @@
Expand All @@ -499,7 +511,7 @@ index 08fa6774d9..034b434773 100644

static double eqsel_internal(PG_FUNCTION_ARGS, bool negate);
static double eqjoinsel_inner(Oid opfuncoid, Oid collation,
@@ -3345,6 +3346,20 @@ add_unique_group_var(PlannerInfo *root, List *varinfos,
@@ -3344,6 +3345,20 @@ add_unique_group_var(PlannerInfo *root, List *varinfos,
return varinfos;
}

Expand All @@ -521,10 +533,10 @@ index 08fa6774d9..034b434773 100644
* estimate_num_groups - Estimate number of groups in a grouped query
*
diff --git a/src/include/commands/explain.h b/src/include/commands/explain.h
index 3ab0aae78f..5a257cdb0a 100644
index 9b8b351d9a..f49233826a 100644
--- a/src/include/commands/explain.h
+++ b/src/include/commands/explain.h
@@ -87,6 +87,18 @@ extern PGDLLIMPORT ExplainOneQuery_hook_type ExplainOneQuery_hook;
@@ -85,6 +85,18 @@ extern PGDLLIMPORT ExplainOneQuery_hook_type ExplainOneQuery_hook;
typedef const char *(*explain_get_index_name_hook_type) (Oid indexId);
extern PGDLLIMPORT explain_get_index_name_hook_type explain_get_index_name_hook;

Expand All @@ -544,10 +556,10 @@ index 3ab0aae78f..5a257cdb0a 100644
extern void ExplainQuery(ParseState *pstate, ExplainStmt *stmt,
ParamListInfo params, DestReceiver *dest);
diff --git a/src/include/nodes/pathnodes.h b/src/include/nodes/pathnodes.h
index 07e2415398..1413fbf03c 100644
index 2ba297c117..36b66c43f6 100644
--- a/src/include/nodes/pathnodes.h
+++ b/src/include/nodes/pathnodes.h
@@ -1049,6 +1049,16 @@ typedef struct RelOptInfo
@@ -1043,6 +1043,16 @@ typedef struct RelOptInfo
List **partexprs pg_node_attr(read_write_ignore);
/* Nullable partition key expressions */
List **nullable_partexprs pg_node_attr(read_write_ignore);
Expand All @@ -564,7 +576,7 @@ index 07e2415398..1413fbf03c 100644
} RelOptInfo;

/*
@@ -1586,6 +1596,10 @@ typedef struct ParamPathInfo
@@ -1580,6 +1590,10 @@ typedef struct ParamPathInfo
Cardinality ppi_rows; /* estimated number of result tuples */
List *ppi_clauses; /* join clauses available from outer rels */
Bitmapset *ppi_serials; /* set of rinfo_serial for enforced quals */
Expand All @@ -576,10 +588,10 @@ index 07e2415398..1413fbf03c 100644


diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h
index 62cd6a6666..bb47a51ba7 100644
index 1aeeaec95e..308f38214a 100644
--- a/src/include/nodes/plannodes.h
+++ b/src/include/nodes/plannodes.h
@@ -170,6 +170,9 @@ typedef struct Plan
@@ -169,6 +169,9 @@ typedef struct Plan
*/
Bitmapset *extParam;
Bitmapset *allParam;
Expand All @@ -590,7 +602,7 @@ index 62cd6a6666..bb47a51ba7 100644

/* ----------------
diff --git a/src/include/optimizer/cost.h b/src/include/optimizer/cost.h
index 854a782944..9e8cde176f 100644
index b1c51a4e70..1cb601e3b2 100644
--- a/src/include/optimizer/cost.h
+++ b/src/include/optimizer/cost.h
@@ -41,6 +41,37 @@ typedef enum
Expand Down Expand Up @@ -631,7 +643,7 @@ index 854a782944..9e8cde176f 100644
/*
* prototypes for costsize.c
* routines to compute costs and sizes
@@ -192,10 +223,22 @@ extern void compute_semi_anti_join_factors(PlannerInfo *root,
@@ -184,10 +215,22 @@ extern void compute_semi_anti_join_factors(PlannerInfo *root,
SpecialJoinInfo *sjinfo,
List *restrictlist,
SemiAntiJoinFactors *semifactors);
Expand All @@ -654,7 +666,7 @@ index 854a782944..9e8cde176f 100644
extern double get_parameterized_joinrel_size(PlannerInfo *root,
RelOptInfo *rel,
Path *outer_path,
@@ -207,6 +250,11 @@ extern void set_joinrel_size_estimates(PlannerInfo *root, RelOptInfo *rel,
@@ -199,6 +242,11 @@ extern void set_joinrel_size_estimates(PlannerInfo *root, RelOptInfo *rel,
RelOptInfo *inner_rel,
SpecialJoinInfo *sjinfo,
List *restrictlist);
Expand All @@ -666,15 +678,15 @@ index 854a782944..9e8cde176f 100644
extern void set_subquery_size_estimates(PlannerInfo *root, RelOptInfo *rel);
extern void set_function_size_estimates(PlannerInfo *root, RelOptInfo *rel);
extern void set_values_size_estimates(PlannerInfo *root, RelOptInfo *rel);
@@ -221,5 +269,6 @@ extern double compute_bitmap_pages(PlannerInfo *root, RelOptInfo *baserel,
@@ -212,5 +260,6 @@ extern PathTarget *set_pathtarget_cost_width(PlannerInfo *root, PathTarget *targ
extern double compute_bitmap_pages(PlannerInfo *root, RelOptInfo *baserel,
Path *bitmapqual, double loop_count,
Cost *cost_p, double *tuples_p);
extern double compute_gather_rows(Path *path);
+extern double get_parallel_divisor(Path *path);

#endif /* COST_H */
diff --git a/src/include/optimizer/pathnode.h b/src/include/optimizer/pathnode.h
index 1035e6560c..27e42b2679 100644
index 112e7c23d4..8397995e18 100644
--- a/src/include/optimizer/pathnode.h
+++ b/src/include/optimizer/pathnode.h
@@ -18,6 +18,10 @@
Expand All @@ -689,7 +701,7 @@ index 1035e6560c..27e42b2679 100644
* prototypes for pathnode.c
*/
diff --git a/src/include/optimizer/planmain.h b/src/include/optimizer/planmain.h
index 93137261e4..0621c27595 100644
index aafc173792..d520d8d547 100644
--- a/src/include/optimizer/planmain.h
+++ b/src/include/optimizer/planmain.h
@@ -24,6 +24,12 @@ extern PGDLLIMPORT double cursor_tuple_fraction;
Expand Down

0 comments on commit 9054eca

Please sign in to comment.