diff options
Diffstat (limited to 'src/backend/nodes/copyfuncs.c')
-rw-r--r-- | src/backend/nodes/copyfuncs.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index 8548a4bb011..59add5ba794 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -27,6 +27,7 @@ #include "nodes/plannodes.h" #include "nodes/relation.h" #include "utils/datum.h" +#include "utils/rel.h" /* @@ -4254,6 +4255,24 @@ _copyValue(const Value *from) return newnode; } + +static ForeignKeyCacheInfo * +_copyForeignKeyCacheInfo(const ForeignKeyCacheInfo *from) +{ + ForeignKeyCacheInfo *newnode = makeNode(ForeignKeyCacheInfo); + + COPY_SCALAR_FIELD(conrelid); + COPY_SCALAR_FIELD(confrelid); + COPY_SCALAR_FIELD(nkeys); + /* COPY_SCALAR_FIELD might work for these, but let's not assume that */ + memcpy(newnode->conkey, from->conkey, sizeof(newnode->conkey)); + memcpy(newnode->confkey, from->confkey, sizeof(newnode->confkey)); + memcpy(newnode->conpfeqop, from->conpfeqop, sizeof(newnode->conpfeqop)); + + return newnode; +} + + /* * copyObject * @@ -5052,6 +5071,13 @@ copyObject(const void *from) retval = _copyRoleSpec(from); break; + /* + * MISCELLANEOUS NODES + */ + case T_ForeignKeyCacheInfo: + retval = _copyForeignKeyCacheInfo(from); + break; + default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(from)); retval = 0; /* keep compiler quiet */ |