diff options
author | Andrew Dunstan | 2007-02-21 03:27:32 +0000 |
---|---|---|
committer | Andrew Dunstan | 2007-02-21 03:27:32 +0000 |
commit | 70a6ebd41534dffcb7d53a28fc43de44cfabc9c8 (patch) | |
tree | c319789f927c908ad88056972d235db47889b8a1 /src/pl/plpython/plpython.c | |
parent | 62a19a7bb61995194f32180ae58f019401c68166 (diff) |
Allow pltcl args to spi_prepare and plpython args to plpy.prepare to be standard type aliases as well as those known in pg_type. Similar to recent change in plperl.
Diffstat (limited to 'src/pl/plpython/plpython.c')
-rw-r--r-- | src/pl/plpython/plpython.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/pl/plpython/plpython.c b/src/pl/plpython/plpython.c index 2ef4778cdf..aeaccf6810 100644 --- a/src/pl/plpython/plpython.c +++ b/src/pl/plpython/plpython.c @@ -2309,27 +2309,34 @@ PLy_spi_prepare(PyObject * self, PyObject * args) for (i = 0; i < nargs; i++) { char *sptr; - List *names; HeapTuple typeTup; + Oid typeId; + int32 typmod; Form_pg_type typeStruct; optr = PySequence_GetItem(list, i); if (!PyString_Check(optr)) elog(ERROR, "Type names must be strings."); sptr = PyString_AsString(optr); + + /******************************************************** + * Resolve argument type names and then look them up by + * oid in the system cache, and remember the required + *information for input conversion. + ********************************************************/ + + parseTypeString(sptr, &typeId, &typmod); + + typeTup = SearchSysCache(TYPEOID, + ObjectIdGetDatum(typeId), + 0,0,0); + if (!HeapTupleIsValid(typeTup)) + elog(ERROR, "cache lookup failed for type %u", typeId); - /* - * Parse possibly-qualified type name and look it up in - * pg_type - */ - names = stringToQualifiedNameList(sptr, - "PLy_spi_prepare"); - typeTup = typenameType(NULL, - makeTypeNameFromNameList(names)); Py_DECREF(optr); optr = NULL; /* this is important */ - plan->types[i] = HeapTupleGetOid(typeTup); + plan->types[i] = typeId; typeStruct = (Form_pg_type) GETSTRUCT(typeTup); if (typeStruct->typtype != 'c') PLy_output_datum_func(&plan->args[i], typeTup); |