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);
+						}
+
 					}
 				}