mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-17 19:13:16 +08:00
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:
parent
3f303c7d42
commit
91820e26f6
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
53
src/utils.c
53
src/utils.c
@ -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));
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user