aboutsummaryrefslogtreecommitdiff
path: root/src/include/utils/portal.h
blob: b808533f0b225316d52caa70695884ca45b4f4a3 (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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*-------------------------------------------------------------------------
 *
 * portal.h
 *	  POSTGRES portal definitions.
 *
 *
 * Copyright (c) 1994, Regents of the University of California
 *
 * $Id: portal.h,v 1.20 1999/12/10 03:56:12 momjian Exp $
 *
 *-------------------------------------------------------------------------
 */
/*
 * 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

#include "executor/execdesc.h"
#include "nodes/memnodes.h"

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 PortalVariableMemoryData variable;
	struct PortalHeapMemoryData 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>"
#define TRUNCPNAME              "<truncate>"

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 PortalDrop(Portal *portalP);
extern void StartPortalAllocMode(AllocMode mode, Size limit);
extern void EndPortalAllocMode(void);
extern void PortalResetHeapMemory(Portal portal);
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 */