diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 1999-10-02 21:33:33 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 1999-10-02 21:33:33 +0000 |
| commit | 6eb8d255d217c7f0ed2a89e75ae5cb14653c64eb (patch) | |
| tree | a46783f6fd6caf895f23cfc7275472b0d43715f6 /src/backend/utils | |
| parent | e23a2b1ea02fbbb121048d5f616c397949ebdca8 (diff) | |
| download | postgresql-6eb8d255d217c7f0ed2a89e75ae5cb14653c64eb.tar.gz | |
Allow CREATE FUNCTION's WITH clause to be used for all language types,
not just C, so that ISCACHABLE attribute can be specified for user-defined
functions. Get rid of ParamString node type, which wasn't actually being
generated by gram.y anymore, even though define.c thought that was what
it was getting. Clean up minor bug in dfmgr.c (premature heap_close).
Diffstat (limited to 'src/backend/utils')
| -rw-r--r-- | src/backend/utils/fmgr/dfmgr.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c index a69d20a047..15b22bdfa4 100644 --- a/src/backend/utils/fmgr/dfmgr.c +++ b/src/backend/utils/fmgr/dfmgr.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.34 1999/09/28 11:27:13 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.35 1999/10/02 21:33:25 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -42,15 +42,16 @@ fmgr_dynamic(Oid procedureId, int *pronargs) HeapTuple procedureTuple; Form_pg_proc procedureStruct; char *proname, - *probinstring, - *prosrcstring, - *linksymbol; + *linksymbol, + *probinstring; + char *prosrcstring = NULL; Datum probinattr; Datum prosrcattr; func_ptr user_fn; Relation rel; bool isnull; + /* Implement simple one-element cache for function lookups */ if (procedureId == procedureId_save) { *pronargs = pronargs_save; @@ -91,8 +92,6 @@ fmgr_dynamic(Oid procedureId, int *pronargs) } probinstring = textout((struct varlena *) probinattr); - heap_close(rel, AccessShareLock); - prosrcattr = heap_getattr(procedureTuple, Anum_pg_proc_prosrc, RelationGetDescr(rel), &isnull); @@ -118,9 +117,12 @@ fmgr_dynamic(Oid procedureId, int *pronargs) linksymbol = prosrcstring; } + heap_close(rel, AccessShareLock); + user_fn = handle_load(probinstring, linksymbol); pfree(probinstring); + if (prosrcstring) pfree(prosrcstring); procedureId_save = procedureId; user_fn_save = user_fn; |
