From 1e901bbe8430ce870f7dbfcc33c14f4c82c2f9aa Mon Sep 17 00:00:00 2001 From: "Thomas G. Lockhart" <lockhart@fourpalms.org> Date: Fri, 14 Jul 2000 15:35:44 +0000 Subject: [PATCH] Implement SET SESSION CHARACTERISTICS and SET DefaultXactIsoLevel. --- src/backend/commands/variable.c | 75 ++++++++++++++++++++++++++++++++- 1 file 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 *); @@ -434,6 +437,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(); -- GitLab