* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.440 2008/03/25 22:42:45 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.441 2008/04/02 14:42:56 mha Exp $
*
*--------------------------------------------------------------------
*/
#include "postmaster/postmaster.h"
#include "postmaster/syslogger.h"
#include "postmaster/walwriter.h"
+#include "regex/regex.h"
#include "storage/fd.h"
#include "storage/freespace.h"
#include "tcop/tcopprot.h"
bool doit, GucSource source);
#endif
-static const char *assign_defaultxactisolevel(const char *newval, bool doit,
- GucSource source);
-static const char *assign_session_replication_role(const char *newval, bool doit,
+static bool assign_session_replication_role(int newval, bool doit,
GucSource source);
static const char *show_num_temp_buffers(void);
static bool assign_phony_autocommit(bool newval, bool doit, GucSource source);
{NULL, 0}
};
+static const struct config_enum_entry regex_flavor_options[] = {
+ {"advanced", REG_ADVANCED},
+ {"extended", REG_EXTENDED},
+ {"basic", REG_BASIC},
+ {NULL, 0}
+};
+
+static const struct config_enum_entry isolation_level_options[] = {
+ {"serializable", XACT_SERIALIZABLE},
+ {"repeatable read", XACT_REPEATABLE_READ},
+ {"read committed", XACT_READ_COMMITTED},
+ {"read uncommitted", XACT_READ_UNCOMMITTED},
+ {NULL, 0}
+};
+
+static const struct config_enum_entry session_replication_role_options[] = {
+ {"origin", SESSION_REPLICATION_ROLE_ORIGIN},
+ {"replica", SESSION_REPLICATION_ROLE_REPLICA},
+ {"local", SESSION_REPLICATION_ROLE_LOCAL},
+ {NULL, 0}
+};
+
+
/*
* GUC option variables that are exported from this module
*/
static char *backslash_quote_string;
static char *client_encoding_string;
static char *datestyle_string;
-static char *default_iso_level_string;
-static char *session_replication_role_string;
static char *locale_collate;
static char *locale_ctype;
-static char *regex_flavor_string;
static char *server_encoding_string;
static char *server_version_string;
static int server_version_num;
"", assign_temp_tablespaces, NULL
},
- {
- {"default_transaction_isolation", PGC_USERSET, CLIENT_CONN_STATEMENT,
- gettext_noop("Sets the transaction isolation level of each new transaction."),
- gettext_noop("Each SQL transaction has an isolation level, which "
- "can be either \"read uncommitted\", \"read committed\", \"repeatable read\", or \"serializable\".")
- },
- &default_iso_level_string,
- "read committed", assign_defaultxactisolevel, NULL
- },
-
- {
- {"session_replication_role", PGC_SUSET, CLIENT_CONN_STATEMENT,
- gettext_noop("Sets the session's behavior for triggers and rewrite rules."),
- gettext_noop("Each session can be either"
- " \"origin\", \"replica\", or \"local\".")
- },
- &session_replication_role_string,
- "origin", assign_session_replication_role, NULL
- },
-
{
{"dynamic_library_path", PGC_SUSET, CLIENT_CONN_OTHER,
gettext_noop("Sets the path for dynamically loadable modules."),
"", NULL, NULL
},
- {
- {"regex_flavor", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS,
- gettext_noop("Sets the regular expression \"flavor\"."),
- gettext_noop("This can be set to advanced, extended, or basic.")
- },
- ®ex_flavor_string,
- "advanced", assign_regex_flavor, NULL
- },
-
{
{"search_path", PGC_USERSET, CLIENT_CONN_STATEMENT,
gettext_noop("Sets the schema search order for names that are not schema-qualified."),
NOTICE, message_level_options,NULL, NULL
},
+ {
+ {"default_transaction_isolation", PGC_USERSET, CLIENT_CONN_STATEMENT,
+ gettext_noop("Sets the transaction isolation level of each new transaction."),
+ gettext_noop("Each SQL transaction has an isolation level, which "
+ "can be either \"read uncommitted\", \"read committed\", \"repeatable read\", or \"serializable\".")
+ },
+ &DefaultXactIsoLevel,
+ XACT_READ_COMMITTED, isolation_level_options, NULL, NULL
+ },
+
{
{"log_error_verbosity", PGC_SUSET, LOGGING_WHEN,
gettext_noop("Sets the verbosity of logged messages."),
LOGSTMT_NONE, log_statement_options, NULL, NULL
},
+ {
+ {"regex_flavor", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS,
+ gettext_noop("Sets the regular expression \"flavor\"."),
+ gettext_noop("This can be set to advanced, extended, or basic.")
+ },
+ ®ex_flavor,
+ REG_ADVANCED, regex_flavor_options, NULL, NULL
+ },
+ {
+ {"session_replication_role", PGC_SUSET, CLIENT_CONN_STATEMENT,
+ gettext_noop("Sets the session's behavior for triggers and rewrite rules."),
+ gettext_noop("Each session can be either"
+ " \"origin\", \"replica\", or \"local\".")
+ },
+ &SessionReplicationRole,
+ SESSION_REPLICATION_ROLE_ORIGIN, session_replication_role_options,
+ assign_session_replication_role, NULL
+ },
/* End-of-list marker */
#endif /* HAVE_SYSLOG */
-static const char *
-assign_defaultxactisolevel(const char *newval, bool doit, GucSource source)
-{
- if (pg_strcasecmp(newval, "serializable") == 0)
- {
- if (doit)
- DefaultXactIsoLevel = XACT_SERIALIZABLE;
- }
- else if (pg_strcasecmp(newval, "repeatable read") == 0)
- {
- if (doit)
- DefaultXactIsoLevel = XACT_REPEATABLE_READ;
- }
- else if (pg_strcasecmp(newval, "read committed") == 0)
- {
- if (doit)
- DefaultXactIsoLevel = XACT_READ_COMMITTED;
- }
- else if (pg_strcasecmp(newval, "read uncommitted") == 0)
- {
- if (doit)
- DefaultXactIsoLevel = XACT_READ_UNCOMMITTED;
- }
- else
- return NULL;
- return newval;
-}
-
-static const char *
-assign_session_replication_role(const char *newval, bool doit, GucSource source)
+static bool
+assign_session_replication_role(int newval, bool doit, GucSource source)
{
- int newrole;
-
- if (pg_strcasecmp(newval, "origin") == 0)
- newrole = SESSION_REPLICATION_ROLE_ORIGIN;
- else if (pg_strcasecmp(newval, "replica") == 0)
- newrole = SESSION_REPLICATION_ROLE_REPLICA;
- else if (pg_strcasecmp(newval, "local") == 0)
- newrole = SESSION_REPLICATION_ROLE_LOCAL;
- else
- return NULL;
-
/*
* Must flush the plan cache when changing replication role; but don't
* flush unnecessarily.
*/
- if (doit && SessionReplicationRole != newrole)
+ if (doit && SessionReplicationRole != newval)
{
ResetPlanCache();
- SessionReplicationRole = newrole;
}
- return newval;
+ return true;
}
static const char *