mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-18 11:45:11 +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;
|
children = castNode(MergeAppendPath, subpath)->subpaths;
|
||||||
break;
|
break;
|
||||||
default:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,8 +337,7 @@ ts_chunk_append_get_scan_plan(Plan *plan)
|
|||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
elog(ERROR, "invalid child of chunk append: %u", nodeTag(plan));
|
elog(ERROR, "invalid child of chunk append: %s", ts_get_node_name((Node *) plan));
|
||||||
return NULL;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
pg_unreachable();
|
||||||
}
|
}
|
||||||
|
@ -190,7 +190,9 @@ ca_append_begin(CustomScanState *node, EState *estate, int eflags)
|
|||||||
*/
|
*/
|
||||||
return;
|
return;
|
||||||
default:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -406,8 +410,8 @@ constraint_aware_append_plan_create(PlannerInfo *root, RelOptInfo *rel, CustomPa
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
elog(ERROR,
|
elog(ERROR,
|
||||||
"invalid child of constraint-aware append: %u",
|
"invalid child of constraint-aware append: %s",
|
||||||
nodeTag(linitial(custom_plans)));
|
ts_get_node_name((Node *) linitial(custom_plans)));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -454,7 +458,9 @@ constraint_aware_append_plan_create(PlannerInfo *root, RelOptInfo *rel, CustomPa
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -513,7 +519,9 @@ ts_constraint_aware_append_path_create(PlannerInfo *root, Path *subpath)
|
|||||||
case T_MergeAppendPath:
|
case T_MergeAppendPath:
|
||||||
break;
|
break;
|
||||||
default:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
53
src/utils.c
53
src/utils.c
@ -944,8 +944,58 @@ ts_relation_size(Oid relid)
|
|||||||
const char *
|
const char *
|
||||||
ts_get_node_name(Node *node)
|
ts_get_node_name(Node *node)
|
||||||
{
|
{
|
||||||
|
/* tags are defined in nodes/nodes.h postgres source */
|
||||||
switch (nodeTag(node))
|
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(IndexPath);
|
||||||
NODE_CASE(BitmapHeapPath);
|
NODE_CASE(BitmapHeapPath);
|
||||||
NODE_CASE(BitmapAndPath);
|
NODE_CASE(BitmapAndPath);
|
||||||
@ -977,6 +1027,7 @@ ts_get_node_name(Node *node)
|
|||||||
NODE_CASE(LockRowsPath);
|
NODE_CASE(LockRowsPath);
|
||||||
NODE_CASE(ModifyTablePath);
|
NODE_CASE(ModifyTablePath);
|
||||||
NODE_CASE(LimitPath);
|
NODE_CASE(LimitPath);
|
||||||
|
|
||||||
case T_Path:
|
case T_Path:
|
||||||
switch (castNode(Path, node)->pathtype)
|
switch (castNode(Path, node)->pathtype)
|
||||||
{
|
{
|
||||||
@ -991,8 +1042,10 @@ ts_get_node_name(Node *node)
|
|||||||
default:
|
default:
|
||||||
return psprintf("Path (%d)", castNode(Path, node)->pathtype);
|
return psprintf("Path (%d)", castNode(Path, node)->pathtype);
|
||||||
}
|
}
|
||||||
|
|
||||||
case T_CustomPath:
|
case T_CustomPath:
|
||||||
return psprintf("CustomPath (%s)", castNode(CustomPath, node)->methods->CustomName);
|
return psprintf("CustomPath (%s)", castNode(CustomPath, node)->methods->CustomName);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return psprintf("Node (%d)", nodeTag(node));
|
return psprintf("Node (%d)", nodeTag(node));
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
#include "hypertable.h"
|
#include "hypertable.h"
|
||||||
#include "hypertable_cache.h"
|
#include "hypertable_cache.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AsyncAppend provides an asynchronous API during query execution that
|
* 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 */
|
/* Data scan state can be buried under AggState or SortState */
|
||||||
return find_data_node_scan_state_child(state->lefttree);
|
return find_data_node_scan_state_child(state->lefttree);
|
||||||
default:
|
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;
|
num_child_plans = mstate->ms_nplans;
|
||||||
}
|
}
|
||||||
else
|
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++)
|
for (i = 0; i < num_child_plans; i++)
|
||||||
dn_plans = lappend(dn_plans, find_data_node_scan_state_child(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;
|
cscan->custom_plans = custom_plans;
|
||||||
subplan = linitial(custom_plans);
|
subplan = linitial(custom_plans);
|
||||||
if (!(IsA(subplan, MergeAppend) || IsA(subplan, Append)))
|
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 */
|
/* input target list */
|
||||||
cscan->custom_scan_tlist = subplan->targetlist;
|
cscan->custom_scan_tlist = subplan->targetlist;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user