summaryrefslogtreecommitdiff
path: root/src/include/utils/fcache.h
blob: cb3de1083c044e8cdf3d2f96b1c95d6c7d3927b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*-------------------------------------------------------------------------
 *
 * fcache.h
 *
 *
 *
 * Copyright (c) 1994, Regents of the University of California
 *
 * $Id: fcache.h,v 1.8 1999/02/13 23:22:19 momjian Exp $
 *
 *-------------------------------------------------------------------------
 */
#ifndef FCACHE_H
#define FCACHE_H

#include <fmgr.h>


typedef struct
{
	int			typlen;			/* length of the return type */
	int			typbyval;		/* true if return type is pass by value */
	FmgrInfo	func;			/* address of function to call (for c
								 * funcs) */
	Oid			foid;			/* oid of the function in pg_proc */
	Oid			language;		/* oid of the language in pg_language */
	int			nargs;			/* number of arguments */

	/* Might want to make these two arrays of size MAXFUNCARGS */

	Oid		   *argOidVect;		/* oids of all the arguments */
	bool	   *nullVect;		/* keep track of null arguments */

	char	   *src;			/* source code of the function */
	char	   *bin;			/* binary object code ?? */
	char	   *func_state;		/* fuction_state struct for execution */

	bool		oneResult;		/* true we only want 1 result from the
								 * function */
	bool		hasSetArg;		/* true if func is part of a nested dot
								 * expr whose argument is func returning a
								 * set ugh! */

	Pointer		funcSlot;		/* if one result we need to copy it before
								 * we end execution of the function and
								 * free stuff */

	char	   *setArg;			/* current argument for nested dot
								 * execution Nested dot expressions mean
								 * we have funcs whose argument is a set
								 * of tuples */

	bool		istrusted;		/* trusted fn? */
} FunctionCache,
		   *FunctionCachePtr;

#endif	 /* FCACHE_H */