|
31 | 31 | * ENHANCEMENTS, OR MODIFICATIONS.
|
32 | 32 | *
|
33 | 33 | * IDENTIFICATION
|
34 |
| - * $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.78 2003/09/14 17:25:54 tgl Exp $ |
| 34 | + * $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.79 2003/09/29 19:24:06 wieck Exp $ |
35 | 35 | *
|
36 | 36 | **********************************************************************/
|
37 | 37 |
|
@@ -1818,13 +1818,33 @@ pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp,
|
1818 | 1818 | ************************************************************/
|
1819 | 1819 | for (i = 0; i < nargs; i++)
|
1820 | 1820 | {
|
1821 |
| - /* XXX should extend this to allow qualified type names */ |
1822 |
| - typeTup = typenameType(makeTypeName((char *) args[i])); |
| 1821 | + char *argcopy; |
| 1822 | + List *names = NIL; |
| 1823 | + List *lp; |
| 1824 | + TypeName *typename; |
| 1825 | + |
| 1826 | + /************************************************************ |
| 1827 | + * Use SplitIdentifierString() on a copy of the type name, |
| 1828 | + * turn the resulting pointer list into a TypeName node |
| 1829 | + * and call typenameType() to get the pg_type tuple. |
| 1830 | + ************************************************************/ |
| 1831 | + argcopy = pstrdup(args[i]); |
| 1832 | + SplitIdentifierString(argcopy, '.', &names); |
| 1833 | + typename = makeNode(TypeName); |
| 1834 | + foreach (lp, names) |
| 1835 | + typename->names = lappend(typename->names, makeString(lfirst(lp))); |
| 1836 | + |
| 1837 | + typeTup = typenameType(typename); |
1823 | 1838 | qdesc->argtypes[i] = HeapTupleGetOid(typeTup);
|
1824 | 1839 | perm_fmgr_info(((Form_pg_type) GETSTRUCT(typeTup))->typinput,
|
1825 | 1840 | &(qdesc->arginfuncs[i]));
|
1826 | 1841 | qdesc->argtypelems[i] = ((Form_pg_type) GETSTRUCT(typeTup))->typelem;
|
1827 | 1842 | ReleaseSysCache(typeTup);
|
| 1843 | + |
| 1844 | + freeList(typename->names); |
| 1845 | + pfree(typename); |
| 1846 | + freeList(names); |
| 1847 | + pfree(argcopy); |
1828 | 1848 | }
|
1829 | 1849 |
|
1830 | 1850 | /************************************************************
|
|
0 commit comments