|
30 | 30 | #include "nodes/plannodes.h"
|
31 | 31 | #include "nodes/relation.h"
|
32 | 32 | #include "utils/datum.h"
|
| 33 | +#include "utils/rel.h" |
33 | 34 |
|
34 | 35 |
|
35 | 36 | /*
|
@@ -2050,6 +2051,7 @@ _outPlannerInfo(StringInfo str, const PlannerInfo *node)
|
2050 | 2051 | WRITE_NODE_FIELD(append_rel_list);
|
2051 | 2052 | WRITE_NODE_FIELD(rowMarks);
|
2052 | 2053 | WRITE_NODE_FIELD(placeholder_list);
|
| 2054 | + WRITE_NODE_FIELD(fkey_list); |
2053 | 2055 | WRITE_NODE_FIELD(query_pathkeys);
|
2054 | 2056 | WRITE_NODE_FIELD(group_pathkeys);
|
2055 | 2057 | WRITE_NODE_FIELD(window_pathkeys);
|
@@ -2139,6 +2141,37 @@ _outIndexOptInfo(StringInfo str, const IndexOptInfo *node)
|
2139 | 2141 | /* we don't bother with fields copied from the index AM's API struct */
|
2140 | 2142 | }
|
2141 | 2143 |
|
| 2144 | +static void |
| 2145 | +_outForeignKeyOptInfo(StringInfo str, const ForeignKeyOptInfo *node) |
| 2146 | +{ |
| 2147 | + int i; |
| 2148 | + |
| 2149 | + WRITE_NODE_TYPE("FOREIGNKEYOPTINFO"); |
| 2150 | + |
| 2151 | + WRITE_UINT_FIELD(con_relid); |
| 2152 | + WRITE_UINT_FIELD(ref_relid); |
| 2153 | + WRITE_INT_FIELD(nkeys); |
| 2154 | + appendStringInfoString(str, " :conkey"); |
| 2155 | + for (i = 0; i < node->nkeys; i++) |
| 2156 | + appendStringInfo(str, " %d", node->conkey[i]); |
| 2157 | + appendStringInfoString(str, " :confkey"); |
| 2158 | + for (i = 0; i < node->nkeys; i++) |
| 2159 | + appendStringInfo(str, " %d", node->confkey[i]); |
| 2160 | + appendStringInfoString(str, " :conpfeqop"); |
| 2161 | + for (i = 0; i < node->nkeys; i++) |
| 2162 | + appendStringInfo(str, " %u", node->conpfeqop[i]); |
| 2163 | + WRITE_INT_FIELD(nmatched_ec); |
| 2164 | + WRITE_INT_FIELD(nmatched_rcols); |
| 2165 | + WRITE_INT_FIELD(nmatched_ri); |
| 2166 | + /* for compactness, just print the number of matches per column: */ |
| 2167 | + appendStringInfoString(str, " :eclass"); |
| 2168 | + for (i = 0; i < node->nkeys; i++) |
| 2169 | + appendStringInfo(str, " %d", (node->eclass[i] != NULL)); |
| 2170 | + appendStringInfoString(str, " :rinfos"); |
| 2171 | + for (i = 0; i < node->nkeys; i++) |
| 2172 | + appendStringInfo(str, " %d", list_length(node->rinfos[i])); |
| 2173 | +} |
| 2174 | + |
2142 | 2175 | static void
|
2143 | 2176 | _outEquivalenceClass(StringInfo str, const EquivalenceClass *node)
|
2144 | 2177 | {
|
@@ -3209,6 +3242,27 @@ _outConstraint(StringInfo str, const Constraint *node)
|
3209 | 3242 | }
|
3210 | 3243 | }
|
3211 | 3244 |
|
| 3245 | +static void |
| 3246 | +_outForeignKeyCacheInfo(StringInfo str, const ForeignKeyCacheInfo *node) |
| 3247 | +{ |
| 3248 | + int i; |
| 3249 | + |
| 3250 | + WRITE_NODE_TYPE("FOREIGNKEYCACHEINFO"); |
| 3251 | + |
| 3252 | + WRITE_OID_FIELD(conrelid); |
| 3253 | + WRITE_OID_FIELD(confrelid); |
| 3254 | + WRITE_INT_FIELD(nkeys); |
| 3255 | + appendStringInfoString(str, " :conkey"); |
| 3256 | + for (i = 0; i < node->nkeys; i++) |
| 3257 | + appendStringInfo(str, " %d", node->conkey[i]); |
| 3258 | + appendStringInfoString(str, " :confkey"); |
| 3259 | + for (i = 0; i < node->nkeys; i++) |
| 3260 | + appendStringInfo(str, " %d", node->confkey[i]); |
| 3261 | + appendStringInfoString(str, " :conpfeqop"); |
| 3262 | + for (i = 0; i < node->nkeys; i++) |
| 3263 | + appendStringInfo(str, " %u", node->conpfeqop[i]); |
| 3264 | +} |
| 3265 | + |
3212 | 3266 |
|
3213 | 3267 | /*
|
3214 | 3268 | * outNode -
|
@@ -3609,6 +3663,9 @@ outNode(StringInfo str, const void *obj)
|
3609 | 3663 | case T_IndexOptInfo:
|
3610 | 3664 | _outIndexOptInfo(str, obj);
|
3611 | 3665 | break;
|
| 3666 | + case T_ForeignKeyOptInfo: |
| 3667 | + _outForeignKeyOptInfo(str, obj); |
| 3668 | + break; |
3612 | 3669 | case T_EquivalenceClass:
|
3613 | 3670 | _outEquivalenceClass(str, obj);
|
3614 | 3671 | break;
|
@@ -3785,6 +3842,9 @@ outNode(StringInfo str, const void *obj)
|
3785 | 3842 | case T_XmlSerialize:
|
3786 | 3843 | _outXmlSerialize(str, obj);
|
3787 | 3844 | break;
|
| 3845 | + case T_ForeignKeyCacheInfo: |
| 3846 | + _outForeignKeyCacheInfo(str, obj); |
| 3847 | + break; |
3788 | 3848 |
|
3789 | 3849 | default:
|
3790 | 3850 |
|
|
0 commit comments