aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2018-06-10 16:30:14 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2018-06-10 16:30:14 -0400
commit939449de0e571b8c0b07674bb7095e06e93cc059 (patch)
treec0d6bd447ba9cebaccf5e4ecaa3e3c7f34a443d1 /src/backend
parent73b7f48f78d27b1baf1a6541cbaae0fe6bd6186d (diff)
downloadpostgresql-939449de0e571b8c0b07674bb7095e06e93cc059.tar.gz
postgresql-939449de0e571b8c0b07674bb7095e06e93cc059.zip
Relocate partition pruning structs to a saner place.
These struct definitions were originally dropped into primnodes.h, which is a poor choice since that's mainly intended for primitive expression node types; these are not in that category. What they are is auxiliary info in Plan trees, so move them to plannodes.h. For consistency, also relocate some related code that was apparently placed with the aid of a dartboard. There's no interesting code changes in this commit, just reshuffling. David Rowley and Tom Lane Discussion: https://postgr.es/m/CAFj8pRBjrufA3ocDm8o4LPGNye9Y+pm1b9kCwode4X04CULG3g@mail.gmail.com
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/executor/execPartition.c2
-rw-r--r--src/backend/nodes/copyfuncs.c124
-rw-r--r--src/backend/nodes/outfuncs.c124
-rw-r--r--src/backend/nodes/readfuncs.c110
-rw-r--r--src/backend/optimizer/plan/createplan.c2
5 files changed, 183 insertions, 179 deletions
diff --git a/src/backend/executor/execPartition.c b/src/backend/executor/execPartition.c
index 6c461c91b23..5a04b3524d0 100644
--- a/src/backend/executor/execPartition.c
+++ b/src/backend/executor/execPartition.c
@@ -1434,7 +1434,7 @@ ExecSetupPartitionPruneState(PlanState *planstate, List *partitionpruneinfo)
i = 0;
foreach(lc, partitionpruneinfo)
{
- PartitionPruneInfo *pinfo = (PartitionPruneInfo *) lfirst(lc);
+ PartitionPruneInfo *pinfo = castNode(PartitionPruneInfo, lfirst(lc));
PartitionPruningData *pprune = &prunedata[i];
PartitionPruneContext *context = &pprune->context;
PartitionDesc partdesc;
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index db14a99e442..0e08dcaa3e6 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -242,9 +242,9 @@ _copyAppend(const Append *from)
/*
* copy remainder of node
*/
- COPY_NODE_FIELD(partitioned_rels);
COPY_NODE_FIELD(appendplans);
COPY_SCALAR_FIELD(first_partial_plan);
+ COPY_NODE_FIELD(partitioned_rels);
COPY_NODE_FIELD(part_prune_infos);
return newnode;
@@ -1176,6 +1176,58 @@ _copyPlanRowMark(const PlanRowMark *from)
return newnode;
}
+static PartitionPruneInfo *
+_copyPartitionPruneInfo(const PartitionPruneInfo *from)
+{
+ PartitionPruneInfo *newnode = makeNode(PartitionPruneInfo);
+
+ COPY_SCALAR_FIELD(reloid);
+ COPY_NODE_FIELD(pruning_steps);
+ COPY_BITMAPSET_FIELD(present_parts);
+ COPY_SCALAR_FIELD(nparts);
+ COPY_SCALAR_FIELD(nexprs);
+ COPY_POINTER_FIELD(subnode_map, from->nparts * sizeof(int));
+ COPY_POINTER_FIELD(subpart_map, from->nparts * sizeof(int));
+ COPY_POINTER_FIELD(hasexecparam, from->nexprs * sizeof(bool));
+ COPY_SCALAR_FIELD(do_initial_prune);
+ COPY_SCALAR_FIELD(do_exec_prune);
+ COPY_BITMAPSET_FIELD(execparamids);
+
+ return newnode;
+}
+
+/*
+ * _copyPartitionPruneStepOp
+ */
+static PartitionPruneStepOp *
+_copyPartitionPruneStepOp(const PartitionPruneStepOp *from)
+{
+ PartitionPruneStepOp *newnode = makeNode(PartitionPruneStepOp);
+
+ COPY_SCALAR_FIELD(step.step_id);
+ COPY_SCALAR_FIELD(opstrategy);
+ COPY_NODE_FIELD(exprs);
+ COPY_NODE_FIELD(cmpfns);
+ COPY_BITMAPSET_FIELD(nullkeys);
+
+ return newnode;
+}
+
+/*
+ * _copyPartitionPruneStepCombine
+ */
+static PartitionPruneStepCombine *
+_copyPartitionPruneStepCombine(const PartitionPruneStepCombine *from)
+{
+ PartitionPruneStepCombine *newnode = makeNode(PartitionPruneStepCombine);
+
+ COPY_SCALAR_FIELD(step.step_id);
+ COPY_SCALAR_FIELD(combineOp);
+ COPY_NODE_FIELD(source_stepids);
+
+ return newnode;
+}
+
/*
* _copyPlanInvalItem
*/
@@ -2134,58 +2186,6 @@ _copyOnConflictExpr(const OnConflictExpr *from)
return newnode;
}
-/*
- * _copyPartitionPruneStepOp
- */
-static PartitionPruneStepOp *
-_copyPartitionPruneStepOp(const PartitionPruneStepOp *from)
-{
- PartitionPruneStepOp *newnode = makeNode(PartitionPruneStepOp);
-
- COPY_SCALAR_FIELD(step.step_id);
- COPY_SCALAR_FIELD(opstrategy);
- COPY_NODE_FIELD(exprs);
- COPY_NODE_FIELD(cmpfns);
- COPY_BITMAPSET_FIELD(nullkeys);
-
- return newnode;
-}
-
-/*
- * _copyPartitionPruneStepCombine
- */
-static PartitionPruneStepCombine *
-_copyPartitionPruneStepCombine(const PartitionPruneStepCombine *from)
-{
- PartitionPruneStepCombine *newnode = makeNode(PartitionPruneStepCombine);
-
- COPY_SCALAR_FIELD(step.step_id);
- COPY_SCALAR_FIELD(combineOp);
- COPY_NODE_FIELD(source_stepids);
-
- return newnode;
-}
-
-static PartitionPruneInfo *
-_copyPartitionPruneInfo(const PartitionPruneInfo *from)
-{
- PartitionPruneInfo *newnode = makeNode(PartitionPruneInfo);
-
- COPY_SCALAR_FIELD(reloid);
- COPY_NODE_FIELD(pruning_steps);
- COPY_BITMAPSET_FIELD(present_parts);
- COPY_SCALAR_FIELD(nparts);
- COPY_SCALAR_FIELD(nexprs);
- COPY_POINTER_FIELD(subnode_map, from->nparts * sizeof(int));
- COPY_POINTER_FIELD(subpart_map, from->nparts * sizeof(int));
- COPY_POINTER_FIELD(hasexecparam, from->nexprs * sizeof(bool));
- COPY_SCALAR_FIELD(do_initial_prune);
- COPY_SCALAR_FIELD(do_exec_prune);
- COPY_BITMAPSET_FIELD(execparamids);
-
- return newnode;
-}
-
/* ****************************************************************
* relation.h copy functions
*
@@ -4904,6 +4904,15 @@ copyObjectImpl(const void *from)
case T_PlanRowMark:
retval = _copyPlanRowMark(from);
break;
+ case T_PartitionPruneInfo:
+ retval = _copyPartitionPruneInfo(from);
+ break;
+ case T_PartitionPruneStepOp:
+ retval = _copyPartitionPruneStepOp(from);
+ break;
+ case T_PartitionPruneStepCombine:
+ retval = _copyPartitionPruneStepCombine(from);
+ break;
case T_PlanInvalItem:
retval = _copyPlanInvalItem(from);
break;
@@ -5064,12 +5073,6 @@ copyObjectImpl(const void *from)
case T_OnConflictExpr:
retval = _copyOnConflictExpr(from);
break;
- case T_PartitionPruneStepOp:
- retval = _copyPartitionPruneStepOp(from);
- break;
- case T_PartitionPruneStepCombine:
- retval = _copyPartitionPruneStepCombine(from);
- break;
/*
* RELATION NODES
@@ -5092,9 +5095,6 @@ copyObjectImpl(const void *from)
case T_PlaceHolderInfo:
retval = _copyPlaceHolderInfo(from);
break;
- case T_PartitionPruneInfo:
- retval = _copyPartitionPruneInfo(from);
- break;
/*
* VALUE NODES
diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c
index 5895262c4a8..19879aeb463 100644
--- a/src/backend/nodes/outfuncs.c
+++ b/src/backend/nodes/outfuncs.c
@@ -399,9 +399,9 @@ _outAppend(StringInfo str, const Append *node)
_outPlanInfo(str, (const Plan *) node);
- WRITE_NODE_FIELD(partitioned_rels);
WRITE_NODE_FIELD(appendplans);
WRITE_INT_FIELD(first_partial_plan);
+ WRITE_NODE_FIELD(partitioned_rels);
WRITE_NODE_FIELD(part_prune_infos);
}
@@ -1011,6 +1011,58 @@ _outPlanRowMark(StringInfo str, const PlanRowMark *node)
}
static void
+_outPartitionPruneInfo(StringInfo str, const PartitionPruneInfo *node)
+{
+ int i;
+
+ WRITE_NODE_TYPE("PARTITIONPRUNEINFO");
+
+ WRITE_OID_FIELD(reloid);
+ WRITE_NODE_FIELD(pruning_steps);
+ WRITE_BITMAPSET_FIELD(present_parts);
+ WRITE_INT_FIELD(nparts);
+ WRITE_INT_FIELD(nexprs);
+
+ appendStringInfoString(str, " :subnode_map");
+ for (i = 0; i < node->nparts; i++)
+ appendStringInfo(str, " %d", node->subnode_map[i]);
+
+ appendStringInfoString(str, " :subpart_map");
+ for (i = 0; i < node->nparts; i++)
+ appendStringInfo(str, " %d", node->subpart_map[i]);
+
+ appendStringInfoString(str, " :hasexecparam");
+ for (i = 0; i < node->nexprs; i++)
+ appendStringInfo(str, " %s", booltostr(node->hasexecparam[i]));
+
+ WRITE_BOOL_FIELD(do_initial_prune);
+ WRITE_BOOL_FIELD(do_exec_prune);
+ WRITE_BITMAPSET_FIELD(execparamids);
+}
+
+static void
+_outPartitionPruneStepOp(StringInfo str, const PartitionPruneStepOp *node)
+{
+ WRITE_NODE_TYPE("PARTITIONPRUNESTEPOP");
+
+ WRITE_INT_FIELD(step.step_id);
+ WRITE_INT_FIELD(opstrategy);
+ WRITE_NODE_FIELD(exprs);
+ WRITE_NODE_FIELD(cmpfns);
+ WRITE_BITMAPSET_FIELD(nullkeys);
+}
+
+static void
+_outPartitionPruneStepCombine(StringInfo str, const PartitionPruneStepCombine *node)
+{
+ WRITE_NODE_TYPE("PARTITIONPRUNESTEPCOMBINE");
+
+ WRITE_INT_FIELD(step.step_id);
+ WRITE_ENUM_FIELD(combineOp, PartitionPruneCombineOp);
+ WRITE_NODE_FIELD(source_stepids);
+}
+
+static void
_outPlanInvalItem(StringInfo str, const PlanInvalItem *node)
{
WRITE_NODE_TYPE("PLANINVALITEM");
@@ -1695,28 +1747,6 @@ _outFromExpr(StringInfo str, const FromExpr *node)
}
static void
-_outPartitionPruneStepOp(StringInfo str, const PartitionPruneStepOp *node)
-{
- WRITE_NODE_TYPE("PARTITIONPRUNESTEPOP");
-
- WRITE_INT_FIELD(step.step_id);
- WRITE_INT_FIELD(opstrategy);
- WRITE_NODE_FIELD(exprs);
- WRITE_NODE_FIELD(cmpfns);
- WRITE_BITMAPSET_FIELD(nullkeys);
-}
-
-static void
-_outPartitionPruneStepCombine(StringInfo str, const PartitionPruneStepCombine *node)
-{
- WRITE_NODE_TYPE("PARTITIONPRUNESTEPCOMBINE");
-
- WRITE_INT_FIELD(step.step_id);
- WRITE_ENUM_FIELD(combineOp, PartitionPruneCombineOp);
- WRITE_NODE_FIELD(source_stepids);
-}
-
-static void
_outOnConflictExpr(StringInfo str, const OnConflictExpr *node)
{
WRITE_NODE_TYPE("ONCONFLICTEXPR");
@@ -1731,36 +1761,6 @@ _outOnConflictExpr(StringInfo str, const OnConflictExpr *node)
WRITE_NODE_FIELD(exclRelTlist);
}
-static void
-_outPartitionPruneInfo(StringInfo str, const PartitionPruneInfo *node)
-{
- int i;
-
- WRITE_NODE_TYPE("PARTITIONPRUNEINFO");
-
- WRITE_OID_FIELD(reloid);
- WRITE_NODE_FIELD(pruning_steps);
- WRITE_BITMAPSET_FIELD(present_parts);
- WRITE_INT_FIELD(nparts);
- WRITE_INT_FIELD(nexprs);
-
- appendStringInfoString(str, " :subnode_map");
- for (i = 0; i < node->nparts; i++)
- appendStringInfo(str, " %d", node->subnode_map[i]);
-
- appendStringInfoString(str, " :subpart_map");
- for (i = 0; i < node->nparts; i++)
- appendStringInfo(str, " %d", node->subpart_map[i]);
-
- appendStringInfoString(str, " :hasexecparam");
- for (i = 0; i < node->nexprs; i++)
- appendStringInfo(str, " %s", booltostr(node->hasexecparam[i]));
-
- WRITE_BOOL_FIELD(do_initial_prune);
- WRITE_BOOL_FIELD(do_exec_prune);
- WRITE_BITMAPSET_FIELD(execparamids);
-}
-
/*****************************************************************************
*
* Stuff from relation.h.
@@ -3827,6 +3827,15 @@ outNode(StringInfo str, const void *obj)
case T_PlanRowMark:
_outPlanRowMark(str, obj);
break;
+ case T_PartitionPruneInfo:
+ _outPartitionPruneInfo(str, obj);
+ break;
+ case T_PartitionPruneStepOp:
+ _outPartitionPruneStepOp(str, obj);
+ break;
+ case T_PartitionPruneStepCombine:
+ _outPartitionPruneStepCombine(str, obj);
+ break;
case T_PlanInvalItem:
_outPlanInvalItem(str, obj);
break;
@@ -3983,15 +3992,6 @@ outNode(StringInfo str, const void *obj)
case T_OnConflictExpr:
_outOnConflictExpr(str, obj);
break;
- case T_PartitionPruneStepOp:
- _outPartitionPruneStepOp(str, obj);
- break;
- case T_PartitionPruneStepCombine:
- _outPartitionPruneStepCombine(str, obj);
- break;
- case T_PartitionPruneInfo:
- _outPartitionPruneInfo(str, obj);
- break;
case T_Path:
_outPath(str, obj);
break;
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index da58aad4b32..f41e590a155 100644
--- a/src/backend/nodes/readfuncs.c
+++ b/src/backend/nodes/readfuncs.c
@@ -1328,52 +1328,6 @@ _readOnConflictExpr(void)
READ_DONE();
}
-static PartitionPruneStepOp *
-_readPartitionPruneStepOp(void)
-{
- READ_LOCALS(PartitionPruneStepOp);
-
- READ_INT_FIELD(step.step_id);
- READ_INT_FIELD(opstrategy);
- READ_NODE_FIELD(exprs);
- READ_NODE_FIELD(cmpfns);
- READ_BITMAPSET_FIELD(nullkeys);
-
- READ_DONE();
-}
-
-static PartitionPruneStepCombine *
-_readPartitionPruneStepCombine(void)
-{
- READ_LOCALS(PartitionPruneStepCombine);
-
- READ_INT_FIELD(step.step_id);
- READ_ENUM_FIELD(combineOp, PartitionPruneCombineOp);
- READ_NODE_FIELD(source_stepids);
-
- READ_DONE();
-}
-
-static PartitionPruneInfo *
-_readPartitionPruneInfo(void)
-{
- READ_LOCALS(PartitionPruneInfo);
-
- READ_OID_FIELD(reloid);
- READ_NODE_FIELD(pruning_steps);
- READ_BITMAPSET_FIELD(present_parts);
- READ_INT_FIELD(nparts);
- READ_INT_FIELD(nexprs);
- READ_INT_ARRAY(subnode_map, local_node->nparts);
- READ_INT_ARRAY(subpart_map, local_node->nparts);
- READ_BOOL_ARRAY(hasexecparam, local_node->nexprs);
- READ_BOOL_FIELD(do_initial_prune);
- READ_BOOL_FIELD(do_exec_prune);
- READ_BITMAPSET_FIELD(execparamids);
-
- READ_DONE();
-}
-
/*
* Stuff from parsenodes.h.
*/
@@ -1506,6 +1460,10 @@ _readDefElem(void)
}
/*
+ * Stuff from plannodes.h.
+ */
+
+/*
* _readPlannedStmt
*/
static PlannedStmt *
@@ -1651,9 +1609,9 @@ _readAppend(void)
ReadCommonPlan(&local_node->plan);
- READ_NODE_FIELD(partitioned_rels);
READ_NODE_FIELD(appendplans);
READ_INT_FIELD(first_partial_plan);
+ READ_NODE_FIELD(partitioned_rels);
READ_NODE_FIELD(part_prune_infos);
READ_DONE();
@@ -2365,6 +2323,52 @@ _readPlanRowMark(void)
READ_DONE();
}
+static PartitionPruneInfo *
+_readPartitionPruneInfo(void)
+{
+ READ_LOCALS(PartitionPruneInfo);
+
+ READ_OID_FIELD(reloid);
+ READ_NODE_FIELD(pruning_steps);
+ READ_BITMAPSET_FIELD(present_parts);
+ READ_INT_FIELD(nparts);
+ READ_INT_FIELD(nexprs);
+ READ_INT_ARRAY(subnode_map, local_node->nparts);
+ READ_INT_ARRAY(subpart_map, local_node->nparts);
+ READ_BOOL_ARRAY(hasexecparam, local_node->nexprs);
+ READ_BOOL_FIELD(do_initial_prune);
+ READ_BOOL_FIELD(do_exec_prune);
+ READ_BITMAPSET_FIELD(execparamids);
+
+ READ_DONE();
+}
+
+static PartitionPruneStepOp *
+_readPartitionPruneStepOp(void)
+{
+ READ_LOCALS(PartitionPruneStepOp);
+
+ READ_INT_FIELD(step.step_id);
+ READ_INT_FIELD(opstrategy);
+ READ_NODE_FIELD(exprs);
+ READ_NODE_FIELD(cmpfns);
+ READ_BITMAPSET_FIELD(nullkeys);
+
+ READ_DONE();
+}
+
+static PartitionPruneStepCombine *
+_readPartitionPruneStepCombine(void)
+{
+ READ_LOCALS(PartitionPruneStepCombine);
+
+ READ_INT_FIELD(step.step_id);
+ READ_ENUM_FIELD(combineOp, PartitionPruneCombineOp);
+ READ_NODE_FIELD(source_stepids);
+
+ READ_DONE();
+}
+
/*
* _readPlanInvalItem
*/
@@ -2619,12 +2623,6 @@ parseNodeString(void)
return_value = _readFromExpr();
else if (MATCH("ONCONFLICTEXPR", 14))
return_value = _readOnConflictExpr();
- else if (MATCH("PARTITIONPRUNESTEPOP", 20))
- return_value = _readPartitionPruneStepOp();
- else if (MATCH("PARTITIONPRUNESTEPCOMBINE", 25))
- return_value = _readPartitionPruneStepCombine();
- else if (MATCH("PARTITIONPRUNEINFO", 18))
- return_value = _readPartitionPruneInfo();
else if (MATCH("RTE", 3))
return_value = _readRangeTblEntry();
else if (MATCH("RANGETBLFUNCTION", 16))
@@ -2725,6 +2723,12 @@ parseNodeString(void)
return_value = _readNestLoopParam();
else if (MATCH("PLANROWMARK", 11))
return_value = _readPlanRowMark();
+ else if (MATCH("PARTITIONPRUNEINFO", 18))
+ return_value = _readPartitionPruneInfo();
+ else if (MATCH("PARTITIONPRUNESTEPOP", 20))
+ return_value = _readPartitionPruneStepOp();
+ else if (MATCH("PARTITIONPRUNESTEPCOMBINE", 25))
+ return_value = _readPartitionPruneStepCombine();
else if (MATCH("PLANINVALITEM", 13))
return_value = _readPlanInvalItem();
else if (MATCH("SUBPLAN", 7))
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index ca2e0527dbc..cf82b7052db 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -5426,9 +5426,9 @@ make_append(List *appendplans, int first_partial_plan,
plan->qual = NIL;
plan->lefttree = NULL;
plan->righttree = NULL;
- node->partitioned_rels = partitioned_rels;
node->appendplans = appendplans;
node->first_partial_plan = first_partial_plan;
+ node->partitioned_rels = partitioned_rels;
node->part_prune_infos = partpruneinfos;
return node;
}