summaryrefslogtreecommitdiff
path: root/src/pl/plpython/plpython.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pl/plpython/plpython.c')
-rw-r--r--src/pl/plpython/plpython.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/pl/plpython/plpython.c b/src/pl/plpython/plpython.c
index 4541ffb54d9..3db6f7d23a7 100644
--- a/src/pl/plpython/plpython.c
+++ b/src/pl/plpython/plpython.c
@@ -2664,18 +2664,28 @@ PLySequence_ToArray(PLyObToDatum *arg, int32 typmod, PyObject *plrv)
static Datum
PLyString_ToComposite(PLyTypeInfo *info, TupleDesc desc, PyObject *string)
{
+ Datum result;
HeapTuple typeTup;
+ PLyTypeInfo locinfo;
+
+ /* Create a dummy PLyTypeInfo */
+ MemSet(&locinfo, 0, sizeof(PLyTypeInfo));
+ PLy_typeinfo_init(&locinfo);
typeTup = SearchSysCache1(TYPEOID, ObjectIdGetDatum(desc->tdtypeid));
if (!HeapTupleIsValid(typeTup))
elog(ERROR, "cache lookup failed for type %u", desc->tdtypeid);
- PLy_output_datum_func2(&info->out.d, typeTup);
+ PLy_output_datum_func2(&locinfo.out.d, typeTup);
ReleaseSysCache(typeTup);
ReleaseTupleDesc(desc);
- return PLyObject_ToDatum(&info->out.d, info->out.d.typmod, string);
+ result = PLyObject_ToDatum(&locinfo.out.d, desc->tdtypmod, string);
+
+ PLy_typeinfo_dealloc(&locinfo);
+
+ return result;
}