- Normally the flavor of RE being used is specified by
- application-dependent means.
- However, this can be overridden by a director>.
+ Normally the flavor of RE being used is determined by
+ REGEX_FLAVOR>.
+ However, this can be overridden by a director> prefix.
If an RE of any flavor begins with ***:>,
- the rest of the RE is an ARE.
+ the rest of the RE is taken as an ARE.
If an RE of any flavor begins with ***=>,
the rest of the RE is taken to be a literal string,
with all characters considered ordinary characters.
a sequence (?>xyz>)>
(where xyz> is one or more alphabetic characters)
specifies options affecting the rest of the RE.
- These supplement, and can override,
- any options specified externally.
+ These options override any previously determined options (including
+ both the RE flavor and case sensitivity).
The available option letters are
shown in .
|
c>
- case-sensitive matching (usual default)
+ case-sensitive matching (overrides operator type)
|
|
i>
case-insensitive matching (see
- )
+ ) (overrides operator type)
|
|
s>
- non-newline-sensitive matching (usual default)
+ non-newline-sensitive matching (default)
|
t>
- tight syntax (usual default; see below)
+ tight syntax (default; see below)
|
- Two significant incompatibilites exist between AREs and the ERE syntax
+ Two significant incompatibilities exist between AREs and the ERE syntax
recognized by pre-7.4 releases of
PostgreSQL>:
+
+ While these differences are unlikely to create a problem for most
+ applications, you can avoid them if necessary by
+ setting REGEX_FLAVOR> to extended>.
practice. On a heavily loaded server you might want to raise it.
Ideally the setting should exceed your typical transaction time,
so as to improve the odds that the lock will be released before
- the waiter decides to check for deadlock. This option can only
- be set at server start.
+ the waiter decides to check for deadlock.
+
+ REGEX_FLAVOR (string)
+
+ The regular expression flavor> can be set to
+ advanced>, extended>, or basic>.
+ The usual default is advanced>. The extended>
+ setting may be useful for exact backwards compatibility with
+ pre-7.4 releases of
PostgreSQL>.
+
+
+
+
SEARCH_PATH (string)
*
*
* 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
#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.
}
+/*
+ * 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
*/
PG_RETURN_BOOL(RE_compile_and_execute(p,
(unsigned char *) NameStr(*n),
strlen(NameStr(*n)),
- REG_ADVANCED,
+ regex_flavor,
0, NULL));
}
PG_RETURN_BOOL(!RE_compile_and_execute(p,
(unsigned char *) NameStr(*n),
strlen(NameStr(*n)),
- REG_ADVANCED,
+ regex_flavor,
0, NULL));
}
PG_RETURN_BOOL(RE_compile_and_execute(p,
(unsigned char *) VARDATA(s),
VARSIZE(s) - VARHDRSZ,
- REG_ADVANCED,
+ regex_flavor,
0, NULL));
}
PG_RETURN_BOOL(!RE_compile_and_execute(p,
(unsigned char *) VARDATA(s),
VARSIZE(s) - VARHDRSZ,
- REG_ADVANCED,
+ regex_flavor,
0, NULL));
}
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));
}
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));
}
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));
}
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));
}
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 */
* 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
.
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;
},
{
- {"deadlock_timeout", PGC_POSTMASTER}, &DeadlockTimeout,
+ {"deadlock_timeout", PGC_SIGHUP}, &DeadlockTimeout,
1000, 0, INT_MAX, NULL, NULL
},
"C", locale_time_assign, NULL
},
+ {
+ {"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,
#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
*
* 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 $
*/
/*----------------------------------------------------------------------
"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",
"cpu_operator_cost",
"cpu_tuple_cost",
"DateStyle",
- "db_user_namespace",
"deadlock_timeout",
"debug_pretty_print",
"debug_print_parse",
"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",
"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",
"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",
"unix_socket_group",
"unix_socket_permissions",
"vacuum_mem",
- "virtual_hostt",
"wal_buffers",
"wal_debug",
"wal_sync_method",
* 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 $
*
*-------------------------------------------------------------------------
*/
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);