mirror of
https://github.com/postgres/postgres.git
synced 2025-11-12 05:01:15 +03:00
Code review for standalone composite types, query-specified composite
types, SRFs. Not happy with memory management yet, but I'll commit these other changes.
This commit is contained in:
@@ -6,13 +6,18 @@
|
||||
*
|
||||
* Copyright (c) 2002, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/fmgr/funcapi.c,v 1.3 2002/08/29 00:17:05 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#include "postgres.h"
|
||||
|
||||
#include "funcapi.h"
|
||||
#include "catalog/pg_type.h"
|
||||
#include "utils/syscache.h"
|
||||
|
||||
|
||||
/*
|
||||
* init_MultiFuncCall
|
||||
* Create an empty FuncCallContext data structure
|
||||
@@ -99,8 +104,6 @@ per_MultiFuncCall(PG_FUNCTION_ARGS)
|
||||
void
|
||||
end_MultiFuncCall(PG_FUNCTION_ARGS, FuncCallContext *funcctx)
|
||||
{
|
||||
MemoryContext oldcontext;
|
||||
|
||||
/* unbind from fcinfo */
|
||||
fcinfo->flinfo->fn_extra = NULL;
|
||||
|
||||
@@ -108,32 +111,8 @@ end_MultiFuncCall(PG_FUNCTION_ARGS, FuncCallContext *funcctx)
|
||||
* Caller is responsible to free up memory for individual
|
||||
* struct elements other than att_in_funcinfo and elements.
|
||||
*/
|
||||
oldcontext = MemoryContextSwitchTo(funcctx->fmctx);
|
||||
|
||||
if (funcctx->attinmeta != NULL)
|
||||
pfree(funcctx->attinmeta);
|
||||
|
||||
pfree(funcctx);
|
||||
|
||||
MemoryContextSwitchTo(oldcontext);
|
||||
}
|
||||
|
||||
void
|
||||
get_type_metadata(Oid typeid, Oid *attinfuncid, Oid *attelem)
|
||||
{
|
||||
HeapTuple typeTuple;
|
||||
Form_pg_type typtup;
|
||||
|
||||
typeTuple = SearchSysCache(TYPEOID,
|
||||
ObjectIdGetDatum(typeid),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(typeTuple))
|
||||
elog(ERROR, "get_type_metadata: Cache lookup of type %u failed", typeid);
|
||||
|
||||
typtup = (Form_pg_type) GETSTRUCT(typeTuple);
|
||||
|
||||
*attinfuncid = typtup->typinput;
|
||||
*attelem = typtup->typelem;
|
||||
|
||||
ReleaseSysCache(typeTuple);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user