diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/utils/adt/regexp.c | 52 | ||||
-rw-r--r-- | src/backend/utils/misc/guc.c | 10 | ||||
-rw-r--r-- | src/backend/utils/misc/postgresql.conf.sample | 1 | ||||
-rw-r--r-- | src/bin/psql/tab-complete.c | 33 | ||||
-rw-r--r-- | src/include/utils/builtins.h | 4 |
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}, ®ex_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); |