diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2001-06-30 22:03:26 +0000 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2001-06-30 22:03:26 +0000 |
commit | 10e9cd22991b352685fe49cfa92dbcd72048c711 (patch) | |
tree | 44a564294b6797f8ce8cb6422ad979cafb71e33e /src | |
parent | e4a40cc35345679cc32b5fd11bc2b9c20f631de9 (diff) | |
download | postgresql-10e9cd22991b352685fe49cfa92dbcd72048c711.tar.gz postgresql-10e9cd22991b352685fe49cfa92dbcd72048c711.zip |
Allow default transaction isolation level (a.k.a. set session
characteristics) to be set through GUC.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/commands/variable.c | 82 | ||||
-rw-r--r-- | src/backend/parser/gram.y | 6 | ||||
-rw-r--r-- | src/backend/utils/misc/guc.c | 32 | ||||
-rw-r--r-- | src/backend/utils/misc/postgresql.conf.sample | 1 |
4 files changed, 39 insertions, 82 deletions
diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c index dd94509a7f2..3d96ba18390 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.50 2001/06/12 22:54:05 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.51 2001/06/30 22:03:25 petere Exp $ * *------------------------------------------------------------------------- */ @@ -46,9 +46,6 @@ 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 *); @@ -449,69 +446,6 @@ reset_timezone(void) /* 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(void) -{ - - 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(void) -{ -#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) { @@ -530,7 +464,7 @@ parse_XactIsoLevel(char *value) if (strcasecmp(value, "SERIALIZABLE") == 0) XactIsoLevel = XACT_SERIALIZABLE; - else if (strcasecmp(value, "COMMITTED") == 0) + else if (strcasecmp(value, "READ COMMITTED") == 0) XactIsoLevel = XACT_READ_COMMITTED; else elog(ERROR, "Bad TRANSACTION ISOLATION LEVEL (%s)", value); @@ -711,8 +645,6 @@ SetPGVariable(const char *name, const char *value) parse_datestyle(mvalue); else if (strcasecmp(name, "timezone") == 0) parse_timezone(mvalue); - else if (strcasecmp(name, "DefaultXactIsoLevel") == 0) - parse_DefaultXactIsoLevel(mvalue); else if (strcasecmp(name, "XactIsoLevel") == 0) parse_XactIsoLevel(mvalue); else if (strcasecmp(name, "client_encoding") == 0) @@ -737,8 +669,6 @@ GetPGVariable(const char *name) show_datestyle(); else if (strcasecmp(name, "timezone") == 0) show_timezone(); - else if (strcasecmp(name, "DefaultXactIsoLevel") == 0) - show_DefaultXactIsoLevel(); else if (strcasecmp(name, "XactIsoLevel") == 0) show_XactIsoLevel(); else if (strcasecmp(name, "client_encoding") == 0) @@ -752,7 +682,6 @@ GetPGVariable(const char *name) ShowAllGUCConfig(); show_datestyle(); show_timezone(); - show_DefaultXactIsoLevel(); show_XactIsoLevel(); show_client_encoding(); show_server_encoding(); @@ -772,8 +701,6 @@ ResetPGVariable(const char *name) reset_datestyle(); else if (strcasecmp(name, "timezone") == 0) reset_timezone(); - else if (strcasecmp(name, "DefaultXactIsoLevel") == 0) - reset_DefaultXactIsoLevel(); else if (strcasecmp(name, "XactIsoLevel") == 0) reset_XactIsoLevel(); else if (strcasecmp(name, "client_encoding") == 0) @@ -784,8 +711,6 @@ ResetPGVariable(const char *name) reset_random_seed(); else if (strcasecmp(name, "all") == 0) { - reset_DefaultXactIsoLevel(); - reset_XactIsoLevel(); reset_random_seed(); /* reset_server_encoding(); */ reset_client_encoding(); @@ -793,7 +718,8 @@ ResetPGVariable(const char *name) reset_timezone(); ResetAllOptions(false); - } else + } + else SetConfigOption(name, NULL, superuser() ? PGC_SUSET : PGC_USERSET, false); diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 3c7d526a7b8..cf518f3cadd 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.232 2001/06/23 00:07:34 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.233 2001/06/30 22:03:25 petere Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -752,7 +752,7 @@ VariableSetStmt: SET ColId TO var_value | SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL opt_level { VariableSetStmt *n = makeNode(VariableSetStmt); - n->name = "DefaultXactIsoLevel"; + n->name = "default_transaction_isolation"; n->value = $8; $$ = (Node *) n; } @@ -772,7 +772,7 @@ VariableSetStmt: SET ColId TO var_value } ; -opt_level: READ COMMITTED { $$ = "committed"; } +opt_level: READ COMMITTED { $$ = "read committed"; } | SERIALIZABLE { $$ = "serializable"; } ; diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index c38d98d3911..96dc8399e1c 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -4,7 +4,7 @@ * Support for grand unified configuration scheme, including SET * command, configuration file, and command line options. * - * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.43 2001/06/27 23:31:39 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.44 2001/06/30 22:03:26 petere Exp $ * * Copyright 2000 by PostgreSQL Global Development Group * Written by Peter Eisentraut <peter_e@gmx.net>. @@ -51,6 +51,11 @@ extern char *Syslog_ident; static bool check_facility(const char *facility); #endif +static char *default_iso_level_string; + +static bool check_defaultxactisolevel(const char *value); +static void assign_defaultxactisolevel(const char *value); + /* * Debugging options */ @@ -355,6 +360,9 @@ static struct config_real static struct config_string ConfigureNamesString[] = { + {"default_transaction_isolation", PGC_USERSET, &default_iso_level_string, + "read committed", check_defaultxactisolevel, assign_defaultxactisolevel}, + {"dynamic_library_path", PGC_SUSET, &Dynamic_library_path, "$libdir", NULL, NULL}, @@ -1092,3 +1100,25 @@ check_facility(const char *facility) } #endif + + + +static bool +check_defaultxactisolevel(const char *value) +{ + return (strcasecmp(value, "read committed") == 0 + || strcasecmp(value, "serializable") == 0) + ? true : false; +} + + +static void +assign_defaultxactisolevel(const char *value) +{ + if (strcasecmp(value, "serializable") == 0) + DefaultXactIsoLevel = XACT_SERIALIZABLE; + else if (strcasecmp(value, "read committed") == 0) + DefaultXactIsoLevel = XACT_READ_COMMITTED; + else + elog(ERROR, "bogus transaction isolation level"); +} diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index a3042bee83d..fad01e7f32e 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -166,6 +166,7 @@ # # Misc # +#default_transaction_isolation = 'read committed' #sql_inheritance = true #australian_timezones = false #deadlock_timeout = 1000 |