aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas G. Lockhart <lockhart@fourpalms.org>2000-07-14 15:35:44 +0000
committerThomas G. Lockhart <lockhart@fourpalms.org>2000-07-14 15:35:44 +0000
commit1e901bbe8430ce870f7dbfcc33c14f4c82c2f9aa (patch)
tree2ffc994fd0371c26002e731c60ff0ad1310a6b4f
parent2016898b6a49687747ff1f638acd9af4674c5c29 (diff)
downloadpostgresql-1e901bbe8430ce870f7dbfcc33c14f4c82c2f9aa.tar.gz
postgresql-1e901bbe8430ce870f7dbfcc33c14f4c82c2f9aa.zip
Implement SET SESSION CHARACTERISTICS and SET DefaultXactIsoLevel.
-rw-r--r--src/backend/commands/variable.c75
1 files changed, 73 insertions, 2 deletions
diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c
index 154be6a23dd..d7e730544b0 100644
--- a/src/backend/commands/variable.c
+++ b/src/backend/commands/variable.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.38 2000/06/22 22:31:17 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.39 2000/07/14 15:35:44 thomas Exp $
*
*-------------------------------------------------------------------------
*/
@@ -43,6 +43,9 @@ static bool show_timezone(void);
static bool reset_timezone(void);
static bool parse_timezone(char *);
+static bool show_DefaultXactIsoLevel(void);
+static bool reset_DefaultXactIsoLevel(void);
+static bool parse_DefaultXactIsoLevel(char *);
static bool show_XactIsoLevel(void);
static bool reset_XactIsoLevel(void);
static bool parse_XactIsoLevel(char *);
@@ -435,6 +438,68 @@ reset_timezone()
/* SET TRANSACTION */
static bool
+parse_DefaultXactIsoLevel(char *value)
+{
+#if 0
+ TransactionState s = CurrentTransactionState;
+#endif
+
+ if (value == NULL)
+ {
+ reset_DefaultXactIsoLevel();
+ return TRUE;
+ }
+
+#if 0
+ if (s->state != TRANS_DEFAULT)
+ {
+ elog(ERROR, "ALTER SESSION/SET TRANSACTION ISOLATION LEVEL"
+ " can not be called within a transaction");
+ return TRUE;
+ }
+#endif
+
+ if (strcasecmp(value, "SERIALIZABLE") == 0)
+ DefaultXactIsoLevel = XACT_SERIALIZABLE;
+ else if (strcasecmp(value, "COMMITTED") == 0)
+ DefaultXactIsoLevel = XACT_READ_COMMITTED;
+ else
+ elog(ERROR, "Bad TRANSACTION ISOLATION LEVEL (%s)", value);
+
+ return TRUE;
+}
+
+static bool
+show_DefaultXactIsoLevel()
+{
+
+ if (DefaultXactIsoLevel == XACT_SERIALIZABLE)
+ elog(NOTICE, "Default TRANSACTION ISOLATION LEVEL is SERIALIZABLE");
+ else
+ elog(NOTICE, "Default TRANSACTION ISOLATION LEVEL is READ COMMITTED");
+ return TRUE;
+}
+
+static bool
+reset_DefaultXactIsoLevel()
+{
+#if 0
+ TransactionState s = CurrentTransactionState;
+
+ if (s->state != TRANS_DEFAULT)
+ {
+ elog(ERROR, "ALTER SESSION/SET TRANSACTION ISOLATION LEVEL"
+ " can not be called within a transaction");
+ return TRUE;
+ }
+#endif
+
+ DefaultXactIsoLevel = XACT_READ_COMMITTED;
+
+ return TRUE;
+}
+
+static bool
parse_XactIsoLevel(char *value)
{
@@ -535,6 +600,8 @@ SetPGVariable(const char *name, const char *value)
parse_date(pstrdup(value));
else if (strcasecmp(name, "timezone")==0)
parse_timezone(pstrdup(value));
+ else if (strcasecmp(name, "DefaultXactIsoLevel")==0)
+ parse_DefaultXactIsoLevel(pstrdup(value));
else if (strcasecmp(name, "XactIsoLevel")==0)
parse_XactIsoLevel(pstrdup(value));
#ifdef MULTIBYTE
@@ -557,6 +624,8 @@ GetPGVariable(const char *name)
show_date();
else if (strcasecmp(name, "timezone")==0)
show_timezone();
+ else if (strcasecmp(name, "DefaultXactIsoLevel")==0)
+ show_DefaultXactIsoLevel();
else if (strcasecmp(name, "XactIsoLevel")==0)
show_XactIsoLevel();
#ifdef MULTIBYTE
@@ -581,8 +650,10 @@ ResetPGVariable(const char *name)
reset_date();
else if (strcasecmp(name, "timezone")==0)
reset_timezone();
+ else if (strcasecmp(name, "DefaultXactIsoLevel")==0)
+ reset_DefaultXactIsoLevel();
else if (strcasecmp(name, "XactIsoLevel")==0)
- reset_XactIsoLevel();
+ reset_XactIsoLevel();
#ifdef MULTIBYTE
else if (strcasecmp(name, "client_encoding")==0)
reset_client_encoding();