Improve planner error messages regarding nodes

Change error messages when unexpected nodes are encountered to
actually show the node name instead of the node id.
This commit is contained in:
Sven Klemm 2022-02-23 17:33:45 +01:00 committed by Sven Klemm
parent 3f303c7d42
commit 91820e26f6
5 changed files with 78 additions and 13 deletions

View File

@ -168,7 +168,7 @@ ts_chunk_append_path_create(PlannerInfo *root, RelOptInfo *rel, Hypertable *ht,
children = castNode(MergeAppendPath, subpath)->subpaths;
break;
default:
elog(ERROR, "invalid child of chunk append: %u", nodeTag(subpath));
elog(ERROR, "invalid child of chunk append: %s", ts_get_node_name((Node *) subpath));
break;
}

View File

@ -337,8 +337,7 @@ ts_chunk_append_get_scan_plan(Plan *plan)
return NULL;
break;
default:
elog(ERROR, "invalid child of chunk append: %u", nodeTag(plan));
return NULL;
break;
elog(ERROR, "invalid child of chunk append: %s", ts_get_node_name((Node *) plan));
}
pg_unreachable();
}

View File

@ -190,7 +190,9 @@ ca_append_begin(CustomScanState *node, EState *estate, int eflags)
*/
return;
default:
elog(ERROR, "invalid child of constraint-aware append: %u", nodeTag(subplan));
elog(ERROR,
"invalid child of constraint-aware append: %s",
ts_get_node_name((Node *) subplan));
}
/*
@ -257,7 +259,9 @@ ca_append_begin(CustomScanState *node, EState *estate, int eflags)
break;
}
default:
elog(ERROR, "invalid child of constraint-aware append: %u", nodeTag(plan));
elog(ERROR,
"invalid child of constraint-aware append: %s",
ts_get_node_name((Node *) plan));
break;
}
}
@ -406,8 +410,8 @@ constraint_aware_append_plan_create(PlannerInfo *root, RelOptInfo *rel, CustomPa
break;
default:
elog(ERROR,
"invalid child of constraint-aware append: %u",
nodeTag(linitial(custom_plans)));
"invalid child of constraint-aware append: %s",
ts_get_node_name((Node *) linitial(custom_plans)));
break;
}
@ -454,7 +458,9 @@ constraint_aware_append_plan_create(PlannerInfo *root, RelOptInfo *rel, CustomPa
break;
}
default:
elog(ERROR, "invalid child of constraint-aware append: %u", nodeTag(plan));
elog(ERROR,
"invalid child of constraint-aware append: %s",
ts_get_node_name((Node *) plan));
break;
}
}
@ -513,7 +519,9 @@ ts_constraint_aware_append_path_create(PlannerInfo *root, Path *subpath)
case T_MergeAppendPath:
break;
default:
elog(ERROR, "invalid child of constraint-aware append: %u", nodeTag(subpath));
elog(ERROR,
"invalid child of constraint-aware append: %s",
ts_get_node_name((Node *) subpath));
break;
}

View File

@ -944,8 +944,58 @@ ts_relation_size(Oid relid)
const char *
ts_get_node_name(Node *node)
{
/* tags are defined in nodes/nodes.h postgres source */
switch (nodeTag(node))
{
/*
* plan nodes (plannodes.h)
*/
NODE_CASE(Plan);
NODE_CASE(Result);
NODE_CASE(ProjectSet);
NODE_CASE(ModifyTable);
NODE_CASE(Append);
NODE_CASE(MergeAppend);
NODE_CASE(RecursiveUnion);
NODE_CASE(BitmapAnd);
NODE_CASE(BitmapOr);
NODE_CASE(Scan);
NODE_CASE(SeqScan);
NODE_CASE(SampleScan);
NODE_CASE(IndexScan);
NODE_CASE(IndexOnlyScan);
NODE_CASE(BitmapIndexScan);
NODE_CASE(BitmapHeapScan);
NODE_CASE(TidScan);
NODE_CASE(SubqueryScan);
NODE_CASE(FunctionScan);
NODE_CASE(ValuesScan);
NODE_CASE(TableFuncScan);
NODE_CASE(CteScan);
NODE_CASE(NamedTuplestoreScan);
NODE_CASE(WorkTableScan);
NODE_CASE(ForeignScan);
NODE_CASE(CustomScan);
NODE_CASE(Join);
NODE_CASE(NestLoop);
NODE_CASE(MergeJoin);
NODE_CASE(HashJoin);
NODE_CASE(Material);
NODE_CASE(Sort);
NODE_CASE(Group);
NODE_CASE(Agg);
NODE_CASE(WindowAgg);
NODE_CASE(Unique);
NODE_CASE(Gather);
NODE_CASE(GatherMerge);
NODE_CASE(Hash);
NODE_CASE(SetOp);
NODE_CASE(LockRows);
NODE_CASE(Limit);
/*
* planner nodes (pathnodes.h)
*/
NODE_CASE(IndexPath);
NODE_CASE(BitmapHeapPath);
NODE_CASE(BitmapAndPath);
@ -977,6 +1027,7 @@ ts_get_node_name(Node *node)
NODE_CASE(LockRowsPath);
NODE_CASE(ModifyTablePath);
NODE_CASE(LimitPath);
case T_Path:
switch (castNode(Path, node)->pathtype)
{
@ -991,8 +1042,10 @@ ts_get_node_name(Node *node)
default:
return psprintf("Path (%d)", castNode(Path, node)->pathtype);
}
case T_CustomPath:
return psprintf("CustomPath (%s)", castNode(CustomPath, node)->methods->CustomName);
default:
return psprintf("Node (%d)", nodeTag(node));
}

View File

@ -23,6 +23,7 @@
#include "cache.h"
#include "hypertable.h"
#include "hypertable_cache.h"
#include "utils.h"
/*
* AsyncAppend provides an asynchronous API during query execution that
@ -163,7 +164,9 @@ find_data_node_scan_state_child(PlanState *state)
/* Data scan state can be buried under AggState or SortState */
return find_data_node_scan_state_child(state->lefttree);
default:
elog(ERROR, "unexpected child node of Append or MergeAppend: %d", nodeTag(state));
elog(ERROR,
"unexpected child node of Append or MergeAppend: %s",
ts_get_node_name((Node *) state->plan));
}
}
@ -192,7 +195,9 @@ get_data_node_async_scan_states(AsyncAppendState *state)
num_child_plans = mstate->ms_nplans;
}
else
elog(ERROR, "unexpected child node %u of AsyncAppend", nodeTag(state->subplan_state));
elog(ERROR,
"unexpected child node of AsyncAppend: %s",
ts_get_node_name((Node *) state->subplan_state->plan));
for (i = 0; i < num_child_plans; i++)
dn_plans = lappend(dn_plans, find_data_node_scan_state_child(child_plans[i]));
@ -331,7 +336,7 @@ async_append_plan_create(PlannerInfo *root, RelOptInfo *rel, CustomPath *best_pa
cscan->custom_plans = custom_plans;
subplan = linitial(custom_plans);
if (!(IsA(subplan, MergeAppend) || IsA(subplan, Append)))
elog(ERROR, "unexpected child node of AsyncAppend");
elog(ERROR, "unexpected child node of AsyncAppend: %s", ts_get_node_name((Node *) subplan));
/* input target list */
cscan->custom_scan_tlist = subplan->targetlist;