diff options
Diffstat (limited to 'src/backend/nodes/outfuncs.c')
-rw-r--r-- | src/backend/nodes/outfuncs.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 726c7120518..b6754478dcf 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -30,6 +30,7 @@ #include "nodes/plannodes.h" #include "nodes/relation.h" #include "utils/datum.h" +#include "utils/rel.h" /* @@ -2050,6 +2051,7 @@ _outPlannerInfo(StringInfo str, const PlannerInfo *node) WRITE_NODE_FIELD(append_rel_list); WRITE_NODE_FIELD(rowMarks); WRITE_NODE_FIELD(placeholder_list); + WRITE_NODE_FIELD(fkey_list); WRITE_NODE_FIELD(query_pathkeys); WRITE_NODE_FIELD(group_pathkeys); WRITE_NODE_FIELD(window_pathkeys); @@ -2140,6 +2142,37 @@ _outIndexOptInfo(StringInfo str, const IndexOptInfo *node) } static void +_outForeignKeyOptInfo(StringInfo str, const ForeignKeyOptInfo *node) +{ + int i; + + WRITE_NODE_TYPE("FOREIGNKEYOPTINFO"); + + WRITE_UINT_FIELD(con_relid); + WRITE_UINT_FIELD(ref_relid); + WRITE_INT_FIELD(nkeys); + appendStringInfoString(str, " :conkey"); + for (i = 0; i < node->nkeys; i++) + appendStringInfo(str, " %d", node->conkey[i]); + appendStringInfoString(str, " :confkey"); + for (i = 0; i < node->nkeys; i++) + appendStringInfo(str, " %d", node->confkey[i]); + appendStringInfoString(str, " :conpfeqop"); + for (i = 0; i < node->nkeys; i++) + appendStringInfo(str, " %u", node->conpfeqop[i]); + WRITE_INT_FIELD(nmatched_ec); + WRITE_INT_FIELD(nmatched_rcols); + WRITE_INT_FIELD(nmatched_ri); + /* for compactness, just print the number of matches per column: */ + appendStringInfoString(str, " :eclass"); + for (i = 0; i < node->nkeys; i++) + appendStringInfo(str, " %d", (node->eclass[i] != NULL)); + appendStringInfoString(str, " :rinfos"); + for (i = 0; i < node->nkeys; i++) + appendStringInfo(str, " %d", list_length(node->rinfos[i])); +} + +static void _outEquivalenceClass(StringInfo str, const EquivalenceClass *node) { /* @@ -3209,6 +3242,27 @@ _outConstraint(StringInfo str, const Constraint *node) } } +static void +_outForeignKeyCacheInfo(StringInfo str, const ForeignKeyCacheInfo *node) +{ + int i; + + WRITE_NODE_TYPE("FOREIGNKEYCACHEINFO"); + + WRITE_OID_FIELD(conrelid); + WRITE_OID_FIELD(confrelid); + WRITE_INT_FIELD(nkeys); + appendStringInfoString(str, " :conkey"); + for (i = 0; i < node->nkeys; i++) + appendStringInfo(str, " %d", node->conkey[i]); + appendStringInfoString(str, " :confkey"); + for (i = 0; i < node->nkeys; i++) + appendStringInfo(str, " %d", node->confkey[i]); + appendStringInfoString(str, " :conpfeqop"); + for (i = 0; i < node->nkeys; i++) + appendStringInfo(str, " %u", node->conpfeqop[i]); +} + /* * outNode - @@ -3609,6 +3663,9 @@ outNode(StringInfo str, const void *obj) case T_IndexOptInfo: _outIndexOptInfo(str, obj); break; + case T_ForeignKeyOptInfo: + _outForeignKeyOptInfo(str, obj); + break; case T_EquivalenceClass: _outEquivalenceClass(str, obj); break; @@ -3785,6 +3842,9 @@ outNode(StringInfo str, const void *obj) case T_XmlSerialize: _outXmlSerialize(str, obj); break; + case T_ForeignKeyCacheInfo: + _outForeignKeyCacheInfo(str, obj); + break; default: |