q4_debugging_patch_aid.txt
text/plain
diff --git a/contrib/pg_plan_advice/pgpa_planner.c b/contrib/pg_plan_advice/pgpa_planner.c
index fdc53da9742..a5b784fd151 100644
--- a/contrib/pg_plan_advice/pgpa_planner.c
+++ b/contrib/pg_plan_advice/pgpa_planner.c
@@ -457,7 +457,11 @@ pgpa_join_path_setup(PlannerInfo *root, RelOptInfo *joinrel,
uniquerel = jointype == JOIN_UNIQUE_OUTER ? outerrel : innerrel;
pps = GetPlannerGlobalExtensionState(root->glob, planner_extension_id);
- if (pps->generate_advice_string)
+ elog(NOTICE, "jointype=%s pps_NULL?=%d", jointype == JOIN_UNIQUE_OUTER ? "outer" : "inner", pps == NULL);
+ // JW: pps NULL fix
+ //if (pps != NULL && pps->generate_advice_string)
+ // JW: pps NULL fix with generating SJ also for normal EXPLAIN
+ if (pps != NULL)
{
bool found = false;
@@ -471,19 +475,27 @@ pgpa_join_path_setup(PlannerInfo *root, RelOptInfo *joinrel,
if (root->plan_name == ur->plan_name &&
bms_equal(uniquerel->relids, ur->relids))
{
+ elog(NOTICE, "found=true! (ur->plan_name=%s bms_ur_relids=%s)",
+ ur->plan_name, pgpa_bms_to_cstring(ur->relids));
found = true;
break;
}
}
+ elog(NOTICE, "found=%d", found);
/* If not a duplicate, append to the list. */
if (!found)
{
+ StringInfoData buf;
+
pgpa_sj_unique_rel *ur = palloc_object(pgpa_sj_unique_rel);
ur->plan_name = root->plan_name;
ur->relids = uniquerel->relids;
pps->sj_unique_rels = lappend(pps->sj_unique_rels, ur);
+ initStringInfo(&buf);
+ outBitmapset(&buf, uniquerel->relids);
+ elog(NOTICE, "not a dupllicate, appending \"%s\" to pps->sj_unique_rels", buf.data);
}
}
}
@@ -982,7 +994,8 @@ pgpa_planner_apply_join_path_advice(JoinType jointype, uint64 *pgs_mask_p,
jo_deny_indexes = bms_add_member(jo_deny_indexes, i);
else if (restrict_method)
{
- jo_permit_indexes = bms_add_member(jo_permit_indexes, i);
+ //JW
+ //jo_permit_indexes = bms_add_member(jo_permit_indexes, i);
jm_indexes = bms_add_member(jo_permit_indexes, i);
if (join_mask != 0 && join_mask != my_join_mask)
jm_conflict = true;
@@ -1038,8 +1051,9 @@ pgpa_planner_apply_join_path_advice(JoinType jointype, uint64 *pgs_mask_p,
}
else if (advice_unique != jt_unique)
jo_deny_indexes = bms_add_member(jo_deny_indexes, i);
- else
- jo_permit_indexes = bms_add_member(jo_permit_indexes, i);
+ //JW
+ //else
+ // jo_permit_indexes = bms_add_member(jo_permit_indexes, i);
}
continue;
}
diff --git a/contrib/pg_plan_advice/pgpa_walker.c b/contrib/pg_plan_advice/pgpa_walker.c
index 29973c93b0b..07db28630a8 100644
--- a/contrib/pg_plan_advice/pgpa_walker.c
+++ b/contrib/pg_plan_advice/pgpa_walker.c
@@ -59,6 +59,31 @@ static Index pgpa_walker_get_rti(Index rtable_length,
pgpa_identifier *rt_identifiers,
pgpa_identifier *rid);
+
+/*
+ * Convert a bitmapset to a C string of comma-separated integers.
+ */
+static char *
+pgpa_bms_to_cstring(Bitmapset *bms)
+{
+ StringInfoData buf;
+ int x = -1;
+
+ if (bms_is_empty(bms))
+ return "none";
+
+ initStringInfo(&buf);
+ while ((x = bms_next_member(bms, x)) >= 0)
+ {
+ if (buf.len > 0)
+ appendStringInfo(&buf, ", %d", x);
+ else
+ appendStringInfo(&buf, "%d", x);
+ }
+
+ return buf.data;
+}
+
/*
* Top-level entrypoint for the plan tree walk.
*
@@ -135,6 +160,9 @@ pgpa_plan_walker(pgpa_plan_walker_context *walker, PlannedStmt *pstmt,
foreach_ptr(pgpa_query_feature, qf,
walker->query_features[PGPAQF_SEMIJOIN_NON_UNIQUE])
{
+ elog(NOTICE, "pgpa_plan_walker: walking over SEMIJOIN_NON_UNIQUE features: %s",
+ pgpa_bms_to_cstring(qf->relids));
+
if (list_member(sj_unique_rtis, qf->relids))
sj_nonunique_qfs = lappend(sj_nonunique_qfs, qf);
}
@@ -148,6 +176,8 @@ pgpa_plan_walker(pgpa_plan_walker_context *walker, PlannedStmt *pstmt,
foreach_ptr(pgpa_query_feature, qf,
walker->query_features[PGPAQF_SEMIJOIN_UNIQUE])
{
+ elog(NOTICE, "pgpa_plan_walker: walking over SEMIJOIN_UNIQUE features: %s, sj_unique_rtis=%s sj_unique_rels=%s",
+ pgpa_bms_to_cstring(qf->relids), nodeToString(sj_unique_rtis), nodeToString(sj_unique_rels));
if (!list_member(sj_unique_rtis, qf->relids))
{
StringInfoData buf;
@@ -479,6 +509,11 @@ pgpa_add_future_feature(pgpa_plan_walker_context *walker,
walker->future_query_features =
lappend(walker->future_query_features, qf);
+
+ if(type == PGPAQF_SEMIJOIN_NON_UNIQUE)
+ elog(NOTICE, "added SEMIJOIN_NON_UNIQUE");
+ else if(type == PGPAQF_SEMIJOIN_UNIQUE)
+ elog(NOTICE, "added SEMIJOIN_UNIQUE");
}
/*