|
|
|
@ -216,7 +216,7 @@ typedef struct RecordIOData |
|
|
|
|
Oid record_type; |
|
|
|
|
int32 record_typmod; |
|
|
|
|
int ncolumns; |
|
|
|
|
ColumnIOData columns[1]; /* VARIABLE LENGTH ARRAY */ |
|
|
|
|
ColumnIOData columns[FLEXIBLE_ARRAY_MEMBER]; |
|
|
|
|
} RecordIOData; |
|
|
|
|
|
|
|
|
|
/* state for populate_recordset */ |
|
|
|
@ -2148,8 +2148,8 @@ populate_record_worker(FunctionCallInfo fcinfo, const char *funcname, |
|
|
|
|
{ |
|
|
|
|
fcinfo->flinfo->fn_extra = |
|
|
|
|
MemoryContextAlloc(fcinfo->flinfo->fn_mcxt, |
|
|
|
|
sizeof(RecordIOData) - sizeof(ColumnIOData) |
|
|
|
|
+ ncolumns * sizeof(ColumnIOData)); |
|
|
|
|
offsetof(RecordIOData, columns) + |
|
|
|
|
ncolumns * sizeof(ColumnIOData)); |
|
|
|
|
my_extra = (RecordIOData *) fcinfo->flinfo->fn_extra; |
|
|
|
|
my_extra->record_type = InvalidOid; |
|
|
|
|
my_extra->record_typmod = 0; |
|
|
|
@ -2161,8 +2161,8 @@ populate_record_worker(FunctionCallInfo fcinfo, const char *funcname, |
|
|
|
|
my_extra->record_typmod != tupTypmod)) |
|
|
|
|
{ |
|
|
|
|
MemSet(my_extra, 0, |
|
|
|
|
sizeof(RecordIOData) - sizeof(ColumnIOData) |
|
|
|
|
+ ncolumns * sizeof(ColumnIOData)); |
|
|
|
|
offsetof(RecordIOData, columns) + |
|
|
|
|
ncolumns * sizeof(ColumnIOData)); |
|
|
|
|
my_extra->record_type = tupType; |
|
|
|
|
my_extra->record_typmod = tupTypmod; |
|
|
|
|
my_extra->ncolumns = ncolumns; |
|
|
|
@ -2653,8 +2653,8 @@ populate_recordset_worker(FunctionCallInfo fcinfo, const char *funcname, |
|
|
|
|
{ |
|
|
|
|
fcinfo->flinfo->fn_extra = |
|
|
|
|
MemoryContextAlloc(fcinfo->flinfo->fn_mcxt, |
|
|
|
|
sizeof(RecordIOData) - sizeof(ColumnIOData) |
|
|
|
|
+ ncolumns * sizeof(ColumnIOData)); |
|
|
|
|
offsetof(RecordIOData, columns) + |
|
|
|
|
ncolumns * sizeof(ColumnIOData)); |
|
|
|
|
my_extra = (RecordIOData *) fcinfo->flinfo->fn_extra; |
|
|
|
|
my_extra->record_type = InvalidOid; |
|
|
|
|
my_extra->record_typmod = 0; |
|
|
|
@ -2664,8 +2664,8 @@ populate_recordset_worker(FunctionCallInfo fcinfo, const char *funcname, |
|
|
|
|
my_extra->record_typmod != tupTypmod) |
|
|
|
|
{ |
|
|
|
|
MemSet(my_extra, 0, |
|
|
|
|
sizeof(RecordIOData) - sizeof(ColumnIOData) |
|
|
|
|
+ ncolumns * sizeof(ColumnIOData)); |
|
|
|
|
offsetof(RecordIOData, columns) + |
|
|
|
|
ncolumns * sizeof(ColumnIOData)); |
|
|
|
|
my_extra->record_type = tupType; |
|
|
|
|
my_extra->record_typmod = tupTypmod; |
|
|
|
|
my_extra->ncolumns = ncolumns; |
|
|
|
|