diff options
Diffstat (limited to 'src/include/utils/portal.h')
-rw-r--r-- | src/include/utils/portal.h | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/include/utils/portal.h b/src/include/utils/portal.h index 67343ec6057..1203cc3ffc9 100644 --- a/src/include/utils/portal.h +++ b/src/include/utils/portal.h @@ -119,12 +119,15 @@ typedef struct PortalData MemoryContext heap; /* subsidiary memory for portal */ ResourceOwner resowner; /* resources owned by portal */ void (*cleanup) (Portal portal); /* cleanup hook */ - SubTransactionId createSubid; /* the ID of the creating subxact */ /* - * if createSubid is InvalidSubTransactionId, the portal is held over from - * a previous transaction + * State data for remembering which subtransaction(s) the portal was + * created or used in. If the portal is held over from a previous + * transaction, both subxids are InvalidSubTransactionId. Otherwise, + * createSubid is the creating subxact and activeSubid is the last subxact + * in which we ran the portal. */ + SubTransactionId createSubid; /* the creating subxact */ /* The query or queries the portal will execute */ const char *sourceText; /* text of query (as of 8.4, never NULL) */ @@ -175,6 +178,13 @@ typedef struct PortalData /* Presentation data, primarily used by the pg_cursors system view */ TimestampTz creation_time; /* time at which this portal was defined */ bool visible; /* include this portal in pg_cursors? */ + + /* + * This field belongs with createSubid, but in pre-9.5 branches, add it + * at the end to avoid creating an ABI break for extensions that examine + * Portal structs. + */ + SubTransactionId activeSubid; /* the last subxact with activity */ } PortalData; /* @@ -201,12 +211,14 @@ extern void AtSubCommit_Portals(SubTransactionId mySubid, ResourceOwner parentXactOwner); extern void AtSubAbort_Portals(SubTransactionId mySubid, SubTransactionId parentSubid, + ResourceOwner myXactOwner, ResourceOwner parentXactOwner); extern void AtSubCleanup_Portals(SubTransactionId mySubid); extern Portal CreatePortal(const char *name, bool allowDup, bool dupSilent); extern Portal CreateNewPortal(void); extern void PinPortal(Portal portal); extern void UnpinPortal(Portal portal); +extern void MarkPortalActive(Portal portal); extern void MarkPortalDone(Portal portal); extern void MarkPortalFailed(Portal portal); extern void PortalDrop(Portal portal, bool isTopCommit); |