Check the size in COPY_POINTER_FIELD
instead of making each caller do it. Discussion: https://www.postgresql.org/message-id/flat/c1097590-a6a4-486a-64b1-e1f9cc0533ce@enterprisedb.com
This commit is contained in:
parent
18fea737b5
commit
c1132aae33
|
@ -57,8 +57,11 @@
|
||||||
#define COPY_POINTER_FIELD(fldname, sz) \
|
#define COPY_POINTER_FIELD(fldname, sz) \
|
||||||
do { \
|
do { \
|
||||||
Size _size = (sz); \
|
Size _size = (sz); \
|
||||||
newnode->fldname = palloc(_size); \
|
if (_size > 0) \
|
||||||
memcpy(newnode->fldname, from->fldname, _size); \
|
{ \
|
||||||
|
newnode->fldname = palloc(_size); \
|
||||||
|
memcpy(newnode->fldname, from->fldname, _size); \
|
||||||
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/* Copy a parse location field (for Copy, this is same as scalar case) */
|
/* Copy a parse location field (for Copy, this is same as scalar case) */
|
||||||
|
@ -296,12 +299,9 @@ _copyRecursiveUnion(const RecursiveUnion *from)
|
||||||
*/
|
*/
|
||||||
COPY_SCALAR_FIELD(wtParam);
|
COPY_SCALAR_FIELD(wtParam);
|
||||||
COPY_SCALAR_FIELD(numCols);
|
COPY_SCALAR_FIELD(numCols);
|
||||||
if (from->numCols > 0)
|
COPY_POINTER_FIELD(dupColIdx, from->numCols * sizeof(AttrNumber));
|
||||||
{
|
COPY_POINTER_FIELD(dupOperators, from->numCols * sizeof(Oid));
|
||||||
COPY_POINTER_FIELD(dupColIdx, from->numCols * sizeof(AttrNumber));
|
COPY_POINTER_FIELD(dupCollations, from->numCols * sizeof(Oid));
|
||||||
COPY_POINTER_FIELD(dupOperators, from->numCols * sizeof(Oid));
|
|
||||||
COPY_POINTER_FIELD(dupCollations, from->numCols * sizeof(Oid));
|
|
||||||
}
|
|
||||||
COPY_SCALAR_FIELD(numGroups);
|
COPY_SCALAR_FIELD(numGroups);
|
||||||
|
|
||||||
return newnode;
|
return newnode;
|
||||||
|
@ -896,13 +896,10 @@ _copyMergeJoin(const MergeJoin *from)
|
||||||
COPY_SCALAR_FIELD(skip_mark_restore);
|
COPY_SCALAR_FIELD(skip_mark_restore);
|
||||||
COPY_NODE_FIELD(mergeclauses);
|
COPY_NODE_FIELD(mergeclauses);
|
||||||
numCols = list_length(from->mergeclauses);
|
numCols = list_length(from->mergeclauses);
|
||||||
if (numCols > 0)
|
COPY_POINTER_FIELD(mergeFamilies, numCols * sizeof(Oid));
|
||||||
{
|
COPY_POINTER_FIELD(mergeCollations, numCols * sizeof(Oid));
|
||||||
COPY_POINTER_FIELD(mergeFamilies, numCols * sizeof(Oid));
|
COPY_POINTER_FIELD(mergeStrategies, numCols * sizeof(int));
|
||||||
COPY_POINTER_FIELD(mergeCollations, numCols * sizeof(Oid));
|
COPY_POINTER_FIELD(mergeNullsFirst, numCols * sizeof(bool));
|
||||||
COPY_POINTER_FIELD(mergeStrategies, numCols * sizeof(int));
|
|
||||||
COPY_POINTER_FIELD(mergeNullsFirst, numCols * sizeof(bool));
|
|
||||||
}
|
|
||||||
|
|
||||||
return newnode;
|
return newnode;
|
||||||
}
|
}
|
||||||
|
@ -1064,12 +1061,9 @@ _copyAgg(const Agg *from)
|
||||||
COPY_SCALAR_FIELD(aggstrategy);
|
COPY_SCALAR_FIELD(aggstrategy);
|
||||||
COPY_SCALAR_FIELD(aggsplit);
|
COPY_SCALAR_FIELD(aggsplit);
|
||||||
COPY_SCALAR_FIELD(numCols);
|
COPY_SCALAR_FIELD(numCols);
|
||||||
if (from->numCols > 0)
|
COPY_POINTER_FIELD(grpColIdx, from->numCols * sizeof(AttrNumber));
|
||||||
{
|
COPY_POINTER_FIELD(grpOperators, from->numCols * sizeof(Oid));
|
||||||
COPY_POINTER_FIELD(grpColIdx, from->numCols * sizeof(AttrNumber));
|
COPY_POINTER_FIELD(grpCollations, from->numCols * sizeof(Oid));
|
||||||
COPY_POINTER_FIELD(grpOperators, from->numCols * sizeof(Oid));
|
|
||||||
COPY_POINTER_FIELD(grpCollations, from->numCols * sizeof(Oid));
|
|
||||||
}
|
|
||||||
COPY_SCALAR_FIELD(numGroups);
|
COPY_SCALAR_FIELD(numGroups);
|
||||||
COPY_SCALAR_FIELD(transitionSpace);
|
COPY_SCALAR_FIELD(transitionSpace);
|
||||||
COPY_BITMAPSET_FIELD(aggParams);
|
COPY_BITMAPSET_FIELD(aggParams);
|
||||||
|
@ -1091,19 +1085,13 @@ _copyWindowAgg(const WindowAgg *from)
|
||||||
|
|
||||||
COPY_SCALAR_FIELD(winref);
|
COPY_SCALAR_FIELD(winref);
|
||||||
COPY_SCALAR_FIELD(partNumCols);
|
COPY_SCALAR_FIELD(partNumCols);
|
||||||
if (from->partNumCols > 0)
|
COPY_POINTER_FIELD(partColIdx, from->partNumCols * sizeof(AttrNumber));
|
||||||
{
|
COPY_POINTER_FIELD(partOperators, from->partNumCols * sizeof(Oid));
|
||||||
COPY_POINTER_FIELD(partColIdx, from->partNumCols * sizeof(AttrNumber));
|
COPY_POINTER_FIELD(partCollations, from->partNumCols * sizeof(Oid));
|
||||||
COPY_POINTER_FIELD(partOperators, from->partNumCols * sizeof(Oid));
|
|
||||||
COPY_POINTER_FIELD(partCollations, from->partNumCols * sizeof(Oid));
|
|
||||||
}
|
|
||||||
COPY_SCALAR_FIELD(ordNumCols);
|
COPY_SCALAR_FIELD(ordNumCols);
|
||||||
if (from->ordNumCols > 0)
|
COPY_POINTER_FIELD(ordColIdx, from->ordNumCols * sizeof(AttrNumber));
|
||||||
{
|
COPY_POINTER_FIELD(ordOperators, from->ordNumCols * sizeof(Oid));
|
||||||
COPY_POINTER_FIELD(ordColIdx, from->ordNumCols * sizeof(AttrNumber));
|
COPY_POINTER_FIELD(ordCollations, from->ordNumCols * sizeof(Oid));
|
||||||
COPY_POINTER_FIELD(ordOperators, from->ordNumCols * sizeof(Oid));
|
|
||||||
COPY_POINTER_FIELD(ordCollations, from->ordNumCols * sizeof(Oid));
|
|
||||||
}
|
|
||||||
COPY_SCALAR_FIELD(frameOptions);
|
COPY_SCALAR_FIELD(frameOptions);
|
||||||
COPY_NODE_FIELD(startOffset);
|
COPY_NODE_FIELD(startOffset);
|
||||||
COPY_NODE_FIELD(endOffset);
|
COPY_NODE_FIELD(endOffset);
|
||||||
|
|
Loading…
Reference in New Issue