/* Copy a simple scalar field (int, float, bool, enum, etc) */ #define COPY_SCALAR_FIELD(fldname) \
(newnode->fldname = from->fldname)
/* Copy a field that is a pointer to some kind of Node or Node tree */ #define COPY_NODE_FIELD(fldname) \
(newnode->fldname = copyObjectImpl(from->fldname))
/* Copy a field that is a pointer to a Bitmapset */ #define COPY_BITMAPSET_FIELD(fldname) \
(newnode->fldname = bms_copy(from->fldname))
/* Copy a field that is a pointer to a C string, or perhaps NULL */ #define COPY_STRING_FIELD(fldname) \
(newnode->fldname = from->fldname ? pstrdup(from->fldname) : NULL)
/* Copy a field that is an inline array */ #define COPY_ARRAY_FIELD(fldname) \
memcpy(newnode->fldname, from->fldname, sizeof(newnode->fldname))
/* Copy a field that is a pointer to a simple palloc'd object of size sz */ #define COPY_POINTER_FIELD(fldname, sz) \ do { \
Size _size = (sz); \ if (_size > 0) \
{ \
newnode->fldname = palloc(_size); \
memcpy(newnode->fldname, from->fldname, _size); \
} \
} while (0)
/* Copy a parse location field (for Copy, this is same as scalar case) */ #define COPY_LOCATION_FIELD(fldname) \
(newnode->fldname = from->fldname)
COPY_SCALAR_FIELD(isnull); if (!from->isnull)
{ /* This part must duplicate other _copy*() functions. */
COPY_SCALAR_FIELD(val.node.type); switch (nodeTag(&from->val))
{ case T_Integer:
COPY_SCALAR_FIELD(val.ival.ival); break; case T_Float:
COPY_STRING_FIELD(val.fval.fval); break; case T_Boolean:
COPY_SCALAR_FIELD(val.boolval.boolval); break; case T_String:
COPY_STRING_FIELD(val.sval.sval); break; case T_BitString:
COPY_STRING_FIELD(val.bsval.bsval); break; default:
elog(ERROR, "unrecognized node type: %d",
(int) nodeTag(&from->val)); break;
}
}
case T_List:
retval = list_copy_deep(from); break;
/* *Listsofintegers,OIDsandXIDsdon'tneedtobedeep-copied, *soweperformashallowcopyvialist_copy()
*/ case T_IntList: case T_OidList: case T_XidList:
retval = list_copy(from); break;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.