#include "postgres.h"
#include "funcapi.h"
-#include "pgpa_join.h"
+#include "pgpa_walker.h"
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
{
PlannedStmt *pstmt = queryDesc->plannedstmt;
- pgpa_check_plan(pstmt, pstmt->planTree);
+ pgpa_check_plan(pstmt);
if (prev_ExecutorStart)
return prev_ExecutorStart(queryDesc, 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);
}
#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)
--- /dev/null
+#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);