1996-08-28 03:59:28 +02:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
*
|
|
|
|
* portal.h--
|
|
|
|
* POSTGRES portal definitions.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Copyright (c) 1994, Regents of the University of California
|
|
|
|
*
|
1997-08-19 23:40:56 +02:00
|
|
|
* $Id: portal.h,v 1.4 1997/08/19 21:40:48 momjian Exp $
|
1996-08-28 03:59:28 +02:00
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
/*
|
|
|
|
* Note:
|
|
|
|
* A portal is an abstraction which represents the execution state of
|
|
|
|
* a running query (or a fixed sequence of queries). The "blank portal" is
|
|
|
|
* a portal with an InvalidName. This blank portal is in existance except
|
|
|
|
* between calls to BlankPortalAssignName and GetPortalByName(NULL).
|
|
|
|
*
|
|
|
|
* Note:
|
|
|
|
* now that PQ calls can be made from within a backend, a portal
|
|
|
|
* may also be used to keep track of the tuples resulting
|
|
|
|
* from the execution of a query. In this case, entryIndex
|
|
|
|
*/
|
|
|
|
#ifndef PORTAL_H
|
|
|
|
#define PORTAL_H
|
|
|
|
|
1996-11-04 12:51:27 +01:00
|
|
|
#include <executor/execdesc.h>
|
|
|
|
#include <lib/fstack.h>
|
|
|
|
#include <nodes/memnodes.h>
|
|
|
|
#include <utils/memutils.h>
|
1996-08-28 03:59:28 +02:00
|
|
|
|
|
|
|
typedef struct PortalBlockData {
|
|
|
|
AllocSetData setData;
|
|
|
|
FixedItemData itemData;
|
|
|
|
} PortalBlockData;
|
|
|
|
|
|
|
|
typedef PortalBlockData *PortalBlock;
|
|
|
|
|
|
|
|
typedef struct PortalD PortalD;
|
|
|
|
typedef PortalD *Portal;
|
|
|
|
|
|
|
|
struct PortalD {
|
|
|
|
char *name; /* XXX PortalName */
|
|
|
|
struct PortalVariableMemory variable;
|
|
|
|
struct PortalHeapMemory heap;
|
|
|
|
QueryDesc *queryDesc;
|
|
|
|
TupleDesc attinfo;
|
|
|
|
EState *state;
|
|
|
|
void (*cleanup)(Portal);
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
* PortalIsValid --
|
|
|
|
* True iff portal is valid.
|
|
|
|
*/
|
|
|
|
#define PortalIsValid(p) PointerIsValid(p)
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Special portals (well, their names anyway)
|
|
|
|
*/
|
|
|
|
#define VACPNAME "<vacuum>"
|
|
|
|
|
|
|
|
extern bool PortalNameIsSpecial(char *pname);
|
|
|
|
extern void AtEOXact_portals(void);
|
|
|
|
extern void EnablePortalManager(bool on);
|
|
|
|
extern Portal GetPortalByName(char *name);
|
|
|
|
extern Portal BlankPortalAssignName(char *name);
|
|
|
|
extern void PortalSetQuery(Portal portal, QueryDesc *queryDesc,
|
|
|
|
TupleDesc attinfo, EState *state,
|
|
|
|
void (*cleanup)(Portal portal));
|
|
|
|
extern QueryDesc *PortalGetQueryDesc(Portal portal);
|
|
|
|
extern EState *PortalGetState(Portal portal);
|
|
|
|
extern Portal CreatePortal(char *name);
|
|
|
|
extern void PortalDestroy(Portal *portalP);
|
|
|
|
extern void StartPortalAllocMode(AllocMode mode, Size limit);
|
|
|
|
extern void EndPortalAllocMode(void);
|
|
|
|
extern PortalVariableMemory PortalGetVariableMemory(Portal portal);
|
|
|
|
extern PortalHeapMemory PortalGetHeapMemory(Portal portal);
|
|
|
|
|
|
|
|
/* estimate of the maximum number of open portals a user would have,
|
|
|
|
* used in initially sizing the PortalHashTable in EnablePortalManager()
|
|
|
|
*/
|
|
|
|
#define PORTALS_PER_USER 10
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* PORTAL_H */
|