diff options
Diffstat (limited to 'src/backend/nodes/outfuncs.c')
-rw-r--r-- | src/backend/nodes/outfuncs.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index f713773efb4..dbed70b21d5 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -1461,6 +1461,9 @@ _outFromExpr(StringInfo str, const FromExpr *node) * * Note we do NOT print the parent, else we'd be in infinite recursion. * We can print the parent's relids for identification purposes, though. + * We also do not print the whole of param_info, since it's printed by + * _outRelOptInfo; it's sufficient and less cluttering to print just the + * required outer relids. */ static void _outPathInfo(StringInfo str, const Path *node) @@ -1468,12 +1471,15 @@ _outPathInfo(StringInfo str, const Path *node) WRITE_ENUM_FIELD(pathtype, NodeTag); appendStringInfo(str, " :parent_relids "); _outBitmapset(str, node->parent->relids); + appendStringInfo(str, " :required_outer "); + if (node->param_info) + _outBitmapset(str, node->param_info->ppi_req_outer); + else + _outBitmapset(str, NULL); WRITE_FLOAT_FIELD(rows, "%.0f"); WRITE_FLOAT_FIELD(startup_cost, "%.2f"); WRITE_FLOAT_FIELD(total_cost, "%.2f"); WRITE_NODE_FIELD(pathkeys); - WRITE_BITMAPSET_FIELD(required_outer); - WRITE_NODE_FIELD(param_clauses); } /* @@ -1727,6 +1733,7 @@ _outRelOptInfo(StringInfo str, const RelOptInfo *node) WRITE_INT_FIELD(width); WRITE_NODE_FIELD(reltargetlist); WRITE_NODE_FIELD(pathlist); + WRITE_NODE_FIELD(ppilist); WRITE_NODE_FIELD(cheapest_startup_path); WRITE_NODE_FIELD(cheapest_total_path); WRITE_NODE_FIELD(cheapest_unique_path); @@ -1818,6 +1825,16 @@ _outPathKey(StringInfo str, const PathKey *node) } static void +_outParamPathInfo(StringInfo str, const ParamPathInfo *node) +{ + WRITE_NODE_TYPE("PARAMPATHINFO"); + + WRITE_BITMAPSET_FIELD(ppi_req_outer); + WRITE_FLOAT_FIELD(ppi_rows, "%.0f"); + WRITE_NODE_FIELD(ppi_clauses); +} + +static void _outRestrictInfo(StringInfo str, const RestrictInfo *node) { WRITE_NODE_TYPE("RESTRICTINFO"); @@ -1830,6 +1847,7 @@ _outRestrictInfo(StringInfo str, const RestrictInfo *node) WRITE_BOOL_FIELD(pseudoconstant); WRITE_BITMAPSET_FIELD(clause_relids); WRITE_BITMAPSET_FIELD(required_relids); + WRITE_BITMAPSET_FIELD(outer_relids); WRITE_BITMAPSET_FIELD(nullable_relids); WRITE_BITMAPSET_FIELD(left_relids); WRITE_BITMAPSET_FIELD(right_relids); @@ -3001,6 +3019,9 @@ _outNode(StringInfo str, const void *obj) case T_PathKey: _outPathKey(str, obj); break; + case T_ParamPathInfo: + _outParamPathInfo(str, obj); + break; case T_RestrictInfo: _outRestrictInfo(str, obj); break; |