]> granicus.if.org Git - postgresql/blob - src/include/utils/portal.h
Make functions static where possible, enclose unused functions in #ifdef NOT_USED.
[postgresql] / src / include / utils / portal.h
1 /*-------------------------------------------------------------------------
2  *
3  * portal.h--
4  *    POSTGRES portal definitions.
5  *
6  *
7  * Copyright (c) 1994, Regents of the University of California
8  *
9  * $Id: portal.h,v 1.4 1997/08/19 21:40:48 momjian Exp $
10  *
11  *-------------------------------------------------------------------------
12  */
13 /*
14  * Note:
15  *      A portal is an abstraction which represents the execution state of
16  * a running query (or a fixed sequence of queries).  The "blank portal" is
17  * a portal with an InvalidName.  This blank portal is in existance except
18  * between calls to BlankPortalAssignName and GetPortalByName(NULL).
19  *
20  * Note:
21  *      now that PQ calls can be made from within a backend, a portal
22  *      may also be used to keep track of the tuples resulting
23  *      from the execution of a query.  In this case, entryIndex 
24  */
25 #ifndef PORTAL_H
26 #define PORTAL_H
27
28 #include <executor/execdesc.h>
29 #include <lib/fstack.h>
30 #include <nodes/memnodes.h>
31 #include <utils/memutils.h>
32
33 typedef struct PortalBlockData {
34     AllocSetData        setData;
35     FixedItemData       itemData;
36 } PortalBlockData;
37
38 typedef PortalBlockData *PortalBlock;
39
40 typedef struct PortalD  PortalD;
41 typedef PortalD         *Portal;
42
43 struct PortalD {
44     char                                *name;  /* XXX PortalName */
45     struct PortalVariableMemory         variable;
46     struct PortalHeapMemory             heap;
47     QueryDesc                           *queryDesc;
48     TupleDesc                           attinfo;
49     EState                              *state;
50     void                                (*cleanup)(Portal);
51 };
52
53 /*
54  * PortalIsValid --
55  *      True iff portal is valid.
56  */
57 #define PortalIsValid(p) PointerIsValid(p)
58
59 /*
60  * Special portals (well, their names anyway)
61  */
62 #define VACPNAME        "<vacuum>"
63
64 extern bool PortalNameIsSpecial(char *pname);
65 extern void AtEOXact_portals(void);
66 extern void EnablePortalManager(bool on);
67 extern Portal GetPortalByName(char *name);
68 extern Portal BlankPortalAssignName(char *name);
69 extern void PortalSetQuery(Portal portal, QueryDesc *queryDesc, 
70                            TupleDesc attinfo, EState *state,
71                            void (*cleanup)(Portal portal));
72 extern QueryDesc *PortalGetQueryDesc(Portal portal);
73 extern EState *PortalGetState(Portal portal);
74 extern Portal CreatePortal(char *name);
75 extern void PortalDestroy(Portal *portalP);
76 extern void StartPortalAllocMode(AllocMode mode, Size limit);
77 extern void EndPortalAllocMode(void);
78 extern PortalVariableMemory PortalGetVariableMemory(Portal portal);
79 extern PortalHeapMemory PortalGetHeapMemory(Portal portal);
80
81 /* estimate of the maximum number of open portals a user would have,
82  * used in initially sizing the PortalHashTable in  EnablePortalManager() 
83  */
84 #define PORTALS_PER_USER       10
85
86
87 #endif  /* PORTAL_H */