From 34cb3ac7de5ceab8d947839baec36c48338fd2f5 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Wed, 21 May 2025 14:32:16 -0400 Subject: [PATCH] fix some stuff --- contrib/pg_plan_advice/pg_plan_advice.c | 18 +++++++++--------- contrib/pg_plan_advice/pgpa_walker.c | 11 +---------- contrib/pg_plan_advice/pgpa_walker.h | 11 +++++++++++ 3 files changed, 21 insertions(+), 19 deletions(-) create mode 100644 contrib/pg_plan_advice/pgpa_walker.h diff --git a/contrib/pg_plan_advice/pg_plan_advice.c b/contrib/pg_plan_advice/pg_plan_advice.c index 293ba7f915..4c867a1369 100644 --- a/contrib/pg_plan_advice/pg_plan_advice.c +++ b/contrib/pg_plan_advice/pg_plan_advice.c @@ -12,7 +12,7 @@ #include "postgres.h" #include "funcapi.h" -#include "pgpa_join.h" +#include "pgpa_walker.h" PG_MODULE_MAGIC; @@ -20,7 +20,7 @@ PG_MODULE_MAGIC; static ExecutorStart_hook_type prev_ExecutorStart = NULL; static bool pg_plan_advice_ExecutorStart(QueryDesc *queryDesc, int eflags); -static void pgpa_check_plan(PlannedStmt *pstmt, Plan *plan); +static void pgpa_check_plan(PlannedStmt *pstmt); /* * Initialize this module @@ -37,7 +37,7 @@ pg_plan_advice_ExecutorStart(QueryDesc *queryDesc, int eflags) { PlannedStmt *pstmt = queryDesc->plannedstmt; - pgpa_check_plan(pstmt, pstmt->planTree); + pgpa_check_plan(pstmt); if (prev_ExecutorStart) return prev_ExecutorStart(queryDesc, eflags); @@ -46,11 +46,11 @@ pg_plan_advice_ExecutorStart(QueryDesc *queryDesc, int eflags) } static void -pgpa_check_plan(PlannedStmt *pstmt, Plan *plan) +pgpa_check_plan(PlannedStmt *pstmt) { - if (pgpa_get_join_class(plan) == PGPA_UNROLLED_JOIN) - { - (void) pgpa_make_unrolled_join(pstmt, plan); - return; - } + pgpa_plan_walker_context context; + + memset(&context, 0, sizeof(pgpa_plan_walker_context)); + context.pstmt = pstmt; + pgpa_plan_walker(&context, pstmt->planTree, NULL); } diff --git a/contrib/pg_plan_advice/pgpa_walker.c b/contrib/pg_plan_advice/pgpa_walker.c index 9fc21f8ad0..4d2e3a95bd 100644 --- a/contrib/pg_plan_advice/pgpa_walker.c +++ b/contrib/pg_plan_advice/pgpa_walker.c @@ -1,19 +1,10 @@ #include "postgres.h" #include "pgpa_join.h" +#include "pgpa_walker.h" #include "nodes/plannodes.h" -typedef struct pgpa_plan_walker_context -{ - PlannedStmt *pstmt; - List *unrolled_joins; -} pgpa_plan_walker_context; - -extern void -pgpa_plan_walker(pgpa_plan_walker_context *context, Plan *plan, - pgpa_join_unroller *join_unroller); - void pgpa_plan_walker(pgpa_plan_walker_context *context, Plan *plan, pgpa_join_unroller *join_unroller) diff --git a/contrib/pg_plan_advice/pgpa_walker.h b/contrib/pg_plan_advice/pgpa_walker.h new file mode 100644 index 0000000000..b50bb687f2 --- /dev/null +++ b/contrib/pg_plan_advice/pgpa_walker.h @@ -0,0 +1,11 @@ +#include "pgpa_join.h" + +typedef struct pgpa_plan_walker_context +{ + PlannedStmt *pstmt; + List *unrolled_joins; +} pgpa_plan_walker_context; + +extern void +pgpa_plan_walker(pgpa_plan_walker_context *context, Plan *plan, + pgpa_join_unroller *join_unroller); -- 2.39.5