summaryrefslogtreecommitdiff
path: root/src/pl/tcl/pltcl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pl/tcl/pltcl.c')
-rw-r--r--src/pl/tcl/pltcl.c30
1 files changed, 7 insertions, 23 deletions
diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c
index fba628960e..e1f21109bc 100644
--- a/src/pl/tcl/pltcl.c
+++ b/src/pl/tcl/pltcl.c
@@ -2,7 +2,7 @@
* pltcl.c - PostgreSQL support for Tcl as
* procedural language (PL)
*
- * $PostgreSQL: pgsql/src/pl/tcl/pltcl.c,v 1.100 2006/03/11 16:43:22 momjian Exp $
+ * $PostgreSQL: pgsql/src/pl/tcl/pltcl.c,v 1.101 2006/03/14 22:48:24 tgl Exp $
*
**********************************************************************/
@@ -1754,7 +1754,6 @@ pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp,
pltcl_query_desc *qdesc;
void *plan;
int i;
- HeapTuple typeTup;
Tcl_HashEntry *hashent;
int hashnew;
Tcl_HashTable *query_hash;
@@ -1802,33 +1801,18 @@ pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp,
************************************************************/
for (i = 0; i < nargs; i++)
{
- char *argcopy;
- List *names = NIL;
- ListCell *l;
- TypeName *typename;
-
- /************************************************************
- * Use SplitIdentifierString() on a copy of the type name,
- * turn the resulting pointer list into a TypeName node
- * and call typenameType() to get the pg_type tuple.
- ************************************************************/
- argcopy = pstrdup(args[i]);
- SplitIdentifierString(argcopy, '.', &names);
- typename = makeNode(TypeName);
- foreach(l, names)
- typename->names = lappend(typename->names, makeString(lfirst(l)));
+ List *names;
+ HeapTuple typeTup;
- typeTup = typenameType(typename);
+ /* Parse possibly-qualified type name and look it up in pg_type */
+ names = stringToQualifiedNameList(args[i],
+ "pltcl_SPI_prepare");
+ typeTup = typenameType(NULL, makeTypeNameFromNameList(names));
qdesc->argtypes[i] = HeapTupleGetOid(typeTup);
perm_fmgr_info(((Form_pg_type) GETSTRUCT(typeTup))->typinput,
&(qdesc->arginfuncs[i]));
qdesc->argtypioparams[i] = getTypeIOParam(typeTup);
ReleaseSysCache(typeTup);
-
- list_free(typename->names);
- pfree(typename);
- list_free(names);
- pfree(argcopy);
}
/************************************************************