aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/adt/regexp.c52
-rw-r--r--src/backend/utils/misc/guc.c10
-rw-r--r--src/backend/utils/misc/postgresql.conf.sample1
-rw-r--r--src/bin/psql/tab-complete.c33
-rw-r--r--src/include/utils/builtins.h4
5 files changed, 65 insertions, 35 deletions
diff --git a/src/backend/utils/adt/regexp.c b/src/backend/utils/adt/regexp.c
index 604e55d4145..56f78422bcc 100644
--- a/src/backend/utils/adt/regexp.c
+++ b/src/backend/utils/adt/regexp.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/regexp.c,v 1.44 2003/02/05 17:41:32 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/regexp.c,v 1.45 2003/02/06 20:25:33 tgl Exp $
*
* Alistair Crooks added the code for the regex caching
* agc - cached the regular expressions used - there's a good chance
@@ -34,6 +34,10 @@
#include "utils/builtins.h"
+/* GUC-settable flavor parameter */
+static int regex_flavor = REG_ADVANCED;
+
+
/*
* We cache precompiled regular expressions using a "self organizing list"
* structure, in which recently-used items tend to be near the front.
@@ -217,6 +221,34 @@ RE_compile_and_execute(text *text_re, unsigned char *dat, int dat_len,
/*
+ * assign_regex_flavor - GUC hook to validate and set REGEX_FLAVOR
+ */
+const char *
+assign_regex_flavor(const char *value,
+ bool doit, bool interactive)
+{
+ if (strcasecmp(value, "advanced") == 0)
+ {
+ if (doit)
+ regex_flavor = REG_ADVANCED;
+ }
+ else if (strcasecmp(value, "extended") == 0)
+ {
+ if (doit)
+ regex_flavor = REG_EXTENDED;
+ }
+ else if (strcasecmp(value, "basic") == 0)
+ {
+ if (doit)
+ regex_flavor = REG_BASIC;
+ }
+ else
+ return NULL; /* fail */
+ return value; /* OK */
+}
+
+
+/*
* interface routines called by the function manager
*/
@@ -229,7 +261,7 @@ nameregexeq(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(RE_compile_and_execute(p,
(unsigned char *) NameStr(*n),
strlen(NameStr(*n)),
- REG_ADVANCED,
+ regex_flavor,
0, NULL));
}
@@ -242,7 +274,7 @@ nameregexne(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(!RE_compile_and_execute(p,
(unsigned char *) NameStr(*n),
strlen(NameStr(*n)),
- REG_ADVANCED,
+ regex_flavor,
0, NULL));
}
@@ -255,7 +287,7 @@ textregexeq(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(RE_compile_and_execute(p,
(unsigned char *) VARDATA(s),
VARSIZE(s) - VARHDRSZ,
- REG_ADVANCED,
+ regex_flavor,
0, NULL));
}
@@ -268,7 +300,7 @@ textregexne(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(!RE_compile_and_execute(p,
(unsigned char *) VARDATA(s),
VARSIZE(s) - VARHDRSZ,
- REG_ADVANCED,
+ regex_flavor,
0, NULL));
}
@@ -288,7 +320,7 @@ nameicregexeq(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(RE_compile_and_execute(p,
(unsigned char *) NameStr(*n),
strlen(NameStr(*n)),
- REG_ICASE | REG_ADVANCED,
+ regex_flavor | REG_ICASE,
0, NULL));
}
@@ -301,7 +333,7 @@ nameicregexne(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(!RE_compile_and_execute(p,
(unsigned char *) NameStr(*n),
strlen(NameStr(*n)),
- REG_ICASE | REG_ADVANCED,
+ regex_flavor | REG_ICASE,
0, NULL));
}
@@ -314,7 +346,7 @@ texticregexeq(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(RE_compile_and_execute(p,
(unsigned char *) VARDATA(s),
VARSIZE(s) - VARHDRSZ,
- REG_ICASE | REG_ADVANCED,
+ regex_flavor | REG_ICASE,
0, NULL));
}
@@ -327,7 +359,7 @@ texticregexne(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(!RE_compile_and_execute(p,
(unsigned char *) VARDATA(s),
VARSIZE(s) - VARHDRSZ,
- REG_ICASE | REG_ADVANCED,
+ regex_flavor | REG_ICASE,
0, NULL));
}
@@ -353,7 +385,7 @@ textregexsubstr(PG_FUNCTION_ARGS)
match = RE_compile_and_execute(p,
(unsigned char *) VARDATA(s),
VARSIZE(s) - VARHDRSZ,
- REG_ADVANCED,
+ regex_flavor,
2, pmatch);
/* match? then return the substring matching the pattern */
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index aeb044f7d17..2f99d3d5f41 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -5,7 +5,7 @@
* command, configuration file, and command line options.
* See src/backend/utils/misc/README for more information.
*
- * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.113 2003/01/28 18:04:02 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.114 2003/02/06 20:25:33 tgl Exp $
*
* Copyright 2000 by PostgreSQL Global Development Group
* Written by Peter Eisentraut <peter_e@gmx.net>.
@@ -127,6 +127,7 @@ static double phony_random_seed;
static char *client_encoding_string;
static char *datestyle_string;
static char *default_iso_level_string;
+static char *regex_flavor_string;
static char *server_encoding_string;
static char *session_authorization_string;
static char *timezone_string;
@@ -568,7 +569,7 @@ static struct config_int
},
{
- {"deadlock_timeout", PGC_POSTMASTER}, &DeadlockTimeout,
+ {"deadlock_timeout", PGC_SIGHUP}, &DeadlockTimeout,
1000, 0, INT_MAX, NULL, NULL
},
@@ -819,6 +820,11 @@ static struct config_string
},
{
+ {"regex_flavor", PGC_USERSET}, &regex_flavor_string,
+ "advanced", assign_regex_flavor, NULL
+ },
+
+ {
{"search_path", PGC_USERSET, GUC_LIST_INPUT | GUC_LIST_QUOTE},
&namespace_search_path,
"$user,public", assign_search_path, NULL
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index 2e7d63024b7..f40c2a00355 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -208,6 +208,7 @@
#max_expr_depth = 10000 # min 10
#max_files_per_process = 1000 # min 25
#password_encryption = true
+#regex_flavor = advanced # advanced, extended, or basic
#sql_inheritance = true
#transform_null_equals = false
#statement_timeout = 0 # 0 is disabled, in milliseconds
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index efebd2f6b6f..60d682c58a6 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -3,7 +3,7 @@
*
* Copyright 2000-2002 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/tab-complete.c,v 1.72 2003/01/25 23:10:30 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/tab-complete.c,v 1.73 2003/02/06 20:25:33 tgl Exp $
*/
/*----------------------------------------------------------------------
@@ -215,14 +215,11 @@ psql_completion(char *text, int start, int end)
"TRANSACTION",
/*
- * the rest should match USERSET entries in
- * backend/utils/misc/guc.c
+ * the rest should match USERSET and possibly SUSET entries in
+ * backend/utils/misc/guc.c.
*/
"australian_timezones",
- "authentication_timeout",
"autocommit",
- "checkpoint_segments",
- "checkpoint_timeout",
"client_encoding",
"client_min_messages",
"commit_delay",
@@ -231,7 +228,6 @@ psql_completion(char *text, int start, int end)
"cpu_operator_cost",
"cpu_tuple_cost",
"DateStyle",
- "db_user_namespace",
"deadlock_timeout",
"debug_pretty_print",
"debug_print_parse",
@@ -239,19 +235,19 @@ psql_completion(char *text, int start, int end)
"debug_print_rewritten",
"default_statistics_target",
"default_transaction_isolation",
+ "default_transaction_read_only",
"dynamic_library_path",
"effective_cache_size",
+ "enable_hashagg",
"enable_hashjoin",
"enable_indexscan",
"enable_mergejoin",
"enable_nestloop",
"enable_seqscan",
"enable_sort",
- "enable_hashagg",
"enable_tidscan",
"explain_pretty_print",
"extra_float_digits",
- "fixbtree",
"from_collapse_limit",
"fsync",
"geqo",
@@ -262,18 +258,19 @@ psql_completion(char *text, int start, int end)
"geqo_selection_bias",
"geqo_threshold",
"join_collapse_limit",
- "log_hostname",
"krb_server_keyfile",
"lc_messages",
"lc_monetary",
"lc_numeric",
"lc_time",
- "log_connections",
"log_duration",
+ "log_executor_stats",
"log_min_error_statement",
- "log_pid",
+ "log_min_messages",
+ "log_parser_stats",
+ "log_planner_stats",
"log_statement",
- "log_timestamp",
+ "log_statement_stats",
"max_connections",
"max_expr_depth",
"max_files_per_process",
@@ -282,19 +279,12 @@ psql_completion(char *text, int start, int end)
"max_locks_per_transaction",
"password_encryption",
"port",
- "pre_auth_delay",
"random_page_cost",
+ "regex_flavor",
"search_path",
- "log_min_messages",
"shared_buffers",
- "log_executor_stats",
- "log_parser_stats",
- "log_planner_stats",
- "log_source_port",
- "log_statement_stats",
"seed",
"server_encoding",
- "silent_mode",
"sort_mem",
"sql_inheritance",
"ssl",
@@ -316,7 +306,6 @@ psql_completion(char *text, int start, int end)
"unix_socket_group",
"unix_socket_permissions",
"vacuum_mem",
- "virtual_hostt",
"wal_buffers",
"wal_debug",
"wal_sync_method",
diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h
index 6a781dab61b..df20f4ad499 100644
--- a/src/include/utils/builtins.h
+++ b/src/include/utils/builtins.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: builtins.h,v 1.206 2002/12/06 05:20:28 momjian Exp $
+ * $Id: builtins.h,v 1.207 2003/02/06 20:25:33 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -377,6 +377,8 @@ extern Datum texticregexeq(PG_FUNCTION_ARGS);
extern Datum texticregexne(PG_FUNCTION_ARGS);
extern Datum textregexsubstr(PG_FUNCTION_ARGS);
extern Datum similar_escape(PG_FUNCTION_ARGS);
+extern const char *assign_regex_flavor(const char *value,
+ bool doit, bool interactive);
/* regproc.c */
extern Datum regprocin(PG_FUNCTION_ARGS);