castNode.patch
application/x-download
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/optimizer/plan/createplan.c | 10 | 1 |
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index ad49674..3878d84 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -334,6 +334,13 @@ create_plan(PlannerInfo *root, Path *best_path)
return plan;
}
+static inline Node *
+castNodeImpl(void *c, enum NodeTag t)
+{
+ Assert(c == NULL || IsA(c, t));
+ return c;
+}
+
/*
* create_plan_recurse
* Recursive guts of create_plan().
@@ -343,6 +350,8 @@ create_plan_recurse(PlannerInfo *root, Path *best_path, int flags)
{
Plan *plan;
+#define castNode(_type_, nodeptr) ((_type_ *) castNodeImpl(nodeptr, _type_))
+
switch (best_path->pathtype)
{
case T_SeqScan:
@@ -433,7 +442,7 @@ create_plan_recurse(PlannerInfo *root, Path *best_path, int flags)
{
Assert(IsA(best_path, AggPath));
plan = (Plan *) create_agg_plan(root,
- (AggPath *) best_path);
+ castNode(AggPath, best_path));
}
break;
case T_WindowAgg: