summaryrefslogtreecommitdiff
path: root/src/backend/access/transam
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/transam')
-rw-r--r--src/backend/access/transam/xact.c39
1 files changed, 33 insertions, 6 deletions
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index 598e3c880e5..a15985d3bd7 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.145 2003/03/27 16:51:27 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.146 2003/04/26 20:22:59 tgl Exp $
*
* NOTES
* Transaction aborts can now occur two ways:
@@ -1705,17 +1705,44 @@ AbortOutOfAnyTransaction(void)
s->blockState = TBLOCK_DEFAULT;
}
+/*
+ * IsTransactionBlock --- are we within a transaction block?
+ */
bool
IsTransactionBlock(void)
{
TransactionState s = CurrentTransactionState;
- if (s->blockState == TBLOCK_INPROGRESS
- || s->blockState == TBLOCK_ABORT
- || s->blockState == TBLOCK_ENDABORT)
- return true;
+ if (s->blockState == TBLOCK_DEFAULT)
+ return false;
- return false;
+ return true;
+}
+
+/*
+ * TransactionBlockStatusCode - return status code to send in ReadyForQuery
+ */
+char
+TransactionBlockStatusCode(void)
+{
+ TransactionState s = CurrentTransactionState;
+
+ switch (s->blockState)
+ {
+ case TBLOCK_DEFAULT:
+ return 'I'; /* idle --- not in transaction */
+ case TBLOCK_BEGIN:
+ case TBLOCK_INPROGRESS:
+ case TBLOCK_END:
+ return 'T'; /* in transaction */
+ case TBLOCK_ABORT:
+ case TBLOCK_ENDABORT:
+ return 'E'; /* in failed transaction */
+ }
+
+ /* should never get here */
+ elog(ERROR, "bogus transaction block state");
+ return 0; /* keep compiler quiet */
}