1 /*-------------------------------------------------------------------------
4 * POSTGRES portal definitions.
7 * Copyright (c) 1994, Regents of the University of California
9 * $Id: portal.h,v 1.14 1999/06/12 14:05:40 momjian Exp $
11 *-------------------------------------------------------------------------
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).
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
28 #include <executor/execdesc.h>
29 #include <lib/fstack.h>
30 #include <nodes/memnodes.h>
31 #include <utils/memutils.h>
33 typedef struct PortalBlockData
36 FixedItemData itemData;
39 typedef PortalBlockData *PortalBlock;
41 typedef struct PortalD PortalD;
42 typedef PortalD *Portal;
46 char *name; /* XXX PortalName */
47 struct PortalVariableMemoryData variable;
48 struct PortalHeapMemoryData heap;
52 void (*cleanup) (Portal);
57 * True iff portal is valid.
59 #define PortalIsValid(p) PointerIsValid(p)
62 * Special portals (well, their names anyway)
64 #define VACPNAME "<vacuum>"
66 extern bool PortalNameIsSpecial(char *pname);
67 extern void AtEOXact_portals(void);
68 extern void EnablePortalManager(bool on);
69 extern Portal GetPortalByName(char *name);
70 extern Portal BlankPortalAssignName(char *name);
71 extern void PortalSetQuery(Portal portal, QueryDesc *queryDesc,
72 TupleDesc attinfo, EState *state,
73 void (*cleanup) (Portal portal));
74 extern QueryDesc *PortalGetQueryDesc(Portal portal);
75 extern EState *PortalGetState(Portal portal);
76 extern Portal CreatePortal(char *name);
77 extern void PortalDestroy(Portal *portalP);
78 extern void StartPortalAllocMode(AllocMode mode, Size limit);
79 extern void EndPortalAllocMode(void);
80 extern PortalVariableMemory PortalGetVariableMemory(Portal portal);
81 extern PortalHeapMemory PortalGetHeapMemory(Portal portal);
83 #ifdef FREE_TUPLE_MEMORY
84 bool PortalHeapMemoryIsValid(MemoryContext context, Pointer pointer);
87 /* estimate of the maximum number of open portals a user would have,
88 * used in initially sizing the PortalHashTable in EnablePortalManager()
90 #define PORTALS_PER_USER 10