inout_expanded_objects.patch
application/octet-stream
Filename: inout_expanded_objects.patch
Type: application/octet-stream
Part: 0
Message:
INOUT params with expanded objects
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/pl/plpgsql/src/pl_exec.c | 15 | 4 |
diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c
index 63598aba8a8..c7320adbfd2 100644
--- a/src/pl/plpgsql/src/pl_exec.c
+++ b/src/pl/plpgsql/src/pl_exec.c
@@ -5128,10 +5128,21 @@ exec_assign_value(PLpgSQL_execstate *estate,
}
else
{
- /* else transfer value if R/W, else just datumCopy */
- newvalue = datumTransfer(newvalue,
- false,
- var->datatype->typlen);
+ if (var->datatype->typlen == -1 &&
+ VARATT_IS_EXTERNAL_EXPANDED(DatumGetPointer(newvalue)))
+ {
+ MemoryContext oldcontext = MemoryContextSwitchTo(estate->datum_context);
+ newvalue = datumCopy(newvalue, false, -1);
+ MemoryContextSwitchTo(oldcontext);
+ }
+ else
+ {
+ /* else transfer value if R/W, else just datumCopy */
+ newvalue = datumTransfer(newvalue,
+ false,
+ var->datatype->typlen);
+ }
+
}
}